github.com/mongodb/grip@v0.0.0-20240213223901-f906268d82b9/send/splunk_test.go (about)

     1  package send
     2  
     3  import (
     4  	"net/http"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/mongodb/grip/level"
     9  	"github.com/mongodb/grip/message"
    10  	"github.com/stretchr/testify/suite"
    11  )
    12  
    13  type SplunkSuite struct {
    14  	info   SplunkConnectionInfo
    15  	sender splunkLogger
    16  	suite.Suite
    17  }
    18  
    19  func TestSplunkSuite(t *testing.T) {
    20  	suite.Run(t, new(SplunkSuite))
    21  }
    22  
    23  func (s *SplunkSuite) SetupTest() {
    24  	s.sender = splunkLogger{
    25  		info:   SplunkConnectionInfo{},
    26  		client: &splunkClientMock{},
    27  		Base:   NewBase("name"),
    28  	}
    29  
    30  	s.NoError(s.sender.client.Create(http.DefaultClient, s.info))
    31  	s.NoError(s.sender.SetLevel(LevelInfo{level.Debug, level.Info}))
    32  }
    33  
    34  func (s *SplunkSuite) TestEnvironmentVariableReader() {
    35  	serverVal := "serverURL"
    36  	tokenVal := "token"
    37  
    38  	defer os.Setenv(splunkServerURL, os.Getenv(splunkServerURL))
    39  	defer os.Setenv(splunkClientToken, os.Getenv(splunkClientToken))
    40  
    41  	s.NoError(os.Setenv(splunkServerURL, serverVal))
    42  	s.NoError(os.Setenv(splunkClientToken, tokenVal))
    43  
    44  	info := GetSplunkConnectionInfo()
    45  
    46  	s.Equal(serverVal, info.ServerURL)
    47  	s.Equal(tokenVal, info.Token)
    48  }
    49  
    50  func (s *SplunkSuite) TestNewConstructor() {
    51  	sender, err := NewSplunkLogger("name", s.info, LevelInfo{level.Debug, level.Info})
    52  	s.NoError(err)
    53  	s.NotNil(sender)
    54  }
    55  
    56  func (s *SplunkSuite) TestAutoConstructor() {
    57  	serverVal := "serverURL"
    58  	tokenVal := "token"
    59  
    60  	defer os.Setenv(splunkServerURL, os.Getenv(splunkServerURL))
    61  	defer os.Setenv(splunkClientToken, os.Getenv(splunkClientToken))
    62  
    63  	s.NoError(os.Setenv(splunkServerURL, serverVal))
    64  	s.NoError(os.Setenv(splunkClientToken, tokenVal))
    65  
    66  	sender, err := MakeSplunkLogger("name")
    67  	s.NoError(err)
    68  	s.NotNil(sender)
    69  }
    70  
    71  func (s *SplunkSuite) TestAutoConstructorFailsWhenEnvVarFails() {
    72  	serverVal := ""
    73  	tokenVal := ""
    74  
    75  	defer os.Setenv(splunkServerURL, os.Getenv(splunkServerURL))
    76  	defer os.Setenv(splunkClientToken, os.Getenv(splunkClientToken))
    77  
    78  	s.NoError(os.Setenv(splunkServerURL, serverVal))
    79  	s.NoError(os.Setenv(splunkClientToken, tokenVal))
    80  
    81  	sender, err := MakeSplunkLogger("name")
    82  	s.Error(err)
    83  	s.Nil(sender)
    84  
    85  	serverVal = "serverVal"
    86  
    87  	s.NoError(os.Setenv(splunkServerURL, serverVal))
    88  	sender, err = MakeSplunkLogger("name")
    89  	s.Error(err)
    90  	s.Nil(sender)
    91  }
    92  
    93  func (s *SplunkSuite) TestSendMethod() {
    94  	mock, ok := s.sender.client.(*splunkClientMock)
    95  	s.True(ok)
    96  	s.Equal(mock.numSent, 0)
    97  	s.Equal(mock.httpSent, 0)
    98  
    99  	m := message.NewDefaultMessage(level.Debug, "hello")
   100  	s.sender.Send(m)
   101  	s.Equal(mock.numSent, 0)
   102  	s.Equal(mock.httpSent, 0)
   103  
   104  	m = message.NewDefaultMessage(level.Alert, "")
   105  	s.sender.Send(m)
   106  	s.Equal(mock.numSent, 0)
   107  	s.Equal(mock.httpSent, 0)
   108  
   109  	m = message.NewDefaultMessage(level.Alert, "world")
   110  	s.sender.Send(m)
   111  	s.Equal(mock.numSent, 1)
   112  	s.Equal(mock.httpSent, 1)
   113  }
   114  
   115  func (s *SplunkSuite) TestSendMethodWithError() {
   116  	mock, ok := s.sender.client.(*splunkClientMock)
   117  	s.True(ok)
   118  	s.Equal(mock.numSent, 0)
   119  	s.Equal(mock.httpSent, 0)
   120  	s.False(mock.failSend)
   121  
   122  	m := message.NewDefaultMessage(level.Alert, "world")
   123  	s.sender.Send(m)
   124  	s.Equal(mock.numSent, 1)
   125  	s.Equal(mock.httpSent, 1)
   126  
   127  	mock.failSend = true
   128  	s.sender.Send(m)
   129  	s.Equal(mock.numSent, 1)
   130  	s.Equal(mock.httpSent, 1)
   131  }
   132  
   133  func (s *SplunkSuite) TestBatchSendMethod() {
   134  	mock, ok := s.sender.client.(*splunkClientMock)
   135  	s.True(ok)
   136  	s.Equal(mock.numSent, 0)
   137  	s.Equal(mock.httpSent, 0)
   138  
   139  	m1 := message.NewDefaultMessage(level.Alert, "hello")
   140  	m2 := message.NewDefaultMessage(level.Debug, "hello")
   141  	m3 := message.NewDefaultMessage(level.Alert, "")
   142  	m4 := message.NewDefaultMessage(level.Alert, "hello")
   143  
   144  	g := message.MakeGroupComposer(m1, m2, m3, m4)
   145  
   146  	s.sender.Send(g)
   147  	s.Equal(mock.numSent, 2)
   148  	s.Equal(mock.httpSent, 1)
   149  }
   150  
   151  func (s *SplunkSuite) TestBatchSendMethodWithEror() {
   152  	mock, ok := s.sender.client.(*splunkClientMock)
   153  	s.True(ok)
   154  	s.Equal(mock.numSent, 0)
   155  	s.Equal(mock.httpSent, 0)
   156  	s.False(mock.failSend)
   157  
   158  	m1 := message.NewDefaultMessage(level.Alert, "hello")
   159  	m2 := message.NewDefaultMessage(level.Debug, "hello")
   160  	m3 := message.NewDefaultMessage(level.Alert, "")
   161  	m4 := message.NewDefaultMessage(level.Alert, "hello")
   162  
   163  	g := message.MakeGroupComposer(m1, m2, m3, m4)
   164  
   165  	s.sender.Send(g)
   166  	s.Equal(mock.numSent, 2)
   167  	s.Equal(mock.httpSent, 1)
   168  
   169  	mock.failSend = true
   170  	s.sender.Send(g)
   171  	s.Equal(mock.numSent, 2)
   172  	s.Equal(mock.httpSent, 1)
   173  }