#190 Add unit tests for runner recovery.
This commit is contained in:
@ -140,18 +140,18 @@ func (m *NomadEnvironmentManager) Load() error {
|
||||
}
|
||||
configTaskGroup := nomad.FindAndValidateConfigTaskGroup(job)
|
||||
if configTaskGroup == nil {
|
||||
jobLogger.Info("Couldn't find config task group in job, skipping ...")
|
||||
jobLogger.Error("FindAndValidateConfigTaskGroup is not creating the task group")
|
||||
continue
|
||||
}
|
||||
environment := newNomadEnvironmetFromJob(job, m.api)
|
||||
environment := newNomadEnvironmentFromJob(job, m.api)
|
||||
m.runnerManager.StoreEnvironment(environment)
|
||||
jobLogger.Info("Successfully recovered environment")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// newNomadEnvironmetFromJob creates a Nomad environment from the passed Nomad job definition.
|
||||
func newNomadEnvironmetFromJob(job *nomadApi.Job, apiClient nomad.ExecutorAPI) *NomadEnvironment {
|
||||
// newNomadEnvironmentFromJob creates a Nomad environment from the passed Nomad job definition.
|
||||
func newNomadEnvironmentFromJob(job *nomadApi.Job, apiClient nomad.ExecutorAPI) *NomadEnvironment {
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
e := &NomadEnvironment{
|
||||
apiClient: apiClient,
|
||||
@ -192,7 +192,7 @@ func fetchEnvironment(id dto.EnvironmentID, apiClient nomad.ExecutorAPI) (runner
|
||||
continue
|
||||
}
|
||||
if id == environmentID {
|
||||
fetchedEnvironment = newNomadEnvironmetFromJob(job, apiClient)
|
||||
fetchedEnvironment = newNomadEnvironmentFromJob(job, apiClient)
|
||||
}
|
||||
}
|
||||
return fetchedEnvironment, nil
|
||||
|
@ -8,6 +8,7 @@ import (
|
||||
"github.com/openHPI/poseidon/internal/runner"
|
||||
"github.com/openHPI/poseidon/pkg/dto"
|
||||
"github.com/openHPI/poseidon/tests"
|
||||
"github.com/openHPI/poseidon/tests/helpers"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/mock"
|
||||
"github.com/stretchr/testify/require"
|
||||
@ -268,6 +269,48 @@ func TestNomadEnvironmentManager_List(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestNomadEnvironmentManager_Load(t *testing.T) {
|
||||
apiMock := &nomad.ExecutorAPIMock{}
|
||||
mockWatchAllocations(apiMock)
|
||||
call := apiMock.On("LoadEnvironmentJobs")
|
||||
apiMock.On("LoadRunnerJobs", mock.AnythingOfType("dto.EnvironmentID")).
|
||||
Return([]*nomadApi.Job{}, nil)
|
||||
|
||||
runnerManager := runner.NewNomadRunnerManager(apiMock, context.Background())
|
||||
|
||||
t.Run("Stores fetched environments", func(t *testing.T) {
|
||||
_, job := helpers.CreateTemplateJob()
|
||||
call.Return([]*nomadApi.Job{job}, nil)
|
||||
|
||||
_, ok := runnerManager.GetEnvironment(tests.DefaultEnvironmentIDAsInteger)
|
||||
require.False(t, ok)
|
||||
|
||||
_, err := NewNomadEnvironmentManager(runnerManager, apiMock, "")
|
||||
require.NoError(t, err)
|
||||
|
||||
environment, ok := runnerManager.GetEnvironment(tests.DefaultEnvironmentIDAsInteger)
|
||||
require.True(t, ok)
|
||||
assert.Equal(t, "python:latest", environment.Image())
|
||||
})
|
||||
|
||||
runnerManager.DeleteEnvironment(tests.DefaultEnvironmentIDAsInteger)
|
||||
t.Run("Processes only running environments", func(t *testing.T) {
|
||||
_, job := helpers.CreateTemplateJob()
|
||||
jobStatus := structs.JobStatusDead
|
||||
job.Status = &jobStatus
|
||||
call.Return([]*nomadApi.Job{job}, nil)
|
||||
|
||||
_, ok := runnerManager.GetEnvironment(tests.DefaultEnvironmentIDAsInteger)
|
||||
require.False(t, ok)
|
||||
|
||||
_, err := NewNomadEnvironmentManager(runnerManager, apiMock, "")
|
||||
require.NoError(t, err)
|
||||
|
||||
_, ok = runnerManager.GetEnvironment(tests.DefaultEnvironmentIDAsInteger)
|
||||
require.False(t, ok)
|
||||
})
|
||||
}
|
||||
|
||||
func mockWatchAllocations(apiMock *nomad.ExecutorAPIMock) {
|
||||
call := apiMock.On("WatchEventStream", mock.Anything, mock.Anything, mock.Anything)
|
||||
call.Run(func(args mock.Arguments) {
|
||||
|
Reference in New Issue
Block a user