summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/envoy/envoy_test.go
blob: 9a705009e76e3f18d48576752ab76ca7e91d69de (plain)
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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
// SPDX-License-Identifier: GPL-3.0-or-later

package envoy

import (
	"github.com/netdata/netdata/go/go.d.plugin/agent/module"
	"net/http"
	"net/http/httptest"
	"os"
	"testing"

	"github.com/netdata/netdata/go/go.d.plugin/pkg/web"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
)

var (
	dataConfigJSON, _ = os.ReadFile("testdata/config.json")
	dataConfigYAML, _ = os.ReadFile("testdata/config.yaml")

	dataEnvoyConsulDataplane, _ = os.ReadFile("testdata/consul-dataplane.txt")
	dataEnvoy, _                = os.ReadFile("testdata/envoy.txt")
)

func Test_testDataIsValid(t *testing.T) {
	for name, data := range map[string][]byte{
		"dataConfigJSON":           dataConfigJSON,
		"dataConfigYAML":           dataConfigYAML,
		"dataEnvoyConsulDataplane": dataEnvoyConsulDataplane,
		"dataEnvoy":                dataEnvoy,
	} {
		require.NotNil(t, data, name)
	}
}

func TestEnvoy_ConfigurationSerialize(t *testing.T) {
	module.TestConfigurationSerialize(t, &Envoy{}, dataConfigJSON, dataConfigYAML)
}

func TestEnvoy_Init(t *testing.T) {
	tests := map[string]struct {
		wantFail bool
		config   Config
	}{
		"success with default": {
			wantFail: false,
			config:   New().Config,
		},
		"fail when URL not set": {
			wantFail: true,
			config: Config{
				HTTP: web.HTTP{
					Request: web.Request{URL: ""},
				},
			},
		},
	}

	for name, test := range tests {
		t.Run(name, func(t *testing.T) {
			envoy := New()
			envoy.Config = test.config

			if test.wantFail {
				assert.Error(t, envoy.Init())
			} else {
				assert.NoError(t, envoy.Init())
			}
		})
	}

}

func TestEnvoy_Cleanup(t *testing.T) {
	envoy := New()
	assert.NotPanics(t, envoy.Cleanup)

	require.NoError(t, envoy.Init())
	assert.NotPanics(t, envoy.Cleanup)
}

func TestEnvoy_Charts(t *testing.T) {
	envoy, cleanup := prepareCaseEnvoyStats()
	defer cleanup()

	require.Empty(t, *envoy.Charts())

	require.NoError(t, envoy.Init())
	_ = envoy.Collect()
	require.NotEmpty(t, *envoy.Charts())
}

func TestEnvoy_Check(t *testing.T) {
	tests := map[string]struct {
		prepare  func() (envoy *Envoy, cleanup func())
		wantFail bool
	}{
		"case envoy consul dataplane": {
			wantFail: false,
			prepare:  prepareCaseEnvoyConsulDataplaneStats,
		},
		"case envoy": {
			wantFail: false,
			prepare:  prepareCaseEnvoyStats,
		},
		"case invalid data response": {
			wantFail: true,
			prepare:  prepareCaseInvalidDataResponse,
		},
		"case 404": {
			wantFail: true,
			prepare:  prepareCase404,
		},
	}

	for name, test := range tests {
		t.Run(name, func(t *testing.T) {
			envoy, cleanup := test.prepare()
			defer cleanup()

			require.NoError(t, envoy.Init())

			if test.wantFail {
				assert.Error(t, envoy.Check())
			} else {
				assert.NoError(t, envoy.Check())
			}
		})
	}
}

