github.com/observiq/bindplane-agent@v1.51.0/internal/service/managed_test.go (about) 1 // Copyright observIQ, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package service 16 17 import ( 18 "context" 19 "errors" 20 "testing" 21 22 colmocks "github.com/observiq/bindplane-agent/collector/mocks" 23 "github.com/observiq/bindplane-agent/opamp/mocks" 24 "github.com/stretchr/testify/assert" 25 "github.com/stretchr/testify/mock" 26 "github.com/stretchr/testify/require" 27 "go.uber.org/zap" 28 ) 29 30 // TestNewManagedCollectorService_BadManagerConfig tests NewManagedCollectorService 31 // for a bad manger config. This function starts an entire observiq client which is tested 32 // in it's own package so we don't do robust testing here. 33 func TestNewManagedCollectorService_BadManagerConfig(t *testing.T) { 34 mockCol := colmocks.NewMockCollector(t) 35 managedService, err := NewManagedCollectorService(mockCol, zap.NewNop(), "./bad_manger.yaml", "./bad_collector.yaml", "./bad_logging.yaml") 36 assert.ErrorContains(t, err, "failed to parse manager config") 37 assert.Nil(t, managedService) 38 } 39 40 func TestManageCollectorServiceStart(t *testing.T) { 41 testCases := []struct { 42 desc string 43 setupMocks func(*mocks.MockClient) 44 expectedError error 45 }{ 46 { 47 desc: "Client fails to connect", 48 setupMocks: func(m *mocks.MockClient) { 49 m.On("Connect", mock.Anything).Return(errors.New("oops")) 50 }, 51 expectedError: errors.New("oops"), 52 }, 53 { 54 desc: "Client successfully connects", 55 setupMocks: func(m *mocks.MockClient) { 56 m.On("Connect", mock.Anything).Return(nil) 57 }, 58 expectedError: nil, 59 }, 60 } 61 62 for _, tc := range testCases { 63 t.Run(tc.desc, func(t *testing.T) { 64 mockClient := mocks.NewMockClient(t) 65 66 tc.setupMocks(mockClient) 67 68 m := &ManagedCollectorService{ 69 client: mockClient, 70 logger: zap.NewNop(), 71 } 72 73 err := m.Start(context.Background()) 74 if tc.expectedError == nil { 75 assert.NoError(t, err) 76 } else { 77 assert.ErrorContains(t, err, tc.expectedError.Error()) 78 } 79 }) 80 } 81 } 82 83 func TestManageCollectorServiceStop(t *testing.T) { 84 testCases := []struct { 85 desc string 86 setupMocks func(*mocks.MockClient) 87 expectedError error 88 }{ 89 { 90 desc: "Client fails to disconnect", 91 setupMocks: func(m *mocks.MockClient) { 92 m.On("Disconnect", mock.Anything).Return(errors.New("oops")) 93 }, 94 expectedError: errors.New("oops"), 95 }, 96 { 97 desc: "Client successfully disconnects", 98 setupMocks: func(m *mocks.MockClient) { 99 m.On("Disconnect", mock.Anything).Return(nil) 100 }, 101 expectedError: nil, 102 }, 103 } 104 105 for _, tc := range testCases { 106 t.Run(tc.desc, func(t *testing.T) { 107 mockClient := mocks.NewMockClient(t) 108 109 tc.setupMocks(mockClient) 110 111 m := &ManagedCollectorService{ 112 client: mockClient, 113 logger: zap.NewNop(), 114 } 115 116 err := m.Stop(context.Background()) 117 if tc.expectedError == nil { 118 assert.NoError(t, err) 119 } else { 120 assert.ErrorContains(t, err, tc.expectedError.Error()) 121 } 122 }) 123 } 124 } 125 126 func TestManageCollectorServiceError(t *testing.T) { 127 // Just test we return a non-nil channel 128 m := &ManagedCollectorService{} 129 errChan := m.Error() 130 require.NotNil(t, errChan) 131 }