...
1 package dbmetrics
2
3 import (
4 "context"
5 "testing"
6
7 "github.com/prometheus/client_golang/prometheus"
8 dto "github.com/prometheus/client_model/go"
9 "github.com/stretchr/testify/assert"
10 corev1 "k8s.io/api/core/v1"
11 )
12
13 func TestDatabaseUsageMetrics(t *testing.T) {
14 testPrefix := "test"
15
16 dbm := New(testPrefix)
17 assert.NotNil(t, dbm.statusWritesTotal)
18 assert.NotNil(t, dbm.errorsTotal)
19
20 obj := corev1.ObjectReference{
21 Kind: "test-kind",
22 Name: "test-name",
23 }
24
25 status := "test-status"
26 ctx := context.Background()
27
28 writesVal := getCounterValue(dbm.statusWritesTotal, status, obj.Kind)
29 assert.Equal(t, 0.0, writesVal)
30
31 errorsVal := getCounterValue(dbm.errorsTotal, obj.Kind, obj.Name)
32 assert.Equal(t, 0.0, errorsVal)
33
34 for val := 1.0; val < 5.0; val++ {
35
36 dbm.RecordDBStatusWritesTotal(ctx, obj.Kind, status)
37 writesVal = getCounterValue(dbm.statusWritesTotal, status, obj.Kind)
38 assert.Equal(t, val, writesVal)
39
40
41 dbm.RecordDBErrorsTotal(ctx, obj.Kind, obj.Name)
42 errorsVal = getCounterValue(dbm.errorsTotal, obj.Kind, obj.Name)
43 assert.Equal(t, val, errorsVal)
44 }
45
46
47 status = "test-status-two"
48
49 writesVal = getCounterValue(dbm.statusWritesTotal, status, obj.Kind)
50 assert.Equal(t, 0.0, writesVal)
51
52 for val := 1.0; val < 5.0; val++ {
53
54 dbm.RecordDBStatusWritesTotal(ctx, obj.Kind, status)
55 writesVal = getCounterValue(dbm.statusWritesTotal, status, obj.Kind)
56 assert.Equal(t, val, writesVal)
57 }
58 }
59
60 func getCounterValue(metric *prometheus.CounterVec, labels ...string) float64 {
61 var m = &dto.Metric{}
62 if err := metric.WithLabelValues(labels...).Write(m); err != nil {
63 return 0
64 }
65 return m.Counter.GetValue()
66 }
67
View as plain text