diff --git a/runner/manager.go b/runner/manager.go index 22e1dbd..7e37096 100644 --- a/runner/manager.go +++ b/runner/manager.go @@ -171,11 +171,11 @@ func (m *NomadRunnerManager) updateRunnerSpecs(environmentID EnvironmentID, temp } func (m *NomadRunnerManager) Claim(environmentID EnvironmentID, duration int) (Runner, error) { - job, ok := m.environments.Get(environmentID) + environment, ok := m.environments.Get(environmentID) if !ok { return nil, ErrUnknownExecutionEnvironment } - runner, ok := job.idleRunners.Sample() + runner, ok := environment.idleRunners.Sample() if !ok { return nil, ErrNoRunnersAvailable } @@ -187,9 +187,9 @@ func (m *NomadRunnerManager) Claim(environmentID EnvironmentID, duration int) (R runner.SetupTimeout(time.Duration(duration) * time.Second) - err = m.scaleEnvironment(environmentID) + err = m.createRunner(environment) if err != nil { - log.WithError(err).WithField("environmentID", environmentID).Error("Couldn't scale environment") + log.WithError(err).WithField("environmentID", environmentID).Error("Couldn't create new runner for claimed one") } return runner, nil diff --git a/runner/manager_test.go b/runner/manager_test.go index 2782761..3e83302 100644 --- a/runner/manager_test.go +++ b/runner/manager_test.go @@ -133,6 +133,16 @@ func (s *ManagerTestSuite) TestClaimAddsRunnerToUsedRunners() { s.Equal(savedRunner, receivedRunner) } +func (s *ManagerTestSuite) TestTwoClaimsAddExactlyTwoRunners() { + s.AddIdleRunnerForDefaultEnvironment(s.exerciseRunner) + s.AddIdleRunnerForDefaultEnvironment(NewRunner(tests.AnotherRunnerID, s.nomadRunnerManager)) + _, err := s.nomadRunnerManager.Claim(defaultEnvironmentID, defaultInactivityTimeout) + s.Require().NoError(err) + _, err = s.nomadRunnerManager.Claim(defaultEnvironmentID, defaultInactivityTimeout) + s.Require().NoError(err) + s.apiMock.AssertNumberOfCalls(s.T(), "RegisterRunnerJob", 2) +} + func (s *ManagerTestSuite) TestGetReturnsRunnerIfRunnerIsUsed() { s.nomadRunnerManager.usedRunners.Add(s.exerciseRunner) savedRunner, err := s.nomadRunnerManager.Get(s.exerciseRunner.Id())