diff options
Diffstat (limited to '')
-rw-r--r-- | src/go/collectors/go.d.plugin/modules/bind/bind_test.go | 532 |
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()) +} |