package dbmetrics import ( "context" "testing" "github.com/prometheus/client_golang/prometheus" dto "github.com/prometheus/client_model/go" "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" ) func TestDatabaseUsageMetrics(t *testing.T) { testPrefix := "test" dbm := New(testPrefix) assert.NotNil(t, dbm.statusWritesTotal) assert.NotNil(t, dbm.errorsTotal) obj := corev1.ObjectReference{ Kind: "test-kind", Name: "test-name", } status := "test-status" ctx := context.Background() writesVal := getCounterValue(dbm.statusWritesTotal, status, obj.Kind) assert.Equal(t, 0.0, writesVal) errorsVal := getCounterValue(dbm.errorsTotal, obj.Kind, obj.Name) assert.Equal(t, 0.0, errorsVal) for val := 1.0; val < 5.0; val++ { // test DatabaseWritesTotal metrics dbm.RecordDBStatusWritesTotal(ctx, obj.Kind, status) writesVal = getCounterValue(dbm.statusWritesTotal, status, obj.Kind) assert.Equal(t, val, writesVal) // test DatabaseErrorsTotal metrics dbm.RecordDBErrorsTotal(ctx, obj.Kind, obj.Name) errorsVal = getCounterValue(dbm.errorsTotal, obj.Kind, obj.Name) assert.Equal(t, val, errorsVal) } // Check the metric for a different status. status = "test-status-two" writesVal = getCounterValue(dbm.statusWritesTotal, status, obj.Kind) assert.Equal(t, 0.0, writesVal) for val := 1.0; val < 5.0; val++ { // test DatabaseWritesTotal metrics dbm.RecordDBStatusWritesTotal(ctx, obj.Kind, status) writesVal = getCounterValue(dbm.statusWritesTotal, status, obj.Kind) assert.Equal(t, val, writesVal) } } func getCounterValue(metric *prometheus.CounterVec, labels ...string) float64 { var m = &dto.Metric{} if err := metric.WithLabelValues(labels...).Write(m); err != nil { return 0 } return m.Counter.GetValue() }