summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/bind/bind_test.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/go/collectors/go.d.plugin/modules/bind/bind_test.go532
1 files changed, 532 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/bind/bind_test.go b/src/go/collectors/go.d.plugin/modules/bind/bind_test.go
new file mode 100644
index 000000000..f5f492181
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/bind/bind_test.go
@@ -0,0 +1,532 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package bind
+
+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")
+
+ dataServerStatsJSON, _ = os.ReadFile("testdata/query-server.json")
+ dataServerStatsXML, _ = os.ReadFile("testdata/query-server.xml")
+)
+
+func Test_testDataIsValid(t *testing.T) {
+ for name, data := range map[string][]byte{
+ "dataConfigJSON": dataConfigJSON,
+ "dataConfigYAML": dataConfigYAML,
+ "dataServerStatsJSON": dataServerStatsJSON,
+ "dataServerStatsXML": dataServerStatsXML,
+ } {
+ require.NotNil(t, data, name)
+
+ }
+}
+
+func TestBind_ConfigurationSerialize(t *testing.T) {
+ module.TestConfigurationSerialize(t, &Bind{}, dataConfigJSON, dataConfigYAML)
+}
+
+func TestBind_Cleanup(t *testing.T) { New().Cleanup() }
+
+func TestBind_Init(t *testing.T) {
+ // OK
+ job := New()
+ assert.NoError(t, job.Init())
+ assert.NotNil(t, job.bindAPIClient)
+
+ //NG
+ job = New()
+ job.URL = ""
+ assert.Error(t, job.Init())
+}
+
+func TestBind_Check(t *testing.T) {
+ ts := httptest.NewServer(
+ http.HandlerFunc(
+ func(w http.ResponseWriter, r *http.Request) {
+ if r.URL.Path == "/json/v1/server" {
+ _, _ = w.Write(dataServerStatsJSON)
+ }
+ }))
+ defer ts.Close()
+
+ job := New()
+ job.URL = ts.URL + "/json/v1"
+
+ require.NoError(t, job.Init())
+ require.NoError(t, job.Check())
+}
+
+func TestBind_CheckNG(t *testing.T) {
+ job := New()
+
+ job.URL = "http://127.0.0.1:38001/xml/v3"
+ require.NoError(t, job.Init())
+ assert.Error(t, job.Check())
+}
+
+func TestBind_Charts(t *testing.T) {
+ assert.NotNil(t, New().Charts())
+}
+
+func TestBind_CollectJSON(t *testing.T) {
+ ts := httptest.NewServer(
+ http.HandlerFunc(
+ func(w http.ResponseWriter, r *http.Request) {
+ if r.URL.Path == "/json/v1/server" {
+ _, _ = w.Write(dataServerStatsJSON)
+ }
+ }))
+ defer ts.Close()
+
+ job := New()
+ job.URL = ts.URL + "/json/v1"
+ job.PermitView = "*"
+
+ require.NoError(t, job.Init())
+ require.NoError(t, job.Check())
+
+ expected := map[string]int64{
+ "_default_Queryv4": 4503685324,
+ "_default_NSEC": 53193,
+ "_default_NSEC3PARAM": 993,
+ "_default_ANY": 5149356,
+ "QryFORMERR": 8,
+ "CookieMatch": 125065,
+ "A6": 538255,
+ "MAILA": 44,
+ "ExpireOpt": 195,
+ "CNAME": 534171,
+ "TYPE115": 285,
+ "_default_RESERVED0": 19,
+ "_default_ClientCookieOut": 3790767469,
+ "_default_CookieClientOk": 297765763,
+ "QryFailure": 225786697,
+ "TYPE127": 1,
+ "_default_GlueFetchv4": 110619519,
+ "_default_Queryv6": 291939086,
+ "UPDATE": 18836,
+ "RESERVED0": 13705,
+ "_default_CacheHits": 405229520524,
+ "Requestv6": 155,
+ "QryTCP": 4226324,
+ "RESERVED15": 0,
+ "QUERY": 36766967932,
+ "EUI64": 627,
+ "_default_NXDOMAIN": 1245990908,
+ "_default_REFUSED": 106664780,
+ "_default_EUI64": 2087,
+ "QrySERVFAIL": 219515158,
+ "QryRecursion": 3666523564,
+ "MX": 1483690,
+ "DNSKEY": 143483,
+ "_default_TYPE115": 112,
+ "_default_Others": 813,
+ "_default_CacheMisses": 127371,
+ "RateDropped": 219,
+ "NAPTR": 109959,
+ "NSEC": 81,
+ "AAAA": 3304112238,
+ "_default_QryRTT500": 2071767970,
+ "_default_TYPE127": 2,
+ "_default_A6": 556692,
+ "QryAuthAns": 440508475,
+ "RecursClients": 74,
+ "XfrRej": 97,
+ "LOC": 52,
+ "CookieIn": 1217208,
+ "RRSIG": 25192,
+ "_default_LOC": 21,
+ "ReqBadEDNSVer": 450,
+ "MG": 4,
+ "_default_GlueFetchv6": 121100044,
+ "_default_HINFO": 1,
+ "IQUERY": 199,
+ "_default_BadCookieRcode": 14779,
+ "AuthQryRej": 148023,
+ "QrySuccess": 28766465065,
+ "SRV": 27637747,
+ "TYPE223": 2,
+ "CookieNew": 1058677,
+ "_default_QryRTT10": 628295,
+ "_default_ServerCookieOut": 364811250,
+ "RESERVED11": 3,
+ "_default_CookieIn": 298084581,
+ "_default_DS": 973892,
+ "_bind_CacheHits": 0,
+ "STATUS": 35546,
+ "TLSA": 297,
+ "_default_SERVFAIL": 6523360,
+ "_default_GlueFetchv4Fail": 3949012,
+ "_default_NULL": 3548,
+ "UpdateRej": 15661,
+ "RESERVED10": 5,
+ "_default_EDNS0Fail": 3982564,
+ "_default_DLV": 20418,
+ "ANY": 298451299,
+ "_default_GlueFetchv6Fail": 91728801,
+ "_default_RP": 134,
+ "_default_AAAA": 817525939,
+ "X25": 2,
+ "NS": 5537956,
+ "_default_NumFetch": 100,
+ "_default_DNSKEY": 182224,
+ "QryUDP": 36455909449,
+ "QryReferral": 1152155,
+ "QryNXDOMAIN": 5902446156,
+ "TruncatedResp": 25882799,
+ "DNAME": 1,
+ "DLV": 37676,
+ "_default_FORMERR": 3827518,
+ "_default_RRSIG": 191628,
+ "RecQryRej": 225638588,
+ "QryDropped": 52141050,
+ "Response": 36426730232,
+ "RESERVED14": 0,
+ "_default_SPF": 16521,
+ "_default_DNAME": 6,
+ "Requestv4": 36767496594,
+ "CookieNoMatch": 33466,
+ "RESERVED9": 0,
+ "_default_QryRTT800": 2709649,
+ "_default_QryRTT1600": 455315,
+ "_default_OtherError": 1426431,
+ "_default_MX": 1575795,
+ "QryNoauthAns": 35538538399,
+ "NSIDOpt": 81,
+ "ReqTCP": 4234792,
+ "SOA": 3860272,
+ "RESERVED8": 0,
+ "RESERVED13": 8,
+ "MAILB": 42,
+ "AXFR": 105,
+ "QryNxrrset": 1308983498,
+ "SPF": 2872,
+ "PTR": 693769261,
+ "_default_Responsev4": 4169576370,
+ "_default_QryRTT100": 2086168894,
+ "_default_Retry": 783763680,
+ "_default_SRV": 3848459,
+ "QryDuplicate": 288617636,
+ "ECSOpt": 8742938,
+ "A": 32327037206,
+ "DS": 1687895,
+ "RESERVED12": 1,
+ "_default_QryRTT1600+": 27639,
+ "_default_TXT": 43595113,
+ "_default_CDS": 251,
+ "RESERVED6": 7401,
+ "RESERVED3": 2,
+ "_default_Truncated": 14015078,
+ "_default_NextItem": 1788902,
+ "_default_Responsev6": 151,
+ "_default_QueryTimeout": 335575100,
+ "_default_A": 3673673090,
+ "ReqEdns0": 532104182,
+ "OtherOpt": 3425542,
+ "NULL": 3604,
+ "HINFO": 9,
+ "_default_SOA": 1326766,
+ "_default_NAPTR": 30685,
+ "_default_PTR": 208067284,
+ "_default_CNAME": 38153754,
+ "RespEDNS0": 527991455,
+ "RESERVED7": 0,
+ "TXT": 100045556,
+ "_default_Lame": 1975334,
+ "_bind_CacheMisses": 509,
+ "IXFR": 33,
+ "_default_NS": 675609,
+ "_default_AFSDB": 5,
+ "NOTIFY": 390443,
+ "Others": 74006,
+ }
+
+ assert.Equal(t, expected, job.Collect())
+ assert.Len(t, *job.charts, 17)
+}
+
+func TestBind_CollectXML3(t *testing.T) {
+ ts := httptest.NewServer(
+ http.HandlerFunc(
+ func(w http.ResponseWriter, r *http.Request) {
+ if r.URL.Path == "/xml/v3/server" {
+ _, _ = w.Write(dataServerStatsXML)
+ }
+ }))
+ defer ts.Close()
+
+ job := New()
+ job.PermitView = "*"
+ job.URL = ts.URL + "/xml/v3"
+
+ require.NoError(t, job.Init())
+ require.NoError(t, job.Check())
+
+ expected := map[string]int64{
+ "_bind_CookieClientOk": 0,
+ "_bind_ValNegOk": 0,
+ "_bind_GlueFetchv4Fail": 0,
+ "_bind_ValFail": 0,
+ "RateSlipped": 0,
+ "_default_ValFail": 0,
+ "_default_TYPE127": 2,
+ "TLSA": 299,
+ "_default_FORMERR": 3831796,
+ "_default_ValNegOk": 0,
+ "_default_RRSIG": 191877,
+ "_default_CacheHits": 405816752908,
+ "CookieBadTime": 0,
+ "RESERVED14": 0,
+ "_default_SPF": 16563,
+ "RESERVED3": 2,
+ "NS": 5545011,
+ "QrySERVFAIL": 219790234,
+ "UPDATE": 18839,
+ "_default_NAPTR": 30706,
+ "RESERVED13": 8,
+ "_default_CookieIn": 298556974,
+ "_bind_Retry": 0,
+ "_default_SOA": 1327966,
+ "_bind_Truncated": 0,
+ "RESERVED6": 7401,
+ "_default_CookieClientOk": 298237641,
+ "_default_QueryTimeout": 336165169,
+ "SPF": 2887,
+ "_default_DNAME": 6,
+ "_bind_Lame": 0,
+ "QryUDP": 36511992002,
+ "NOTIFY": 390521,
+ "DNAME": 1,
+ "DS": 1688561,
+ "_default_OtherError": 1464741,
+ "_default_Retry": 784916992,
+ "_default_TXT": 43650696,
+ "QryBADCOOKIE": 0,
+ "RespEDNS0": 528451140,
+ "TXT": 100195931,
+ "OtherOpt": 3431439,
+ "_default_HINFO": 1,
+ "RESERVED0": 13705,
+ "_bind_CacheHits": 0,
+ "ReqTCP": 4241537,
+ "RespTSIG": 0,
+ "RESERVED11": 3,
+ "_default_QryRTT100": 2087797539,
+ "_default_REFUSED": 106782830,
+ "_bind_SERVFAIL": 0,
+ "X25": 2,
+ "_default_RP": 134,
+ "QryDuplicate": 289518897,
+ "CookieNoMatch": 34013,
+ "_default_BadCookieRcode": 15399,
+ "_default_CacheMisses": 127371,
+ "_bind_Mismatch": 0,
+ "_default_ServerCookieOut": 365308714,
+ "_bind_QryRTT500": 0,
+ "RPZRewrites": 0,
+ "A": 32377004350,
+ "_default_NextItem": 1790135,
+ "_default_MX": 1576150,
+ "_bind_REFUSED": 0,
+ "_bind_ZoneQuota": 0,
+ "_default_ServerQuota": 0,
+ "_default_ANY": 5149916,
+ "_default_EUI64": 2087,
+ "_default_QueryCurUDP": 0,
+ "RESERVED7": 0,
+ "IXFR": 33,
+ "_default_Queryv4": 4509791268,
+ "_default_GlueFetchv4": 110749701,
+ "_default_TYPE115": 112,
+ "_bind_QueryAbort": 0,
+ "UpdateReqFwd": 0,
+ "_default_NSEC3PARAM": 995,
+ "_bind_NextItem": 0,
+ "RecursClients": 64,
+ "QryReferral": 1152178,
+ "QryFORMERR": 8,
+ "CookieIn": 1220424,
+ "NSIDOpt": 81,
+ "MAILA": 44,
+ "TYPE223": 2,
+ "RRSIG": 25193,
+ "UpdateBadPrereq": 0,
+ "UpdateRej": 15661,
+ "QryAuthAns": 440885288,
+ "_default_PTR": 208337408,
+ "_default_Others": 813,
+ "_default_NS": 676773,
+ "_bind_GlueFetchv4": 0,
+ "QryNoauthAns": 35593104164,
+ "QryRecursion": 3671792792,
+ "_default_ClientCookieOut": 3795901994,
+ "_bind_BadEDNSVersion": 0,
+ "ReqEdns0": 532586114,
+ "RateDropped": 230,
+ "_default_ValOk": 0,
+ "CNAME": 535141,
+ "AuthQryRej": 148159,
+ "RESERVED10": 5,
+ "_default_QueryCurTCP": 0,
+ "_bind_Queryv4": 0,
+ "_bind_CacheMisses": 509,
+ "ExpireOpt": 195,
+ "XfrRej": 97,
+ "_default_DNSKEY": 182399,
+ "RecQryRej": 225832466,
+ "NSEC": 81,
+ "_default_Responsev4": 4175093103,
+ "_bind_ValOk": 0,
+ "_bind_QueryCurTCP": 0,
+ "Requestv4": 36823884979,
+ "DNSKEY": 143600,
+ "_default_LOC": 21,
+ "UpdateRespFwd": 0,
+ "AXFR": 105,
+ "_bind_CookieIn": 0,
+ "_default_QryRTT1600": 455849,
+ "_bind_BadCookieRcode": 0,
+ "QryNXDOMAIN": 5911582433,
+ "ReqSIG0": 0,
+ "QUERY": 36823356081,
+ "NULL": 3606,
+ "_default_Lame": 1979599,
+ "_default_DS": 974240,
+ "SRV": 27709732,
+ "_bind_QuerySockFail": 0,
+ "MG": 4,
+ "_default_QryRTT800": 2712733,
+ "_bind_QryRTT1600+": 0,
+ "DNS64": 0,
+ "_default_Truncated": 14028716,
+ "_default_QryRTT10": 629577,
+ "_default_SERVFAIL": 6533579,
+ "_default_AFSDB": 5,
+ "STATUS": 35585,
+ "Response": 36482142477,
+ "KeyTagOpt": 0,
+ "_default_Mismatch": 0,
+ "Requestv6": 156,
+ "LOC": 52,
+ "_bind_NXDOMAIN": 0,
+ "PTR": 694347710,
+ "_default_NSEC": 53712,
+ "_bind_QryRTT100": 0,
+ "RESERVED8": 0,
+ "DLV": 37712,
+ "HINFO": 9,
+ "_default_AAAA": 818803359,
+ "QryNXRedirRLookup": 0,
+ "TYPE127": 1,
+ "_default_EDNS0Fail": 3987571,
+ "_default_CDS": 251,
+ "_bind_ServerCookieOut": 0,
+ "_bind_QueryCurUDP": 0,
+ "_bind_GlueFetchv6Fail": 0,
+ "UpdateFail": 0,
+ "_default_ZoneQuota": 0,
+ "_default_QuerySockFail": 0,
+ "_default_GlueFetchv6Fail": 91852240,
+ "RespSIG0": 0,
+ "_default_GlueFetchv4Fail": 3964627,
+ "_bind_Responsev6": 0,
+ "_default_GlueFetchv6": 121268854,
+ "_default_Queryv6": 292282376,
+ "TruncatedResp": 25899017,
+ "ReqTSIG": 0,
+ "_default_BadEDNSVersion": 0,
+ "_bind_NumFetch": 0,
+ "RESERVED12": 1,
+ "_default_Responsev6": 152,
+ "_default_SRV": 3855156,
+ "ANY": 298567781,
+ "_default_CNAME": 38213966,
+ "_bind_ClientCookieOut": 0,
+ "NAPTR": 109998,
+ "_default_QryRTT500": 2075608518,
+ "_default_A6": 558874,
+ "_bind_OtherError": 0,
+ "CookieMatch": 125340,
+ "_default_QryRTT1600+": 27681,
+ "_default_DLV": 20468,
+ "_default_NULL": 3554,
+ "_bind_Queryv6": 0,
+ "_bind_QueryTimeout": 0,
+ "_bind_ValAttempt": 0,
+ "RESERVED9": 0,
+ "A6": 539773,
+ "MX": 1484497,
+ "QrySuccess": 28810069822,
+ "XfrReqDone": 0,
+ "RESERVED15": 0,
+ "MAILB": 42,
+ "Others": 74007,
+ "_bind_ServerQuota": 0,
+ "_bind_EDNS0Fail": 0,
+ "QryNxrrset": 1311185019,
+ "QryFailure": 225980711,
+ "ReqBadSIG": 0,
+ "UpdateFwdFail": 0,
+ "ECSOpt": 8743959,
+ "QryDropped": 52215943,
+ "EUI64": 627,
+ "_default_ValAttempt": 0,
+ "_default_A": 3678445415,
+ "_bind_QryRTT800": 0,
+ "_default_NXDOMAIN": 1247746765,
+ "_default_RESERVED0": 19,
+ "_default_NumFetch": 62,
+ "_bind_Responsev4": 0,
+ "_bind_QryRTT1600": 0,
+ "CookieNew": 1061071,
+ "ReqBadEDNSVer": 450,
+ "TYPE115": 285,
+ "_bind_FORMERR": 0,
+ "SOA": 3863889,
+ "_bind_QryRTT10": 0,
+ "CookieBadSize": 0,
+ "_bind_GlueFetchv6": 0,
+ "QryNXRedir": 0,
+ "AAAA": 3309600766,
+ "_default_QueryAbort": 0,
+ "QryTCP": 4233061,
+ "UpdateDone": 0,
+ "IQUERY": 199,
+ }
+
+ assert.Equal(t, expected, job.Collect())
+ assert.Len(t, *job.charts, 20)
+}
+
+func TestBind_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 + "/json/v1"
+ require.NoError(t, job.Init())
+ assert.Error(t, job.Check())
+}
+
+func TestBind_404(t *testing.T) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(404) }))
+ defer ts.Close()
+
+ job := New()
+ job.URL = ts.URL + "/json/v1"
+ require.NoError(t, job.Init())
+ assert.Error(t, job.Check())
+}