func TestEnvoy_Collect(t *testing.T) {
	tests := map[string]struct {
		prepare     func() (envoy *Envoy, cleanup func())
		wantMetrics map[string]int64
	}{
		"case envoy consul dataplane": {
			prepare: prepareCaseEnvoyConsulDataplaneStats,
			wantMetrics: map[string]int64{
				"envoy_cluster_manager_active_clusters_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                           4,
				"envoy_cluster_manager_cluster_added_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                             4,
				"envoy_cluster_manager_cluster_modified_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                          0,
				"envoy_cluster_manager_cluster_removed_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                           0,
				"envoy_cluster_manager_cluster_updated_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                           2,
				"envoy_cluster_manager_cluster_updated_via_merge_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                 0,
				"envoy_cluster_manager_update_merge_cancelled_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                    0,
				"envoy_cluster_manager_update_out_of_merge_window_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                0,
				"envoy_cluster_manager_warming_clusters_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                          0,
				"envoy_cluster_membership_change_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                                1,
				"envoy_cluster_membership_change_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                       1,
				"envoy_cluster_membership_change_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                            2,
				"envoy_cluster_membership_change_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                              1,
				"envoy_cluster_membership_degraded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                              0,
				"envoy_cluster_membership_degraded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                     0,
				"envoy_cluster_membership_degraded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                          0,
				"envoy_cluster_membership_degraded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                            0,
				"envoy_cluster_membership_excluded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                              0,
				"envoy_cluster_membership_excluded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                     0,
				"envoy_cluster_membership_excluded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                          0,
				"envoy_cluster_membership_excluded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                            0,
				"envoy_cluster_membership_healthy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                               1,
				"envoy_cluster_membership_healthy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                      1,
				"envoy_cluster_membership_healthy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                           0,
				"envoy_cluster_membership_healthy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                             1,
				"envoy_cluster_update_empty_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                                     0,
				"envoy_cluster_update_empty_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                            0,
				"envoy_cluster_update_empty_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                                 0,
				"envoy_cluster_update_empty_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                                   0,
				"envoy_cluster_update_failure_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                                   0,
				"envoy_cluster_update_failure_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                          0,
				"envoy_cluster_update_failure_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                               0,
				"envoy_cluster_update_failure_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                                 0,
				"envoy_cluster_update_no_rebuild_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                                0,
				"envoy_cluster_update_no_rebuild_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                       0,
				"envoy_cluster_update_no_rebuild_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                            0,
				"envoy_cluster_update_no_rebuild_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                              0,
				"envoy_cluster_update_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                                   0,
				"envoy_cluster_update_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                          0,
				"envoy_cluster_update_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                               0,
				"envoy_cluster_update_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                                 0,
				"envoy_cluster_upstream_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                               1,
				"envoy_cluster_upstream_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                      0,
				"envoy_cluster_upstream_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                           0,
				"envoy_cluster_upstream_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                             2,
				"envoy_cluster_upstream_cx_connect_attempts_exceeded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":            0,
				"envoy_cluster_upstream_cx_connect_attempts_exceeded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                   0,
				"envoy_cluster_upstream_cx_connect_attempts_exceeded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":        0,
				"envoy_cluster_upstream_cx_connect_attempts_exceeded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":          0,
				"envoy_cluster_upstream_cx_connect_fail_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                         0,
				"envoy_cluster_upstream_cx_connect_fail_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                0,
				"envoy_cluster_upstream_cx_connect_fail_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                     0,
				"envoy_cluster_upstream_cx_connect_fail_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                       0,
				"envoy_cluster_upstream_cx_connect_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                      0,
				"envoy_cluster_upstream_cx_connect_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                             0,
				"envoy_cluster_upstream_cx_connect_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                  0,
				"envoy_cluster_upstream_cx_connect_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                    0,
				"envoy_cluster_upstream_cx_destroy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                              0,
				"envoy_cluster_upstream_cx_destroy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                     6507,
				"envoy_cluster_upstream_cx_destroy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                          1,
				"envoy_cluster_upstream_cx_destroy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                            0,
				"envoy_cluster_upstream_cx_destroy_local_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                        0,
				"envoy_cluster_upstream_cx_destroy_local_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                               6507,
				"envoy_cluster_upstream_cx_destroy_local_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                    0,
				"envoy_cluster_upstream_cx_destroy_local_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                      0,
				"envoy_cluster_upstream_cx_destroy_remote_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                       0,
				"envoy_cluster_upstream_cx_destroy_remote_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                              0,
				"envoy_cluster_upstream_cx_destroy_remote_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                   1,
				"envoy_cluster_upstream_cx_destroy_remote_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                     0,
				"envoy_cluster_upstream_cx_http1_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                          0,
				"envoy_cluster_upstream_cx_http1_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                 0,
				"envoy_cluster_upstream_cx_http1_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                      0,
				"envoy_cluster_upstream_cx_http1_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                        2,
				"envoy_cluster_upstream_cx_http2_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                          1,
				"envoy_cluster_upstream_cx_http2_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                 0,
				"envoy_cluster_upstream_cx_http2_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                      0,
				"envoy_cluster_upstream_cx_http2_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                        0,
				"envoy_cluster_upstream_cx_http3_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                          0,
				"envoy_cluster_upstream_cx_http3_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                 0,
				"envoy_cluster_upstream_cx_http3_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                      0,
				"envoy_cluster_upstream_cx_http3_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                        0,
				"envoy_cluster_upstream_cx_idle_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                         0,
				"envoy_cluster_upstream_cx_idle_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                0,
				"envoy_cluster_upstream_cx_idle_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                     0,
				"envoy_cluster_upstream_cx_idle_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                       0,
				"envoy_cluster_upstream_cx_max_duration_reached_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                 0,
				"envoy_cluster_upstream_cx_max_duration_reached_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                        0,
				"envoy_cluster_upstream_cx_max_duration_reached_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":             0,
				"envoy_cluster_upstream_cx_max_duration_reached_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":               0,
				"envoy_cluster_upstream_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                             0,
				"envoy_cluster_upstream_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                    0,
				"envoy_cluster_upstream_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                         0,
				"envoy_cluster_upstream_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                           0,
				"envoy_cluster_upstream_cx_rx_bytes_buffered_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                    17,
				"envoy_cluster_upstream_cx_rx_bytes_buffered_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                           0,
				"envoy_cluster_upstream_cx_rx_bytes_buffered_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                0,
				"envoy_cluster_upstream_cx_rx_bytes_buffered_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                  102618,
				"envoy_cluster_upstream_cx_rx_bytes_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                       3853,
				"envoy_cluster_upstream_cx_rx_bytes_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                              0,
				"envoy_cluster_upstream_cx_rx_bytes_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                   8645645,
				"envoy_cluster_upstream_cx_rx_bytes_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                     724779,
				"envoy_cluster_upstream_cx_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                                1,
				"envoy_cluster_upstream_cx_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                       6507,
				"envoy_cluster_upstream_cx_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                            1,
				"envoy_cluster_upstream_cx_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                              2,
				"envoy_cluster_upstream_cx_tx_bytes_buffered_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                    0,
				"envoy_cluster_upstream_cx_tx_bytes_buffered_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                           0,
				"envoy_cluster_upstream_cx_tx_bytes_buffered_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                0,
				"envoy_cluster_upstream_cx_tx_bytes_buffered_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                  0,
				"envoy_cluster_upstream_cx_tx_bytes_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                       114982,
				"envoy_cluster_upstream_cx_tx_bytes_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                              0,
				"envoy_cluster_upstream_cx_tx_bytes_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                   1240,
				"envoy_cluster_upstream_cx_tx_bytes_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                     732,
				"envoy_cluster_upstream_rq_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                               1,
				"envoy_cluster_upstream_rq_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                      0,
				"envoy_cluster_upstream_rq_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                           0,
				"envoy_cluster_upstream_rq_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                             1,
				"envoy_cluster_upstream_rq_cancelled_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                            0,
				"envoy_cluster_upstream_rq_cancelled_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                   4749,
				"envoy_cluster_upstream_rq_cancelled_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                        0,
				"envoy_cluster_upstream_rq_cancelled_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                          0,
				"envoy_cluster_upstream_rq_maintenance_mode_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                     0,
				"envoy_cluster_upstream_rq_maintenance_mode_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                            0,
				"envoy_cluster_upstream_rq_maintenance_mode_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                 0,
				"envoy_cluster_upstream_rq_maintenance_mode_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                   0,
				"envoy_cluster_upstream_rq_max_duration_reached_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                 0,
				"envoy_cluster_upstream_rq_max_duration_reached_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                        0,
				"envoy_cluster_upstream_rq_max_duration_reached_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":             0,
				"envoy_cluster_upstream_rq_max_duration_reached_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":               0,
				"envoy_cluster_upstream_rq_pending_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                       0,
				"envoy_cluster_upstream_rq_pending_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                              0,
				"envoy_cluster_upstream_rq_pending_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                   0,
				"envoy_cluster_upstream_rq_pending_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                     0,
				"envoy_cluster_upstream_rq_pending_failure_eject_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                0,
				"envoy_cluster_upstream_rq_pending_failure_eject_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                       0,
				"envoy_cluster_upstream_rq_pending_failure_eject_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":            0,
				"envoy_cluster_upstream_rq_pending_failure_eject_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":              0,
				"envoy_cluster_upstream_rq_pending_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                     0,
				"envoy_cluster_upstream_rq_pending_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                            0,
				"envoy_cluster_upstream_rq_pending_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                 0,
				"envoy_cluster_upstream_rq_pending_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                   0,
				"envoy_cluster_upstream_rq_pending_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                        1,
				"envoy_cluster_upstream_rq_pending_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                               6507,
				"envoy_cluster_upstream_rq_pending_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                    1,
				"envoy_cluster_upstream_rq_pending_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                      2,
				"envoy_cluster_upstream_rq_per_try_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                      0,
				"envoy_cluster_upstream_rq_per_try_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                             0,
				"envoy_cluster_upstream_rq_per_try_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                  0,
				"envoy_cluster_upstream_rq_per_try_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                    0,
				"envoy_cluster_upstream_rq_retry_backoff_exponential_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":            0,
				"envoy_cluster_upstream_rq_retry_backoff_exponential_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                   0,
				"envoy_cluster_upstream_rq_retry_backoff_exponential_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":        0,
				"envoy_cluster_upstream_rq_retry_backoff_exponential_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":          0,
				"envoy_cluster_upstream_rq_retry_backoff_ratelimited_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":            0,
				"envoy_cluster_upstream_rq_retry_backoff_ratelimited_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                   0,
				"envoy_cluster_upstream_rq_retry_backoff_ratelimited_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":        0,
				"envoy_cluster_upstream_rq_retry_backoff_ratelimited_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":          0,
				"envoy_cluster_upstream_rq_retry_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                                0,
				"envoy_cluster_upstream_rq_retry_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                       0,
				"envoy_cluster_upstream_rq_retry_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                            0,
				"envoy_cluster_upstream_rq_retry_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                              0,
				"envoy_cluster_upstream_rq_retry_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                        0,
				"envoy_cluster_upstream_rq_retry_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                               0,
				"envoy_cluster_upstream_rq_retry_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                    0,
				"envoy_cluster_upstream_rq_retry_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                      0,
				"envoy_cluster_upstream_rq_rx_reset_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                             0,
				"envoy_cluster_upstream_rq_rx_reset_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                    0,
				"envoy_cluster_upstream_rq_rx_reset_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                         0,
				"envoy_cluster_upstream_rq_rx_reset_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                           0,
				"envoy_cluster_upstream_rq_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                              0,
				"envoy_cluster_upstream_rq_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                     0,
				"envoy_cluster_upstream_rq_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                          0,
				"envoy_cluster_upstream_rq_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                            0,
				"envoy_cluster_upstream_rq_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                                1,
				"envoy_cluster_upstream_rq_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                       1758,
				"envoy_cluster_upstream_rq_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                            1,
				"envoy_cluster_upstream_rq_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                              3,
				"envoy_cluster_upstream_rq_tx_reset_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                             0,
				"envoy_cluster_upstream_rq_tx_reset_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                    0,
				"envoy_cluster_upstream_rq_tx_reset_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                         0,
				"envoy_cluster_upstream_rq_tx_reset_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                           0,
				"envoy_listener_admin_downstream_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                       1,
				"envoy_listener_admin_downstream_cx_destroy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                      2,
				"envoy_listener_admin_downstream_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                     0,
				"envoy_listener_admin_downstream_cx_overload_reject_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                              0,
				"envoy_listener_admin_downstream_cx_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                        3,
				"envoy_listener_admin_downstream_cx_transport_socket_connect_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":             0,
				"envoy_listener_admin_downstream_global_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                              0,
				"envoy_listener_admin_downstream_listener_filter_error_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                           0,
				"envoy_listener_admin_downstream_listener_filter_remote_close_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                    0,
				"envoy_listener_admin_downstream_pre_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                   0,
				"envoy_listener_admin_downstream_pre_cx_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                  0,
				"envoy_listener_downstream_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                               1,
				"envoy_listener_downstream_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":                           0,
				"envoy_listener_downstream_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                             0,
				"envoy_listener_downstream_cx_destroy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                              3,
				"envoy_listener_downstream_cx_destroy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":                          6507,
				"envoy_listener_downstream_cx_destroy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                            1,
				"envoy_listener_downstream_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                             0,
				"envoy_listener_downstream_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":                         0,
				"envoy_listener_downstream_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                           0,
				"envoy_listener_downstream_cx_overload_reject_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                      0,
				"envoy_listener_downstream_cx_overload_reject_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":                  0,
				"envoy_listener_downstream_cx_overload_reject_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                    0,
				"envoy_listener_downstream_cx_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                                4,
				"envoy_listener_downstream_cx_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":                            6507,
				"envoy_listener_downstream_cx_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                              1,
				"envoy_listener_downstream_cx_transport_socket_connect_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":     0,
				"envoy_listener_downstream_cx_transport_socket_connect_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx": 0,
				"envoy_listener_downstream_cx_transport_socket_connect_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":   0,
				"envoy_listener_downstream_global_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                      0,
				"envoy_listener_downstream_global_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":                  0,
				"envoy_listener_downstream_global_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                    0,
				"envoy_listener_downstream_listener_filter_error_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                   0,
				"envoy_listener_downstream_listener_filter_error_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":               0,
				"envoy_listener_downstream_listener_filter_error_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                 0,
				"envoy_listener_downstream_listener_filter_remote_close_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":            0,
				"envoy_listener_downstream_listener_filter_remote_close_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":        0,
				"envoy_listener_downstream_listener_filter_remote_close_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":          0,
				"envoy_listener_downstream_pre_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                           0,
				"envoy_listener_downstream_pre_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":                       0,
				"envoy_listener_downstream_pre_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                         0,
				"envoy_listener_downstream_pre_cx_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                          0,
				"envoy_listener_downstream_pre_cx_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":                      0,
				"envoy_listener_downstream_pre_cx_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                        0,
				"envoy_listener_manager_listener_added_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                           3,
				"envoy_listener_manager_listener_create_failure_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                  0,
				"envoy_listener_manager_listener_create_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                  6,
				"envoy_listener_manager_listener_in_place_updated_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                0,
				"envoy_listener_manager_listener_modified_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                        0,
				"envoy_listener_manager_listener_removed_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                         0,
				"envoy_listener_manager_listener_stopped_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                         0,
				"envoy_listener_manager_total_listeners_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                   3,
				"envoy_listener_manager_total_listeners_draining_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                 0,
				"envoy_listener_manager_total_listeners_warming_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                  0,
				"envoy_server_memory_allocated_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                                   7742368,
				"envoy_server_memory_heap_size_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                                   14680064,
				"envoy_server_memory_physical_size_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                               19175778,
				"envoy_server_parent_connections_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                                 0,
				"envoy_server_state_draining_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                                     0,
				"envoy_server_state_initializing_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                                 0,
				"envoy_server_state_live_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                                         1,
				"envoy_server_state_pre_initializing_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                             0,
				"envoy_server_total_connections_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                                  0,
				"envoy_server_uptime_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                                             32527,
			},
		},
		"case envoy": {
			prepare: prepareCaseEnvoyStats,
			wantMetrics: map[string]int64{
				"envoy_cluster_manager_active_clusters":                                       1,
				"envoy_cluster_manager_cluster_added":                                         1,
				"envoy_cluster_manager_cluster_modified":                                      0,
				"envoy_cluster_manager_cluster_removed":                                       0,
				"envoy_cluster_manager_cluster_updated":                                       0,
				"envoy_cluster_manager_cluster_updated_via_merge":                             0,
				"envoy_cluster_manager_update_merge_cancelled":                                0,
				"envoy_cluster_manager_update_out_of_merge_window":                            0,
				"envoy_cluster_manager_warming_clusters":                                      0,
				"envoy_cluster_membership_change_service_envoyproxy_io":                       1,
				"envoy_cluster_membership_degraded_service_envoyproxy_io":                     0,
				"envoy_cluster_membership_excluded_service_envoyproxy_io":                     0,
				"envoy_cluster_membership_healthy_service_envoyproxy_io":                      1,
				"envoy_cluster_update_empty_service_envoyproxy_io":                            0,
				"envoy_cluster_update_failure_service_envoyproxy_io":                          0,
				"envoy_cluster_update_no_rebuild_service_envoyproxy_io":                       0,
				"envoy_cluster_update_success_service_envoyproxy_io":                          1242,
				"envoy_cluster_upstream_cx_active_service_envoyproxy_io":                      0,
				"envoy_cluster_upstream_cx_connect_attempts_exceeded_service_envoyproxy_io":   0,
				"envoy_cluster_upstream_cx_connect_fail_service_envoyproxy_io":                0,
				"envoy_cluster_upstream_cx_connect_timeout_service_envoyproxy_io":             0,
				"envoy_cluster_upstream_cx_destroy_local_service_envoyproxy_io":               0,
				"envoy_cluster_upstream_cx_destroy_remote_service_envoyproxy_io":              0,
				"envoy_cluster_upstream_cx_destroy_service_envoyproxy_io":                     0,
				"envoy_cluster_upstream_cx_http1_total_service_envoyproxy_io":                 0,
				"envoy_cluster_upstream_cx_http2_total_service_envoyproxy_io":                 0,
				"envoy_cluster_upstream_cx_http3_total_service_envoyproxy_io":                 0,
				"envoy_cluster_upstream_cx_idle_timeout_service_envoyproxy_io":                0,
				"envoy_cluster_upstream_cx_max_duration_reached_service_envoyproxy_io":        0,
				"envoy_cluster_upstream_cx_overflow_service_envoyproxy_io":                    0,
				"envoy_cluster_upstream_cx_rx_bytes_buffered_service_envoyproxy_io":           0,
				"envoy_cluster_upstream_cx_rx_bytes_total_service_envoyproxy_io":              0,
				"envoy_cluster_upstream_cx_total_service_envoyproxy_io":                       0,
				"envoy_cluster_upstream_cx_tx_bytes_buffered_service_envoyproxy_io":           0,
				"envoy_cluster_upstream_cx_tx_bytes_total_service_envoyproxy_io":              0,
				"envoy_cluster_upstream_rq_active_service_envoyproxy_io":                      0,
				"envoy_cluster_upstream_rq_cancelled_service_envoyproxy_io":                   0,
				"envoy_cluster_upstream_rq_maintenance_mode_service_envoyproxy_io":            0,
				"envoy_cluster_upstream_rq_max_duration_reached_service_envoyproxy_io":        0,
				"envoy_cluster_upstream_rq_pending_active_service_envoyproxy_io":              0,
				"envoy_cluster_upstream_rq_pending_failure_eject_service_envoyproxy_io":       0,
				"envoy_cluster_upstream_rq_pending_overflow_service_envoyproxy_io":            0,
				"envoy_cluster_upstream_rq_pending_total_service_envoyproxy_io":               0,
				"envoy_cluster_upstream_rq_per_try_timeout_service_envoyproxy_io":             0,
				"envoy_cluster_upstream_rq_retry_backoff_exponential_service_envoyproxy_io":   0,
				"envoy_cluster_upstream_rq_retry_backoff_ratelimited_service_envoyproxy_io":   0,
				"envoy_cluster_upstream_rq_retry_service_envoyproxy_io":                       0,
				"envoy_cluster_upstream_rq_retry_success_service_envoyproxy_io":               0,
				"envoy_cluster_upstream_rq_rx_reset_service_envoyproxy_io":                    0,
				"envoy_cluster_upstream_rq_timeout_service_envoyproxy_io":                     0,
				"envoy_cluster_upstream_rq_total_service_envoyproxy_io":                       0,
				"envoy_cluster_upstream_rq_tx_reset_service_envoyproxy_io":                    0,
				"envoy_listener_admin_downstream_cx_active":                                   2,
				"envoy_listener_admin_downstream_cx_destroy":                                  4,
				"envoy_listener_admin_downstream_cx_overflow":                                 0,
				"envoy_listener_admin_downstream_cx_overload_reject":                          0,
				"envoy_listener_admin_downstream_cx_total":                                    6,
				"envoy_listener_admin_downstream_cx_transport_socket_connect_timeout":         0,
				"envoy_listener_admin_downstream_global_cx_overflow":                          0,
				"envoy_listener_admin_downstream_listener_filter_error":                       0,
				"envoy_listener_admin_downstream_listener_filter_remote_close":                0,
				"envoy_listener_admin_downstream_pre_cx_active":                               0,
				"envoy_listener_admin_downstream_pre_cx_timeout":                              0,
				"envoy_listener_downstream_cx_active_0.0.0.0_10000":                           0,
				"envoy_listener_downstream_cx_destroy_0.0.0.0_10000":                          0,
				"envoy_listener_downstream_cx_overflow_0.0.0.0_10000":                         0,
				"envoy_listener_downstream_cx_overload_reject_0.0.0.0_10000":                  0,
				"envoy_listener_downstream_cx_total_0.0.0.0_10000":                            0,
				"envoy_listener_downstream_cx_transport_socket_connect_timeout_0.0.0.0_10000": 0,
				"envoy_listener_downstream_global_cx_overflow_0.0.0.0_10000":                  0,
				"envoy_listener_downstream_listener_filter_error_0.0.0.0_10000":               0,
				"envoy_listener_downstream_listener_filter_remote_close_0.0.0.0_10000":        0,
				"envoy_listener_downstream_pre_cx_active_0.0.0.0_10000":                       0,
				"envoy_listener_downstream_pre_cx_timeout_0.0.0.0_10000":                      0,
				"envoy_listener_manager_listener_added":                                       1,
				"envoy_listener_manager_listener_create_failure":                              0,
				"envoy_listener_manager_listener_create_success":                              16,
				"envoy_listener_manager_listener_in_place_updated":                            0,
				"envoy_listener_manager_listener_modified":                                    0,
				"envoy_listener_manager_listener_removed":                                     0,
				"envoy_listener_manager_listener_stopped":                                     0,
				"envoy_listener_manager_total_listeners_active":                               1,
				"envoy_listener_manager_total_listeners_draining":                             0,
				"envoy_listener_manager_total_listeners_warming":                              0,
				"envoy_server_memory_allocated":                                               7630184,
				"envoy_server_memory_heap_size":                                               16777216,
				"envoy_server_memory_physical_size":                                           28426958,
				"envoy_server_parent_connections":                                             0,
				"envoy_server_state_draining":                                                 0,
				"envoy_server_state_initializing":                                             0,
				"envoy_server_state_live":                                                     1,
				"envoy_server_state_pre_initializing":                                         0,
				"envoy_server_total_connections":                                              0,
				"envoy_server_uptime":                                                         6225,
			},
		},
		"case invalid data response": {
			prepare:     prepareCaseInvalidDataResponse,
			wantMetrics: nil,
		},
		"case 404": {
			prepare:     prepareCase404,
			wantMetrics: nil,
		},
	}

	for name, test := range tests {
		t.Run(name, func(t *testing.T) {
			envoy, cleanup := test.prepare()
			defer cleanup()

			require.NoError(t, envoy.Init())

			mx := envoy.Collect()

			require.Equal(t, test.wantMetrics, mx)
			ensureCollectedHasAllChartsDimsVarsIDs(t, envoy, mx)
		})
	}
}

