...

Source file src/edge-infra.dev/pkg/edge/controllers/dbmetrics/db_metrics_test.go

Documentation: edge-infra.dev/pkg/edge/controllers/dbmetrics

     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  		// test DatabaseWritesTotal metrics
    36  		dbm.RecordDBStatusWritesTotal(ctx, obj.Kind, status)
    37  		writesVal = getCounterValue(dbm.statusWritesTotal, status, obj.Kind)
    38  		assert.Equal(t, val, writesVal)
    39  
    40  		// test DatabaseErrorsTotal metrics
    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  	// Check the metric for a different status.
    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  		// test DatabaseWritesTotal metrics
    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