-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwrapper_test.go
175 lines (162 loc) · 4.89 KB
/
wrapper_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
package bprometheus
import (
"context"
"net/http"
"net/http/httptest"
"testing"
"time"
"github.com/prometheus/client_golang/prometheus"
"github.com/stretchr/testify/suite"
)
type promSuite struct {
suite.Suite
}
func TestSuite(t *testing.T) {
suite.Run(t, new(promSuite))
}
func (d *promSuite) TestNamespace() {
namespace := "service"
reporter := Builder().SetNamespace(namespace).Build()
err := reporter.Connect(context.Background())
d.NoError(err)
counter, err := reporter.Metrics().Counter("counter_namespace", "")
d.NoError(err)
counterWithTags, err := counter.WithTags(nil)
d.NoError(err)
counterWithTags.Inc()
err = reporter.Close(context.Background())
d.NoError(err)
handler := HTTPHandler()
recorder := httptest.NewRecorder()
handler.ServeHTTP(recorder, &http.Request{})
body := recorder.Body.String()
d.Require().Contains(body, "service_counter")
}
func (d *promSuite) TestTags() {
tagKeys := []string{"one", "three"}
tags := map[string]string{
"one": "two",
"three": "four",
}
reporter := Builder().Build()
err := reporter.Connect(context.Background())
d.NoError(err)
counter, err := reporter.Metrics().Counter("counter_tags", "", tagKeys...)
d.NoError(err)
counterWithTags, err := counter.WithTags(tags)
d.NoError(err)
counterWithTags.Inc()
err = reporter.Close(context.Background())
d.NoError(err)
handler := HTTPHandler()
recorder := httptest.NewRecorder()
handler.ServeHTTP(recorder, &http.Request{})
body := recorder.Body.String()
d.Require().Contains(body, "one=\"two\"")
d.Require().Contains(body, "three=\"four\"")
}
func (d *promSuite) TestCounter() {
reporter := Builder().Build()
err := reporter.Connect(context.Background())
d.NoError(err)
counter, err := reporter.Metrics().Counter("counter", "")
d.NoError(err)
counterWithTags, err := counter.WithTags(nil)
d.NoError(err)
counterWithTags.Add(5)
err = reporter.Close(context.Background())
d.NoError(err)
handler := HTTPHandler()
recorder := httptest.NewRecorder()
handler.ServeHTTP(recorder, &http.Request{})
body := recorder.Body.String()
d.Require().Contains(body, "counter 5")
}
func (d *promSuite) TestGauge() {
reporter := Builder().Build()
err := reporter.Connect(context.Background())
d.NoError(err)
gauge, err := reporter.Metrics().Gauge("gauge", "")
d.NoError(err)
gaugeWithTags, err := gauge.WithTags(nil)
d.NoError(err)
gaugeWithTags.Add(5)
err = reporter.Close(context.Background())
d.NoError(err)
handler := HTTPHandler()
recorder := httptest.NewRecorder()
handler.ServeHTTP(recorder, &http.Request{})
body := recorder.Body.String()
d.Require().Contains(body, "gauge 5")
}
func (d *promSuite) TestHistogram() {
reporter := Builder().Build()
err := reporter.Connect(context.Background())
d.NoError(err)
histogram, err := reporter.Metrics().Histogram("histogram", "", nil)
d.NoError(err)
histogramWithTags, err := histogram.WithTags(nil)
d.NoError(err)
histogramWithTags.Record(7)
err = reporter.Close(context.Background())
d.NoError(err)
handler := HTTPHandler()
recorder := httptest.NewRecorder()
handler.ServeHTTP(recorder, &http.Request{})
body := recorder.Body.String()
d.Require().Contains(body, "histogram_sum 7")
d.Require().Contains(body, "histogram_count 1")
}
func (d *promSuite) TestTimer() {
reporter := Builder().Build()
err := reporter.Connect(context.Background())
d.NoError(err)
timer, err := reporter.Metrics().Timer("timer", "")
d.NoError(err)
timerWithTags, err := timer.WithTags(nil)
d.NoError(err)
timerWithTags.Record(7 * time.Second)
timerWithTags.Record(100 * time.Second)
timerWithTags.Record(1000 * time.Second)
err = reporter.Close(context.Background())
d.NoError(err)
handler := HTTPHandler()
recorder := httptest.NewRecorder()
handler.ServeHTTP(recorder, &http.Request{})
body := recorder.Body.String()
d.Require().Contains(body, "timer_sum 1107")
d.Require().Contains(body, "timer_count 3")
}
func (d *promSuite) TestRemove() {
reporter := Builder().Build()
err := reporter.Connect(context.Background())
d.NoError(err)
counter, err := reporter.Metrics().Counter("counter_remove", "")
d.NoError(err)
err = reporter.Metrics().Remove(counter)
d.NoError(err)
}
func (d *promSuite) TestCustomCollectors() {
counterCollector := prometheus.NewCounter(prometheus.CounterOpts{
Namespace: "custom",
Name: "counter",
Help: "",
})
anotherCollector := prometheus.NewCounter(prometheus.CounterOpts{
Namespace: "custom",
Name: "another",
Help: "",
})
reporter := Builder().AddPredefinedCollectors(counterCollector).AddPredefinedCollectors(anotherCollector).SetNamespace("different").Build()
err := reporter.Connect(context.Background())
d.NoError(err)
// Count
counterCollector.Inc()
anotherCollector.Inc()
handler := HTTPHandler()
recorder := httptest.NewRecorder()
handler.ServeHTTP(recorder, &http.Request{})
body := recorder.Body.String()
d.Require().Contains(body, "counter 1")
d.Require().Contains(body, "another 1")
}