master
go 455 lines 26.4 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package rabbitmq
4
5 import (
6 "context"
7 "net/http"
8 "net/http/httptest"
9 "os"
10 "testing"
11
12 "github.com/netdata/netdata/go/plugins/pkg/web"
13 "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/collecttest"
14
15 "github.com/stretchr/testify/assert"
16 "github.com/stretchr/testify/require"
17 )
18
19 var (
20 dataConfigJSON, _ = os.ReadFile("testdata/config.json")
21 dataConfigYAML, _ = os.ReadFile("testdata/config.yaml")
22
23 dataClusterWhoami, _ = os.ReadFile("testdata/v4.0.3/cluster/whoami.json")
24 dataClusterDefinitions, _ = os.ReadFile("testdata/v4.0.3/cluster/definitions.json")
25 dataClusterOverview, _ = os.ReadFile("testdata/v4.0.3/cluster/overview.json")
26 dataClusterNodes, _ = os.ReadFile("testdata/v4.0.3/cluster/nodes.json")
27 dataClusterVhosts, _ = os.ReadFile("testdata/v4.0.3/cluster/vhosts.json")
28 dataClusterQueues, _ = os.ReadFile("testdata/v4.0.3/cluster/queues.json")
29 )
30
31 func Test_testDataIsValid(t *testing.T) {
32 for name, data := range map[string][]byte{
33 "dataConfigJSON": dataConfigJSON,
34 "dataConfigYAML": dataConfigYAML,
35 "dataClusterWhoami": dataClusterWhoami,
36 "dataClusterDefinitions": dataClusterDefinitions,
37 "dataClusterOverview": dataClusterOverview,
38 "dataClusterNodes": dataClusterNodes,
39 "dataClusterVhosts": dataClusterVhosts,
40 "dataClusterQueues": dataClusterQueues,
41 } {
42 require.NotNil(t, data, name)
43 }
44 }
45
46 func TestCollector_ConfigurationSerialize(t *testing.T) {
47 collecttest.TestConfigurationSerialize(t, &Collector{}, dataConfigJSON, dataConfigYAML)
48 }
49
50 func TestCollector_Init(t *testing.T) {
51 tests := map[string]struct {
52 wantFail bool
53 config Config
54 }{
55 "success with default": {
56 wantFail: false,
57 config: New().Config,
58 },
59 "fail when URL not set": {
60 wantFail: true,
61 config: Config{
62 HTTPConfig: web.HTTPConfig{
63 RequestConfig: web.RequestConfig{URL: ""},
64 },
65 },
66 },
67 }
68
69 for name, test := range tests {
70 t.Run(name, func(t *testing.T) {
71 collr := New()
72 collr.Config = test.config
73
74 if test.wantFail {
75 assert.Error(t, collr.Init(context.Background()))
76 } else {
77 assert.NoError(t, collr.Init(context.Background()))
78 }
79 })
80 }
81 }
82
83 func TestCollector_Charts(t *testing.T) {
84 assert.NotNil(t, New().Charts())
85 }
86
87 func TestCollector_Cleanup(t *testing.T) {
88 assert.NotPanics(t, func() { New().Cleanup(context.Background()) })
89
90 collr := New()
91 require.NoError(t, collr.Init(context.Background()))
92
93 assert.NotPanics(t, func() { collr.Cleanup(context.Background()) })
94 }
95
96 func TestCollector_Check(t *testing.T) {
97 tests := map[string]struct {
98 prepare func() (*Collector, func())
99 wantFail bool
100 }{
101 "success on valid response": {wantFail: false, prepare: caseClusterOk},
102 "fails on invalid response": {wantFail: true, prepare: caseInvalidDataResponse},
103 "fails on 404": {wantFail: true, prepare: case404},
104 }
105
106 for name, test := range tests {
107 t.Run(name, func(t *testing.T) {
108 collr, cleanup := test.prepare()
109 defer cleanup()
110
111 require.NoError(t, collr.Init(context.Background()))
112
113 if test.wantFail {
114 assert.Error(t, collr.Check(context.Background()))
115 } else {
116 assert.NoError(t, collr.Check(context.Background()))
117 }
118 })
119 }
120 }
121
122 func TestCollector_Collect(t *testing.T) {
123 tests := map[string]struct {
124 prepare func() (*Collector, func())
125 wantCollected map[string]int64
126 wantCharts int
127 }{
128 "case cluster ok ": {
129 prepare: caseClusterOk,
130 wantCharts: len(overviewCharts) +
131 len(nodeClusterPeerChartsTmpl)*2 +
132 len(nodeChartsTmpl)*2 +
133 len(vhostChartsTmpl)*2 +
134 len(queueChartsTmpl)*4,
135 wantCollected: map[string]int64{
136 "churn_rates_channel_closed": 7,
137 "churn_rates_channel_created": 7,
138 "churn_rates_connection_closed": 8,
139 "churn_rates_connection_created": 7,
140 "churn_rates_queue_created": 2,
141 "churn_rates_queue_declared": 3,
142 "churn_rates_queue_deleted": 0,
143 "message_stats_ack": 0,
144 "message_stats_confirm": 1,
145 "message_stats_deliver": 0,
146 "message_stats_deliver_get": 4,
147 "message_stats_deliver_no_ack": 0,
148 "message_stats_get": 3,
149 "message_stats_get_empty": 2,
150 "message_stats_get_no_ack": 1,
151 "message_stats_publish": 1,
152 "message_stats_publish_in": 0,
153 "message_stats_publish_out": 0,
154 "message_stats_redeliver": 3,
155 "message_stats_return_unroutable": 0,
156 "node_rabbit@ilyam-deb11-play_avail_status_down": 0,
157 "node_rabbit@ilyam-deb11-play_avail_status_running": 1,
158 "node_rabbit@ilyam-deb11-play_disk_free_alarm_status_clear": 1,
159 "node_rabbit@ilyam-deb11-play_disk_free_alarm_status_triggered": 0,
160 "node_rabbit@ilyam-deb11-play_disk_free_bytes": 46901432320,
161 "node_rabbit@ilyam-deb11-play_fds_available": 1048534,
162 "node_rabbit@ilyam-deb11-play_fds_used": 42,
163 "node_rabbit@ilyam-deb11-play_mem_alarm_status_clear": 1,
164 "node_rabbit@ilyam-deb11-play_mem_alarm_status_triggered": 0,
165 "node_rabbit@ilyam-deb11-play_mem_available": 9935852339,
166 "node_rabbit@ilyam-deb11-play_mem_used": 142905344,
167 "node_rabbit@ilyam-deb11-play_network_partition_status_clear": 1,
168 "node_rabbit@ilyam-deb11-play_network_partition_status_detected": 0,
169 "node_rabbit@ilyam-deb11-play_peer_rabbit@pve-deb-work_cluster_link_recv_bytes": 2374358706,
170 "node_rabbit@ilyam-deb11-play_peer_rabbit@pve-deb-work_cluster_link_send_bytes": 2297379728,
171 "node_rabbit@ilyam-deb11-play_procs_available": 1048138,
172 "node_rabbit@ilyam-deb11-play_procs_used": 438,
173 "node_rabbit@ilyam-deb11-play_run_queue": 1,
174 "node_rabbit@ilyam-deb11-play_sockets_available": 0,
175 "node_rabbit@ilyam-deb11-play_sockets_used": 0,
176 "node_rabbit@ilyam-deb11-play_uptime": 241932,
177 "node_rabbit@pve-deb-work_avail_status_down": 0,
178 "node_rabbit@pve-deb-work_avail_status_running": 1,
179 "node_rabbit@pve-deb-work_disk_free_alarm_status_clear": 1,
180 "node_rabbit@pve-deb-work_disk_free_alarm_status_triggered": 0,
181 "node_rabbit@pve-deb-work_disk_free_bytes": 103827365888,
182 "node_rabbit@pve-deb-work_fds_available": 1048528,
183 "node_rabbit@pve-deb-work_fds_used": 48,
184 "node_rabbit@pve-deb-work_mem_alarm_status_clear": 1,
185 "node_rabbit@pve-deb-work_mem_alarm_status_triggered": 0,
186 "node_rabbit@pve-deb-work_mem_available": 14958259404,
187 "node_rabbit@pve-deb-work_mem_used": 160018432,
188 "node_rabbit@pve-deb-work_network_partition_status_clear": 1,
189 "node_rabbit@pve-deb-work_network_partition_status_detected": 0,
190 "node_rabbit@pve-deb-work_peer_rabbit@ilyam-deb11-play_cluster_link_recv_bytes": 2297460158,
191 "node_rabbit@pve-deb-work_peer_rabbit@ilyam-deb11-play_cluster_link_send_bytes": 2374459095,
192 "node_rabbit@pve-deb-work_procs_available": 1048109,
193 "node_rabbit@pve-deb-work_procs_used": 467,
194 "node_rabbit@pve-deb-work_run_queue": 0,
195 "node_rabbit@pve-deb-work_sockets_available": 0,
196 "node_rabbit@pve-deb-work_sockets_used": 0,
197 "node_rabbit@pve-deb-work_uptime": 73793,
198 "object_totals_channels": 0,
199 "object_totals_connections": 0,
200 "object_totals_consumers": 0,
201 "object_totals_exchanges": 14,
202 "object_totals_queues": 4,
203 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_ack": 0,
204 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_confirm": 0,
205 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_deliver": 0,
206 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_deliver_get": 4,
207 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_deliver_no_ack": 0,
208 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_get": 3,
209 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_get_empty": 2,
210 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_get_no_ack": 1,
211 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_publish": 1,
212 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_publish_in": 0,
213 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_publish_out": 0,
214 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_redeliver": 3,
215 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_return_unroutable": 0,
216 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_messages": 0,
217 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_messages_paged_out": 0,
218 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_messages_persistent": 0,
219 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_messages_ready": 0,
220 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_messages_unacknowledged": 0,
221 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_status_crashed": 0,
222 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_status_down": 0,
223 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_status_idle": 0,
224 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_status_minority": 0,
225 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_status_running": 1,
226 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_status_stopped": 0,
227 "queue_MyFirstQueue_vhost_/_node_rabbit@pve-deb-work_status_terminated": 0,
228 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_message_stats_ack": 0,
229 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_message_stats_confirm": 0,
230 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_message_stats_deliver": 0,
231 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_message_stats_deliver_get": 0,
232 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_message_stats_deliver_no_ack": 0,
233 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_message_stats_get": 0,
234 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_message_stats_get_empty": 0,
235 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_message_stats_get_no_ack": 0,
236 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_message_stats_publish": 0,
237 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_message_stats_publish_in": 0,
238 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_message_stats_publish_out": 0,
239 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_message_stats_redeliver": 0,
240 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_message_stats_return_unroutable": 0,
241 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_messages": 0,
242 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_messages_paged_out": 0,
243 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_messages_persistent": 0,
244 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_messages_ready": 0,
245 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_messages_unacknowledged": 0,
246 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_status_crashed": 0,
247 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_status_down": 0,
248 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_status_idle": 0,
249 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_status_minority": 0,
250 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_status_running": 1,
251 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_status_stopped": 0,
252 "queue_MyFirstQueue_vhost_myFirstVhost_node_rabbit@ilyam-deb11-play_status_terminated": 0,
253 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_ack": 0,
254 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_confirm": 0,
255 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_deliver": 0,
256 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_deliver_get": 0,
257 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_deliver_no_ack": 0,
258 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_get": 0,
259 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_get_empty": 0,
260 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_get_no_ack": 0,
261 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_publish": 0,
262 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_publish_in": 0,
263 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_publish_out": 0,
264 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_redeliver": 0,
265 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_message_stats_return_unroutable": 0,
266 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_messages": 0,
267 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_messages_paged_out": 0,
268 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_messages_persistent": 0,
269 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_messages_ready": 0,
270 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_messages_unacknowledged": 0,
271 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_status_crashed": 0,
272 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_status_down": 0,
273 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_status_idle": 0,
274 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_status_minority": 0,
275 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_status_running": 1,
276 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_status_stopped": 0,
277 "queue_MySecondQueue_vhost_/_node_rabbit@pve-deb-work_status_terminated": 0,
278 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_message_stats_ack": 0,
279 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_message_stats_confirm": 0,
280 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_message_stats_deliver": 0,
281 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_message_stats_deliver_get": 0,
282 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_message_stats_deliver_no_ack": 0,
283 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_message_stats_get": 0,
284 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_message_stats_get_empty": 0,
285 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_message_stats_get_no_ack": 0,
286 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_message_stats_publish": 0,
287 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_message_stats_publish_in": 0,
288 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_message_stats_publish_out": 0,
289 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_message_stats_redeliver": 0,
290 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_message_stats_return_unroutable": 0,
291 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_messages": 0,
292 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_messages_paged_out": 0,
293 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_messages_persistent": 0,
294 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_messages_ready": 0,
295 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_messages_unacknowledged": 0,
296 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_status_crashed": 0,
297 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_status_down": 0,
298 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_status_idle": 0,
299 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_status_minority": 0,
300 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_status_running": 1,
301 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_status_stopped": 0,
302 "queue_myFirstQueue_vhost_myFirstVhost_node_rabbit@pve-deb-work_status_terminated": 0,
303 "queue_totals_messages": 0,
304 "queue_totals_messages_ready": 0,
305 "queue_totals_messages_unacknowledged": 0,
306 "vhost_/_message_stats_ack": 0,
307 "vhost_/_message_stats_confirm": 1,
308 "vhost_/_message_stats_deliver": 0,
309 "vhost_/_message_stats_deliver_get": 4,
310 "vhost_/_message_stats_deliver_no_ack": 0,
311 "vhost_/_message_stats_get": 3,
312 "vhost_/_message_stats_get_empty": 2,
313 "vhost_/_message_stats_get_no_ack": 1,
314 "vhost_/_message_stats_publish": 1,
315 "vhost_/_message_stats_publish_in": 0,
316 "vhost_/_message_stats_publish_out": 0,
317 "vhost_/_message_stats_redeliver": 3,
318 "vhost_/_message_stats_return_unroutable": 0,
319 "vhost_/_messages": 0,
320 "vhost_/_messages_ready": 0,
321 "vhost_/_messages_unacknowledged": 0,
322 "vhost_/_status_partial": 0,
323 "vhost_/_status_running": 1,
324 "vhost_/_status_stopped": 0,
325 "vhost_myFirstVhost_message_stats_ack": 0,
326 "vhost_myFirstVhost_message_stats_confirm": 0,
327 "vhost_myFirstVhost_message_stats_deliver": 0,
328 "vhost_myFirstVhost_message_stats_deliver_get": 0,
329 "vhost_myFirstVhost_message_stats_deliver_no_ack": 0,
330 "vhost_myFirstVhost_message_stats_get": 0,
331 "vhost_myFirstVhost_message_stats_get_empty": 0,
332 "vhost_myFirstVhost_message_stats_get_no_ack": 0,
333 "vhost_myFirstVhost_message_stats_publish": 0,
334 "vhost_myFirstVhost_message_stats_publish_in": 0,
335 "vhost_myFirstVhost_message_stats_publish_out": 0,
336 "vhost_myFirstVhost_message_stats_redeliver": 0,
337 "vhost_myFirstVhost_message_stats_return_unroutable": 0,
338 "vhost_myFirstVhost_messages": 0,
339 "vhost_myFirstVhost_messages_ready": 0,
340 "vhost_myFirstVhost_messages_unacknowledged": 0,
341 "vhost_myFirstVhost_status_partial": 0,
342 "vhost_myFirstVhost_status_running": 1,
343 "vhost_myFirstVhost_status_stopped": 0,
344 },
345 },
346 "fails on unexpected JSON response": {
347 prepare: caseUnexpectedJsonResponse,
348 wantCollected: nil,
349 },
350 "fails on invalid response": {
351 prepare: caseInvalidDataResponse,
352 wantCollected: nil,
353 },
354 "fails on 404": {
355 prepare: case404,
356 wantCollected: nil,
357 },
358 }
359
360 for name, test := range tests {
361 t.Run(name, func(t *testing.T) {
362 collr, cleanup := test.prepare()
363 defer cleanup()
364
365 require.NoError(t, collr.Init(context.Background()))
366
367 mx := collr.Collect(context.Background())
368
369 assert.Equal(t, test.wantCollected, mx)
370
371 if len(test.wantCollected) > 0 {
372 assert.Equal(t, test.wantCharts, len(*collr.Charts()))
373 collecttest.TestMetricsHasAllChartsDims(t, collr.Charts(), mx)
374 }
375 })
376 }
377 }
378
379 func caseClusterOk() (*Collector, func()) {
380 srv := httptest.NewServer(
381 http.HandlerFunc(
382 func(w http.ResponseWriter, r *http.Request) {
383 switch r.URL.Path {
384 case urlPathAPIWhoami:
385 _, _ = w.Write(dataClusterWhoami)
386 case urlPathAPIDefinitions:
387 _, _ = w.Write(dataClusterDefinitions)
388 case urlPathAPIOverview:
389 _, _ = w.Write(dataClusterOverview)
390 case urlPathAPINodes:
391 _, _ = w.Write(dataClusterNodes)
392 case urlPathAPIVhosts:
393 _, _ = w.Write(dataClusterVhosts)
394 case urlPathAPIQueues:
395 _, _ = w.Write(dataClusterQueues)
396 default:
397 w.WriteHeader(404)
398 }
399 }))
400 collr := New()
401 collr.URL = srv.URL
402 collr.CollectQueues = true
403
404 return collr, srv.Close
405 }
406
407 func caseUnexpectedJsonResponse() (*Collector, func()) {
408 resp := `
409 {
410 "elephant": {
411 "burn": false,
412 "mountain": true,
413 "fog": false,
414 "skin": -1561907625,
415 "burst": "anyway",
416 "shadow": 1558616893
417 },
418 "start": "ever",
419 "base": 2093056027,
420 "mission": -2007590351,
421 "victory": 999053756,
422 "die": false
423 }
424 `
425 srv := httptest.NewServer(http.HandlerFunc(
426 func(w http.ResponseWriter, r *http.Request) {
427 _, _ = w.Write([]byte(resp))
428 }))
429 collr := New()
430 collr.URL = srv.URL
431
432 return collr, srv.Close
433 }
434
435 func caseInvalidDataResponse() (*Collector, func()) {
436 srv := httptest.NewServer(http.HandlerFunc(
437 func(w http.ResponseWriter, r *http.Request) {
438 _, _ = w.Write([]byte("hello and\n goodbye"))
439 }))
440 collr := New()
441 collr.URL = srv.URL
442
443 return collr, srv.Close
444 }
445
446 func case404() (*Collector, func()) {
447 srv := httptest.NewServer(http.HandlerFunc(
448 func(w http.ResponseWriter, r *http.Request) {
449 w.WriteHeader(http.StatusNotFound)
450 }))
451 collr := New()
452 collr.URL = srv.URL
453
454 return collr, srv.Close
455 }