Implement linting issues and merge request comments
This commit is contained in:

committed by
Maximilian Pass

parent
4b5f0a3eb6
commit
32fe47d669
@@ -32,90 +32,98 @@ type ManagerTestSuite struct {
|
||||
|
||||
func (s *ManagerTestSuite) SetupTest() {
|
||||
s.apiMock = &nomad.ExecutorApiMock{}
|
||||
s.nomadRunnerManager = NewNomadRunnerManager(s.apiMock, context.Background())
|
||||
s.exerciseRunner = NewRunner(tests.DefaultRunnerId)
|
||||
s.mockRunnerQueries([]string{})
|
||||
// Instantly closed context to manually start the update process in some cases
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
cancel()
|
||||
s.nomadRunnerManager = NewNomadRunnerManager(s.apiMock, ctx)
|
||||
|
||||
s.exerciseRunner = NewRunner(tests.DefaultRunnerID)
|
||||
mockRunnerQueries(s.apiMock, []string{})
|
||||
s.registerDefaultEnvironment()
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) mockRunnerQueries(returnedRunnerIds []string) {
|
||||
func mockRunnerQueries(apiMock *nomad.ExecutorApiMock, returnedRunnerIds []string) {
|
||||
// reset expected calls to allow new mocked return values
|
||||
s.apiMock.ExpectedCalls = []*mock.Call{}
|
||||
s.apiMock.On("WatchAllocations", mock.Anything, mock.Anything, mock.Anything).Return(nil)
|
||||
s.apiMock.On("LoadRunners", tests.DefaultJobId).Return(returnedRunnerIds, nil)
|
||||
s.apiMock.On("JobScale", tests.DefaultJobId).Return(len(returnedRunnerIds), nil)
|
||||
s.apiMock.On("SetJobScale", tests.DefaultJobId, mock.AnythingOfType("uint"), "Runner Requested").Return(nil)
|
||||
apiMock.ExpectedCalls = []*mock.Call{}
|
||||
call := apiMock.On("WatchAllocations", mock.Anything, mock.Anything, mock.Anything)
|
||||
call.Run(func(args mock.Arguments) {
|
||||
<-time.After(10 * time.Minute) // 10 minutes is the default test timeout
|
||||
call.ReturnArguments = mock.Arguments{nil}
|
||||
})
|
||||
apiMock.On("LoadRunners", tests.DefaultJobID).Return(returnedRunnerIds, nil)
|
||||
apiMock.On("JobScale", tests.DefaultJobID).Return(uint(len(returnedRunnerIds)), nil)
|
||||
apiMock.On("SetJobScale", tests.DefaultJobID, mock.AnythingOfType("uint"), "Runner Requested").Return(nil)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) registerDefaultEnvironment() {
|
||||
s.nomadRunnerManager.RegisterEnvironment(defaultEnvironmentId, tests.DefaultJobId, defaultDesiredRunnersCount)
|
||||
s.nomadRunnerManager.RegisterEnvironment(defaultEnvironmentID, tests.DefaultJobID, defaultDesiredRunnersCount)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) AddIdleRunnerForDefaultEnvironment(r Runner) {
|
||||
job, _ := s.nomadRunnerManager.jobs.Get(defaultEnvironmentId)
|
||||
job, _ := s.nomadRunnerManager.jobs.Get(defaultEnvironmentID)
|
||||
job.idleRunners.Add(r)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) waitForRunnerRefresh() {
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
<-time.After(100 * time.Millisecond)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestRegisterEnvironmentAddsNewJob() {
|
||||
s.nomadRunnerManager.RegisterEnvironment(anotherEnvironmentId, tests.DefaultJobId, defaultDesiredRunnersCount)
|
||||
job, ok := s.nomadRunnerManager.jobs.Get(defaultEnvironmentId)
|
||||
s.nomadRunnerManager.RegisterEnvironment(anotherEnvironmentID, tests.DefaultJobID, defaultDesiredRunnersCount)
|
||||
job, ok := s.nomadRunnerManager.jobs.Get(defaultEnvironmentID)
|
||||
s.True(ok)
|
||||
s.NotNil(job)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestClaimReturnsNotFoundErrorIfEnvironmentNotFound() {
|
||||
runner, err := s.nomadRunnerManager.Claim(EnvironmentId(42))
|
||||
runner, err := s.nomadRunnerManager.Claim(EnvironmentID(42))
|
||||
s.Nil(runner)
|
||||
s.Equal(ErrUnknownExecutionEnvironment, err)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestClaimReturnsRunnerIfAvailable() {
|
||||
s.AddIdleRunnerForDefaultEnvironment(s.exerciseRunner)
|
||||
receivedRunner, err := s.nomadRunnerManager.Claim(defaultEnvironmentId)
|
||||
receivedRunner, err := s.nomadRunnerManager.Claim(defaultEnvironmentID)
|
||||
s.NoError(err)
|
||||
s.Equal(s.exerciseRunner, receivedRunner)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestClaimReturnsErrorIfNoRunnerAvailable() {
|
||||
s.waitForRunnerRefresh()
|
||||
runner, err := s.nomadRunnerManager.Claim(defaultEnvironmentId)
|
||||
runner, err := s.nomadRunnerManager.Claim(defaultEnvironmentID)
|
||||
s.Nil(runner)
|
||||
s.Equal(ErrNoRunnersAvailable, err)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestClaimReturnsNoRunnerOfDifferentEnvironment() {
|
||||
s.AddIdleRunnerForDefaultEnvironment(s.exerciseRunner)
|
||||
receivedRunner, err := s.nomadRunnerManager.Claim(anotherEnvironmentId)
|
||||
receivedRunner, err := s.nomadRunnerManager.Claim(anotherEnvironmentID)
|
||||
s.Nil(receivedRunner)
|
||||
s.Error(err)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestClaimDoesNotReturnTheSameRunnerTwice() {
|
||||
s.AddIdleRunnerForDefaultEnvironment(s.exerciseRunner)
|
||||
s.AddIdleRunnerForDefaultEnvironment(NewRunner(tests.AnotherRunnerId))
|
||||
s.AddIdleRunnerForDefaultEnvironment(NewRunner(tests.AnotherRunnerID))
|
||||
|
||||
firstReceivedRunner, err := s.nomadRunnerManager.Claim(defaultEnvironmentId)
|
||||
require.NoError(s.T(), err)
|
||||
secondReceivedRunner, err := s.nomadRunnerManager.Claim(defaultEnvironmentId)
|
||||
require.NoError(s.T(), err)
|
||||
firstReceivedRunner, err := s.nomadRunnerManager.Claim(defaultEnvironmentID)
|
||||
s.NoError(err)
|
||||
secondReceivedRunner, err := s.nomadRunnerManager.Claim(defaultEnvironmentID)
|
||||
s.NoError(err)
|
||||
s.NotEqual(firstReceivedRunner, secondReceivedRunner)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestClaimThrowsAnErrorIfNoRunnersAvailable() {
|
||||
receivedRunner, err := s.nomadRunnerManager.Claim(defaultEnvironmentId)
|
||||
receivedRunner, err := s.nomadRunnerManager.Claim(defaultEnvironmentID)
|
||||
s.Nil(receivedRunner)
|
||||
s.Error(err)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestClaimAddsRunnerToUsedRunners() {
|
||||
s.mockRunnerQueries([]string{tests.DefaultRunnerId})
|
||||
mockRunnerQueries(s.apiMock, []string{tests.DefaultRunnerID})
|
||||
s.waitForRunnerRefresh()
|
||||
receivedRunner, err := s.nomadRunnerManager.Claim(defaultEnvironmentId)
|
||||
require.NoError(s.T(), err)
|
||||
receivedRunner, err := s.nomadRunnerManager.Claim(defaultEnvironmentID)
|
||||
s.Require().NoError(err)
|
||||
savedRunner, ok := s.nomadRunnerManager.usedRunners.Get(receivedRunner.Id())
|
||||
s.True(ok)
|
||||
s.Equal(savedRunner, receivedRunner)
|
||||
@@ -129,7 +137,7 @@ func (s *ManagerTestSuite) TestGetReturnsRunnerIfRunnerIsUsed() {
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestGetReturnsErrorIfRunnerNotFound() {
|
||||
savedRunner, err := s.nomadRunnerManager.Get(tests.DefaultRunnerId)
|
||||
savedRunner, err := s.nomadRunnerManager.Get(tests.DefaultRunnerID)
|
||||
s.Nil(savedRunner)
|
||||
s.Error(err)
|
||||
}
|
||||
@@ -157,94 +165,107 @@ func (s *ManagerTestSuite) TestReturnReturnsErrorWhenApiCallFailed() {
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestRefreshFetchesRunners() {
|
||||
s.mockRunnerQueries([]string{tests.DefaultRunnerId})
|
||||
mockRunnerQueries(s.apiMock, []string{tests.DefaultRunnerID})
|
||||
s.waitForRunnerRefresh()
|
||||
s.apiMock.AssertCalled(s.T(), "LoadRunners", tests.DefaultJobId)
|
||||
s.apiMock.AssertCalled(s.T(), "LoadRunners", tests.DefaultJobID)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestNewRunnersFoundInRefreshAreAddedToIdleRunners() {
|
||||
s.mockRunnerQueries([]string{tests.DefaultRunnerId})
|
||||
mockRunnerQueries(s.apiMock, []string{tests.DefaultRunnerID})
|
||||
s.waitForRunnerRefresh()
|
||||
job, _ := s.nomadRunnerManager.jobs.Get(defaultEnvironmentId)
|
||||
_, ok := job.idleRunners.Get(tests.DefaultRunnerId)
|
||||
job, _ := s.nomadRunnerManager.jobs.Get(defaultEnvironmentID)
|
||||
_, ok := job.idleRunners.Get(tests.DefaultRunnerID)
|
||||
s.True(ok)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestRefreshScalesJob() {
|
||||
s.mockRunnerQueries([]string{tests.DefaultRunnerId})
|
||||
mockRunnerQueries(s.apiMock, []string{tests.DefaultRunnerID})
|
||||
s.waitForRunnerRefresh()
|
||||
// use one runner to necessitate rescaling
|
||||
_, _ = s.nomadRunnerManager.Claim(defaultEnvironmentId)
|
||||
_, _ = s.nomadRunnerManager.Claim(defaultEnvironmentID)
|
||||
s.waitForRunnerRefresh()
|
||||
s.apiMock.AssertCalled(s.T(), "SetJobScale", tests.DefaultJobId, defaultDesiredRunnersCount, "Runner Requested")
|
||||
s.apiMock.AssertCalled(s.T(), "SetJobScale", tests.DefaultJobID, defaultDesiredRunnersCount, "Runner Requested")
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestRefreshAddsRunnerToPool() {
|
||||
s.mockRunnerQueries([]string{tests.DefaultRunnerId})
|
||||
mockRunnerQueries(s.apiMock, []string{tests.DefaultRunnerID})
|
||||
s.waitForRunnerRefresh()
|
||||
job, _ := s.nomadRunnerManager.jobs.Get(defaultEnvironmentId)
|
||||
poolRunner, ok := job.idleRunners.Get(tests.DefaultRunnerId)
|
||||
job, _ := s.nomadRunnerManager.jobs.Get(defaultEnvironmentID)
|
||||
poolRunner, ok := job.idleRunners.Get(tests.DefaultRunnerID)
|
||||
s.True(ok)
|
||||
s.Equal(tests.DefaultRunnerId, poolRunner.Id())
|
||||
s.Equal(tests.DefaultRunnerID, poolRunner.Id())
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestUpdateRunnersLogsErrorFromWatchAllocation() {
|
||||
var hook *test.Hook
|
||||
logger, hook := test.NewNullLogger()
|
||||
log = logger.WithField("pkg", "runner")
|
||||
s.modifyMockedCall("WatchAllocations", func(call *mock.Call) {
|
||||
call.Return(tests.DefaultError)
|
||||
})
|
||||
|
||||
s.nomadRunnerManager.updateRunners(context.Background())
|
||||
|
||||
require.Equal(s.T(), 1, len(hook.Entries))
|
||||
s.Equal(logrus.ErrorLevel, hook.LastEntry().Level)
|
||||
s.Equal(hook.LastEntry().Data[logrus.ErrorKey], tests.DefaultError)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestUpdateRunnersAddsIdleRunner() {
|
||||
allocation := &nomadApi.Allocation{ID: tests.AllocationID}
|
||||
defaultJob, ok := s.nomadRunnerManager.jobs.Get(defaultEnvironmentId)
|
||||
require.True(s.T(), ok)
|
||||
allocation.JobID = string(defaultJob.jobId)
|
||||
|
||||
_, ok = defaultJob.idleRunners.Get(allocation.ID)
|
||||
require.False(s.T(), ok)
|
||||
|
||||
s.modifyMockedCall("WatchAllocations", func(call *mock.Call) {
|
||||
modifyMockedCall(s.apiMock, "WatchAllocations", func(call *mock.Call) {
|
||||
call.Run(func(args mock.Arguments) {
|
||||
onCreate, ok := args.Get(1).(nomad.AllocationProcessor)
|
||||
require.True(s.T(), ok)
|
||||
onCreate(allocation)
|
||||
call.ReturnArguments = mock.Arguments{tests.ErrDefault}
|
||||
})
|
||||
})
|
||||
|
||||
s.nomadRunnerManager.updateRunners(context.Background())
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
go s.nomadRunnerManager.updateRunners(ctx)
|
||||
<-time.After(10 * time.Millisecond)
|
||||
|
||||
s.Require().Equal(1, len(hook.Entries))
|
||||
s.Equal(logrus.ErrorLevel, hook.LastEntry().Level)
|
||||
s.Equal(hook.LastEntry().Data[logrus.ErrorKey], tests.ErrDefault)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestUpdateRunnersAddsIdleRunner() {
|
||||
allocation := &nomadApi.Allocation{ID: tests.DefaultRunnerID}
|
||||
defaultJob, ok := s.nomadRunnerManager.jobs.Get(defaultEnvironmentID)
|
||||
s.Require().True(ok)
|
||||
allocation.JobID = string(defaultJob.jobID)
|
||||
|
||||
_, ok = defaultJob.idleRunners.Get(allocation.ID)
|
||||
s.Require().False(ok)
|
||||
|
||||
modifyMockedCall(s.apiMock, "WatchAllocations", func(call *mock.Call) {
|
||||
call.Run(func(args mock.Arguments) {
|
||||
onCreate, ok := args.Get(1).(nomad.AllocationProcessor)
|
||||
s.Require().True(ok)
|
||||
onCreate(allocation)
|
||||
call.ReturnArguments = mock.Arguments{nil}
|
||||
})
|
||||
})
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
go s.nomadRunnerManager.updateRunners(ctx)
|
||||
<-time.After(10 * time.Millisecond)
|
||||
|
||||
_, ok = defaultJob.idleRunners.Get(allocation.ID)
|
||||
s.True(ok)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestUpdateRunnersRemovesIdleAndUsedRunner() {
|
||||
allocation := &nomadApi.Allocation{ID: tests.AllocationID}
|
||||
defaultJob, ok := s.nomadRunnerManager.jobs.Get(defaultEnvironmentId)
|
||||
require.True(s.T(), ok)
|
||||
allocation.JobID = string(defaultJob.jobId)
|
||||
allocation := &nomadApi.Allocation{ID: tests.DefaultRunnerID}
|
||||
defaultJob, ok := s.nomadRunnerManager.jobs.Get(defaultEnvironmentID)
|
||||
s.Require().True(ok)
|
||||
allocation.JobID = string(defaultJob.jobID)
|
||||
|
||||
testRunner := NewRunner(allocation.ID)
|
||||
defaultJob.idleRunners.Add(testRunner)
|
||||
s.nomadRunnerManager.usedRunners.Add(testRunner)
|
||||
|
||||
s.modifyMockedCall("WatchAllocations", func(call *mock.Call) {
|
||||
modifyMockedCall(s.apiMock, "WatchAllocations", func(call *mock.Call) {
|
||||
call.Run(func(args mock.Arguments) {
|
||||
onDelete, ok := args.Get(2).(nomad.AllocationProcessor)
|
||||
require.True(s.T(), ok)
|
||||
s.Require().True(ok)
|
||||
onDelete(allocation)
|
||||
call.ReturnArguments = mock.Arguments{nil}
|
||||
})
|
||||
})
|
||||
|
||||
s.nomadRunnerManager.updateRunners(context.Background())
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
go s.nomadRunnerManager.updateRunners(ctx)
|
||||
<-time.After(10 * time.Millisecond)
|
||||
|
||||
_, ok = defaultJob.idleRunners.Get(allocation.ID)
|
||||
s.False(ok)
|
||||
@@ -252,18 +273,16 @@ func (s *ManagerTestSuite) TestUpdateRunnersRemovesIdleAndUsedRunner() {
|
||||
s.False(ok)
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) modifyMockedCall(method string, modifier func(call *mock.Call)) {
|
||||
for _, c := range s.apiMock.ExpectedCalls {
|
||||
func modifyMockedCall(apiMock *nomad.ExecutorApiMock, method string, modifier func(call *mock.Call)) {
|
||||
for _, c := range apiMock.ExpectedCalls {
|
||||
if c.Method == method {
|
||||
modifier(c)
|
||||
}
|
||||
}
|
||||
s.True(ok)
|
||||
s.Equal(tests.DefaultRunnerId, poolRunner.Id())
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestWhenEnvironmentDoesNotExistEnvironmentExistsReturnsFalse() {
|
||||
id := anotherEnvironmentId
|
||||
id := anotherEnvironmentID
|
||||
_, ok := s.nomadRunnerManager.jobs.Get(id)
|
||||
require.False(s.T(), ok)
|
||||
|
||||
@@ -271,8 +290,8 @@ func (s *ManagerTestSuite) TestWhenEnvironmentDoesNotExistEnvironmentExistsRetur
|
||||
}
|
||||
|
||||
func (s *ManagerTestSuite) TestWhenEnvironmentExistsEnvironmentExistsReturnsTrue() {
|
||||
id := anotherEnvironmentId
|
||||
s.nomadRunnerManager.jobs.Add(&NomadJob{environmentId: id})
|
||||
id := anotherEnvironmentID
|
||||
s.nomadRunnerManager.jobs.Add(&NomadJob{environmentID: id})
|
||||
|
||||
exists := s.nomadRunnerManager.EnvironmentExists(id)
|
||||
s.True(exists)
|
||||
|
Reference in New Issue
Block a user