github.com/netdata/go.d.plugin@v0.58.1/modules/unbound/unbound_test.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package unbound 4 5 import ( 6 "bufio" 7 "bytes" 8 "errors" 9 "fmt" 10 "os" 11 "strings" 12 "testing" 13 14 "github.com/netdata/go.d.plugin/pkg/socket" 15 "github.com/netdata/go.d.plugin/pkg/tlscfg" 16 17 "github.com/netdata/go.d.plugin/agent/module" 18 "github.com/stretchr/testify/assert" 19 "github.com/stretchr/testify/require" 20 ) 21 22 var ( 23 commonStatsData, _ = os.ReadFile("testdata/stats/common.txt") 24 extStatsData, _ = os.ReadFile("testdata/stats/extended.txt") 25 lifeCycleCumulativeData1, _ = os.ReadFile("testdata/stats/lifecycle/cumulative/extended1.txt") 26 lifeCycleCumulativeData2, _ = os.ReadFile("testdata/stats/lifecycle/cumulative/extended2.txt") 27 lifeCycleCumulativeData3, _ = os.ReadFile("testdata/stats/lifecycle/cumulative/extended3.txt") 28 lifeCycleResetData1, _ = os.ReadFile("testdata/stats/lifecycle/reset/extended1.txt") 29 lifeCycleResetData2, _ = os.ReadFile("testdata/stats/lifecycle/reset/extended2.txt") 30 lifeCycleResetData3, _ = os.ReadFile("testdata/stats/lifecycle/reset/extended3.txt") 31 ) 32 33 func Test_readTestData(t *testing.T) { 34 assert.NotNil(t, commonStatsData) 35 assert.NotNil(t, extStatsData) 36 assert.NotNil(t, lifeCycleCumulativeData1) 37 assert.NotNil(t, lifeCycleCumulativeData2) 38 assert.NotNil(t, lifeCycleCumulativeData3) 39 assert.NotNil(t, lifeCycleResetData1) 40 assert.NotNil(t, lifeCycleResetData2) 41 assert.NotNil(t, lifeCycleResetData3) 42 } 43 44 func nonTLSUnbound() *Unbound { 45 unbound := New() 46 unbound.ConfPath = "" 47 unbound.UseTLS = false 48 return unbound 49 } 50 51 func TestNew(t *testing.T) { 52 assert.Implements(t, (*module.Module)(nil), New()) 53 } 54 55 func TestUnbound_Init(t *testing.T) { 56 unbound := nonTLSUnbound() 57 58 assert.True(t, unbound.Init()) 59 } 60 61 func TestUnbound_Init_SetEverythingFromUnboundConf(t *testing.T) { 62 unbound := New() 63 unbound.ConfPath = "testdata/unbound.conf" 64 expectedConfig := Config{ 65 Address: "10.0.0.1:8954", 66 ConfPath: unbound.ConfPath, 67 Timeout: unbound.Timeout, 68 Cumulative: true, 69 UseTLS: false, 70 TLSConfig: tlscfg.TLSConfig{ 71 TLSCert: "/etc/unbound/unbound_control_other.pem", 72 TLSKey: "/etc/unbound/unbound_control_other.key", 73 InsecureSkipVerify: unbound.TLSConfig.InsecureSkipVerify, 74 }, 75 } 76 77 assert.True(t, unbound.Init()) 78 assert.Equal(t, expectedConfig, unbound.Config) 79 } 80 81 func TestUnbound_Init_DisabledInUnboundConf(t *testing.T) { 82 unbound := nonTLSUnbound() 83 unbound.ConfPath = "testdata/unbound_disabled.conf" 84 85 assert.False(t, unbound.Init()) 86 } 87 88 func TestUnbound_Init_HandleEmptyConfig(t *testing.T) { 89 unbound := nonTLSUnbound() 90 unbound.ConfPath = "testdata/unbound_empty.conf" 91 92 assert.True(t, unbound.Init()) 93 } 94 95 func TestUnbound_Init_HandleNonExistentConfig(t *testing.T) { 96 unbound := nonTLSUnbound() 97 unbound.ConfPath = "testdata/unbound_non_existent.conf" 98 99 assert.True(t, unbound.Init()) 100 } 101 102 func TestUnbound_Check(t *testing.T) { 103 unbound := nonTLSUnbound() 104 require.True(t, unbound.Init()) 105 unbound.client = mockUnboundClient{data: commonStatsData, err: false} 106 107 assert.True(t, unbound.Check()) 108 } 109 110 func TestUnbound_Check_ErrorDuringScrapingUnbound(t *testing.T) { 111 unbound := nonTLSUnbound() 112 require.True(t, unbound.Init()) 113 unbound.client = mockUnboundClient{err: true} 114 115 assert.False(t, unbound.Check()) 116 } 117 118 func TestUnbound_Cleanup(t *testing.T) { 119 New().Cleanup() 120 } 121 122 func TestUnbound_Charts(t *testing.T) { 123 unbound := nonTLSUnbound() 124 require.True(t, unbound.Init()) 125 126 assert.NotNil(t, unbound.Charts()) 127 } 128 129 func TestUnbound_Collect(t *testing.T) { 130 unbound := nonTLSUnbound() 131 require.True(t, unbound.Init()) 132 unbound.client = mockUnboundClient{data: commonStatsData, err: false} 133 134 collected := unbound.Collect() 135 assert.Equal(t, expectedCommon, collected) 136 testCharts(t, unbound, collected) 137 } 138 139 func TestUnbound_Collect_ExtendedStats(t *testing.T) { 140 unbound := nonTLSUnbound() 141 require.True(t, unbound.Init()) 142 unbound.client = mockUnboundClient{data: extStatsData, err: false} 143 144 collected := unbound.Collect() 145 assert.Equal(t, expectedExtended, collected) 146 testCharts(t, unbound, collected) 147 } 148 149 func TestUnbound_Collect_LifeCycleCumulativeExtendedStats(t *testing.T) { 150 tests := []struct { 151 input []byte 152 expected map[string]int64 153 }{ 154 {input: lifeCycleCumulativeData1, expected: expectedCumulative1}, 155 {input: lifeCycleCumulativeData2, expected: expectedCumulative2}, 156 {input: lifeCycleCumulativeData3, expected: expectedCumulative3}, 157 } 158 159 unbound := nonTLSUnbound() 160 unbound.Cumulative = true 161 require.True(t, unbound.Init()) 162 ubClient := &mockUnboundClient{err: false} 163 unbound.client = ubClient 164 165 var collected map[string]int64 166 for i, test := range tests { 167 t.Run(fmt.Sprintf("run %d", i+1), func(t *testing.T) { 168 ubClient.data = test.input 169 collected = unbound.Collect() 170 assert.Equal(t, test.expected, collected) 171 }) 172 } 173 174 testCharts(t, unbound, collected) 175 } 176 177 func TestUnbound_Collect_LifeCycleResetExtendedStats(t *testing.T) { 178 tests := []struct { 179 input []byte 180 expected map[string]int64 181 }{ 182 {input: lifeCycleResetData1, expected: expectedReset1}, 183 {input: lifeCycleResetData2, expected: expectedReset2}, 184 {input: lifeCycleResetData3, expected: expectedReset3}, 185 } 186 187 unbound := nonTLSUnbound() 188 unbound.Cumulative = false 189 require.True(t, unbound.Init()) 190 ubClient := &mockUnboundClient{err: false} 191 unbound.client = ubClient 192 193 var collected map[string]int64 194 for i, test := range tests { 195 t.Run(fmt.Sprintf("run %d", i+1), func(t *testing.T) { 196 ubClient.data = test.input 197 collected = unbound.Collect() 198 assert.Equal(t, test.expected, collected) 199 }) 200 } 201 202 testCharts(t, unbound, collected) 203 } 204 205 func TestUnbound_Collect_EmptyResponse(t *testing.T) { 206 unbound := nonTLSUnbound() 207 require.True(t, unbound.Init()) 208 unbound.client = mockUnboundClient{data: []byte{}, err: false} 209 210 assert.Nil(t, unbound.Collect()) 211 } 212 213 func TestUnbound_Collect_ErrorResponse(t *testing.T) { 214 unbound := nonTLSUnbound() 215 require.True(t, unbound.Init()) 216 unbound.client = mockUnboundClient{data: []byte("error unknown command 'unknown'"), err: false} 217 218 assert.Nil(t, unbound.Collect()) 219 } 220 221 func TestUnbound_Collect_ErrorOnSend(t *testing.T) { 222 unbound := nonTLSUnbound() 223 require.True(t, unbound.Init()) 224 unbound.client = mockUnboundClient{err: true} 225 226 assert.Nil(t, unbound.Collect()) 227 } 228 229 func TestUnbound_Collect_ErrorOnParseBadSyntax(t *testing.T) { 230 unbound := nonTLSUnbound() 231 require.True(t, unbound.Init()) 232 data := strings.Repeat("zk_avg_latency 0\nzk_min_latency 0\nzk_mix_latency 0\n", 10) 233 unbound.client = mockUnboundClient{data: []byte(data), err: false} 234 235 assert.Nil(t, unbound.Collect()) 236 } 237 238 type mockUnboundClient struct { 239 data []byte 240 err bool 241 } 242 243 func (m mockUnboundClient) Connect() error { 244 return nil 245 } 246 247 func (m mockUnboundClient) Disconnect() error { 248 return nil 249 } 250 251 func (m mockUnboundClient) Command(_ string, process socket.Processor) error { 252 if m.err { 253 return errors.New("mock send error") 254 } 255 s := bufio.NewScanner(bytes.NewReader(m.data)) 256 for s.Scan() { 257 process(s.Bytes()) 258 } 259 return nil 260 } 261 262 func testCharts(t *testing.T, unbound *Unbound, collected map[string]int64) { 263 t.Helper() 264 ensureChartsCreatedForEveryThread(t, unbound) 265 ensureExtendedChartsCreated(t, unbound) 266 ensureCollectedHasAllChartsDimsVarsIDs(t, unbound, collected) 267 } 268 269 func ensureChartsCreatedForEveryThread(t *testing.T, u *Unbound) { 270 for thread := range u.cache.threads { 271 for _, chart := range *threadCharts(thread, u.Cumulative) { 272 assert.Truef(t, u.Charts().Has(chart.ID), "chart '%s' is not created for '%s' thread", chart.ID, thread) 273 } 274 } 275 } 276 277 func ensureExtendedChartsCreated(t *testing.T, u *Unbound) { 278 if len(u.cache.answerRCode) == 0 { 279 return 280 } 281 for _, chart := range *extendedCharts(u.Cumulative) { 282 assert.Truef(t, u.Charts().Has(chart.ID), "chart '%s' is not added", chart.ID) 283 } 284 285 if chart := u.Charts().Get(queryTypeChart.ID); chart != nil { 286 for typ := range u.cache.queryType { 287 dimID := "num.query.type." + typ 288 assert.Truef(t, chart.HasDim(dimID), "chart '%s' has no dim for '%s' type, expected '%s'", chart.ID, typ, dimID) 289 } 290 } 291 if chart := u.Charts().Get(queryClassChart.ID); chart != nil { 292 for class := range u.cache.queryClass { 293 dimID := "num.query.class." + class 294 assert.Truef(t, chart.HasDim(dimID), "chart '%s' has no dim for '%s' class, expected '%s'", chart.ID, class, dimID) 295 } 296 } 297 if chart := u.Charts().Get(queryOpCodeChart.ID); chart != nil { 298 for opcode := range u.cache.queryOpCode { 299 dimID := "num.query.opcode." + opcode 300 assert.Truef(t, chart.HasDim(dimID), "chart '%s' has no dim for '%s' opcode, expected '%s'", chart.ID, opcode, dimID) 301 } 302 } 303 if chart := u.Charts().Get(answerRCodeChart.ID); chart != nil { 304 for rcode := range u.cache.answerRCode { 305 dimID := "num.answer.rcode." + rcode 306 assert.Truef(t, chart.HasDim(dimID), "chart '%s' has no dim for '%s' rcode, expected '%s'", chart.ID, rcode, dimID) 307 } 308 } 309 } 310 311 func ensureCollectedHasAllChartsDimsVarsIDs(t *testing.T, u *Unbound, collected map[string]int64) { 312 for _, chart := range *u.Charts() { 313 for _, dim := range chart.Dims { 314 if dim.ID == "mem.mod.ipsecmod" { 315 continue 316 } 317 _, ok := collected[dim.ID] 318 assert.Truef(t, ok, "collected metrics has no data for dim '%s' chart '%s'", dim.ID, chart.ID) 319 } 320 for _, v := range chart.Vars { 321 _, ok := collected[v.ID] 322 assert.Truef(t, ok, "collected metrics has no data for var '%s' chart '%s'", v.ID, chart.ID) 323 } 324 } 325 } 326 327 var ( 328 expectedCommon = map[string]int64{ 329 "thread0.num.cachehits": 21, 330 "thread0.num.cachemiss": 7, 331 "thread0.num.dnscrypt.cert": 0, 332 "thread0.num.dnscrypt.cleartext": 0, 333 "thread0.num.dnscrypt.crypted": 0, 334 "thread0.num.dnscrypt.malformed": 0, 335 "thread0.num.expired": 0, 336 "thread0.num.prefetch": 0, 337 "thread0.num.queries": 28, 338 "thread0.num.queries_ip_ratelimited": 0, 339 "thread0.num.recursivereplies": 7, 340 "thread0.num.zero_ttl": 0, 341 "thread0.recursion.time.avg": 1255, 342 "thread0.recursion.time.median": 480, 343 "thread0.requestlist.avg": 857, 344 "thread0.requestlist.current.all": 0, 345 "thread0.requestlist.current.user": 0, 346 "thread0.requestlist.exceeded": 0, 347 "thread0.requestlist.max": 6, 348 "thread0.requestlist.overwritten": 0, 349 "thread0.tcpusage": 0, 350 "thread1.num.cachehits": 13, 351 "thread1.num.cachemiss": 3, 352 "thread1.num.dnscrypt.cert": 0, 353 "thread1.num.dnscrypt.cleartext": 0, 354 "thread1.num.dnscrypt.crypted": 0, 355 "thread1.num.dnscrypt.malformed": 0, 356 "thread1.num.prefetch": 0, 357 "thread1.num.expired": 0, 358 "thread1.num.queries": 16, 359 "thread1.num.queries_ip_ratelimited": 0, 360 "thread1.num.recursivereplies": 3, 361 "thread1.num.zero_ttl": 0, 362 "thread1.recursion.time.avg": 93, 363 "thread1.recursion.time.median": 0, 364 "thread1.requestlist.avg": 0, 365 "thread1.requestlist.current.all": 0, 366 "thread1.requestlist.current.user": 0, 367 "thread1.requestlist.exceeded": 0, 368 "thread1.requestlist.max": 0, 369 "thread1.requestlist.overwritten": 0, 370 "thread1.tcpusage": 0, 371 "time.elapsed": 88, 372 "time.now": 1574094836, 373 "time.up": 88, 374 "total.num.cachehits": 34, 375 "total.num.cachemiss": 10, 376 "total.num.dnscrypt.cert": 0, 377 "total.num.dnscrypt.cleartext": 0, 378 "total.num.dnscrypt.crypted": 0, 379 "total.num.dnscrypt.malformed": 0, 380 "total.num.prefetch": 0, 381 "total.num.expired": 0, 382 "total.num.queries": 44, 383 "total.num.queries_ip_ratelimited": 0, 384 "total.num.recursivereplies": 10, 385 "total.num.zero_ttl": 0, 386 "total.recursion.time.avg": 907, 387 "total.recursion.time.median": 240, 388 "total.requestlist.avg": 600, 389 "total.requestlist.current.all": 0, 390 "total.requestlist.current.user": 0, 391 "total.requestlist.exceeded": 0, 392 "total.requestlist.max": 6, 393 "total.requestlist.overwritten": 0, 394 "total.tcpusage": 0, 395 } 396 397 expectedExtended = map[string]int64{ 398 "dnscrypt_nonce.cache.count": 0, 399 "dnscrypt_shared_secret.cache.count": 0, 400 "infra.cache.count": 205, 401 "key.cache.count": 9, 402 "mem.cache.dnscrypt_nonce": 0, 403 "mem.cache.dnscrypt_shared_secret": 0, 404 "mem.cache.message": 90357, 405 "mem.cache.rrset": 178642, 406 "mem.mod.iterator": 16588, 407 "mem.mod.respip": 0, 408 "mem.mod.subnet": 74504, 409 "mem.mod.validator": 81059, 410 "mem.streamwait": 0, 411 "msg.cache.count": 81, 412 "num.answer.bogus": 0, 413 "num.answer.rcode.FORMERR": 0, 414 "num.answer.rcode.NOERROR": 40, 415 "num.answer.rcode.NOTIMPL": 0, 416 "num.answer.rcode.NXDOMAIN": 4, 417 "num.answer.rcode.REFUSED": 0, 418 "num.answer.rcode.SERVFAIL": 0, 419 "num.answer.secure": 0, 420 "num.query.aggressive.NOERROR": 2, 421 "num.query.aggressive.NXDOMAIN": 0, 422 "num.query.authzone.down": 0, 423 "num.query.authzone.up": 0, 424 "num.query.class.IN": 44, 425 "num.query.dnscrypt.replay": 0, 426 "num.query.dnscrypt.shared_secret.cachemiss": 0, 427 "num.query.edns.DO": 0, 428 "num.query.edns.present": 0, 429 "num.query.flags.AA": 0, 430 "num.query.flags.AD": 0, 431 "num.query.flags.CD": 0, 432 "num.query.flags.QR": 0, 433 "num.query.flags.RA": 0, 434 "num.query.flags.RD": 44, 435 "num.query.flags.TC": 0, 436 "num.query.flags.Z": 0, 437 "num.query.ipv6": 39, 438 "num.query.opcode.QUERY": 44, 439 "num.query.ratelimited": 0, 440 "num.query.subnet": 0, 441 "num.query.subnet_cache": 0, 442 "num.query.tcp": 0, 443 "num.query.tcpout": 1, 444 "num.query.tls": 0, 445 "num.query.tls.resume": 0, 446 "num.query.type.A": 13, 447 "num.query.type.AAAA": 13, 448 "num.query.type.MX": 13, 449 "num.query.type.PTR": 5, 450 "num.rrset.bogus": 0, 451 "rrset.cache.count": 314, 452 "thread0.num.cachehits": 21, 453 "thread0.num.cachemiss": 7, 454 "thread0.num.dnscrypt.cert": 0, 455 "thread0.num.dnscrypt.cleartext": 0, 456 "thread0.num.dnscrypt.crypted": 0, 457 "thread0.num.dnscrypt.malformed": 0, 458 "thread0.num.expired": 0, 459 "thread0.num.prefetch": 0, 460 "thread0.num.queries": 28, 461 "thread0.num.queries_ip_ratelimited": 0, 462 "thread0.num.recursivereplies": 7, 463 "thread0.num.zero_ttl": 0, 464 "thread0.recursion.time.avg": 1255, 465 "thread0.recursion.time.median": 480, 466 "thread0.requestlist.avg": 857, 467 "thread0.requestlist.current.all": 0, 468 "thread0.requestlist.current.user": 0, 469 "thread0.requestlist.exceeded": 0, 470 "thread0.requestlist.max": 6, 471 "thread0.requestlist.overwritten": 0, 472 "thread0.tcpusage": 0, 473 "thread1.num.cachehits": 13, 474 "thread1.num.cachemiss": 3, 475 "thread1.num.dnscrypt.cert": 0, 476 "thread1.num.dnscrypt.cleartext": 0, 477 "thread1.num.dnscrypt.crypted": 0, 478 "thread1.num.dnscrypt.malformed": 0, 479 "thread1.num.prefetch": 0, 480 "thread1.num.expired": 0, 481 "thread1.num.queries": 16, 482 "thread1.num.queries_ip_ratelimited": 0, 483 "thread1.num.recursivereplies": 3, 484 "thread1.num.zero_ttl": 0, 485 "thread1.recursion.time.avg": 93, 486 "thread1.recursion.time.median": 0, 487 "thread1.requestlist.avg": 0, 488 "thread1.requestlist.current.all": 0, 489 "thread1.requestlist.current.user": 0, 490 "thread1.requestlist.exceeded": 0, 491 "thread1.requestlist.max": 0, 492 "thread1.requestlist.overwritten": 0, 493 "thread1.tcpusage": 0, 494 "time.elapsed": 88, 495 "time.now": 1574094836, 496 "time.up": 88, 497 "total.num.cachehits": 34, 498 "total.num.cachemiss": 10, 499 "total.num.dnscrypt.cert": 0, 500 "total.num.dnscrypt.cleartext": 0, 501 "total.num.dnscrypt.crypted": 0, 502 "total.num.dnscrypt.malformed": 0, 503 "total.num.prefetch": 0, 504 "total.num.expired": 0, 505 "total.num.queries": 44, 506 "total.num.queries_ip_ratelimited": 0, 507 "total.num.recursivereplies": 10, 508 "total.num.zero_ttl": 0, 509 "total.recursion.time.avg": 907, 510 "total.recursion.time.median": 240, 511 "total.requestlist.avg": 600, 512 "total.requestlist.current.all": 0, 513 "total.requestlist.current.user": 0, 514 "total.requestlist.exceeded": 0, 515 "total.requestlist.max": 6, 516 "total.requestlist.overwritten": 0, 517 "total.tcpusage": 0, 518 "unwanted.queries": 0, 519 "unwanted.replies": 0, 520 } 521 ) 522 523 var ( 524 expectedCumulative1 = map[string]int64{ 525 "dnscrypt_nonce.cache.count": 0, 526 "dnscrypt_shared_secret.cache.count": 0, 527 "infra.cache.count": 192, 528 "key.cache.count": 11, 529 "mem.cache.dnscrypt_nonce": 0, 530 "mem.cache.dnscrypt_shared_secret": 0, 531 "mem.cache.message": 93392, 532 "mem.cache.rrset": 175745, 533 "mem.mod.iterator": 16588, 534 "mem.mod.respip": 0, 535 "mem.mod.subnet": 74504, 536 "mem.mod.validator": 81479, 537 "mem.streamwait": 0, 538 "msg.cache.count": 94, 539 "num.answer.bogus": 0, 540 "num.answer.rcode.FORMERR": 0, 541 "num.answer.rcode.NOERROR": 184, 542 "num.answer.rcode.NOTIMPL": 0, 543 "num.answer.rcode.NXDOMAIN": 16, 544 "num.answer.rcode.REFUSED": 0, 545 "num.answer.rcode.SERVFAIL": 0, 546 "num.answer.secure": 0, 547 "num.query.aggressive.NOERROR": 1, 548 "num.query.aggressive.NXDOMAIN": 0, 549 "num.query.authzone.down": 0, 550 "num.query.authzone.up": 0, 551 "num.query.class.IN": 200, 552 "num.query.dnscrypt.replay": 0, 553 "num.query.dnscrypt.shared_secret.cachemiss": 0, 554 "num.query.edns.DO": 0, 555 "num.query.edns.present": 0, 556 "num.query.flags.AA": 0, 557 "num.query.flags.AD": 0, 558 "num.query.flags.CD": 0, 559 "num.query.flags.QR": 0, 560 "num.query.flags.RA": 0, 561 "num.query.flags.RD": 200, 562 "num.query.flags.TC": 0, 563 "num.query.flags.Z": 0, 564 "num.query.ipv6": 0, 565 "num.query.opcode.QUERY": 200, 566 "num.query.ratelimited": 0, 567 "num.query.subnet": 0, 568 "num.query.subnet_cache": 0, 569 "num.query.tcp": 0, 570 "num.query.tcpout": 0, 571 "num.query.tls": 0, 572 "num.query.tls.resume": 0, 573 "num.query.type.A": 60, 574 "num.query.type.AAAA": 60, 575 "num.query.type.MX": 60, 576 "num.query.type.PTR": 20, 577 "num.rrset.bogus": 0, 578 "rrset.cache.count": 304, 579 "thread0.num.cachehits": 80, 580 "thread0.num.cachemiss": 10, 581 "thread0.num.dnscrypt.cert": 0, 582 "thread0.num.dnscrypt.cleartext": 0, 583 "thread0.num.dnscrypt.crypted": 0, 584 "thread0.num.dnscrypt.malformed": 0, 585 "thread0.num.expired": 0, 586 "thread0.num.prefetch": 0, 587 "thread0.num.queries": 90, 588 "thread0.num.queries_ip_ratelimited": 0, 589 "thread0.num.recursivereplies": 10, 590 "thread0.num.zero_ttl": 0, 591 "thread0.recursion.time.avg": 222, 592 "thread0.recursion.time.median": 337, 593 "thread0.requestlist.avg": 100, 594 "thread0.requestlist.current.all": 0, 595 "thread0.requestlist.current.user": 0, 596 "thread0.requestlist.exceeded": 0, 597 "thread0.requestlist.max": 1, 598 "thread0.requestlist.overwritten": 0, 599 "thread0.tcpusage": 0, 600 "thread1.num.cachehits": 101, 601 "thread1.num.cachemiss": 9, 602 "thread1.num.dnscrypt.cert": 0, 603 "thread1.num.dnscrypt.cleartext": 0, 604 "thread1.num.dnscrypt.crypted": 0, 605 "thread1.num.dnscrypt.malformed": 0, 606 "thread1.num.expired": 0, 607 "thread1.num.prefetch": 0, 608 "thread1.num.queries": 110, 609 "thread1.num.queries_ip_ratelimited": 0, 610 "thread1.num.recursivereplies": 9, 611 "thread1.num.zero_ttl": 0, 612 "thread1.recursion.time.avg": 844, 613 "thread1.recursion.time.median": 360, 614 "thread1.requestlist.avg": 222, 615 "thread1.requestlist.current.all": 0, 616 "thread1.requestlist.current.user": 0, 617 "thread1.requestlist.exceeded": 0, 618 "thread1.requestlist.max": 1, 619 "thread1.requestlist.overwritten": 0, 620 "thread1.tcpusage": 0, 621 "time.elapsed": 122, 622 "time.now": 1574103378, 623 "time.up": 122, 624 "total.num.cachehits": 181, 625 "total.num.cachemiss": 19, 626 "total.num.dnscrypt.cert": 0, 627 "total.num.dnscrypt.cleartext": 0, 628 "total.num.dnscrypt.crypted": 0, 629 "total.num.dnscrypt.malformed": 0, 630 "total.num.expired": 0, 631 "total.num.prefetch": 0, 632 "total.num.queries": 200, 633 "total.num.queries_ip_ratelimited": 0, 634 "total.num.recursivereplies": 19, 635 "total.num.zero_ttl": 0, 636 "total.recursion.time.avg": 516, 637 "total.recursion.time.median": 348, 638 "total.requestlist.avg": 157, 639 "total.requestlist.current.all": 0, 640 "total.requestlist.current.user": 0, 641 "total.requestlist.exceeded": 0, 642 "total.requestlist.max": 1, 643 "total.requestlist.overwritten": 0, 644 "total.tcpusage": 0, 645 "unwanted.queries": 0, 646 "unwanted.replies": 0, 647 } 648 649 expectedCumulative2 = map[string]int64{ 650 "dnscrypt_nonce.cache.count": 0, 651 "dnscrypt_shared_secret.cache.count": 0, 652 "infra.cache.count": 192, 653 "key.cache.count": 11, 654 "mem.cache.dnscrypt_nonce": 0, 655 "mem.cache.dnscrypt_shared_secret": 0, 656 "mem.cache.message": 93392, 657 "mem.cache.rrset": 175745, 658 "mem.mod.iterator": 16588, 659 "mem.mod.respip": 0, 660 "mem.mod.subnet": 74504, 661 "mem.mod.validator": 81479, 662 "mem.streamwait": 0, 663 "msg.cache.count": 94, 664 "num.answer.bogus": 0, 665 "num.answer.rcode.FORMERR": 0, 666 "num.answer.rcode.NOERROR": 274, 667 "num.answer.rcode.NOTIMPL": 0, 668 "num.answer.rcode.NXDOMAIN": 16, 669 "num.answer.rcode.REFUSED": 0, 670 "num.answer.rcode.SERVFAIL": 0, 671 "num.answer.secure": 0, 672 "num.query.aggressive.NOERROR": 1, 673 "num.query.aggressive.NXDOMAIN": 0, 674 "num.query.authzone.down": 0, 675 "num.query.authzone.up": 0, 676 "num.query.class.IN": 290, 677 "num.query.dnscrypt.replay": 0, 678 "num.query.dnscrypt.shared_secret.cachemiss": 0, 679 "num.query.edns.DO": 0, 680 "num.query.edns.present": 0, 681 "num.query.flags.AA": 0, 682 "num.query.flags.AD": 0, 683 "num.query.flags.CD": 0, 684 "num.query.flags.QR": 0, 685 "num.query.flags.RA": 0, 686 "num.query.flags.RD": 290, 687 "num.query.flags.TC": 0, 688 "num.query.flags.Z": 0, 689 "num.query.ipv6": 0, 690 "num.query.opcode.QUERY": 290, 691 "num.query.ratelimited": 0, 692 "num.query.subnet": 0, 693 "num.query.subnet_cache": 0, 694 "num.query.tcp": 0, 695 "num.query.tcpout": 0, 696 "num.query.tls": 0, 697 "num.query.tls.resume": 0, 698 "num.query.type.A": 90, 699 "num.query.type.AAAA": 90, 700 "num.query.type.MX": 90, 701 "num.query.type.PTR": 20, 702 "num.rrset.bogus": 0, 703 "rrset.cache.count": 304, 704 "thread0.num.cachehits": 123, 705 "thread0.num.cachemiss": 10, 706 "thread0.num.dnscrypt.cert": 0, 707 "thread0.num.dnscrypt.cleartext": 0, 708 "thread0.num.dnscrypt.crypted": 0, 709 "thread0.num.dnscrypt.malformed": 0, 710 "thread0.num.expired": 0, 711 "thread0.num.prefetch": 0, 712 "thread0.num.queries": 133, 713 "thread0.num.queries_ip_ratelimited": 0, 714 "thread0.num.recursivereplies": 10, 715 "thread0.num.zero_ttl": 0, 716 "thread0.recursion.time.avg": 0, 717 "thread0.recursion.time.median": 0, 718 "thread0.requestlist.avg": 0, 719 "thread0.requestlist.current.all": 0, 720 "thread0.requestlist.current.user": 0, 721 "thread0.requestlist.exceeded": 0, 722 "thread0.requestlist.max": 1, 723 "thread0.requestlist.overwritten": 0, 724 "thread0.tcpusage": 0, 725 "thread1.num.cachehits": 148, 726 "thread1.num.cachemiss": 9, 727 "thread1.num.dnscrypt.cert": 0, 728 "thread1.num.dnscrypt.cleartext": 0, 729 "thread1.num.dnscrypt.crypted": 0, 730 "thread1.num.dnscrypt.malformed": 0, 731 "thread1.num.prefetch": 0, 732 "thread1.num.expired": 0, 733 "thread1.num.queries": 157, 734 "thread1.num.queries_ip_ratelimited": 0, 735 "thread1.num.recursivereplies": 9, 736 "thread1.num.zero_ttl": 0, 737 "thread1.recursion.time.avg": 0, 738 "thread1.recursion.time.median": 0, 739 "thread1.requestlist.avg": 0, 740 "thread1.requestlist.current.all": 0, 741 "thread1.requestlist.current.user": 0, 742 "thread1.requestlist.exceeded": 0, 743 "thread1.requestlist.max": 1, 744 "thread1.requestlist.overwritten": 0, 745 "thread1.tcpusage": 0, 746 "time.elapsed": 82, 747 "time.now": 1574103461, 748 "time.up": 205, 749 "total.num.cachehits": 271, 750 "total.num.cachemiss": 19, 751 "total.num.dnscrypt.cert": 0, 752 "total.num.dnscrypt.cleartext": 0, 753 "total.num.dnscrypt.crypted": 0, 754 "total.num.dnscrypt.malformed": 0, 755 "total.num.prefetch": 0, 756 "total.num.expired": 0, 757 "total.num.queries": 290, 758 "total.num.queries_ip_ratelimited": 0, 759 "total.num.recursivereplies": 19, 760 "total.num.zero_ttl": 0, 761 "total.recursion.time.avg": 0, 762 "total.recursion.time.median": 0, 763 "total.requestlist.avg": 0, 764 "total.requestlist.current.all": 0, 765 "total.requestlist.current.user": 0, 766 "total.requestlist.exceeded": 0, 767 "total.requestlist.max": 1, 768 "total.requestlist.overwritten": 0, 769 "total.tcpusage": 0, 770 "unwanted.queries": 0, 771 "unwanted.replies": 0, 772 } 773 774 expectedCumulative3 = map[string]int64{ 775 "dnscrypt_nonce.cache.count": 0, 776 "dnscrypt_shared_secret.cache.count": 0, 777 "infra.cache.count": 232, 778 "key.cache.count": 14, 779 "mem.cache.dnscrypt_nonce": 0, 780 "mem.cache.dnscrypt_shared_secret": 0, 781 "mem.cache.message": 101198, 782 "mem.cache.rrset": 208839, 783 "mem.mod.iterator": 16588, 784 "mem.mod.respip": 0, 785 "mem.mod.subnet": 74504, 786 "mem.mod.validator": 85725, 787 "mem.streamwait": 0, 788 "msg.cache.count": 119, 789 "num.answer.bogus": 0, 790 "num.answer.rcode.FORMERR": 0, 791 "num.answer.rcode.NOERROR": 334, 792 "num.answer.rcode.NOTIMPL": 0, 793 "num.answer.rcode.NXDOMAIN": 16, 794 "num.answer.rcode.REFUSED": 0, 795 "num.answer.rcode.SERVFAIL": 10, 796 "num.answer.rcode.nodata": 20, 797 "num.answer.secure": 0, 798 "num.query.aggressive.NOERROR": 1, 799 "num.query.aggressive.NXDOMAIN": 0, 800 "num.query.authzone.down": 0, 801 "num.query.authzone.up": 0, 802 "num.query.class.IN": 360, 803 "num.query.dnscrypt.replay": 0, 804 "num.query.dnscrypt.shared_secret.cachemiss": 0, 805 "num.query.edns.DO": 0, 806 "num.query.edns.present": 0, 807 "num.query.flags.AA": 0, 808 "num.query.flags.AD": 0, 809 "num.query.flags.CD": 0, 810 "num.query.flags.QR": 0, 811 "num.query.flags.RA": 0, 812 "num.query.flags.RD": 360, 813 "num.query.flags.TC": 0, 814 "num.query.flags.Z": 0, 815 "num.query.ipv6": 0, 816 "num.query.opcode.QUERY": 360, 817 "num.query.ratelimited": 0, 818 "num.query.subnet": 0, 819 "num.query.subnet_cache": 0, 820 "num.query.tcp": 0, 821 "num.query.tcpout": 0, 822 "num.query.tls": 0, 823 "num.query.tls.resume": 0, 824 "num.query.type.A": 120, 825 "num.query.type.AAAA": 110, 826 "num.query.type.MX": 110, 827 "num.query.type.PTR": 20, 828 "num.rrset.bogus": 0, 829 "rrset.cache.count": 401, 830 "thread0.num.cachehits": 150, 831 "thread0.num.cachemiss": 15, 832 "thread0.num.dnscrypt.cert": 0, 833 "thread0.num.dnscrypt.cleartext": 0, 834 "thread0.num.dnscrypt.crypted": 0, 835 "thread0.num.dnscrypt.malformed": 0, 836 "thread0.num.expired": 0, 837 "thread0.num.prefetch": 0, 838 "thread0.num.queries": 165, 839 "thread0.num.queries_ip_ratelimited": 0, 840 "thread0.num.recursivereplies": 15, 841 "thread0.num.zero_ttl": 0, 842 "thread0.recursion.time.avg": 261, 843 "thread0.recursion.time.median": 318, 844 "thread0.requestlist.avg": 66, 845 "thread0.requestlist.current.all": 0, 846 "thread0.requestlist.current.user": 0, 847 "thread0.requestlist.exceeded": 0, 848 "thread0.requestlist.max": 1, 849 "thread0.requestlist.overwritten": 0, 850 "thread0.tcpusage": 0, 851 "thread1.num.cachehits": 184, 852 "thread1.num.cachemiss": 11, 853 "thread1.num.dnscrypt.cert": 0, 854 "thread1.num.dnscrypt.cleartext": 0, 855 "thread1.num.dnscrypt.crypted": 0, 856 "thread1.num.dnscrypt.malformed": 0, 857 "thread1.num.prefetch": 0, 858 "thread1.num.expired": 0, 859 "thread1.num.queries": 195, 860 "thread1.num.queries_ip_ratelimited": 0, 861 "thread1.num.recursivereplies": 11, 862 "thread1.num.zero_ttl": 0, 863 "thread1.recursion.time.avg": 709, 864 "thread1.recursion.time.median": 294, 865 "thread1.requestlist.avg": 363, 866 "thread1.requestlist.current.all": 0, 867 "thread1.requestlist.current.user": 0, 868 "thread1.requestlist.exceeded": 0, 869 "thread1.requestlist.max": 2, 870 "thread1.requestlist.overwritten": 0, 871 "thread1.tcpusage": 0, 872 "time.elapsed": 82, 873 "time.now": 1574103543, 874 "time.up": 288, 875 "total.num.cachehits": 334, 876 "total.num.cachemiss": 26, 877 "total.num.dnscrypt.cert": 0, 878 "total.num.dnscrypt.cleartext": 0, 879 "total.num.dnscrypt.crypted": 0, 880 "total.num.dnscrypt.malformed": 0, 881 "total.num.prefetch": 0, 882 "total.num.expired": 0, 883 "total.num.queries": 360, 884 "total.num.queries_ip_ratelimited": 0, 885 "total.num.recursivereplies": 26, 886 "total.num.zero_ttl": 0, 887 "total.recursion.time.avg": 450, 888 "total.recursion.time.median": 306, 889 "total.requestlist.avg": 192, 890 "total.requestlist.current.all": 0, 891 "total.requestlist.current.user": 0, 892 "total.requestlist.exceeded": 0, 893 "total.requestlist.max": 2, 894 "total.requestlist.overwritten": 0, 895 "total.tcpusage": 0, 896 "unwanted.queries": 0, 897 "unwanted.replies": 0, 898 } 899 ) 900 901 var ( 902 expectedReset1 = map[string]int64{ 903 "dnscrypt_nonce.cache.count": 0, 904 "dnscrypt_shared_secret.cache.count": 0, 905 "infra.cache.count": 181, 906 "key.cache.count": 10, 907 "mem.cache.dnscrypt_nonce": 0, 908 "mem.cache.dnscrypt_shared_secret": 0, 909 "mem.cache.message": 86064, 910 "mem.cache.rrset": 172757, 911 "mem.mod.iterator": 16588, 912 "mem.mod.respip": 0, 913 "mem.mod.subnet": 74504, 914 "mem.mod.validator": 79979, 915 "mem.streamwait": 0, 916 "msg.cache.count": 67, 917 "num.answer.bogus": 0, 918 "num.answer.rcode.FORMERR": 0, 919 "num.answer.rcode.NOERROR": 90, 920 "num.answer.rcode.NOTIMPL": 0, 921 "num.answer.rcode.NXDOMAIN": 10, 922 "num.answer.rcode.REFUSED": 0, 923 "num.answer.rcode.SERVFAIL": 0, 924 "num.answer.rcode.nodata": 10, 925 "num.answer.secure": 0, 926 "num.query.aggressive.NOERROR": 2, 927 "num.query.aggressive.NXDOMAIN": 0, 928 "num.query.authzone.down": 0, 929 "num.query.authzone.up": 0, 930 "num.query.class.IN": 100, 931 "num.query.dnscrypt.replay": 0, 932 "num.query.dnscrypt.shared_secret.cachemiss": 0, 933 "num.query.edns.DO": 0, 934 "num.query.edns.present": 0, 935 "num.query.flags.AA": 0, 936 "num.query.flags.AD": 0, 937 "num.query.flags.CD": 0, 938 "num.query.flags.QR": 0, 939 "num.query.flags.RA": 0, 940 "num.query.flags.RD": 100, 941 "num.query.flags.TC": 0, 942 "num.query.flags.Z": 0, 943 "num.query.ipv6": 0, 944 "num.query.opcode.QUERY": 100, 945 "num.query.ratelimited": 0, 946 "num.query.subnet": 0, 947 "num.query.subnet_cache": 0, 948 "num.query.tcp": 0, 949 "num.query.tcpout": 1, 950 "num.query.tls": 0, 951 "num.query.tls.resume": 0, 952 "num.query.type.A": 30, 953 "num.query.type.AAAA": 30, 954 "num.query.type.MX": 30, 955 "num.query.type.PTR": 10, 956 "num.rrset.bogus": 0, 957 "rrset.cache.count": 303, 958 "thread0.num.cachehits": 44, 959 "thread0.num.cachemiss": 7, 960 "thread0.num.dnscrypt.cert": 0, 961 "thread0.num.dnscrypt.cleartext": 0, 962 "thread0.num.dnscrypt.crypted": 0, 963 "thread0.num.dnscrypt.malformed": 0, 964 "thread0.num.expired": 0, 965 "thread0.num.prefetch": 0, 966 "thread0.num.queries": 51, 967 "thread0.num.queries_ip_ratelimited": 0, 968 "thread0.num.recursivereplies": 7, 969 "thread0.num.zero_ttl": 0, 970 "thread0.recursion.time.avg": 365, 971 "thread0.recursion.time.median": 57, 972 "thread0.requestlist.avg": 0, 973 "thread0.requestlist.current.all": 0, 974 "thread0.requestlist.current.user": 0, 975 "thread0.requestlist.exceeded": 0, 976 "thread0.requestlist.max": 0, 977 "thread0.requestlist.overwritten": 0, 978 "thread0.tcpusage": 0, 979 "thread1.num.cachehits": 46, 980 "thread1.num.cachemiss": 3, 981 "thread1.num.dnscrypt.cert": 0, 982 "thread1.num.dnscrypt.cleartext": 0, 983 "thread1.num.dnscrypt.crypted": 0, 984 "thread1.num.dnscrypt.malformed": 0, 985 "thread1.num.prefetch": 0, 986 "thread1.num.expired": 0, 987 "thread1.num.queries": 49, 988 "thread1.num.queries_ip_ratelimited": 0, 989 "thread1.num.recursivereplies": 3, 990 "thread1.num.zero_ttl": 0, 991 "thread1.recursion.time.avg": 1582, 992 "thread1.recursion.time.median": 0, 993 "thread1.requestlist.avg": 0, 994 "thread1.requestlist.current.all": 0, 995 "thread1.requestlist.current.user": 0, 996 "thread1.requestlist.exceeded": 0, 997 "thread1.requestlist.max": 0, 998 "thread1.requestlist.overwritten": 0, 999 "thread1.tcpusage": 0, 1000 "time.elapsed": 45, 1001 "time.now": 1574103644, 1002 "time.up": 45, 1003 "total.num.cachehits": 90, 1004 "total.num.cachemiss": 10, 1005 "total.num.dnscrypt.cert": 0, 1006 "total.num.dnscrypt.cleartext": 0, 1007 "total.num.dnscrypt.crypted": 0, 1008 "total.num.dnscrypt.malformed": 0, 1009 "total.num.prefetch": 0, 1010 "total.num.expired": 0, 1011 "total.num.queries": 100, 1012 "total.num.queries_ip_ratelimited": 0, 1013 "total.num.recursivereplies": 10, 1014 "total.num.zero_ttl": 0, 1015 "total.recursion.time.avg": 730, 1016 "total.recursion.time.median": 28, 1017 "total.requestlist.avg": 0, 1018 "total.requestlist.current.all": 0, 1019 "total.requestlist.current.user": 0, 1020 "total.requestlist.exceeded": 0, 1021 "total.requestlist.max": 0, 1022 "total.requestlist.overwritten": 0, 1023 "total.tcpusage": 0, 1024 "unwanted.queries": 0, 1025 "unwanted.replies": 0, 1026 } 1027 expectedReset2 = map[string]int64{ 1028 "dnscrypt_nonce.cache.count": 0, 1029 "dnscrypt_shared_secret.cache.count": 0, 1030 "infra.cache.count": 181, 1031 "key.cache.count": 10, 1032 "mem.cache.dnscrypt_nonce": 0, 1033 "mem.cache.dnscrypt_shared_secret": 0, 1034 "mem.cache.message": 86064, 1035 "mem.cache.rrset": 172757, 1036 "mem.mod.iterator": 16588, 1037 "mem.mod.respip": 0, 1038 "mem.mod.subnet": 74504, 1039 "mem.mod.validator": 79979, 1040 "mem.streamwait": 0, 1041 "msg.cache.count": 67, 1042 "num.answer.bogus": 0, 1043 "num.answer.rcode.FORMERR": 0, 1044 "num.answer.rcode.NOERROR": 0, 1045 "num.answer.rcode.NOTIMPL": 0, 1046 "num.answer.rcode.NXDOMAIN": 0, 1047 "num.answer.rcode.REFUSED": 0, 1048 "num.answer.rcode.SERVFAIL": 0, 1049 "num.answer.rcode.nodata": 0, 1050 "num.answer.secure": 0, 1051 "num.query.aggressive.NOERROR": 0, 1052 "num.query.aggressive.NXDOMAIN": 0, 1053 "num.query.authzone.down": 0, 1054 "num.query.authzone.up": 0, 1055 "num.query.class.IN": 0, 1056 "num.query.dnscrypt.replay": 0, 1057 "num.query.dnscrypt.shared_secret.cachemiss": 0, 1058 "num.query.edns.DO": 0, 1059 "num.query.edns.present": 0, 1060 "num.query.flags.AA": 0, 1061 "num.query.flags.AD": 0, 1062 "num.query.flags.CD": 0, 1063 "num.query.flags.QR": 0, 1064 "num.query.flags.RA": 0, 1065 "num.query.flags.RD": 0, 1066 "num.query.flags.TC": 0, 1067 "num.query.flags.Z": 0, 1068 "num.query.ipv6": 0, 1069 "num.query.opcode.QUERY": 0, 1070 "num.query.ratelimited": 0, 1071 "num.query.subnet": 0, 1072 "num.query.subnet_cache": 0, 1073 "num.query.tcp": 0, 1074 "num.query.tcpout": 0, 1075 "num.query.tls": 0, 1076 "num.query.tls.resume": 0, 1077 "num.query.type.A": 0, 1078 "num.query.type.AAAA": 0, 1079 "num.query.type.MX": 0, 1080 "num.query.type.PTR": 0, 1081 "num.rrset.bogus": 0, 1082 "rrset.cache.count": 303, 1083 "thread0.num.cachehits": 0, 1084 "thread0.num.cachemiss": 0, 1085 "thread0.num.dnscrypt.cert": 0, 1086 "thread0.num.dnscrypt.cleartext": 0, 1087 "thread0.num.dnscrypt.crypted": 0, 1088 "thread0.num.dnscrypt.malformed": 0, 1089 "thread0.num.expired": 0, 1090 "thread0.num.prefetch": 0, 1091 "thread0.num.queries": 0, 1092 "thread0.num.queries_ip_ratelimited": 0, 1093 "thread0.num.recursivereplies": 0, 1094 "thread0.num.zero_ttl": 0, 1095 "thread0.recursion.time.avg": 0, 1096 "thread0.recursion.time.median": 0, 1097 "thread0.requestlist.avg": 0, 1098 "thread0.requestlist.current.all": 0, 1099 "thread0.requestlist.current.user": 0, 1100 "thread0.requestlist.exceeded": 0, 1101 "thread0.requestlist.max": 0, 1102 "thread0.requestlist.overwritten": 0, 1103 "thread0.tcpusage": 0, 1104 "thread1.num.cachehits": 0, 1105 "thread1.num.cachemiss": 0, 1106 "thread1.num.dnscrypt.cert": 0, 1107 "thread1.num.dnscrypt.cleartext": 0, 1108 "thread1.num.dnscrypt.crypted": 0, 1109 "thread1.num.dnscrypt.malformed": 0, 1110 "thread1.num.prefetch": 0, 1111 "thread1.num.expired": 0, 1112 "thread1.num.queries": 0, 1113 "thread1.num.queries_ip_ratelimited": 0, 1114 "thread1.num.recursivereplies": 0, 1115 "thread1.num.zero_ttl": 0, 1116 "thread1.recursion.time.avg": 0, 1117 "thread1.recursion.time.median": 0, 1118 "thread1.requestlist.avg": 0, 1119 "thread1.requestlist.current.all": 0, 1120 "thread1.requestlist.current.user": 0, 1121 "thread1.requestlist.exceeded": 0, 1122 "thread1.requestlist.max": 0, 1123 "thread1.requestlist.overwritten": 0, 1124 "thread1.tcpusage": 0, 1125 "time.elapsed": 26, 1126 "time.now": 1574103671, 1127 "time.up": 71, 1128 "total.num.cachehits": 0, 1129 "total.num.cachemiss": 0, 1130 "total.num.dnscrypt.cert": 0, 1131 "total.num.dnscrypt.cleartext": 0, 1132 "total.num.dnscrypt.crypted": 0, 1133 "total.num.dnscrypt.malformed": 0, 1134 "total.num.prefetch": 0, 1135 "total.num.expired": 0, 1136 "total.num.queries": 0, 1137 "total.num.queries_ip_ratelimited": 0, 1138 "total.num.recursivereplies": 0, 1139 "total.num.zero_ttl": 0, 1140 "total.recursion.time.avg": 0, 1141 "total.recursion.time.median": 0, 1142 "total.requestlist.avg": 0, 1143 "total.requestlist.current.all": 0, 1144 "total.requestlist.current.user": 0, 1145 "total.requestlist.exceeded": 0, 1146 "total.requestlist.max": 0, 1147 "total.requestlist.overwritten": 0, 1148 "total.tcpusage": 0, 1149 "unwanted.queries": 0, 1150 "unwanted.replies": 0, 1151 } 1152 1153 expectedReset3 = map[string]int64{ 1154 "dnscrypt_nonce.cache.count": 0, 1155 "dnscrypt_shared_secret.cache.count": 0, 1156 "infra.cache.count": 303, 1157 "key.cache.count": 15, 1158 "mem.cache.dnscrypt_nonce": 0, 1159 "mem.cache.dnscrypt_shared_secret": 0, 1160 "mem.cache.message": 105471, 1161 "mem.cache.rrset": 235917, 1162 "mem.mod.iterator": 16588, 1163 "mem.mod.respip": 0, 1164 "mem.mod.subnet": 74504, 1165 "mem.mod.validator": 87270, 1166 "mem.streamwait": 0, 1167 "msg.cache.count": 127, 1168 "num.answer.bogus": 0, 1169 "num.answer.rcode.FORMERR": 0, 1170 "num.answer.rcode.NOERROR": 60, 1171 "num.answer.rcode.NOTIMPL": 0, 1172 "num.answer.rcode.NXDOMAIN": 10, 1173 "num.answer.rcode.REFUSED": 0, 1174 "num.answer.rcode.SERVFAIL": 0, 1175 "num.answer.rcode.nodata": 10, 1176 "num.answer.secure": 0, 1177 "num.query.aggressive.NOERROR": 2, 1178 "num.query.aggressive.NXDOMAIN": 0, 1179 "num.query.authzone.down": 0, 1180 "num.query.authzone.up": 0, 1181 "num.query.class.IN": 70, 1182 "num.query.dnscrypt.replay": 0, 1183 "num.query.dnscrypt.shared_secret.cachemiss": 0, 1184 "num.query.edns.DO": 0, 1185 "num.query.edns.present": 0, 1186 "num.query.flags.AA": 0, 1187 "num.query.flags.AD": 0, 1188 "num.query.flags.CD": 0, 1189 "num.query.flags.QR": 0, 1190 "num.query.flags.RA": 0, 1191 "num.query.flags.RD": 70, 1192 "num.query.flags.TC": 0, 1193 "num.query.flags.Z": 0, 1194 "num.query.ipv6": 0, 1195 "num.query.opcode.QUERY": 70, 1196 "num.query.ratelimited": 0, 1197 "num.query.subnet": 0, 1198 "num.query.subnet_cache": 0, 1199 "num.query.tcp": 0, 1200 "num.query.tcpout": 0, 1201 "num.query.tls": 0, 1202 "num.query.tls.resume": 0, 1203 "num.query.type.A": 20, 1204 "num.query.type.AAAA": 20, 1205 "num.query.type.MX": 20, 1206 "num.query.type.PTR": 10, 1207 "num.rrset.bogus": 0, 1208 "rrset.cache.count": 501, 1209 "thread0.num.cachehits": 30, 1210 "thread0.num.cachemiss": 4, 1211 "thread0.num.dnscrypt.cert": 0, 1212 "thread0.num.dnscrypt.cleartext": 0, 1213 "thread0.num.dnscrypt.crypted": 0, 1214 "thread0.num.dnscrypt.malformed": 0, 1215 "thread0.num.expired": 0, 1216 "thread0.num.prefetch": 0, 1217 "thread0.num.queries": 34, 1218 "thread0.num.queries_ip_ratelimited": 0, 1219 "thread0.num.recursivereplies": 4, 1220 "thread0.num.zero_ttl": 0, 1221 "thread0.recursion.time.avg": 541, 1222 "thread0.recursion.time.median": 98, 1223 "thread0.requestlist.avg": 0, 1224 "thread0.requestlist.current.all": 0, 1225 "thread0.requestlist.current.user": 0, 1226 "thread0.requestlist.exceeded": 0, 1227 "thread0.requestlist.max": 0, 1228 "thread0.requestlist.overwritten": 0, 1229 "thread0.tcpusage": 0, 1230 "thread1.num.cachehits": 33, 1231 "thread1.num.cachemiss": 3, 1232 "thread1.num.dnscrypt.cert": 0, 1233 "thread1.num.dnscrypt.cleartext": 0, 1234 "thread1.num.dnscrypt.crypted": 0, 1235 "thread1.num.dnscrypt.malformed": 0, 1236 "thread1.num.prefetch": 0, 1237 "thread1.num.expired": 0, 1238 "thread1.num.queries": 36, 1239 "thread1.num.queries_ip_ratelimited": 0, 1240 "thread1.num.recursivereplies": 3, 1241 "thread1.num.zero_ttl": 0, 1242 "thread1.recursion.time.avg": 62, 1243 "thread1.recursion.time.median": 0, 1244 "thread1.requestlist.avg": 1666, 1245 "thread1.requestlist.current.all": 0, 1246 "thread1.requestlist.current.user": 0, 1247 "thread1.requestlist.exceeded": 0, 1248 "thread1.requestlist.max": 5, 1249 "thread1.requestlist.overwritten": 0, 1250 "thread1.tcpusage": 0, 1251 "time.elapsed": 59, 1252 "time.now": 1574103731, 1253 "time.up": 131, 1254 "total.num.cachehits": 63, 1255 "total.num.cachemiss": 7, 1256 "total.num.dnscrypt.cert": 0, 1257 "total.num.dnscrypt.cleartext": 0, 1258 "total.num.dnscrypt.crypted": 0, 1259 "total.num.dnscrypt.malformed": 0, 1260 "total.num.prefetch": 0, 1261 "total.num.expired": 0, 1262 "total.num.queries": 70, 1263 "total.num.queries_ip_ratelimited": 0, 1264 "total.num.recursivereplies": 7, 1265 "total.num.zero_ttl": 0, 1266 "total.recursion.time.avg": 336, 1267 "total.recursion.time.median": 49, 1268 "total.requestlist.avg": 714, 1269 "total.requestlist.current.all": 0, 1270 "total.requestlist.current.user": 0, 1271 "total.requestlist.exceeded": 0, 1272 "total.requestlist.max": 5, 1273 "total.requestlist.overwritten": 0, 1274 "total.tcpusage": 0, 1275 "unwanted.queries": 0, 1276 "unwanted.replies": 0, 1277 } 1278 )