Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/pkg/integrations/mssql/collector_test.go
5380 views
1
package mssql
2
3
import (
4
"context"
5
"os"
6
"testing"
7
8
"github.com/burningalchemist/sql_exporter"
9
"github.com/burningalchemist/sql_exporter/errors"
10
"github.com/go-kit/log"
11
"github.com/prometheus/client_golang/prometheus"
12
io_prometheus_client "github.com/prometheus/client_model/go"
13
"github.com/stretchr/testify/assert"
14
"github.com/stretchr/testify/require"
15
)
16
17
func TestTargetCollectorAdapter_Collect(t *testing.T) {
18
metricDesc := mockMetricDesc()
19
target := mockTarget{
20
metrics: []sql_exporter.Metric{
21
sql_exporter.NewMetric(metricDesc, 1, "labelval1", "labelval2"),
22
},
23
}
24
25
tca := newTargetCollectorAdapter(target, log.NewJSONLogger(os.Stdout))
26
metricChan := make(chan prometheus.Metric, 1)
27
tca.Collect(metricChan)
28
29
metric := <-metricChan
30
31
assert.Equal(t, prometheus.NewDesc(
32
"metric_name",
33
"help string",
34
[]string{"label1", "label2"},
35
map[string]string{
36
"key": "val",
37
},
38
), metric.Desc())
39
40
var dto io_prometheus_client.Metric
41
require.NoError(t, metric.Write(&dto))
42
assert.Equal(t, dto.Gauge.GetValue(), float64(1))
43
assert.Equal(t, dto.Label, []*io_prometheus_client.LabelPair{
44
{
45
Name: strp("key"),
46
Value: strp("val"),
47
},
48
{
49
Name: strp("label1"),
50
Value: strp("labelval1"),
51
},
52
{
53
Name: strp("label2"),
54
Value: strp("labelval2"),
55
},
56
})
57
}
58
59
func TestSqlPrometheusMetricAdapter_Write(t *testing.T) {
60
metricDesc := mockMetricDesc()
61
metric := sqlPrometheusMetricAdapter{
62
Metric: sql_exporter.NewMetric(metricDesc, 1, "labelval1", "labelval2"),
63
logger: log.NewJSONLogger(os.Stdout),
64
}
65
66
var dto io_prometheus_client.Metric
67
require.NoError(t, metric.Write(&dto))
68
69
assert.Equal(t, dto.Gauge.GetValue(), float64(1))
70
assert.Equal(t, dto.Label, []*io_prometheus_client.LabelPair{
71
{
72
Name: strp("key"),
73
Value: strp("val"),
74
},
75
{
76
Name: strp("label1"),
77
Value: strp("labelval1"),
78
},
79
{
80
Name: strp("label2"),
81
Value: strp("labelval2"),
82
},
83
})
84
}
85
86
func TestSqlPrometheusMetricAdapter_Desc(t *testing.T) {
87
t.Run("AutomaticMetricDesc", func(t *testing.T) {
88
metricDesc := mockMetricDesc()
89
metric := sqlPrometheusMetricAdapter{
90
Metric: sql_exporter.NewMetric(metricDesc, 1, "labelval1", "labelval2"),
91
logger: log.NewJSONLogger(os.Stdout),
92
}
93
94
desc := metric.Desc()
95
require.NotNil(t, desc)
96
require.Equal(t, prometheus.NewDesc(
97
"metric_name",
98
"help string",
99
[]string{"label1", "label2"},
100
map[string]string{
101
"key": "val",
102
},
103
), desc)
104
})
105
106
t.Run("InvalidMetricDesc", func(t *testing.T) {
107
metricErr := errors.New("", "some error")
108
metric := sqlPrometheusMetricAdapter{
109
Metric: sql_exporter.NewInvalidMetric(metricErr),
110
logger: log.NewJSONLogger(os.Stdout),
111
}
112
113
desc := metric.Desc()
114
require.NotNil(t, desc)
115
require.Equal(t, prometheus.NewInvalidDesc(
116
metricErr,
117
), desc)
118
})
119
}
120
121
// helper function to create pointers to string literals
122
func strp(s string) *string {
123
return &s
124
}
125
126
func mockMetricDesc() sql_exporter.MetricDesc {
127
return sql_exporter.NewAutomaticMetricDesc(
128
"",
129
"metric_name",
130
"help string",
131
prometheus.GaugeValue,
132
[]*io_prometheus_client.LabelPair{
133
{
134
Name: strp("key"),
135
Value: strp("val"),
136
},
137
},
138
"label1", "label2",
139
)
140
}
141
142
type mockTarget struct {
143
metrics []sql_exporter.Metric
144
}
145
146
func (mt mockTarget) Collect(_ context.Context, ch chan<- sql_exporter.Metric) {
147
for _, m := range mt.metrics {
148
ch <- m
149
}
150
}
151
152