@@ -151,3 +151,46 @@ func TestPGStateStatementsCollectorNewPG(t *testing.T) {
151
151
t .Errorf ("there were unfulfilled exceptions: %s" , err )
152
152
}
153
153
}
154
+
155
+ func TestPGStateStatementsCollector_PG17 (t * testing.T ) {
156
+ db , mock , err := sqlmock .New ()
157
+ if err != nil {
158
+ t .Fatalf ("Error opening a stub db connection: %s" , err )
159
+ }
160
+ defer db .Close ()
161
+
162
+ inst := & instance {db : db , version : semver .MustParse ("17.0.0" )}
163
+
164
+ columns := []string {"user" , "datname" , "queryid" , "calls_total" , "seconds_total" , "rows_total" , "block_read_seconds_total" , "block_write_seconds_total" }
165
+ rows := sqlmock .NewRows (columns ).
166
+ AddRow ("postgres" , "postgres" , 1500 , 5 , 0.4 , 100 , 0.1 , 0.2 )
167
+ mock .ExpectQuery (sanitizeQuery (pgStatStatementsQuery_PG17 )).WillReturnRows (rows )
168
+
169
+ ch := make (chan prometheus.Metric )
170
+ go func () {
171
+ defer close (ch )
172
+ c := PGStatStatementsCollector {}
173
+
174
+ if err := c .Update (context .Background (), inst , ch ); err != nil {
175
+ t .Errorf ("Error calling PGStatStatementsCollector.Update: %s" , err )
176
+ }
177
+ }()
178
+
179
+ expected := []MetricResult {
180
+ {labels : labelMap {"user" : "postgres" , "datname" : "postgres" , "queryid" : "1500" }, metricType : dto .MetricType_COUNTER , value : 5 },
181
+ {labels : labelMap {"user" : "postgres" , "datname" : "postgres" , "queryid" : "1500" }, metricType : dto .MetricType_COUNTER , value : 0.4 },
182
+ {labels : labelMap {"user" : "postgres" , "datname" : "postgres" , "queryid" : "1500" }, metricType : dto .MetricType_COUNTER , value : 100 },
183
+ {labels : labelMap {"user" : "postgres" , "datname" : "postgres" , "queryid" : "1500" }, metricType : dto .MetricType_COUNTER , value : 0.1 },
184
+ {labels : labelMap {"user" : "postgres" , "datname" : "postgres" , "queryid" : "1500" }, metricType : dto .MetricType_COUNTER , value : 0.2 },
185
+ }
186
+
187
+ convey .Convey ("Metrics comparison" , t , func () {
188
+ for _ , expect := range expected {
189
+ m := readMetric (<- ch )
190
+ convey .So (expect , convey .ShouldResemble , m )
191
+ }
192
+ })
193
+ if err := mock .ExpectationsWereMet (); err != nil {
194
+ t .Errorf ("there were unfulfilled exceptions: %s" , err )
195
+ }
196
+ }
0 commit comments