github.com/netdata/go.d.plugin@v0.58.1/modules/fluentd/fluentd_test.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package fluentd
     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 testDataPlugins, _ = os.ReadFile("testdata/plugins.json")
    16  
    17  func TestNew(t *testing.T) {
    18  	job := New()
    19  	assert.IsType(t, (*Fluentd)(nil), job)
    20  	assert.NotNil(t, job.charts)
    21  	assert.NotNil(t, job.activePlugins)
    22  	assert.Equal(t, defaultURL, job.URL)
    23  	assert.Equal(t, defaultHTTPTimeout, job.Timeout.Duration)
    24  }
    25  
    26  func TestFluentd_Init(t *testing.T) {
    27  	// OK
    28  	job := New()
    29  	assert.True(t, job.Init())
    30  	assert.NotNil(t, job.apiClient)
    31  
    32  	//NG
    33  	job = New()
    34  	job.URL = ""
    35  	assert.False(t, job.Init())
    36  }
    37  
    38  func TestFluentd_Check(t *testing.T) {
    39  	ts := httptest.NewServer(http.HandlerFunc(
    40  		func(w http.ResponseWriter, r *http.Request) {
    41  			_, _ = w.Write(testDataPlugins)
    42  		}))
    43  	defer ts.Close()
    44  
    45  	// OK
    46  	job := New()
    47  	job.URL = ts.URL
    48  	require.True(t, job.Init())
    49  	require.True(t, job.Check())
    50  
    51  	// NG
    52  	job = New()
    53  	job.URL = "http://127.0.0.1:38001/api/plugins.json"
    54  	require.True(t, job.Init())
    55  	require.False(t, job.Check())
    56  }
    57  
    58  func TestFluentd_Charts(t *testing.T) {
    59  	assert.NotNil(t, New().Charts())
    60  }
    61  
    62  func TestFluentd_Cleanup(t *testing.T) {
    63  	New().Cleanup()
    64  }
    65  
    66  func TestFluentd_Collect(t *testing.T) {
    67  	ts := httptest.NewServer(http.HandlerFunc(
    68  		func(w http.ResponseWriter, r *http.Request) {
    69  			_, _ = w.Write(testDataPlugins)
    70  		}))
    71  	defer ts.Close()
    72  
    73  	job := New()
    74  	job.URL = ts.URL
    75  
    76  	require.True(t, job.Init())
    77  	require.True(t, job.Check())
    78  
    79  	expected := map[string]int64{
    80  		"output_stdout_stdout_output_retry_count":         0,
    81  		"output_td_tdlog_output_retry_count":              0,
    82  		"output_td_tdlog_output_buffer_queue_length":      0,
    83  		"output_td_tdlog_output_buffer_total_queued_size": 0,
    84  	}
    85  	assert.Equal(t, expected, job.Collect())
    86  	assert.Len(t, job.charts.Get("retry_count").Dims, 2)
    87  	assert.Len(t, job.charts.Get("buffer_queue_length").Dims, 1)
    88  	assert.Len(t, job.charts.Get("buffer_total_queued_size").Dims, 1)
    89  }
    90  
    91  func TestFluentd_InvalidData(t *testing.T) {
    92  	ts := httptest.NewServer(http.HandlerFunc(
    93  		func(w http.ResponseWriter, r *http.Request) {
    94  			_, _ = w.Write([]byte("hello and goodbye"))
    95  		}))
    96  	defer ts.Close()
    97  
    98  	job := New()
    99  	job.URL = ts.URL
   100  	require.True(t, job.Init())
   101  	assert.False(t, job.Check())
   102  }
   103  
   104  func TestFluentd_404(t *testing.T) {
   105  	ts := httptest.NewServer(http.HandlerFunc(
   106  		func(w http.ResponseWriter, r *http.Request) {
   107  			w.WriteHeader(404)
   108  		}))
   109  	defer ts.Close()
   110  
   111  	job := New()
   112  	job.URL = ts.URL
   113  	require.True(t, job.Init())
   114  	assert.False(t, job.Check())
   115  }