github.com/netdata/go.d.plugin@v0.58.1/modules/nginx/nginx_test.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package nginx 4 5 import ( 6 "net/http" 7 "net/http/httptest" 8 "os" 9 "testing" 10 11 "github.com/netdata/go.d.plugin/agent/module" 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 ) 15 16 var ( 17 testStatusData, _ = os.ReadFile("testdata/status.txt") 18 testTengineStatusData, _ = os.ReadFile("testdata/tengine-status.txt") 19 ) 20 21 func TestNginx_Cleanup(t *testing.T) { New().Cleanup() } 22 23 func TestNew(t *testing.T) { 24 job := New() 25 26 assert.Implements(t, (*module.Module)(nil), job) 27 assert.Equal(t, defaultURL, job.URL) 28 assert.Equal(t, defaultHTTPTimeout, job.Timeout.Duration) 29 } 30 31 func TestNginx_Init(t *testing.T) { 32 job := New() 33 34 require.True(t, job.Init()) 35 assert.NotNil(t, job.apiClient) 36 } 37 38 func TestNginx_Check(t *testing.T) { 39 ts := httptest.NewServer( 40 http.HandlerFunc( 41 func(w http.ResponseWriter, r *http.Request) { 42 _, _ = w.Write(testStatusData) 43 })) 44 defer ts.Close() 45 46 job := New() 47 job.URL = ts.URL 48 require.True(t, job.Init()) 49 assert.True(t, job.Check()) 50 } 51 52 func TestNginx_CheckNG(t *testing.T) { 53 job := New() 54 55 job.URL = "http://127.0.0.1:38001/us" 56 require.True(t, job.Init()) 57 assert.False(t, job.Check()) 58 } 59 60 func TestNginx_Charts(t *testing.T) { assert.NotNil(t, New().Charts()) } 61 62 func TestNginx_Collect(t *testing.T) { 63 ts := httptest.NewServer( 64 http.HandlerFunc( 65 func(w http.ResponseWriter, r *http.Request) { 66 _, _ = w.Write(testStatusData) 67 })) 68 defer ts.Close() 69 70 job := New() 71 job.URL = ts.URL 72 require.True(t, job.Init()) 73 require.True(t, job.Check()) 74 75 expected := map[string]int64{ 76 "accepts": 36, 77 "active": 1, 78 "handled": 36, 79 "reading": 0, 80 "requests": 126, 81 "waiting": 0, 82 "writing": 1, 83 } 84 85 assert.Equal(t, expected, job.Collect()) 86 } 87 88 func TestNginx_CollectTengine(t *testing.T) { 89 ts := httptest.NewServer( 90 http.HandlerFunc( 91 func(w http.ResponseWriter, r *http.Request) { 92 _, _ = w.Write(testTengineStatusData) 93 })) 94 defer ts.Close() 95 96 job := New() 97 job.URL = ts.URL 98 require.True(t, job.Init()) 99 require.True(t, job.Check()) 100 101 expected := map[string]int64{ 102 "accepts": 1140, 103 "active": 1, 104 "handled": 1140, 105 "reading": 0, 106 "request_time": 75806, 107 "requests": 1140, 108 "waiting": 0, 109 "writing": 1, 110 } 111 112 assert.Equal(t, expected, job.Collect()) 113 } 114 115 func TestNginx_InvalidData(t *testing.T) { 116 ts := httptest.NewServer( 117 http.HandlerFunc( 118 func(w http.ResponseWriter, r *http.Request) { 119 _, _ = w.Write([]byte("hello and goodbye")) 120 })) 121 defer ts.Close() 122 123 job := New() 124 job.URL = ts.URL 125 require.True(t, job.Init()) 126 assert.False(t, job.Check()) 127 } 128 129 func TestNginx_404(t *testing.T) { 130 ts := httptest.NewServer( 131 http.HandlerFunc( 132 func(w http.ResponseWriter, r *http.Request) { 133 w.WriteHeader(http.StatusNotFound) 134 })) 135 defer ts.Close() 136 137 job := New() 138 job.URL = ts.URL 139 require.True(t, job.Init()) 140 assert.False(t, job.Check()) 141 }