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 }