github.com/netdata/go.d.plugin@v0.58.1/modules/bind/bind_test.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package bind
     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  	jsonServerData, _ = os.ReadFile("testdata/query-server.json")
    17  	xmlServerData, _  = os.ReadFile("testdata/query-server.xml")
    18  )
    19  
    20  func TestNew(t *testing.T) {
    21  	job := New()
    22  	assert.IsType(t, (*Bind)(nil), job)
    23  	assert.NotNil(t, job.charts)
    24  	assert.Equal(t, defaultURL, job.URL)
    25  	assert.Equal(t, defaultHTTPTimeout, job.Timeout.Duration)
    26  }
    27  
    28  func TestBind_Cleanup(t *testing.T) { New().Cleanup() }
    29  
    30  func TestBind_Init(t *testing.T) {
    31  	// OK
    32  	job := New()
    33  	assert.True(t, job.Init())
    34  	assert.NotNil(t, job.bindAPIClient)
    35  
    36  	//NG
    37  	job = New()
    38  	job.URL = ""
    39  	assert.False(t, job.Init())
    40  	job.URL = defaultURL[:len(defaultURL)-1]
    41  	assert.False(t, job.Init())
    42  }
    43  
    44  func TestBind_Check(t *testing.T) {
    45  	ts := httptest.NewServer(
    46  		http.HandlerFunc(
    47  			func(w http.ResponseWriter, r *http.Request) {
    48  				if r.URL.Path == "/json/v1/server" {
    49  					_, _ = w.Write(jsonServerData)
    50  				}
    51  			}))
    52  	defer ts.Close()
    53  
    54  	job := New()
    55  	job.URL = ts.URL + "/json/v1"
    56  
    57  	require.True(t, job.Init())
    58  	require.True(t, job.Check())
    59  }
    60  
    61  func TestBind_CheckNG(t *testing.T) {
    62  	job := New()
    63  
    64  	job.URL = "http://127.0.0.1:38001/xml/v3"
    65  	require.True(t, job.Init())
    66  	assert.False(t, job.Check())
    67  }
    68  
    69  func TestBind_Charts(t *testing.T) { assert.NotNil(t, New().Charts()) }
    70  
    71  func TestBind_CollectJSON(t *testing.T) {
    72  	ts := httptest.NewServer(
    73  		http.HandlerFunc(
    74  			func(w http.ResponseWriter, r *http.Request) {
    75  				if r.URL.Path == "/json/v1/server" {
    76  					_, _ = w.Write(jsonServerData)
    77  				}
    78  			}))
    79  	defer ts.Close()
    80  
    81  	job := New()
    82  	job.URL = ts.URL + "/json/v1"
    83  	job.PermitView = "*"
    84  
    85  	require.True(t, job.Init())
    86  	require.True(t, job.Check())
    87  
    88  	expected := map[string]int64{
    89  		"_default_Queryv4":         4503685324,
    90  		"_default_NSEC":            53193,
    91  		"_default_NSEC3PARAM":      993,
    92  		"_default_ANY":             5149356,
    93  		"QryFORMERR":               8,
    94  		"CookieMatch":              125065,
    95  		"A6":                       538255,
    96  		"MAILA":                    44,
    97  		"ExpireOpt":                195,
    98  		"CNAME":                    534171,
    99  		"TYPE115":                  285,
   100  		"_default_RESERVED0":       19,
   101  		"_default_ClientCookieOut": 3790767469,
   102  		"_default_CookieClientOk":  297765763,
   103  		"QryFailure":               225786697,
   104  		"TYPE127":                  1,
   105  		"_default_GlueFetchv4":     110619519,
   106  		"_default_Queryv6":         291939086,
   107  		"UPDATE":                   18836,
   108  		"RESERVED0":                13705,
   109  		"_default_CacheHits":       405229520524,
   110  		"Requestv6":                155,
   111  		"QryTCP":                   4226324,
   112  		"RESERVED15":               0,
   113  		"QUERY":                    36766967932,
   114  		"EUI64":                    627,
   115  		"_default_NXDOMAIN":        1245990908,
   116  		"_default_REFUSED":         106664780,
   117  		"_default_EUI64":           2087,
   118  		"QrySERVFAIL":              219515158,
   119  		"QryRecursion":             3666523564,
   120  		"MX":                       1483690,
   121  		"DNSKEY":                   143483,
   122  		"_default_TYPE115":         112,
   123  		"_default_Others":          813,
   124  		"_default_CacheMisses":     127371,
   125  		"RateDropped":              219,
   126  		"NAPTR":                    109959,
   127  		"NSEC":                     81,
   128  		"AAAA":                     3304112238,
   129  		"_default_QryRTT500":       2071767970,
   130  		"_default_TYPE127":         2,
   131  		"_default_A6":              556692,
   132  		"QryAuthAns":               440508475,
   133  		"RecursClients":            74,
   134  		"XfrRej":                   97,
   135  		"LOC":                      52,
   136  		"CookieIn":                 1217208,
   137  		"RRSIG":                    25192,
   138  		"_default_LOC":             21,
   139  		"ReqBadEDNSVer":            450,
   140  		"MG":                       4,
   141  		"_default_GlueFetchv6":     121100044,
   142  		"_default_HINFO":           1,
   143  		"IQUERY":                   199,
   144  		"_default_BadCookieRcode":  14779,
   145  		"AuthQryRej":               148023,
   146  		"QrySuccess":               28766465065,
   147  		"SRV":                      27637747,
   148  		"TYPE223":                  2,
   149  		"CookieNew":                1058677,
   150  		"_default_QryRTT10":        628295,
   151  		"_default_ServerCookieOut": 364811250,
   152  		"RESERVED11":               3,
   153  		"_default_CookieIn":        298084581,
   154  		"_default_DS":              973892,
   155  		"_bind_CacheHits":          0,
   156  		"STATUS":                   35546,
   157  		"TLSA":                     297,
   158  		"_default_SERVFAIL":        6523360,
   159  		"_default_GlueFetchv4Fail": 3949012,
   160  		"_default_NULL":            3548,
   161  		"UpdateRej":                15661,
   162  		"RESERVED10":               5,
   163  		"_default_EDNS0Fail":       3982564,
   164  		"_default_DLV":             20418,
   165  		"ANY":                      298451299,
   166  		"_default_GlueFetchv6Fail": 91728801,
   167  		"_default_RP":              134,
   168  		"_default_AAAA":            817525939,
   169  		"X25":                      2,
   170  		"NS":                       5537956,
   171  		"_default_NumFetch":        100,
   172  		"_default_DNSKEY":          182224,
   173  		"QryUDP":                   36455909449,
   174  		"QryReferral":              1152155,
   175  		"QryNXDOMAIN":              5902446156,
   176  		"TruncatedResp":            25882799,
   177  		"DNAME":                    1,
   178  		"DLV":                      37676,
   179  		"_default_FORMERR":         3827518,
   180  		"_default_RRSIG":           191628,
   181  		"RecQryRej":                225638588,
   182  		"QryDropped":               52141050,
   183  		"Response":                 36426730232,
   184  		"RESERVED14":               0,
   185  		"_default_SPF":             16521,
   186  		"_default_DNAME":           6,
   187  		"Requestv4":                36767496594,
   188  		"CookieNoMatch":            33466,
   189  		"RESERVED9":                0,
   190  		"_default_QryRTT800":       2709649,
   191  		"_default_QryRTT1600":      455315,
   192  		"_default_OtherError":      1426431,
   193  		"_default_MX":              1575795,
   194  		"QryNoauthAns":             35538538399,
   195  		"NSIDOpt":                  81,
   196  		"ReqTCP":                   4234792,
   197  		"SOA":                      3860272,
   198  		"RESERVED8":                0,
   199  		"RESERVED13":               8,
   200  		"MAILB":                    42,
   201  		"AXFR":                     105,
   202  		"QryNxrrset":               1308983498,
   203  		"SPF":                      2872,
   204  		"PTR":                      693769261,
   205  		"_default_Responsev4":      4169576370,
   206  		"_default_QryRTT100":       2086168894,
   207  		"_default_Retry":           783763680,
   208  		"_default_SRV":             3848459,
   209  		"QryDuplicate":             288617636,
   210  		"ECSOpt":                   8742938,
   211  		"A":                        32327037206,
   212  		"DS":                       1687895,
   213  		"RESERVED12":               1,
   214  		"_default_QryRTT1600+":     27639,
   215  		"_default_TXT":             43595113,
   216  		"_default_CDS":             251,
   217  		"RESERVED6":                7401,
   218  		"RESERVED3":                2,
   219  		"_default_Truncated":       14015078,
   220  		"_default_NextItem":        1788902,
   221  		"_default_Responsev6":      151,
   222  		"_default_QueryTimeout":    335575100,
   223  		"_default_A":               3673673090,
   224  		"ReqEdns0":                 532104182,
   225  		"OtherOpt":                 3425542,
   226  		"NULL":                     3604,
   227  		"HINFO":                    9,
   228  		"_default_SOA":             1326766,
   229  		"_default_NAPTR":           30685,
   230  		"_default_PTR":             208067284,
   231  		"_default_CNAME":           38153754,
   232  		"RespEDNS0":                527991455,
   233  		"RESERVED7":                0,
   234  		"TXT":                      100045556,
   235  		"_default_Lame":            1975334,
   236  		"_bind_CacheMisses":        509,
   237  		"IXFR":                     33,
   238  		"_default_NS":              675609,
   239  		"_default_AFSDB":           5,
   240  		"NOTIFY":                   390443,
   241  		"Others":                   74006,
   242  	}
   243  
   244  	assert.Equal(t, expected, job.Collect())
   245  	assert.Len(t, *job.charts, 17)
   246  }
   247  
   248  func TestBind_CollectXML3(t *testing.T) {
   249  	ts := httptest.NewServer(
   250  		http.HandlerFunc(
   251  			func(w http.ResponseWriter, r *http.Request) {
   252  				if r.URL.Path == "/xml/v3/server" {
   253  					_, _ = w.Write(xmlServerData)
   254  				}
   255  			}))
   256  	defer ts.Close()
   257  
   258  	job := New()
   259  	job.PermitView = "*"
   260  	job.URL = ts.URL + "/xml/v3"
   261  
   262  	require.True(t, job.Init())
   263  	require.True(t, job.Check())
   264  
   265  	expected := map[string]int64{
   266  		"_bind_CookieClientOk":     0,
   267  		"_bind_ValNegOk":           0,
   268  		"_bind_GlueFetchv4Fail":    0,
   269  		"_bind_ValFail":            0,
   270  		"RateSlipped":              0,
   271  		"_default_ValFail":         0,
   272  		"_default_TYPE127":         2,
   273  		"TLSA":                     299,
   274  		"_default_FORMERR":         3831796,
   275  		"_default_ValNegOk":        0,
   276  		"_default_RRSIG":           191877,
   277  		"_default_CacheHits":       405816752908,
   278  		"CookieBadTime":            0,
   279  		"RESERVED14":               0,
   280  		"_default_SPF":             16563,
   281  		"RESERVED3":                2,
   282  		"NS":                       5545011,
   283  		"QrySERVFAIL":              219790234,
   284  		"UPDATE":                   18839,
   285  		"_default_NAPTR":           30706,
   286  		"RESERVED13":               8,
   287  		"_default_CookieIn":        298556974,
   288  		"_bind_Retry":              0,
   289  		"_default_SOA":             1327966,
   290  		"_bind_Truncated":          0,
   291  		"RESERVED6":                7401,
   292  		"_default_CookieClientOk":  298237641,
   293  		"_default_QueryTimeout":    336165169,
   294  		"SPF":                      2887,
   295  		"_default_DNAME":           6,
   296  		"_bind_Lame":               0,
   297  		"QryUDP":                   36511992002,
   298  		"NOTIFY":                   390521,
   299  		"DNAME":                    1,
   300  		"DS":                       1688561,
   301  		"_default_OtherError":      1464741,
   302  		"_default_Retry":           784916992,
   303  		"_default_TXT":             43650696,
   304  		"QryBADCOOKIE":             0,
   305  		"RespEDNS0":                528451140,
   306  		"TXT":                      100195931,
   307  		"OtherOpt":                 3431439,
   308  		"_default_HINFO":           1,
   309  		"RESERVED0":                13705,
   310  		"_bind_CacheHits":          0,
   311  		"ReqTCP":                   4241537,
   312  		"RespTSIG":                 0,
   313  		"RESERVED11":               3,
   314  		"_default_QryRTT100":       2087797539,
   315  		"_default_REFUSED":         106782830,
   316  		"_bind_SERVFAIL":           0,
   317  		"X25":                      2,
   318  		"_default_RP":              134,
   319  		"QryDuplicate":             289518897,
   320  		"CookieNoMatch":            34013,
   321  		"_default_BadCookieRcode":  15399,
   322  		"_default_CacheMisses":     127371,
   323  		"_bind_Mismatch":           0,
   324  		"_default_ServerCookieOut": 365308714,
   325  		"_bind_QryRTT500":          0,
   326  		"RPZRewrites":              0,
   327  		"A":                        32377004350,
   328  		"_default_NextItem":        1790135,
   329  		"_default_MX":              1576150,
   330  		"_bind_REFUSED":            0,
   331  		"_bind_ZoneQuota":          0,
   332  		"_default_ServerQuota":     0,
   333  		"_default_ANY":             5149916,
   334  		"_default_EUI64":           2087,
   335  		"_default_QueryCurUDP":     0,
   336  		"RESERVED7":                0,
   337  		"IXFR":                     33,
   338  		"_default_Queryv4":         4509791268,
   339  		"_default_GlueFetchv4":     110749701,
   340  		"_default_TYPE115":         112,
   341  		"_bind_QueryAbort":         0,
   342  		"UpdateReqFwd":             0,
   343  		"_default_NSEC3PARAM":      995,
   344  		"_bind_NextItem":           0,
   345  		"RecursClients":            64,
   346  		"QryReferral":              1152178,
   347  		"QryFORMERR":               8,
   348  		"CookieIn":                 1220424,
   349  		"NSIDOpt":                  81,
   350  		"MAILA":                    44,
   351  		"TYPE223":                  2,
   352  		"RRSIG":                    25193,
   353  		"UpdateBadPrereq":          0,
   354  		"UpdateRej":                15661,
   355  		"QryAuthAns":               440885288,
   356  		"_default_PTR":             208337408,
   357  		"_default_Others":          813,
   358  		"_default_NS":              676773,
   359  		"_bind_GlueFetchv4":        0,
   360  		"QryNoauthAns":             35593104164,
   361  		"QryRecursion":             3671792792,
   362  		"_default_ClientCookieOut": 3795901994,
   363  		"_bind_BadEDNSVersion":     0,
   364  		"ReqEdns0":                 532586114,
   365  		"RateDropped":              230,
   366  		"_default_ValOk":           0,
   367  		"CNAME":                    535141,
   368  		"AuthQryRej":               148159,
   369  		"RESERVED10":               5,
   370  		"_default_QueryCurTCP":     0,
   371  		"_bind_Queryv4":            0,
   372  		"_bind_CacheMisses":        509,
   373  		"ExpireOpt":                195,
   374  		"XfrRej":                   97,
   375  		"_default_DNSKEY":          182399,
   376  		"RecQryRej":                225832466,
   377  		"NSEC":                     81,
   378  		"_default_Responsev4":      4175093103,
   379  		"_bind_ValOk":              0,
   380  		"_bind_QueryCurTCP":        0,
   381  		"Requestv4":                36823884979,
   382  		"DNSKEY":                   143600,
   383  		"_default_LOC":             21,
   384  		"UpdateRespFwd":            0,
   385  		"AXFR":                     105,
   386  		"_bind_CookieIn":           0,
   387  		"_default_QryRTT1600":      455849,
   388  		"_bind_BadCookieRcode":     0,
   389  		"QryNXDOMAIN":              5911582433,
   390  		"ReqSIG0":                  0,
   391  		"QUERY":                    36823356081,
   392  		"NULL":                     3606,
   393  		"_default_Lame":            1979599,
   394  		"_default_DS":              974240,
   395  		"SRV":                      27709732,
   396  		"_bind_QuerySockFail":      0,
   397  		"MG":                       4,
   398  		"_default_QryRTT800":       2712733,
   399  		"_bind_QryRTT1600+":        0,
   400  		"DNS64":                    0,
   401  		"_default_Truncated":       14028716,
   402  		"_default_QryRTT10":        629577,
   403  		"_default_SERVFAIL":        6533579,
   404  		"_default_AFSDB":           5,
   405  		"STATUS":                   35585,
   406  		"Response":                 36482142477,
   407  		"KeyTagOpt":                0,
   408  		"_default_Mismatch":        0,
   409  		"Requestv6":                156,
   410  		"LOC":                      52,
   411  		"_bind_NXDOMAIN":           0,
   412  		"PTR":                      694347710,
   413  		"_default_NSEC":            53712,
   414  		"_bind_QryRTT100":          0,
   415  		"RESERVED8":                0,
   416  		"DLV":                      37712,
   417  		"HINFO":                    9,
   418  		"_default_AAAA":            818803359,
   419  		"QryNXRedirRLookup":        0,
   420  		"TYPE127":                  1,
   421  		"_default_EDNS0Fail":       3987571,
   422  		"_default_CDS":             251,
   423  		"_bind_ServerCookieOut":    0,
   424  		"_bind_QueryCurUDP":        0,
   425  		"_bind_GlueFetchv6Fail":    0,
   426  		"UpdateFail":               0,
   427  		"_default_ZoneQuota":       0,
   428  		"_default_QuerySockFail":   0,
   429  		"_default_GlueFetchv6Fail": 91852240,
   430  		"RespSIG0":                 0,
   431  		"_default_GlueFetchv4Fail": 3964627,
   432  		"_bind_Responsev6":         0,
   433  		"_default_GlueFetchv6":     121268854,
   434  		"_default_Queryv6":         292282376,
   435  		"TruncatedResp":            25899017,
   436  		"ReqTSIG":                  0,
   437  		"_default_BadEDNSVersion":  0,
   438  		"_bind_NumFetch":           0,
   439  		"RESERVED12":               1,
   440  		"_default_Responsev6":      152,
   441  		"_default_SRV":             3855156,
   442  		"ANY":                      298567781,
   443  		"_default_CNAME":           38213966,
   444  		"_bind_ClientCookieOut":    0,
   445  		"NAPTR":                    109998,
   446  		"_default_QryRTT500":       2075608518,
   447  		"_default_A6":              558874,
   448  		"_bind_OtherError":         0,
   449  		"CookieMatch":              125340,
   450  		"_default_QryRTT1600+":     27681,
   451  		"_default_DLV":             20468,
   452  		"_default_NULL":            3554,
   453  		"_bind_Queryv6":            0,
   454  		"_bind_QueryTimeout":       0,
   455  		"_bind_ValAttempt":         0,
   456  		"RESERVED9":                0,
   457  		"A6":                       539773,
   458  		"MX":                       1484497,
   459  		"QrySuccess":               28810069822,
   460  		"XfrReqDone":               0,
   461  		"RESERVED15":               0,
   462  		"MAILB":                    42,
   463  		"Others":                   74007,
   464  		"_bind_ServerQuota":        0,
   465  		"_bind_EDNS0Fail":          0,
   466  		"QryNxrrset":               1311185019,
   467  		"QryFailure":               225980711,
   468  		"ReqBadSIG":                0,
   469  		"UpdateFwdFail":            0,
   470  		"ECSOpt":                   8743959,
   471  		"QryDropped":               52215943,
   472  		"EUI64":                    627,
   473  		"_default_ValAttempt":      0,
   474  		"_default_A":               3678445415,
   475  		"_bind_QryRTT800":          0,
   476  		"_default_NXDOMAIN":        1247746765,
   477  		"_default_RESERVED0":       19,
   478  		"_default_NumFetch":        62,
   479  		"_bind_Responsev4":         0,
   480  		"_bind_QryRTT1600":         0,
   481  		"CookieNew":                1061071,
   482  		"ReqBadEDNSVer":            450,
   483  		"TYPE115":                  285,
   484  		"_bind_FORMERR":            0,
   485  		"SOA":                      3863889,
   486  		"_bind_QryRTT10":           0,
   487  		"CookieBadSize":            0,
   488  		"_bind_GlueFetchv6":        0,
   489  		"QryNXRedir":               0,
   490  		"AAAA":                     3309600766,
   491  		"_default_QueryAbort":      0,
   492  		"QryTCP":                   4233061,
   493  		"UpdateDone":               0,
   494  		"IQUERY":                   199,
   495  	}
   496  
   497  	assert.Equal(t, expected, job.Collect())
   498  	assert.Len(t, *job.charts, 20)
   499  }
   500  
   501  func TestBind_InvalidData(t *testing.T) {
   502  	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, _ = w.Write([]byte("hello and goodbye")) }))
   503  	defer ts.Close()
   504  
   505  	job := New()
   506  	job.URL = ts.URL + "/json/v1"
   507  	require.True(t, job.Init())
   508  	assert.False(t, job.Check())
   509  }
   510  
   511  func TestBind_404(t *testing.T) {
   512  	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(404) }))
   513  	defer ts.Close()
   514  
   515  	job := New()
   516  	job.URL = ts.URL + "/json/v1"
   517  	require.True(t, job.Init())
   518  	assert.False(t, job.Check())
   519  }