github.com/netdata/go.d.plugin@v0.58.1/modules/k8s_kubeproxy/kubeproxy_test.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package k8s_kubeproxy 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 testMetrics, _ = os.ReadFile("testdata/metrics.txt") 16 17 func TestNew(t *testing.T) { 18 job := New() 19 20 assert.IsType(t, (*KubeProxy)(nil), job) 21 assert.Equal(t, defaultURL, job.URL) 22 assert.Equal(t, defaultHTTPTimeout, job.Timeout.Duration) 23 } 24 25 func TestKubeProxy_Charts(t *testing.T) { assert.NotNil(t, New().Charts()) } 26 27 func TestKubeProxy_Cleanup(t *testing.T) { New().Cleanup() } 28 29 func TestKubeProxy_Init(t *testing.T) { assert.True(t, New().Init()) } 30 31 func TestKubeProxy_InitNG(t *testing.T) { 32 job := New() 33 job.URL = "" 34 assert.False(t, job.Init()) 35 } 36 37 func TestKubeProxy_Check(t *testing.T) { 38 ts := httptest.NewServer( 39 http.HandlerFunc( 40 func(w http.ResponseWriter, r *http.Request) { 41 _, _ = w.Write(testMetrics) 42 })) 43 defer ts.Close() 44 45 job := New() 46 job.URL = ts.URL + "/metrics" 47 require.True(t, job.Init()) 48 assert.True(t, job.Check()) 49 } 50 51 func TestKubeProxy_CheckNG(t *testing.T) { 52 job := New() 53 job.URL = "http://127.0.0.1:38001/metrics" 54 require.True(t, job.Init()) 55 assert.False(t, job.Check()) 56 } 57 58 func TestKubeProxy_Collect(t *testing.T) { 59 ts := httptest.NewServer( 60 http.HandlerFunc( 61 func(w http.ResponseWriter, r *http.Request) { 62 _, _ = w.Write(testMetrics) 63 })) 64 defer ts.Close() 65 66 job := New() 67 job.URL = ts.URL + "/metrics" 68 require.True(t, job.Init()) 69 require.True(t, job.Check()) 70 71 expected := map[string]int64{ 72 "sync_proxy_rules_count": 2669, 73 "sync_proxy_rules_bucket_1000": 1, 74 "sync_proxy_rules_bucket_2000": 0, 75 "sync_proxy_rules_bucket_4000": 0, 76 "sync_proxy_rules_bucket_8000": 0, 77 "sync_proxy_rules_bucket_16000": 23, 78 "sync_proxy_rules_bucket_32000": 2510, 79 "sync_proxy_rules_bucket_64000": 126, 80 "sync_proxy_rules_bucket_128000": 8, 81 "sync_proxy_rules_bucket_256000": 0, 82 "sync_proxy_rules_bucket_512000": 1, 83 "sync_proxy_rules_bucket_1024000": 0, 84 "sync_proxy_rules_bucket_4096000": 0, 85 "sync_proxy_rules_bucket_8192000": 0, 86 "sync_proxy_rules_bucket_2048000": 0, 87 "sync_proxy_rules_bucket_16384000": 0, 88 "sync_proxy_rules_bucket_+Inf": 0, 89 "rest_client_requests_201": 1, 90 "rest_client_requests_200": 362, 91 "rest_client_requests_GET": 362, 92 "rest_client_requests_POST": 1, 93 "http_request_duration_05": 1515, 94 "http_request_duration_09": 3939, 95 "http_request_duration_099": 9464, 96 } 97 98 assert.Equal(t, expected, job.Collect()) 99 } 100 101 func TestKubeProxy_InvalidData(t *testing.T) { 102 ts := httptest.NewServer( 103 http.HandlerFunc( 104 func(w http.ResponseWriter, r *http.Request) { 105 _, _ = w.Write([]byte("hello and goodbye")) 106 })) 107 defer ts.Close() 108 109 job := New() 110 job.URL = ts.URL + "/metrics" 111 require.True(t, job.Init()) 112 assert.False(t, job.Check()) 113 } 114 115 func TestKubeProxy_404(t *testing.T) { 116 ts := httptest.NewServer( 117 http.HandlerFunc( 118 func(w http.ResponseWriter, r *http.Request) { 119 w.WriteHeader(http.StatusNotFound) 120 })) 121 defer ts.Close() 122 123 job := New() 124 job.URL = ts.URL + "/metrics" 125 require.True(t, job.Init()) 126 assert.False(t, job.Check()) 127 }