...

Source file src/github.com/cybertec-postgresql/pgwatch/v3/internal/sinks/multiwriter_test.go

Documentation: github.com/cybertec-postgresql/pgwatch/v3/internal/sinks

     1  package sinks
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/cybertec-postgresql/pgwatch/v3/internal/metrics"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  type MockWriter struct{}
    12  
    13  func (mw *MockWriter) SyncMetric(_, _, _ string) error {
    14  	return nil
    15  }
    16  
    17  func (mw *MockWriter) Write(_ []metrics.MeasurementEnvelope) error {
    18  	return nil
    19  }
    20  
    21  func TestNewMultiWriter(t *testing.T) {
    22  	input := []struct {
    23  		opts *CmdOpts
    24  		w    bool // Writer returned
    25  		err  bool // error returned
    26  	}{
    27  		{&CmdOpts{}, false, true},
    28  		{&CmdOpts{
    29  			Sinks: []string{"foo"},
    30  		}, false, true},
    31  		{&CmdOpts{
    32  			Sinks: []string{"jsonfile://test.json"},
    33  		}, true, false},
    34  		{&CmdOpts{
    35  			Sinks: []string{"jsonfile://test.json", "jsonfile://test1.json"},
    36  		}, true, false},
    37  		{&CmdOpts{
    38  			Sinks: []string{"prometheus://foo/"},
    39  		}, false, true},
    40  		{&CmdOpts{
    41  			Sinks: []string{"rpc://foo/"},
    42  		}, false, true},
    43  		{&CmdOpts{
    44  			Sinks: []string{"postgresql:///baz"},
    45  		}, false, true},
    46  		{&CmdOpts{
    47  			Sinks: []string{"foo:///"},
    48  		}, false, true},
    49  	}
    50  
    51  	for _, i := range input {
    52  		mw, err := NewSinkWriter(context.Background(), i.opts, metrics.GetDefaultMetrics())
    53  		if i.err {
    54  			assert.Error(t, err)
    55  		} else {
    56  			assert.NoError(t, err)
    57  		}
    58  		if i.w {
    59  			assert.NotNil(t, mw)
    60  		} else {
    61  			assert.Nil(t, mw)
    62  		}
    63  	}
    64  }
    65  
    66  func TestAddWriter(t *testing.T) {
    67  	mw := &MultiWriter{}
    68  	mockWriter := &MockWriter{}
    69  	mw.AddWriter(mockWriter)
    70  	assert.Equal(t, 1, len(mw.writers))
    71  }
    72  
    73  func TestSyncMetrics(t *testing.T) {
    74  	mw := &MultiWriter{}
    75  	mockWriter := &MockWriter{}
    76  	mw.AddWriter(mockWriter)
    77  	err := mw.SyncMetric("db", "metric", "op")
    78  	assert.NoError(t, err)
    79  }
    80  
    81  func TestWriteMeasurements(t *testing.T) {
    82  	mw := &MultiWriter{}
    83  	mockWriter := &MockWriter{}
    84  	mw.AddWriter(mockWriter)
    85  	err := mw.Write([]metrics.MeasurementEnvelope{{}})
    86  	assert.NoError(t, err)
    87  }
    88