Path: blob/main/pkg/integrations/mssql/collector_test.go
5380 views
package mssql12import (3"context"4"os"5"testing"67"github.com/burningalchemist/sql_exporter"8"github.com/burningalchemist/sql_exporter/errors"9"github.com/go-kit/log"10"github.com/prometheus/client_golang/prometheus"11io_prometheus_client "github.com/prometheus/client_model/go"12"github.com/stretchr/testify/assert"13"github.com/stretchr/testify/require"14)1516func TestTargetCollectorAdapter_Collect(t *testing.T) {17metricDesc := mockMetricDesc()18target := mockTarget{19metrics: []sql_exporter.Metric{20sql_exporter.NewMetric(metricDesc, 1, "labelval1", "labelval2"),21},22}2324tca := newTargetCollectorAdapter(target, log.NewJSONLogger(os.Stdout))25metricChan := make(chan prometheus.Metric, 1)26tca.Collect(metricChan)2728metric := <-metricChan2930assert.Equal(t, prometheus.NewDesc(31"metric_name",32"help string",33[]string{"label1", "label2"},34map[string]string{35"key": "val",36},37), metric.Desc())3839var dto io_prometheus_client.Metric40require.NoError(t, metric.Write(&dto))41assert.Equal(t, dto.Gauge.GetValue(), float64(1))42assert.Equal(t, dto.Label, []*io_prometheus_client.LabelPair{43{44Name: strp("key"),45Value: strp("val"),46},47{48Name: strp("label1"),49Value: strp("labelval1"),50},51{52Name: strp("label2"),53Value: strp("labelval2"),54},55})56}5758func TestSqlPrometheusMetricAdapter_Write(t *testing.T) {59metricDesc := mockMetricDesc()60metric := sqlPrometheusMetricAdapter{61Metric: sql_exporter.NewMetric(metricDesc, 1, "labelval1", "labelval2"),62logger: log.NewJSONLogger(os.Stdout),63}6465var dto io_prometheus_client.Metric66require.NoError(t, metric.Write(&dto))6768assert.Equal(t, dto.Gauge.GetValue(), float64(1))69assert.Equal(t, dto.Label, []*io_prometheus_client.LabelPair{70{71Name: strp("key"),72Value: strp("val"),73},74{75Name: strp("label1"),76Value: strp("labelval1"),77},78{79Name: strp("label2"),80Value: strp("labelval2"),81},82})83}8485func TestSqlPrometheusMetricAdapter_Desc(t *testing.T) {86t.Run("AutomaticMetricDesc", func(t *testing.T) {87metricDesc := mockMetricDesc()88metric := sqlPrometheusMetricAdapter{89Metric: sql_exporter.NewMetric(metricDesc, 1, "labelval1", "labelval2"),90logger: log.NewJSONLogger(os.Stdout),91}9293desc := metric.Desc()94require.NotNil(t, desc)95require.Equal(t, prometheus.NewDesc(96"metric_name",97"help string",98[]string{"label1", "label2"},99map[string]string{100"key": "val",101},102), desc)103})104105t.Run("InvalidMetricDesc", func(t *testing.T) {106metricErr := errors.New("", "some error")107metric := sqlPrometheusMetricAdapter{108Metric: sql_exporter.NewInvalidMetric(metricErr),109logger: log.NewJSONLogger(os.Stdout),110}111112desc := metric.Desc()113require.NotNil(t, desc)114require.Equal(t, prometheus.NewInvalidDesc(115metricErr,116), desc)117})118}119120// helper function to create pointers to string literals121func strp(s string) *string {122return &s123}124125func mockMetricDesc() sql_exporter.MetricDesc {126return sql_exporter.NewAutomaticMetricDesc(127"",128"metric_name",129"help string",130prometheus.GaugeValue,131[]*io_prometheus_client.LabelPair{132{133Name: strp("key"),134Value: strp("val"),135},136},137"label1", "label2",138)139}140141type mockTarget struct {142metrics []sql_exporter.Metric143}144145func (mt mockTarget) Collect(_ context.Context, ch chan<- sql_exporter.Metric) {146for _, m := range mt.metrics {147ch <- m148}149}150151152