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  }