#190 Add unit tests for runner recovery.

This commit is contained in:
Maximilian Paß
2022-11-23 17:49:03 +00:00
parent f9c877cc93
commit 0c6c48c3cf
4 changed files with 132 additions and 5 deletions

View File

@ -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) {