github.com/netdata/go.d.plugin@v0.58.1/modules/coredns/coredns_test.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package coredns 4 5 import ( 6 "net/http" 7 "net/http/httptest" 8 "os" 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 var ( 16 testNoLoad169, _ = os.ReadFile("testdata/version169/no_load.txt") 17 testSomeLoad169, _ = os.ReadFile("testdata/version169/some_load.txt") 18 testNoLoad170, _ = os.ReadFile("testdata/version170/no_load.txt") 19 testSomeLoad170, _ = os.ReadFile("testdata/version170/some_load.txt") 20 testNoLoadNoVersion, _ = os.ReadFile("testdata/no_version/no_load.txt") 21 ) 22 23 func TestNew(t *testing.T) { 24 job := New() 25 26 assert.IsType(t, (*CoreDNS)(nil), job) 27 assert.Equal(t, defaultURL, job.URL) 28 assert.Equal(t, defaultHTTPTimeout, job.Timeout.Duration) 29 } 30 31 func TestCoreDNS_Charts(t *testing.T) { assert.NotNil(t, New().Charts()) } 32 33 func TestCoreDNS_Cleanup(t *testing.T) { New().Cleanup() } 34 35 func TestCoreDNS_Init(t *testing.T) { assert.True(t, New().Init()) } 36 37 func TestCoreDNS_InitNG(t *testing.T) { 38 job := New() 39 job.URL = "" 40 assert.False(t, job.Init()) 41 } 42 43 func TestCoreDNS_Check(t *testing.T) { 44 tests := []struct { 45 name string 46 data []byte 47 }{ 48 {"version 1.6.9", testNoLoad169}, 49 {"version 1.7.0", testNoLoad170}, 50 } 51 for _, testNoLoad := range tests { 52 t.Run(testNoLoad.name, func(t *testing.T) { 53 54 ts := httptest.NewServer( 55 http.HandlerFunc( 56 func(w http.ResponseWriter, r *http.Request) { 57 _, _ = w.Write(testNoLoad.data) 58 })) 59 defer ts.Close() 60 61 job := New() 62 job.URL = ts.URL + "/metrics" 63 require.True(t, job.Init()) 64 assert.True(t, job.Check()) 65 }) 66 } 67 } 68 69 func TestCoreDNS_CheckNG(t *testing.T) { 70 job := New() 71 job.URL = "http://127.0.0.1:38001/metrics" 72 require.True(t, job.Init()) 73 assert.False(t, job.Check()) 74 } 75 76 func TestCoreDNS_Collect(t *testing.T) { 77 tests := []struct { 78 name string 79 data []byte 80 }{ 81 {"version 1.6.9", testSomeLoad169}, 82 {"version 1.7.0", testSomeLoad170}, 83 } 84 for _, testSomeLoad := range tests { 85 t.Run(testSomeLoad.name, func(t *testing.T) { 86 87 ts := httptest.NewServer( 88 http.HandlerFunc( 89 func(w http.ResponseWriter, r *http.Request) { 90 _, _ = w.Write(testSomeLoad.data) 91 })) 92 defer ts.Close() 93 94 job := New() 95 job.URL = ts.URL + "/metrics" 96 job.PerServerStats.Includes = []string{"glob:*"} 97 job.PerZoneStats.Includes = []string{"glob:*"} 98 require.True(t, job.Init()) 99 require.True(t, job.Check()) 100 101 expected := map[string]int64{ 102 "coredns.io._request_per_ip_family_v4": 19, 103 "coredns.io._request_per_ip_family_v6": 0, 104 "coredns.io._request_per_proto_tcp": 0, 105 "coredns.io._request_per_proto_udp": 19, 106 "coredns.io._request_per_status_dropped": 0, 107 "coredns.io._request_per_status_processed": 0, 108 "coredns.io._request_per_type_A": 6, 109 "coredns.io._request_per_type_AAAA": 6, 110 "coredns.io._request_per_type_ANY": 0, 111 "coredns.io._request_per_type_CNAME": 0, 112 "coredns.io._request_per_type_DNSKEY": 0, 113 "coredns.io._request_per_type_DS": 0, 114 "coredns.io._request_per_type_IXFR": 0, 115 "coredns.io._request_per_type_MX": 7, 116 "coredns.io._request_per_type_NS": 0, 117 "coredns.io._request_per_type_NSEC": 0, 118 "coredns.io._request_per_type_NSEC3": 0, 119 "coredns.io._request_per_type_PTR": 0, 120 "coredns.io._request_per_type_RRSIG": 0, 121 "coredns.io._request_per_type_SOA": 0, 122 "coredns.io._request_per_type_SRV": 0, 123 "coredns.io._request_per_type_TXT": 0, 124 "coredns.io._request_per_type_other": 0, 125 "coredns.io._request_total": 19, 126 "coredns.io._response_per_rcode_BADALG": 0, 127 "coredns.io._response_per_rcode_BADCOOKIE": 0, 128 "coredns.io._response_per_rcode_BADKEY": 0, 129 "coredns.io._response_per_rcode_BADMODE": 0, 130 "coredns.io._response_per_rcode_BADNAME": 0, 131 "coredns.io._response_per_rcode_BADSIG": 0, 132 "coredns.io._response_per_rcode_BADTIME": 0, 133 "coredns.io._response_per_rcode_BADTRUNC": 0, 134 "coredns.io._response_per_rcode_FORMERR": 0, 135 "coredns.io._response_per_rcode_NOERROR": 19, 136 "coredns.io._response_per_rcode_NOTAUTH": 0, 137 "coredns.io._response_per_rcode_NOTIMP": 0, 138 "coredns.io._response_per_rcode_NOTZONE": 0, 139 "coredns.io._response_per_rcode_NXDOMAIN": 0, 140 "coredns.io._response_per_rcode_NXRRSET": 0, 141 "coredns.io._response_per_rcode_REFUSED": 0, 142 "coredns.io._response_per_rcode_SERVFAIL": 0, 143 "coredns.io._response_per_rcode_YXDOMAIN": 0, 144 "coredns.io._response_per_rcode_YXRRSET": 0, 145 "coredns.io._response_per_rcode_other": 0, 146 "coredns.io._response_total": 19, 147 "dns://:53_request_per_ip_family_v4": 15, 148 "dns://:53_request_per_ip_family_v6": 0, 149 "dns://:53_request_per_proto_tcp": 0, 150 "dns://:53_request_per_proto_udp": 15, 151 "dns://:53_request_per_status_dropped": 9, 152 "dns://:53_request_per_status_processed": 6, 153 "dns://:53_request_per_type_A": 5, 154 "dns://:53_request_per_type_AAAA": 5, 155 "dns://:53_request_per_type_ANY": 0, 156 "dns://:53_request_per_type_CNAME": 0, 157 "dns://:53_request_per_type_DNSKEY": 0, 158 "dns://:53_request_per_type_DS": 0, 159 "dns://:53_request_per_type_IXFR": 0, 160 "dns://:53_request_per_type_MX": 5, 161 "dns://:53_request_per_type_NS": 0, 162 "dns://:53_request_per_type_NSEC": 0, 163 "dns://:53_request_per_type_NSEC3": 0, 164 "dns://:53_request_per_type_PTR": 0, 165 "dns://:53_request_per_type_RRSIG": 0, 166 "dns://:53_request_per_type_SOA": 0, 167 "dns://:53_request_per_type_SRV": 0, 168 "dns://:53_request_per_type_TXT": 0, 169 "dns://:53_request_per_type_other": 0, 170 "dns://:53_request_total": 15, 171 "dns://:53_response_per_rcode_BADALG": 0, 172 "dns://:53_response_per_rcode_BADCOOKIE": 0, 173 "dns://:53_response_per_rcode_BADKEY": 0, 174 "dns://:53_response_per_rcode_BADMODE": 0, 175 "dns://:53_response_per_rcode_BADNAME": 0, 176 "dns://:53_response_per_rcode_BADSIG": 0, 177 "dns://:53_response_per_rcode_BADTIME": 0, 178 "dns://:53_response_per_rcode_BADTRUNC": 0, 179 "dns://:53_response_per_rcode_FORMERR": 0, 180 "dns://:53_response_per_rcode_NOERROR": 6, 181 "dns://:53_response_per_rcode_NOTAUTH": 0, 182 "dns://:53_response_per_rcode_NOTIMP": 0, 183 "dns://:53_response_per_rcode_NOTZONE": 0, 184 "dns://:53_response_per_rcode_NXDOMAIN": 0, 185 "dns://:53_response_per_rcode_NXRRSET": 0, 186 "dns://:53_response_per_rcode_REFUSED": 0, 187 "dns://:53_response_per_rcode_SERVFAIL": 9, 188 "dns://:53_response_per_rcode_YXDOMAIN": 0, 189 "dns://:53_response_per_rcode_YXRRSET": 0, 190 "dns://:53_response_per_rcode_other": 0, 191 "dns://:53_response_total": 15, 192 "dns://:54_request_per_ip_family_v4": 25, 193 "dns://:54_request_per_ip_family_v6": 0, 194 "dns://:54_request_per_proto_tcp": 0, 195 "dns://:54_request_per_proto_udp": 25, 196 "dns://:54_request_per_status_dropped": 12, 197 "dns://:54_request_per_status_processed": 13, 198 "dns://:54_request_per_type_A": 8, 199 "dns://:54_request_per_type_AAAA": 8, 200 "dns://:54_request_per_type_ANY": 0, 201 "dns://:54_request_per_type_CNAME": 0, 202 "dns://:54_request_per_type_DNSKEY": 0, 203 "dns://:54_request_per_type_DS": 0, 204 "dns://:54_request_per_type_IXFR": 0, 205 "dns://:54_request_per_type_MX": 9, 206 "dns://:54_request_per_type_NS": 0, 207 "dns://:54_request_per_type_NSEC": 0, 208 "dns://:54_request_per_type_NSEC3": 0, 209 "dns://:54_request_per_type_PTR": 0, 210 "dns://:54_request_per_type_RRSIG": 0, 211 "dns://:54_request_per_type_SOA": 0, 212 "dns://:54_request_per_type_SRV": 0, 213 "dns://:54_request_per_type_TXT": 0, 214 "dns://:54_request_per_type_other": 0, 215 "dns://:54_request_total": 25, 216 "dns://:54_response_per_rcode_BADALG": 0, 217 "dns://:54_response_per_rcode_BADCOOKIE": 0, 218 "dns://:54_response_per_rcode_BADKEY": 0, 219 "dns://:54_response_per_rcode_BADMODE": 0, 220 "dns://:54_response_per_rcode_BADNAME": 0, 221 "dns://:54_response_per_rcode_BADSIG": 0, 222 "dns://:54_response_per_rcode_BADTIME": 0, 223 "dns://:54_response_per_rcode_BADTRUNC": 0, 224 "dns://:54_response_per_rcode_FORMERR": 0, 225 "dns://:54_response_per_rcode_NOERROR": 13, 226 "dns://:54_response_per_rcode_NOTAUTH": 0, 227 "dns://:54_response_per_rcode_NOTIMP": 0, 228 "dns://:54_response_per_rcode_NOTZONE": 0, 229 "dns://:54_response_per_rcode_NXDOMAIN": 0, 230 "dns://:54_response_per_rcode_NXRRSET": 0, 231 "dns://:54_response_per_rcode_REFUSED": 0, 232 "dns://:54_response_per_rcode_SERVFAIL": 12, 233 "dns://:54_response_per_rcode_YXDOMAIN": 0, 234 "dns://:54_response_per_rcode_YXRRSET": 0, 235 "dns://:54_response_per_rcode_other": 0, 236 "dns://:54_response_total": 25, 237 "dropped_request_per_ip_family_v4": 42, 238 "dropped_request_per_ip_family_v6": 0, 239 "dropped_request_per_proto_tcp": 0, 240 "dropped_request_per_proto_udp": 42, 241 "dropped_request_per_status_dropped": 0, 242 "dropped_request_per_status_processed": 0, 243 "dropped_request_per_type_A": 14, 244 "dropped_request_per_type_AAAA": 14, 245 "dropped_request_per_type_ANY": 0, 246 "dropped_request_per_type_CNAME": 0, 247 "dropped_request_per_type_DNSKEY": 0, 248 "dropped_request_per_type_DS": 0, 249 "dropped_request_per_type_IXFR": 0, 250 "dropped_request_per_type_MX": 14, 251 "dropped_request_per_type_NS": 0, 252 "dropped_request_per_type_NSEC": 0, 253 "dropped_request_per_type_NSEC3": 0, 254 "dropped_request_per_type_PTR": 0, 255 "dropped_request_per_type_RRSIG": 0, 256 "dropped_request_per_type_SOA": 0, 257 "dropped_request_per_type_SRV": 0, 258 "dropped_request_per_type_TXT": 0, 259 "dropped_request_per_type_other": 0, 260 "dropped_request_total": 42, 261 "dropped_response_per_rcode_BADALG": 0, 262 "dropped_response_per_rcode_BADCOOKIE": 0, 263 "dropped_response_per_rcode_BADKEY": 0, 264 "dropped_response_per_rcode_BADMODE": 0, 265 "dropped_response_per_rcode_BADNAME": 0, 266 "dropped_response_per_rcode_BADSIG": 0, 267 "dropped_response_per_rcode_BADTIME": 0, 268 "dropped_response_per_rcode_BADTRUNC": 0, 269 "dropped_response_per_rcode_FORMERR": 0, 270 "dropped_response_per_rcode_NOERROR": 0, 271 "dropped_response_per_rcode_NOTAUTH": 0, 272 "dropped_response_per_rcode_NOTIMP": 0, 273 "dropped_response_per_rcode_NOTZONE": 0, 274 "dropped_response_per_rcode_NXDOMAIN": 0, 275 "dropped_response_per_rcode_NXRRSET": 0, 276 "dropped_response_per_rcode_REFUSED": 21, 277 "dropped_response_per_rcode_SERVFAIL": 21, 278 "dropped_response_per_rcode_YXDOMAIN": 0, 279 "dropped_response_per_rcode_YXRRSET": 0, 280 "dropped_response_per_rcode_other": 0, 281 "dropped_response_total": 42, 282 "empty_request_per_ip_family_v4": 21, 283 "empty_request_per_ip_family_v6": 0, 284 "empty_request_per_proto_tcp": 0, 285 "empty_request_per_proto_udp": 21, 286 "empty_request_per_status_dropped": 21, 287 "empty_request_per_status_processed": 0, 288 "empty_request_per_type_A": 7, 289 "empty_request_per_type_AAAA": 7, 290 "empty_request_per_type_ANY": 0, 291 "empty_request_per_type_CNAME": 0, 292 "empty_request_per_type_DNSKEY": 0, 293 "empty_request_per_type_DS": 0, 294 "empty_request_per_type_IXFR": 0, 295 "empty_request_per_type_MX": 7, 296 "empty_request_per_type_NS": 0, 297 "empty_request_per_type_NSEC": 0, 298 "empty_request_per_type_NSEC3": 0, 299 "empty_request_per_type_PTR": 0, 300 "empty_request_per_type_RRSIG": 0, 301 "empty_request_per_type_SOA": 0, 302 "empty_request_per_type_SRV": 0, 303 "empty_request_per_type_TXT": 0, 304 "empty_request_per_type_other": 0, 305 "empty_request_total": 21, 306 "empty_response_per_rcode_BADALG": 0, 307 "empty_response_per_rcode_BADCOOKIE": 0, 308 "empty_response_per_rcode_BADKEY": 0, 309 "empty_response_per_rcode_BADMODE": 0, 310 "empty_response_per_rcode_BADNAME": 0, 311 "empty_response_per_rcode_BADSIG": 0, 312 "empty_response_per_rcode_BADTIME": 0, 313 "empty_response_per_rcode_BADTRUNC": 0, 314 "empty_response_per_rcode_FORMERR": 0, 315 "empty_response_per_rcode_NOERROR": 0, 316 "empty_response_per_rcode_NOTAUTH": 0, 317 "empty_response_per_rcode_NOTIMP": 0, 318 "empty_response_per_rcode_NOTZONE": 0, 319 "empty_response_per_rcode_NXDOMAIN": 0, 320 "empty_response_per_rcode_NXRRSET": 0, 321 "empty_response_per_rcode_REFUSED": 21, 322 "empty_response_per_rcode_SERVFAIL": 0, 323 "empty_response_per_rcode_YXDOMAIN": 0, 324 "empty_response_per_rcode_YXRRSET": 0, 325 "empty_response_per_rcode_other": 0, 326 "empty_response_total": 21, 327 "no_matching_zone_dropped_total": 21, 328 "panic_total": 0, 329 "request_per_ip_family_v4": 61, 330 "request_per_ip_family_v6": 0, 331 "request_per_proto_tcp": 0, 332 "request_per_proto_udp": 61, 333 "request_per_status_dropped": 42, 334 "request_per_status_processed": 19, 335 "request_per_type_A": 20, 336 "request_per_type_AAAA": 20, 337 "request_per_type_ANY": 0, 338 "request_per_type_CNAME": 0, 339 "request_per_type_DNSKEY": 0, 340 "request_per_type_DS": 0, 341 "request_per_type_IXFR": 0, 342 "request_per_type_MX": 21, 343 "request_per_type_NS": 0, 344 "request_per_type_NSEC": 0, 345 "request_per_type_NSEC3": 0, 346 "request_per_type_PTR": 0, 347 "request_per_type_RRSIG": 0, 348 "request_per_type_SOA": 0, 349 "request_per_type_SRV": 0, 350 "request_per_type_TXT": 0, 351 "request_per_type_other": 0, 352 "request_total": 61, 353 "response_per_rcode_BADALG": 0, 354 "response_per_rcode_BADCOOKIE": 0, 355 "response_per_rcode_BADKEY": 0, 356 "response_per_rcode_BADMODE": 0, 357 "response_per_rcode_BADNAME": 0, 358 "response_per_rcode_BADSIG": 0, 359 "response_per_rcode_BADTIME": 0, 360 "response_per_rcode_BADTRUNC": 0, 361 "response_per_rcode_FORMERR": 0, 362 "response_per_rcode_NOERROR": 19, 363 "response_per_rcode_NOTAUTH": 0, 364 "response_per_rcode_NOTIMP": 0, 365 "response_per_rcode_NOTZONE": 0, 366 "response_per_rcode_NXDOMAIN": 0, 367 "response_per_rcode_NXRRSET": 0, 368 "response_per_rcode_REFUSED": 21, 369 "response_per_rcode_SERVFAIL": 21, 370 "response_per_rcode_YXDOMAIN": 0, 371 "response_per_rcode_YXRRSET": 0, 372 "response_per_rcode_other": 0, 373 "response_total": 61, 374 "ya.ru._request_per_ip_family_v4": 21, 375 "ya.ru._request_per_ip_family_v6": 0, 376 "ya.ru._request_per_proto_tcp": 0, 377 "ya.ru._request_per_proto_udp": 21, 378 "ya.ru._request_per_status_dropped": 0, 379 "ya.ru._request_per_status_processed": 0, 380 "ya.ru._request_per_type_A": 7, 381 "ya.ru._request_per_type_AAAA": 7, 382 "ya.ru._request_per_type_ANY": 0, 383 "ya.ru._request_per_type_CNAME": 0, 384 "ya.ru._request_per_type_DNSKEY": 0, 385 "ya.ru._request_per_type_DS": 0, 386 "ya.ru._request_per_type_IXFR": 0, 387 "ya.ru._request_per_type_MX": 7, 388 "ya.ru._request_per_type_NS": 0, 389 "ya.ru._request_per_type_NSEC": 0, 390 "ya.ru._request_per_type_NSEC3": 0, 391 "ya.ru._request_per_type_PTR": 0, 392 "ya.ru._request_per_type_RRSIG": 0, 393 "ya.ru._request_per_type_SOA": 0, 394 "ya.ru._request_per_type_SRV": 0, 395 "ya.ru._request_per_type_TXT": 0, 396 "ya.ru._request_per_type_other": 0, 397 "ya.ru._request_total": 21, 398 "ya.ru._response_per_rcode_BADALG": 0, 399 "ya.ru._response_per_rcode_BADCOOKIE": 0, 400 "ya.ru._response_per_rcode_BADKEY": 0, 401 "ya.ru._response_per_rcode_BADMODE": 0, 402 "ya.ru._response_per_rcode_BADNAME": 0, 403 "ya.ru._response_per_rcode_BADSIG": 0, 404 "ya.ru._response_per_rcode_BADTIME": 0, 405 "ya.ru._response_per_rcode_BADTRUNC": 0, 406 "ya.ru._response_per_rcode_FORMERR": 0, 407 "ya.ru._response_per_rcode_NOERROR": 0, 408 "ya.ru._response_per_rcode_NOTAUTH": 0, 409 "ya.ru._response_per_rcode_NOTIMP": 0, 410 "ya.ru._response_per_rcode_NOTZONE": 0, 411 "ya.ru._response_per_rcode_NXDOMAIN": 0, 412 "ya.ru._response_per_rcode_NXRRSET": 0, 413 "ya.ru._response_per_rcode_REFUSED": 0, 414 "ya.ru._response_per_rcode_SERVFAIL": 21, 415 "ya.ru._response_per_rcode_YXDOMAIN": 0, 416 "ya.ru._response_per_rcode_YXRRSET": 0, 417 "ya.ru._response_per_rcode_other": 0, 418 "ya.ru._response_total": 21, 419 } 420 421 assert.Equal(t, expected, job.Collect()) 422 }) 423 } 424 } 425 426 func TestCoreDNS_CollectNoLoad(t *testing.T) { 427 tests := []struct { 428 name string 429 data []byte 430 }{ 431 {"version 1.6.9", testNoLoad169}, 432 {"version 1.7.0", testNoLoad170}, 433 } 434 for _, testNoLoad := range tests { 435 t.Run(testNoLoad.name, func(t *testing.T) { 436 ts := httptest.NewServer( 437 http.HandlerFunc( 438 func(w http.ResponseWriter, r *http.Request) { 439 _, _ = w.Write(testNoLoad.data) 440 })) 441 defer ts.Close() 442 443 job := New() 444 job.URL = ts.URL + "/metrics" 445 job.PerServerStats.Includes = []string{"glob:*"} 446 job.PerZoneStats.Includes = []string{"glob:*"} 447 require.True(t, job.Init()) 448 require.True(t, job.Check()) 449 450 expected := map[string]int64{ 451 "no_matching_zone_dropped_total": 0, 452 "panic_total": 99, 453 "request_per_ip_family_v4": 0, 454 "request_per_ip_family_v6": 0, 455 "request_per_proto_tcp": 0, 456 "request_per_proto_udp": 0, 457 "request_per_status_dropped": 0, 458 "request_per_status_processed": 0, 459 "request_per_type_A": 0, 460 "request_per_type_AAAA": 0, 461 "request_per_type_ANY": 0, 462 "request_per_type_CNAME": 0, 463 "request_per_type_DNSKEY": 0, 464 "request_per_type_DS": 0, 465 "request_per_type_IXFR": 0, 466 "request_per_type_MX": 0, 467 "request_per_type_NS": 0, 468 "request_per_type_NSEC": 0, 469 "request_per_type_NSEC3": 0, 470 "request_per_type_PTR": 0, 471 "request_per_type_RRSIG": 0, 472 "request_per_type_SOA": 0, 473 "request_per_type_SRV": 0, 474 "request_per_type_TXT": 0, 475 "request_per_type_other": 0, 476 "request_total": 0, 477 "response_per_rcode_BADALG": 0, 478 "response_per_rcode_BADCOOKIE": 0, 479 "response_per_rcode_BADKEY": 0, 480 "response_per_rcode_BADMODE": 0, 481 "response_per_rcode_BADNAME": 0, 482 "response_per_rcode_BADSIG": 0, 483 "response_per_rcode_BADTIME": 0, 484 "response_per_rcode_BADTRUNC": 0, 485 "response_per_rcode_FORMERR": 0, 486 "response_per_rcode_NOERROR": 0, 487 "response_per_rcode_NOTAUTH": 0, 488 "response_per_rcode_NOTIMP": 0, 489 "response_per_rcode_NOTZONE": 0, 490 "response_per_rcode_NXDOMAIN": 0, 491 "response_per_rcode_NXRRSET": 0, 492 "response_per_rcode_REFUSED": 0, 493 "response_per_rcode_SERVFAIL": 0, 494 "response_per_rcode_YXDOMAIN": 0, 495 "response_per_rcode_YXRRSET": 0, 496 "response_per_rcode_other": 0, 497 "response_total": 0, 498 } 499 500 assert.Equal(t, expected, job.Collect()) 501 }) 502 } 503 504 } 505 506 func TestCoreDNS_InvalidData(t *testing.T) { 507 ts := httptest.NewServer( 508 http.HandlerFunc( 509 func(w http.ResponseWriter, r *http.Request) { 510 _, _ = w.Write([]byte("hello and goodbye")) 511 })) 512 defer ts.Close() 513 514 job := New() 515 job.URL = ts.URL + "/metrics" 516 require.True(t, job.Init()) 517 assert.False(t, job.Check()) 518 } 519 520 func TestCoreDNS_404(t *testing.T) { 521 ts := httptest.NewServer( 522 http.HandlerFunc( 523 func(w http.ResponseWriter, r *http.Request) { 524 w.WriteHeader(http.StatusNotFound) 525 })) 526 defer ts.Close() 527 528 job := New() 529 job.URL = ts.URL + "/metrics" 530 require.True(t, job.Init()) 531 assert.False(t, job.Check()) 532 } 533 534 func TestCoreDNS_CollectNoVersion(t *testing.T) { 535 ts := httptest.NewServer( 536 http.HandlerFunc( 537 func(w http.ResponseWriter, r *http.Request) { 538 _, _ = w.Write(testNoLoadNoVersion) 539 })) 540 defer ts.Close() 541 542 job := New() 543 job.URL = ts.URL + "/metrics" 544 job.PerServerStats.Includes = []string{"glob:*"} 545 job.PerZoneStats.Includes = []string{"glob:*"} 546 require.True(t, job.Init()) 547 require.False(t, job.Check()) 548 549 assert.Nil(t, job.Collect()) 550 }