@@ -14,6 +14,7 @@ package collector
1414
1515import (
1616"context"
17+ "math"
1718"testing"
1819
1920"github.com/DATA-DOG/go-sqlmock"
@@ -56,3 +57,40 @@ func TestPgArchiverCollector(t *testing.T) {
5657t .Errorf ("there were unfulfilled exceptions: %s" , err )
5758}
5859}
60+
61+ func TestPgArchiverNaNCollector (t * testing.T ) {
62+ db , mock , err := sqlmock .New ()
63+ if err != nil {
64+ t .Fatalf ("Error opening a stub db connection: %s" , err )
65+ }
66+ defer db .Close ()
67+
68+ inst := & instance {db : db }
69+ mock .ExpectQuery (sanitizeQuery (pgArchiverQuery )).WillReturnRows (sqlmock .NewRows ([]string {"pending_wal_count" }).
70+ AddRow (math .NaN ()))
71+
72+ ch := make (chan prometheus.Metric )
73+ go func () {
74+ defer close (ch )
75+ c := PGArchiverCollector {}
76+
77+ if err := c .Update (context .Background (), inst , ch ); err != nil {
78+ t .Errorf ("Error calling PGArchiverCollector.Update: %s" , err )
79+ }
80+ }()
81+
82+ expected := []MetricResult {
83+ {labels : labelMap {}, value : math .NaN (), metricType : dto .MetricType_GAUGE },
84+ }
85+ convey .Convey ("Metrics comparison" , t , func () {
86+ for _ , expect := range expected {
87+ m := readMetric (<- ch )
88+ convey .So (expect .labels , convey .ShouldResemble , m .labels )
89+ convey .So (math .IsNaN (m .value ), convey .ShouldResemble , math .IsNaN (expect .value ))
90+ convey .So (expect .metricType , convey .ShouldEqual , m .metricType )
91+ }
92+ })
93+ if err := mock .ExpectationsWereMet (); err != nil {
94+ t .Errorf ("there were unfulfilled exceptions: %s" , err )
95+ }
96+ }
0 commit comments