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  }