func ensureCollectedHasAllChartsDimsVarsIDs(t *testing.T, envoy *Envoy, mx map[string]int64) {
	for _, chart := range *envoy.Charts() {
		for _, dim := range chart.Dims {
			_, ok := mx[dim.ID]
			assert.Truef(t, ok, "collected metrics has no data for dim '%s' chart '%s'", dim.ID, chart.ID)
		}
		for _, v := range chart.Vars {
			_, ok := mx[v.ID]
			assert.Truef(t, ok, "collected metrics has no data for var '%s' chart '%s'", v.ID, chart.ID)
		}
	}
}

func prepareCaseEnvoyConsulDataplaneStats() (*Envoy, func()) {
	srv := httptest.NewServer(http.HandlerFunc(
		func(w http.ResponseWriter, r *http.Request) {
			_, _ = w.Write(dataEnvoyConsulDataplane)
		}))
	envoy := New()
	envoy.URL = srv.URL

	return envoy, srv.Close
}

func prepareCaseEnvoyStats() (*Envoy, func()) {
	srv := httptest.NewServer(http.HandlerFunc(
		func(w http.ResponseWriter, r *http.Request) {
			_, _ = w.Write(dataEnvoy)
		}))
	envoy := New()
	envoy.URL = srv.URL

	return envoy, srv.Close
}

func prepareCaseInvalidDataResponse() (*Envoy, func()) {
	srv := httptest.NewServer(http.HandlerFunc(
		func(w http.ResponseWriter, r *http.Request) {
			_, _ = w.Write([]byte("hello and\n goodbye"))
		}))
	envoy := New()
	envoy.URL = srv.URL

	return envoy, srv.Close
}

func prepareCase404() (*Envoy, func()) {
	srv := httptest.NewServer(http.HandlerFunc(
		func(w http.ResponseWriter, r *http.Request) {
			w.WriteHeader(http.StatusNotFound)
		}))
	envoy := New()
	envoy.URL = srv.URL

	return envoy, srv.Close
}