@@ -406,3 +406,101 @@ func TestPGStatDatabaseCollectorRowLeakTest(t *testing.T) {
406
406
t .Errorf ("there were unfulfilled exceptions: %s" , err )
407
407
}
408
408
}
409
+
410
+ func TestPGStatDatabaseCollectorTestNilStatReset (t * testing.T ) {
411
+ db , mock , err := sqlmock .New ()
412
+ if err != nil {
413
+ t .Fatalf ("Error opening a stub db connection: %s" , err )
414
+ }
415
+ defer db .Close ()
416
+
417
+ inst := & instance {db : db }
418
+
419
+ columns := []string {
420
+ "datid" ,
421
+ "datname" ,
422
+ "numbackends" ,
423
+ "xact_commit" ,
424
+ "xact_rollback" ,
425
+ "blks_read" ,
426
+ "blks_hit" ,
427
+ "tup_returned" ,
428
+ "tup_fetched" ,
429
+ "tup_inserted" ,
430
+ "tup_updated" ,
431
+ "tup_deleted" ,
432
+ "conflicts" ,
433
+ "temp_files" ,
434
+ "temp_bytes" ,
435
+ "deadlocks" ,
436
+ "blk_read_time" ,
437
+ "blk_write_time" ,
438
+ "stats_reset" ,
439
+ }
440
+
441
+ rows := sqlmock .NewRows (columns ).
442
+ AddRow (
443
+ "pid" ,
444
+ "postgres" ,
445
+ 354 ,
446
+ 4945 ,
447
+ 289097744 ,
448
+ 1242257 ,
449
+ int64 (3275602074 ),
450
+ 89320867 ,
451
+ 450139 ,
452
+ 2034563757 ,
453
+ 0 ,
454
+ int64 (2725688749 ),
455
+ 23 ,
456
+ 52 ,
457
+ 74 ,
458
+ 925 ,
459
+ 16 ,
460
+ 823 ,
461
+ nil )
462
+
463
+ mock .ExpectQuery (sanitizeQuery (statDatabaseQuery )).WillReturnRows (rows )
464
+
465
+ ch := make (chan prometheus.Metric )
466
+ go func () {
467
+ defer close (ch )
468
+ c := PGStatDatabaseCollector {
469
+ log : log .With (log .NewNopLogger (), "collector" , "pg_stat_database" ),
470
+ }
471
+
472
+ if err := c .Update (context .Background (), inst , ch ); err != nil {
473
+ t .Errorf ("Error calling PGStatDatabaseCollector.Update: %s" , err )
474
+ }
475
+ }()
476
+
477
+ expected := []MetricResult {
478
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_GAUGE , value : 354 },
479
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_COUNTER , value : 4945 },
480
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_COUNTER , value : 289097744 },
481
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_COUNTER , value : 1242257 },
482
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_COUNTER , value : 3275602074 },
483
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_COUNTER , value : 89320867 },
484
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_COUNTER , value : 450139 },
485
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_COUNTER , value : 2034563757 },
486
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_COUNTER , value : 0 },
487
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_COUNTER , value : 2725688749 },
488
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_COUNTER , value : 23 },
489
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_COUNTER , value : 52 },
490
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_COUNTER , value : 74 },
491
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_COUNTER , value : 925 },
492
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_COUNTER , value : 16 },
493
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_COUNTER , value : 823 },
494
+ {labels : labelMap {"datid" : "pid" , "datname" : "postgres" }, metricType : dto .MetricType_COUNTER , value : 0 },
495
+ }
496
+
497
+ convey .Convey ("Metrics comparison" , t , func () {
498
+ for _ , expect := range expected {
499
+ m := readMetric (<- ch )
500
+ convey .So (expect , convey .ShouldResemble , m )
501
+ }
502
+ })
503
+ if err := mock .ExpectationsWereMet (); err != nil {
504
+ t .Errorf ("there were unfulfilled exceptions: %s" , err )
505
+ }
506
+ }
0 commit comments