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  }