Refactor setup of runner manager test suite

This commit is contained in:
Jan-Eric Hellenberg
2021-05-18 12:36:46 +02:00
parent 5d5f175f52
commit 0590f31200

View File

@ -26,15 +26,17 @@ type ManagerTestSuite struct {
exerciseRunner Runner exerciseRunner Runner
} }
func (suite *ManagerTestSuite) setUp(returnedRunnerIds []string) { func (suite *ManagerTestSuite) SetupTest() {
suite.apiMock = &nomad.ExecutorApiMock{} suite.apiMock = &nomad.ExecutorApiMock{}
suite.nomadRunnerManager = NewNomadRunnerManager(suite.apiMock) suite.nomadRunnerManager = NewNomadRunnerManager(suite.apiMock)
suite.exerciseRunner = CreateTestRunner() suite.exerciseRunner = CreateTestRunner()
suite.mockRunnerQueries(returnedRunnerIds) suite.mockRunnerQueries([]string{})
suite.registerDefaultEnvironment() suite.registerDefaultEnvironment()
} }
func (suite *ManagerTestSuite) mockRunnerQueries(returnedRunnerIds []string) { func (suite *ManagerTestSuite) mockRunnerQueries(returnedRunnerIds []string) {
// reset expected calls to allow new mocked return values
suite.apiMock.ExpectedCalls = []*mock.Call{}
suite.apiMock.On("LoadRunners", jobId).Return(returnedRunnerIds, nil) suite.apiMock.On("LoadRunners", jobId).Return(returnedRunnerIds, nil)
suite.apiMock.On("JobScale", jobId).Return(len(returnedRunnerIds), nil) suite.apiMock.On("JobScale", jobId).Return(len(returnedRunnerIds), nil)
suite.apiMock.On("SetJobScale", jobId, mock.AnythingOfType("int"), "Runner Requested").Return(nil) suite.apiMock.On("SetJobScale", jobId, mock.AnythingOfType("int"), "Runner Requested").Return(nil)
@ -44,6 +46,10 @@ func (suite *ManagerTestSuite) registerDefaultEnvironment() {
suite.nomadRunnerManager.RegisterEnvironment(defaultEnvironmentId, jobId, 5) suite.nomadRunnerManager.RegisterEnvironment(defaultEnvironmentId, jobId, 5)
} }
func (suite *ManagerTestSuite) waitForRunnerRefresh() {
time.Sleep(waitTime)
}
func (suite *ManagerTestSuite) TestRegisterEnvironmentAddsANewJob() { func (suite *ManagerTestSuite) TestRegisterEnvironmentAddsANewJob() {
suite.NotNil(suite.nomadRunnerManager.jobs[defaultEnvironmentId]) suite.NotNil(suite.nomadRunnerManager.jobs[defaultEnvironmentId])
} }
@ -62,15 +68,13 @@ func (suite *ManagerTestSuite) TestUseReturnsRunnerIfAvailable() {
} }
func (suite *ManagerTestSuite) TestUseReturnsErrorIfNoRunnerAvailable() { func (suite *ManagerTestSuite) TestUseReturnsErrorIfNoRunnerAvailable() {
suite.setUp([]string{}) suite.waitForRunnerRefresh()
time.Sleep(waitTime)
runner, err := suite.nomadRunnerManager.Use(defaultEnvironmentId) runner, err := suite.nomadRunnerManager.Use(defaultEnvironmentId)
suite.Nil(runner) suite.Nil(runner)
suite.Equal(ErrNoRunnersAvailable, err) suite.Equal(ErrNoRunnersAvailable, err)
} }
func (suite *ManagerTestSuite) TestUseReturnsNoRunnerOfDifferentEnvironment() { func (suite *ManagerTestSuite) TestUseReturnsNoRunnerOfDifferentEnvironment() {
suite.setUp([]string{})
suite.nomadRunnerManager.jobs[defaultEnvironmentId].idleRunners.Add(suite.exerciseRunner) suite.nomadRunnerManager.jobs[defaultEnvironmentId].idleRunners.Add(suite.exerciseRunner)
receivedRunner, err := suite.nomadRunnerManager.Use(otherEnvironmentId) receivedRunner, err := suite.nomadRunnerManager.Use(otherEnvironmentId)
suite.Nil(receivedRunner) suite.Nil(receivedRunner)
@ -93,8 +97,8 @@ func (suite *ManagerTestSuite) TestUseThrowsAnErrorIfNoRunnersAvailable() {
} }
func (suite *ManagerTestSuite) TestUseAddsRunnerToUsedRunners() { func (suite *ManagerTestSuite) TestUseAddsRunnerToUsedRunners() {
suite.setUp([]string{RunnerId}) suite.mockRunnerQueries([]string{RunnerId})
time.Sleep(waitTime) suite.waitForRunnerRefresh()
receivedRunner, _ := suite.nomadRunnerManager.Use(defaultEnvironmentId) receivedRunner, _ := suite.nomadRunnerManager.Use(defaultEnvironmentId)
savedRunner, ok := suite.nomadRunnerManager.usedRunners.Get(receivedRunner.Id()) savedRunner, ok := suite.nomadRunnerManager.usedRunners.Get(receivedRunner.Id())
suite.True(ok) suite.True(ok)
@ -102,7 +106,6 @@ func (suite *ManagerTestSuite) TestUseAddsRunnerToUsedRunners() {
} }
func (suite *ManagerTestSuite) TestGetReturnsRunnerIfRunnerIsUsed() { func (suite *ManagerTestSuite) TestGetReturnsRunnerIfRunnerIsUsed() {
suite.setUp([]string{})
suite.nomadRunnerManager.usedRunners.Add(suite.exerciseRunner) suite.nomadRunnerManager.usedRunners.Add(suite.exerciseRunner)
savedRunner, err := suite.nomadRunnerManager.Get(suite.exerciseRunner.Id()) savedRunner, err := suite.nomadRunnerManager.Get(suite.exerciseRunner.Id())
suite.NoError(err) suite.NoError(err)
@ -110,14 +113,12 @@ func (suite *ManagerTestSuite) TestGetReturnsRunnerIfRunnerIsUsed() {
} }
func (suite *ManagerTestSuite) TestGetReturnsErrorIfRunnerNotFound() { func (suite *ManagerTestSuite) TestGetReturnsErrorIfRunnerNotFound() {
suite.setUp([]string{})
savedRunner, err := suite.nomadRunnerManager.Get(RunnerId) savedRunner, err := suite.nomadRunnerManager.Get(RunnerId)
suite.Nil(savedRunner) suite.Nil(savedRunner)
suite.Error(err) suite.Error(err)
} }
func (suite *ManagerTestSuite) TestReturnRemovesRunnerFromUsedRunners() { func (suite *ManagerTestSuite) TestReturnRemovesRunnerFromUsedRunners() {
suite.setUp([]string{})
suite.apiMock.On("DeleteRunner", mock.AnythingOfType("string")).Return(nil) suite.apiMock.On("DeleteRunner", mock.AnythingOfType("string")).Return(nil)
suite.nomadRunnerManager.usedRunners.Add(suite.exerciseRunner) suite.nomadRunnerManager.usedRunners.Add(suite.exerciseRunner)
err := suite.nomadRunnerManager.Return(suite.exerciseRunner) err := suite.nomadRunnerManager.Return(suite.exerciseRunner)
@ -127,7 +128,6 @@ func (suite *ManagerTestSuite) TestReturnRemovesRunnerFromUsedRunners() {
} }
func (suite *ManagerTestSuite) TestReturnCallsDeleteRunnerApiMethod() { func (suite *ManagerTestSuite) TestReturnCallsDeleteRunnerApiMethod() {
suite.setUp([]string{})
suite.apiMock.On("DeleteRunner", mock.AnythingOfType("string")).Return(nil) suite.apiMock.On("DeleteRunner", mock.AnythingOfType("string")).Return(nil)
err := suite.nomadRunnerManager.Return(suite.exerciseRunner) err := suite.nomadRunnerManager.Return(suite.exerciseRunner)
suite.Nil(err) suite.Nil(err)
@ -135,37 +135,36 @@ func (suite *ManagerTestSuite) TestReturnCallsDeleteRunnerApiMethod() {
} }
func (suite *ManagerTestSuite) TestReturnThrowsErrorWhenApiCallFailed() { func (suite *ManagerTestSuite) TestReturnThrowsErrorWhenApiCallFailed() {
suite.setUp([]string{})
suite.apiMock.On("DeleteRunner", mock.AnythingOfType("string")).Return(errors.New("return failed")) suite.apiMock.On("DeleteRunner", mock.AnythingOfType("string")).Return(errors.New("return failed"))
err := suite.nomadRunnerManager.Return(suite.exerciseRunner) err := suite.nomadRunnerManager.Return(suite.exerciseRunner)
suite.Error(err) suite.Error(err)
} }
func (suite *ManagerTestSuite) TestRefreshFetchesRunners() { func (suite *ManagerTestSuite) TestRefreshFetchesRunners() {
suite.setUp([]string{RunnerId}) suite.mockRunnerQueries([]string{RunnerId})
time.Sleep(waitTime) suite.waitForRunnerRefresh()
suite.apiMock.AssertCalled(suite.T(), "LoadRunners", jobId) suite.apiMock.AssertCalled(suite.T(), "LoadRunners", jobId)
} }
func (suite *ManagerTestSuite) TestNewRunnersFoundInRefreshAreAddedToUnusedRunners() { func (suite *ManagerTestSuite) TestNewRunnersFoundInRefreshAreAddedToUnusedRunners() {
suite.setUp([]string{RunnerId}) suite.mockRunnerQueries([]string{RunnerId})
time.Sleep(waitTime) suite.waitForRunnerRefresh()
availableRunner, _ := suite.nomadRunnerManager.Use(defaultEnvironmentId) availableRunner, _ := suite.nomadRunnerManager.Use(defaultEnvironmentId)
suite.Equal(availableRunner.Id(), RunnerId) suite.Equal(availableRunner.Id(), RunnerId)
} }
func (suite *ManagerTestSuite) TestRefreshScalesJob() { func (suite *ManagerTestSuite) TestRefreshScalesJob() {
suite.setUp([]string{RunnerId}) suite.mockRunnerQueries([]string{RunnerId})
time.Sleep(waitTime) suite.waitForRunnerRefresh()
// use one runner // use one runner
_, _ = suite.nomadRunnerManager.Use(defaultEnvironmentId) _, _ = suite.nomadRunnerManager.Use(defaultEnvironmentId)
time.Sleep(waitTime) suite.waitForRunnerRefresh()
suite.apiMock.AssertCalled(suite.T(), "SetJobScale", jobId, 6, "Runner Requested") suite.apiMock.AssertCalled(suite.T(), "SetJobScale", jobId, 6, "Runner Requested")
} }
func (suite *ManagerTestSuite) TestRefreshAddsRunnerToPool() { func (suite *ManagerTestSuite) TestRefreshAddsRunnerToPool() {
suite.setUp([]string{RunnerId}) suite.mockRunnerQueries([]string{RunnerId})
time.Sleep(waitTime) suite.waitForRunnerRefresh()
poolRunner, ok := suite.nomadRunnerManager.jobs[defaultEnvironmentId].idleRunners.Get(RunnerId) poolRunner, ok := suite.nomadRunnerManager.jobs[defaultEnvironmentId].idleRunners.Get(RunnerId)
suite.True(ok) suite.True(ok)
suite.Equal(RunnerId, poolRunner.Id()) suite.Equal(RunnerId, poolRunner.Id())