@@ -17,6 +17,7 @@ import (
17
17
"testing"
18
18
19
19
"github.com/DATA-DOG/go-sqlmock"
20
+ "github.com/blang/semver/v4"
20
21
"github.com/prometheus/client_golang/prometheus"
21
22
dto "github.com/prometheus/client_model/go"
22
23
"github.com/smartystreets/goconvey/convey"
@@ -29,7 +30,7 @@ func TestPGStateStatementsCollector(t *testing.T) {
29
30
}
30
31
defer db .Close ()
31
32
32
- inst := & instance {db : db }
33
+ inst := & instance {db : db , version : semver . MustParse ( "12.0.0" ) }
33
34
34
35
columns := []string {"user" , "datname" , "queryid" , "calls_total" , "seconds_total" , "rows_total" , "block_read_seconds_total" , "block_write_seconds_total" }
35
36
rows := sqlmock .NewRows (columns ).
@@ -72,12 +73,12 @@ func TestPGStateStatementsCollectorNull(t *testing.T) {
72
73
}
73
74
defer db .Close ()
74
75
75
- inst := & instance {db : db }
76
+ inst := & instance {db : db , version : semver . MustParse ( "13.3.7" ) }
76
77
77
78
columns := []string {"user" , "datname" , "queryid" , "calls_total" , "seconds_total" , "rows_total" , "block_read_seconds_total" , "block_write_seconds_total" }
78
79
rows := sqlmock .NewRows (columns ).
79
80
AddRow (nil , nil , nil , nil , nil , nil , nil , nil )
80
- mock .ExpectQuery (sanitizeQuery (pgStatStatementsQuery )).WillReturnRows (rows )
81
+ mock .ExpectQuery (sanitizeQuery (pgStatStatementsNewQuery )).WillReturnRows (rows )
81
82
82
83
ch := make (chan prometheus.Metric )
83
84
go func () {
@@ -107,3 +108,46 @@ func TestPGStateStatementsCollectorNull(t *testing.T) {
107
108
t .Errorf ("there were unfulfilled exceptions: %s" , err )
108
109
}
109
110
}
111
+
112
+ func TestPGStateStatementsCollectorNewPG (t * testing.T ) {
113
+ db , mock , err := sqlmock .New ()
114
+ if err != nil {
115
+ t .Fatalf ("Error opening a stub db connection: %s" , err )
116
+ }
117
+ defer db .Close ()
118
+
119
+ inst := & instance {db : db , version : semver .MustParse ("13.3.7" )}
120
+
121
+ columns := []string {"user" , "datname" , "queryid" , "calls_total" , "seconds_total" , "rows_total" , "block_read_seconds_total" , "block_write_seconds_total" }
122
+ rows := sqlmock .NewRows (columns ).
123
+ AddRow ("postgres" , "postgres" , 1500 , 5 , 0.4 , 100 , 0.1 , 0.2 )
124
+ mock .ExpectQuery (sanitizeQuery (pgStatStatementsNewQuery )).WillReturnRows (rows )
125
+
126
+ ch := make (chan prometheus.Metric )
127
+ go func () {
128
+ defer close (ch )
129
+ c := PGStatStatementsCollector {}
130
+
131
+ if err := c .Update (context .Background (), inst , ch ); err != nil {
132
+ t .Errorf ("Error calling PGStatStatementsCollector.Update: %s" , err )
133
+ }
134
+ }()
135
+
136
+ expected := []MetricResult {
137
+ {labels : labelMap {"user" : "postgres" , "datname" : "postgres" , "queryid" : "1500" }, metricType : dto .MetricType_COUNTER , value : 5 },
138
+ {labels : labelMap {"user" : "postgres" , "datname" : "postgres" , "queryid" : "1500" }, metricType : dto .MetricType_COUNTER , value : 0.4 },
139
+ {labels : labelMap {"user" : "postgres" , "datname" : "postgres" , "queryid" : "1500" }, metricType : dto .MetricType_COUNTER , value : 100 },
140
+ {labels : labelMap {"user" : "postgres" , "datname" : "postgres" , "queryid" : "1500" }, metricType : dto .MetricType_COUNTER , value : 0.1 },
141
+ {labels : labelMap {"user" : "postgres" , "datname" : "postgres" , "queryid" : "1500" }, metricType : dto .MetricType_COUNTER , value : 0.2 },
142
+ }
143
+
144
+ convey .Convey ("Metrics comparison" , t , func () {
145
+ for _ , expect := range expected {
146
+ m := readMetric (<- ch )
147
+ convey .So (expect , convey .ShouldResemble , m )
148
+ }
149
+ })
150
+ if err := mock .ExpectationsWereMet (); err != nil {
151
+ t .Errorf ("there were unfulfilled exceptions: %s" , err )
152
+ }
153
+ }
0 commit comments