summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/coredns/coredns_test.go
blob: df5dc15014ee0965950b2811b08cb49e1c7d9317 (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
568
569
570
571
572
573
// SPDX-License-Identifier: GPL-3.0-or-later

package coredns

import (
	"net/http"
	"net/http/httptest"
	"os"
	"testing"

	"github.com/netdata/netdata/go/go.d.plugin/agent/module"

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

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

	dataVer169NoLoad, _   = os.ReadFile("testdata/version169/no_load.txt")
	dataVer169SomeLoad, _ = os.ReadFile("testdata/version169/some_load.txt")

	dataVer170NoLoad, _   = os.ReadFile("testdata/version170/no_load.txt")
	dataVer170SomeLoad, _ = os.ReadFile("testdata/version170/some_load.txt")

	dataNoLoadNoVersion, _ = os.ReadFile("testdata/no_version/no_load.txt")
)

func Test_testDataIsValid(t *testing.T) {
	for name, data := range map[string][]byte{
		"dataConfigJSON":      dataConfigJSON,
		"dataConfigYAML":      dataConfigYAML,
		"dataVer169NoLoad":    dataVer169NoLoad,
		"dataVer169SomeLoad":  dataVer169SomeLoad,
		"dataVer170NoLoad":    dataVer170NoLoad,
		"dataVer170SomeLoad":  dataVer170SomeLoad,
		"dataNoLoadNoVersion": dataNoLoadNoVersion,
	} {
		require.NotNilf(t, data, name)
	}
}

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

func TestCoreDNS_Charts(t *testing.T) {
	assert.NotNil(t, New().Charts())
}

func TestCoreDNS_Cleanup(t *testing.T) {
	New().Cleanup()
}

func TestCoreDNS_Init(t *testing.T) {
	assert.NoError(t, New().Init())
}

func TestCoreDNS_InitNG(t *testing.T) {
	job := New()
	job.URL = ""
	assert.Error(t, job.Init())
}

func TestCoreDNS_Check(t *testing.T) {
	tests := []struct {
		name string
		data []byte
	}{
		{"version 1.6.9", dataVer169NoLoad},
		{"version 1.7.0", dataVer170NoLoad},
	}
	for _, testNoLoad := range tests {
		t.Run(testNoLoad.name, func(t *testing.T) {

			ts := httptest.NewServer(
				http.HandlerFunc(
					func(w http.ResponseWriter, r *http.Request) {
						_, _ = w.Write(testNoLoad.data)
					}))
			defer ts.Close()

			job := New()
			job.URL = ts.URL + "/metrics"
			require.NoError(t, job.Init())
			assert.NoError(t, job.Check())
		})
	}
}

func TestCoreDNS_CheckNG(t *testing.T) {
	job := New()
	job.URL = "http://127.0.0.1:38001/metrics"
	require.NoError(t, job.Init())
	assert.Error(t, job.Check())
}

func TestCoreDNS_Collect(t *testing.T) {
	tests := []struct {
		name string
		data []byte
	}{
		{"version 1.6.9", dataVer169SomeLoad},
		{"version 1.7.0", dataVer170SomeLoad},
	}
	for _, testSomeLoad := range tests {
		t.Run(testSomeLoad.name, func(t *testing.T) {

			ts := httptest.NewServer(
				http.HandlerFunc(
					func(w http.ResponseWriter, r *http.Request) {
						_, _ = w.Write(testSomeLoad.data)
					}))
			defer ts.Close()

			job := New()
			job.URL = ts.URL + "/metrics"
			job.PerServerStats.Includes = []string{"glob:*"}
			job.PerZoneStats.Includes = []string{"glob:*"}
			require.NoError(t, job.Init())
			require.NoError(t, job.Check())

			expected := map[string]int64{
				"coredns.io._request_per_ip_family_v4":     19,
				"coredns.io._request_per_ip_family_v6":     0,
				"coredns.io._request_per_proto_tcp":        0,
				"coredns.io._request_per_proto_udp":        19,
				"coredns.io._request_per_status_dropped":   0,
				"coredns.io._request_per_status_processed": 0,
				"coredns.io._request_per_type_A":           6,
				"coredns.io._request_per_type_AAAA":        6,
				"coredns.io._request_per_type_ANY":         0,
				"coredns.io._request_per_type_CNAME":       0,
				"coredns.io._request_per_type_DNSKEY":      0,
				"coredns.io._request_per_type_DS":          0,
				"coredns.io._request_per_type_IXFR":        0,
				"coredns.io._request_per_type_MX":          7,
				"coredns.io._request_per_type_NS":          0,
				"coredns.io._request_per_type_NSEC":        0,
				"coredns.io._request_per_type_NSEC3":       0,
				"coredns.io._request_per_type_PTR":         0,
				"coredns.io._request_per_type_RRSIG":       0,
				"coredns.io._request_per_type_SOA":         0,
				"coredns.io._request_per_type_SRV":         0,
				"coredns.io._request_per_type_TXT":         0,
				"coredns.io._request_per_type_other":       0,
				"coredns.io._request_total":                19,
				"coredns.io._response_per_rcode_BADALG":    0,
				"coredns.io._response_per_rcode_BADCOOKIE": 0,
				"coredns.io._response_per_rcode_BADKEY":    0,
				"coredns.io._response_per_rcode_BADMODE":   0,
				"coredns.io._response_per_rcode_BADNAME":   0,
				"coredns.io._response_per_rcode_BADSIG":    0,
				"coredns.io._response_per_rcode_BADTIME":   0,
				"coredns.io._response_per_rcode_BADTRUNC":  0,
				"coredns.io._response_per_rcode_FORMERR":   0,
				"coredns.io._response_per_rcode_NOERROR":   19,
				"coredns.io._response_per_rcode_NOTAUTH":   0,
				"coredns.io._response_per_rcode_NOTIMP":    0,
				"coredns.io._response_per_rcode_NOTZONE":   0,
				"coredns.io._response_per_rcode_NXDOMAIN":  0,
				"coredns.io._response_per_rcode_NXRRSET":   0,
				"coredns.io._response_per_rcode_REFUSED":   0,
				"coredns.io._response_per_rcode_SERVFAIL":  0,
				"coredns.io._response_per_rcode_YXDOMAIN":  0,
				"coredns.io._response_per_rcode_YXRRSET":   0,
				"coredns.io._response_per_rcode_other":     0,
				"coredns.io._response_total":               19,
				"dns://:53_request_per_ip_family_v4":       15,
				"dns://:53_request_per_ip_family_v6":       0,
				"dns://:53_request_per_proto_tcp":          0,
				"dns://:53_request_per_proto_udp":          15,
				"dns://:53_request_per_status_dropped":     9,
				"dns://:53_request_per_status_processed":   6,
				"dns://:53_request_per_type_A":             5,
				"dns://:53_request_per_type_AAAA":          5,
				"dns://:53_request_per_type_ANY":           0,
				"dns://:53_request_per_type_CNAME":         0,
				"dns://:53_request_per_type_DNSKEY":        0,
				"dns://:53_request_per_type_DS":            0,
				"dns://:53_request_per_type_IXFR":          0,
				"dns://:53_request_per_type_MX":            5,
				"dns://:53_request_per_type_NS":            0,
				"dns://:53_request_per_type_NSEC":          0,
				"dns://:53_request_per_type_NSEC3":         0,
				"dns://:53_request_per_type_PTR":           0,
				"dns://:53_request_per_type_RRSIG":         0,
				"dns://:53_request_per_type_SOA":           0,
				"dns://:53_request_per_type_SRV":           0,
				"dns://:53_request_per_type_TXT":           0,
				"dns://:53_request_per_type_other":         0,
				"dns://:53_request_total":                  15,
				"dns://:53_response_per_rcode_BADALG":      0,
				"dns://:53_response_per_rcode_BADCOOKIE":   0,
				"dns://:53_response_per_rcode_BADKEY":      0,
				"dns://:53_response_per_rcode_BADMODE":     0,
				"dns://:53_response_per_rcode_BADNAME":     0,
				"dns://:53_response_per_rcode_BADSIG":      0,
				"dns://:53_response_per_rcode_BADTIME":     0,
				"dns://:53_response_per_rcode_BADTRUNC":    0,
				"dns://:53_response_per_rcode_FORMERR":     0,
				"dns://:53_response_per_rcode_NOERROR":     6,
				"dns://:53_response_per_rcode_NOTAUTH":     0,
				"dns://:53_response_per_rcode_NOTIMP":      0,
				"dns://:53_response_per_rcode_NOTZONE":     0,
				"dns://:53_response_per_rcode_NXDOMAIN":    0,
				"dns://:53_response_per_rcode_NXRRSET":     0,
				"dns://:53_response_per_rcode_REFUSED":     0,
				"dns://:53_response_per_rcode_SERVFAIL":    9,
				"dns://:53_response_per_rcode_YXDOMAIN":    0,
				"dns://:53_response_per_rcode_YXRRSET":     0,
				"dns://:53_response_per_rcode_other":       0,
				"dns://:53_response_total":                 15,
				"dns://:54_request_per_ip_family_v4":       25,
				"dns://:54_request_per_ip_family_v6":       0,
				"dns://:54_request_per_proto_tcp":          0,
				"dns://:54_request_per_proto_udp":          25,
				"dns://:54_request_per_status_dropped":     12,
				"dns://:54_request_per_status_processed":   13,
				"dns://:54_request_per_type_A":             8,
				"dns://:54_request_per_type_AAAA":          8,
				"dns://:54_request_per_type_ANY":           0,
				"dns://:54_request_per_type_CNAME":         0,
				"dns://:54_request_per_type_DNSKEY":        0,
				"dns://:54_request_per_type_DS":            0,
				"dns://:54_request_per_type_IXFR":          0,
				"dns://:54_request_per_type_MX":            9,
				"dns://:54_request_per_type_NS":            0,
				"dns://:54_request_per_type_NSEC":          0,
				"dns://:54_request_per_type_NSEC3":         0,
				"dns://:54_request_per_type_PTR":           0,
				"dns://:54_request_per_type_RRSIG":         0,
				"dns://:54_request_per_type_SOA":           0,
				"dns://:54_request_per_type_SRV":           0,
				"dns://:54_request_per_type_TXT":           0,
				"dns://:54_request_per_type_other":         0,
				"dns://:54_request_total":                  25,
				"dns://:54_response_per_rcode_BADALG":      0,
				"dns://:54_response_per_rcode_BADCOOKIE":   0,
				"dns://:54_response_per_rcode_BADKEY":      0,
				"dns://:54_response_per_rcode_BADMODE":     0,
				"dns://:54_response_per_rcode_BADNAME":     0,
				"dns://:54_response_per_rcode_BADSIG":      0,
				"dns://:54_response_per_rcode_BADTIME":     0,
				"dns://:54_response_per_rcode_BADTRUNC":    0,
				"dns://:54_response_per_rcode_FORMERR":     0,
				"dns://:54_response_per_rcode_NOERROR":     13,
				"dns://:54_response_per_rcode_NOTAUTH":     0,
				"dns://:54_response_per_rcode_NOTIMP":      0,
				"dns://:54_response_per_rcode_NOTZONE":     0,
				"dns://:54_response_per_rcode_NXDOMAIN":    0,
				"dns://:54_response_per_rcode_NXRRSET":     0,
				"dns://:54_response_per_rcode_REFUSED":     0,
				"dns://:54_response_per_rcode_SERVFAIL":    12,
				"dns://:54_response_per_rcode_YXDOMAIN":    0,
				"dns://:54_response_per_rcode_YXRRSET":     0,
				"dns://:54_response_per_rcode_other":       0,
				"dns://:54_response_total":                 25,
				"dropped_request_per_ip_family_v4":         42,
				"dropped_request_per_ip_family_v6":         0,
				"dropped_request_per_proto_tcp":            0,
				"dropped_request_per_proto_udp":            42,
				"dropped_request_per_status_dropped":       0,
				"dropped_request_per_status_processed":     0,
				"dropped_request_per_type_A":               14,
				"dropped_request_per_type_AAAA":            14,
				"dropped_request_per_type_ANY":             0,
				"dropped_request_per_type_CNAME":           0,
				"dropped_request_per_type_DNSKEY":          0,
				"dropped_request_per_type_DS":              0,
				"dropped_request_per_type_IXFR":            0,
				"dropped_request_per_type_MX":              14,
				"dropped_request_per_type_NS":              0,
				"dropped_request_per_type_NSEC":            0,
				"dropped_request_per_type_NSEC3":           0,
				"dropped_request_per_type_PTR":             0,
				"dropped_request_per_type_RRSIG":           0,
				"dropped_request_per_type_SOA":             0,
				"dropped_request_per_type_SRV":             0,
				"dropped_request_per_type_TXT":             0,
				"dropped_request_per_type_other":           0,
				"dropped_request_total":                    42,
				"dropped_response_per_rcode_BADALG":        0,
				"dropped_response_per_rcode_BADCOOKIE":     0,
				"dropped_response_per_rcode_BADKEY":        0,
				"dropped_response_per_rcode_BADMODE":       0,
				"dropped_response_per_rcode_BADNAME":       0,
				"dropped_response_per_rcode_BADSIG":        0,
				"dropped_response_per_rcode_BADTIME":       0,
				"dropped_response_per_rcode_BADTRUNC":      0,
				"dropped_response_per_rcode_FORMERR":       0,
				"dropped_response_per_rcode_NOERROR":       0,
				"dropped_response_per_rcode_NOTAUTH":       0,
				"dropped_response_per_rcode_NOTIMP":        0,
				"dropped_response_per_rcode_NOTZONE":       0,
				"dropped_response_per_rcode_NXDOMAIN":      0,
				"dropped_response_per_rcode_NXRRSET":       0,
				"dropped_response_per_rcode_REFUSED":       21,
				"dropped_response_per_rcode_SERVFAIL":      21,
				"dropped_response_per_rcode_YXDOMAIN":      0,
				"dropped_response_per_rcode_YXRRSET":       0,
				"dropped_response_per_rcode_other":         0,
				"dropped_response_total":                   42,
				"empty_request_per_ip_family_v4":           21,
				"empty_request_per_ip_family_v6":           0,
				"empty_request_per_proto_tcp":              0,
				"empty_request_per_proto_udp":              21,
				"empty_request_per_status_dropped":         21,
				"empty_request_per_status_processed":       0,
				"empty_request_per_type_A":                 7,
				"empty_request_per_type_AAAA":              7,
				"empty_request_per_type_ANY":               0,
				"empty_request_per_type_CNAME":             0,
				"empty_request_per_type_DNSKEY":            0,
				"empty_request_per_type_DS":                0,
				"empty_request_per_type_IXFR":              0,
				"empty_request_per_type_MX":                7,
				"empty_request_per_type_NS":                0,
				"empty_request_per_type_NSEC":              0,
				"empty_request_per_type_NSEC3":             0,
				"empty_request_per_type_PTR":               0,
				"empty_request_per_type_RRSIG":             0,
				"empty_request_per_type_SOA":               0,
				"empty_request_per_type_SRV":               0,
				"empty_request_per_type_TXT":               0,
				"empty_request_per_type_other":             0,
				"empty_request_total":                      21,
				"empty_response_per_rcode_BADALG":          0,
				"empty_response_per_rcode_BADCOOKIE":       0,
				"empty_response_per_rcode_BADKEY":          0,
				"empty_response_per_rcode_BADMODE":         0,
				"empty_response_per_rcode_BADNAME":         0,
				"empty_response_per_rcode_BADSIG":          0,
				"empty_response_per_rcode_BADTIME":         0,
				"empty_response_per_rcode_BADTRUNC":        0,
				"empty_response_per_rcode_FORMERR":         0,
				"empty_response_per_rcode_NOERROR":         0,
				"empty_response_per_rcode_NOTAUTH":         0,
				"empty_response_per_rcode_NOTIMP":          0,
				"empty_response_per_rcode_NOTZONE":         0,
				"empty_response_per_rcode_NXDOMAIN":        0,
				"empty_response_per_rcode_NXRRSET":         0,
				"empty_response_per_rcode_REFUSED":         21,
				"empty_response_per_rcode_SERVFAIL":        0,
				"empty_response_per_rcode_YXDOMAIN":        0,
				"empty_response_per_rcode_YXRRSET":         0,
				"empty_response_per_rcode_other":           0,
				"empty_response_total":                     21,
				"no_matching_zone_dropped_total":           21,
				"panic_total":                              0,
				"request_per_ip_family_v4":                 61,
				"request_per_ip_family_v6":                 0,
				"request_per_proto_tcp":                    0,
				"request_per_proto_udp":                    61,
				"request_per_status_dropped":               42,
				"request_per_status_processed":             19,
				"request_per_type_A":                       20,
				"request_per_type_AAAA":                    20,
				"request_per_type_ANY":                     0,
				"request_per_type_CNAME":                   0,
				"request_per_type_DNSKEY":                  0,
				"request_per_type_DS":                      0,
				"request_per_type_IXFR":                    0,
				"request_per_type_MX":                      21,
				"request_per_type_NS":                      0,
				"request_per_type_NSEC":                    0,
				"request_per_type_NSEC3":                   0,
				"request_per_type_PTR":                     0,
				"request_per_type_RRSIG":                   0,
				"request_per_type_SOA":                     0,
				"request_per_type_SRV":                     0,
				"request_per_type_TXT":                     0,
				"request_per_type_other":                   0,
				"request_total":                            61,
				"response_per_rcode_BADALG":                0,
				"response_per_rcode_BADCOOKIE":             0,
				"response_per_rcode_BADKEY":                0,
				"response_per_rcode_BADMODE":               0,
				"response_per_rcode_BADNAME":               0,
				"response_per_rcode_BADSIG":                0,
				"response_per_rcode_BADTIME":               0,
				"response_per_rcode_BADTRUNC":              0,
				"response_per_rcode_FORMERR":               0,
				"response_per_rcode_NOERROR":               19,
				"response_per_rcode_NOTAUTH":               0,
				"response_per_rcode_NOTIMP":                0,
				"response_per_rcode_NOTZONE":               0,
				"response_per_rcode_NXDOMAIN":              0,
				"response_per_rcode_NXRRSET":               0,
				"response_per_rcode_REFUSED":               21,
				"response_per_rcode_SERVFAIL":              21,
				"response_per_rcode_YXDOMAIN":              0,
				"response_per_rcode_YXRRSET":               0,
				"response_per_rcode_other":                 0,
				"response_total":                           61,
				"ya.ru._request_per_ip_family_v4":          21,
				"ya.ru._request_per_ip_family_v6":          0,
				"ya.ru._request_per_proto_tcp":             0,
				"ya.ru._request_per_proto_udp":             21,
				"ya.ru._request_per_status_dropped":        0,
				"ya.ru._request_per_status_processed":      0,
				"ya.ru._request_per_type_A":                7,
				"ya.ru._request_per_type_AAAA":             7,
				"ya.ru._request_per_type_ANY":              0,
				"ya.ru._request_per_type_CNAME":            0,
				"ya.ru._request_per_type_DNSKEY":           0,
				"ya.ru._request_per_type_DS":               0,
				"ya.ru._request_per_type_IXFR":             0,
				"ya.ru._request_per_type_MX":               7,
				"ya.ru._request_per_type_NS":               0,
				"ya.ru._request_per_type_NSEC":             0,
				"ya.ru._request_per_type_NSEC3":            0,
				"ya.ru._request_per_type_PTR":              0,
				"ya.ru._request_per_type_RRSIG":            0,
				"ya.ru._request_per_type_SOA":              0,
				"ya.ru._request_per_type_SRV":              0,
				"ya.ru._request_per_type_TXT":              0,
				"ya.ru._request_per_type_other":            0,
				"ya.ru._request_total":                     21,
				"ya.ru._response_per_rcode_BADALG":         0,
				"ya.ru._response_per_rcode_BADCOOKIE":      0,
				"ya.ru._response_per_rcode_BADKEY":         0,
				"ya.ru._response_per_rcode_BADMODE":        0,
				"ya.ru._response_per_rcode_BADNAME":        0,
				"ya.ru._response_per_rcode_BADSIG":         0,
				"ya.ru._response_per_rcode_BADTIME":        0,
				"ya.ru._response_per_rcode_BADTRUNC":       0,
				"ya.ru._response_per_rcode_FORMERR":        0,
				"ya.ru._response_per_rcode_NOERROR":        0,
				"ya.ru._response_per_rcode_NOTAUTH":        0,
				"ya.ru._response_per_rcode_NOTIMP":         0,
				"ya.ru._response_per_rcode_NOTZONE":        0,
				"ya.ru._response_per_rcode_NXDOMAIN":       0,
				"ya.ru._response_per_rcode_NXRRSET":        0,
				"ya.ru._response_per_rcode_REFUSED":        0,
				"ya.ru._response_per_rcode_SERVFAIL":       21,
				"ya.ru._response_per_rcode_YXDOMAIN":       0,
				"ya.ru._response_per_rcode_YXRRSET":        0,
				"ya.ru._response_per_rcode_other":          0,
				"ya.ru._response_total":                    21,
			}

			assert.Equal(t, expected, job.Collect())
		})
	}
}

func TestCoreDNS_CollectNoLoad(t *testing.T) {
	tests := []struct {
		name string
		data []byte
	}{
		{"version 1.6.9", dataVer169NoLoad},
		{"version 1.7.0", dataVer170NoLoad},
	}
	for _, testNoLoad := range tests {
		t.Run(testNoLoad.name, func(t *testing.T) {
			ts := httptest.NewServer(
				http.HandlerFunc(
					func(w http.ResponseWriter, r *http.Request) {
						_, _ = w.Write(testNoLoad.data)
					}))
			defer ts.Close()

			job := New()
			job.URL = ts.URL + "/metrics"
			job.PerServerStats.Includes = []string{"glob:*"}
			job.PerZoneStats.Includes = []string{"glob:*"}
			require.NoError(t, job.Init())
			require.NoError(t, job.Check())

			expected := map[string]int64{
				"no_matching_zone_dropped_total": 0,
				"panic_total":                    99,
				"request_per_ip_family_v4":       0,
				"request_per_ip_family_v6":       0,
				"request_per_proto_tcp":          0,
				"request_per_proto_udp":          0,
				"request_per_status_dropped":     0,
				"request_per_status_processed":   0,
				"request_per_type_A":             0,
				"request_per_type_AAAA":          0,
				"request_per_type_ANY":           0,
				"request_per_type_CNAME":         0,
				"request_per_type_DNSKEY":        0,
				"request_per_type_DS":            0,
				"request_per_type_IXFR":          0,
				"request_per_type_MX":            0,
				"request_per_type_NS":            0,
				"request_per_type_NSEC":          0,
				"request_per_type_NSEC3":         0,
				"request_per_type_PTR":           0,
				"request_per_type_RRSIG":         0,
				"request_per_type_SOA":           0,
				"request_per_type_SRV":           0,
				"request_per_type_TXT":           0,
				"request_per_type_other":         0,
				"request_total":                  0,
				"response_per_rcode_BADALG":      0,
				"response_per_rcode_BADCOOKIE":   0,
				"response_per_rcode_BADKEY":      0,
				"response_per_rcode_BADMODE":     0,
				"response_per_rcode_BADNAME":     0,
				"response_per_rcode_BADSIG":      0,
				"response_per_rcode_BADTIME":     0,
				"response_per_rcode_BADTRUNC":    0,
				"response_per_rcode_FORMERR":     0,
				"response_per_rcode_NOERROR":     0,
				"response_per_rcode_NOTAUTH":     0,
				"response_per_rcode_NOTIMP":      0,
				"response_per_rcode_NOTZONE":     0,
				"response_per_rcode_NXDOMAIN":    0,
				"response_per_rcode_NXRRSET":     0,
				"response_per_rcode_REFUSED":     0,
				"response_per_rcode_SERVFAIL":    0,
				"response_per_rcode_YXDOMAIN":    0,
				"response_per_rcode_YXRRSET":     0,
				"response_per_rcode_other":       0,
				"response_total":                 0,
			}

			assert.Equal(t, expected, job.Collect())
		})
	}

}

func TestCoreDNS_InvalidData(t *testing.T) {
	ts := httptest.NewServer(
		http.HandlerFunc(
			func(w http.ResponseWriter, r *http.Request) {
				_, _ = w.Write([]byte("hello and goodbye"))
			}))
	defer ts.Close()

	job := New()
	job.URL = ts.URL + "/metrics"
	require.NoError(t, job.Init())
	assert.Error(t, job.Check())
}

func TestCoreDNS_404(t *testing.T) {
	ts := httptest.NewServer(
		http.HandlerFunc(
			func(w http.ResponseWriter, r *http.Request) {
				w.WriteHeader(http.StatusNotFound)
			}))
	defer ts.Close()

	job := New()
	job.URL = ts.URL + "/metrics"
	require.NoError(t, job.Init())
	assert.Error(t, job.Check())
}

func TestCoreDNS_CollectNoVersion(t *testing.T) {
	ts := httptest.NewServer(
		http.HandlerFunc(
			func(w http.ResponseWriter, r *http.Request) {
				_, _ = w.Write(dataNoLoadNoVersion)
			}))
	defer ts.Close()

	job := New()
	job.URL = ts.URL + "/metrics"
	job.PerServerStats.Includes = []string{"glob:*"}
	job.PerZoneStats.Includes = []string{"glob:*"}
	require.NoError(t, job.Init())
	require.Error(t, job.Check())

	assert.Nil(t, job.Collect())
}