Add unit tests

This commit is contained in:
Maximilian Paß
2022-01-29 18:37:07 +01:00
parent 6123d20525
commit f6d9a6ddbb
4 changed files with 368 additions and 0 deletions

View File

@ -0,0 +1,112 @@
package environment
import (
"github.com/openHPI/poseidon/internal/runner"
"github.com/openHPI/poseidon/pkg/dto"
"github.com/openHPI/poseidon/tests"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"testing"
)
func TestAWSEnvironmentManager_CreateOrUpdate(t *testing.T) {
runnerManager := runner.NewAWSRunnerManager()
m := NewAWSEnvironmentManager(runnerManager)
uniqueImage := "random image string"
t.Run("can create default Java environment", func(t *testing.T) {
_, err := m.CreateOrUpdate(runner.AwsJavaEnvironmentID, dto.ExecutionEnvironmentRequest{Image: uniqueImage})
assert.NoError(t, err)
})
t.Run("can retrieve added environment", func(t *testing.T) {
environment, err := m.Get(runner.AwsJavaEnvironmentID, false)
assert.NoError(t, err)
assert.Equal(t, environment.Image(), uniqueImage)
})
t.Run("non handleable requests are forwarded to the next manager", func(t *testing.T) {
nextHandler := &ManagerHandlerMock{}
nextHandler.On("CreateOrUpdate", mock.AnythingOfType("dto.EnvironmentID"),
mock.AnythingOfType("dto.ExecutionEnvironmentRequest")).Return(true, nil)
m.SetNextHandler(nextHandler)
request := dto.ExecutionEnvironmentRequest{}
_, err := m.CreateOrUpdate(tests.DefaultEnvironmentIDAsInteger, request)
assert.NoError(t, err)
nextHandler.AssertCalled(t, "CreateOrUpdate",
dto.EnvironmentID(tests.DefaultEnvironmentIDAsInteger), request)
})
}
func TestAWSEnvironmentManager_Get(t *testing.T) {
runnerManager := runner.NewAWSRunnerManager()
m := NewAWSEnvironmentManager(runnerManager)
t.Run("Calls next handler when not found", func(t *testing.T) {
nextHandler := &ManagerHandlerMock{}
nextHandler.On("Get", mock.AnythingOfType("dto.EnvironmentID"), mock.AnythingOfType("bool")).
Return(nil, nil)
m.SetNextHandler(nextHandler)
_, err := m.Get(tests.DefaultEnvironmentIDAsInteger, false)
assert.NoError(t, err)
nextHandler.AssertCalled(t, "Get", dto.EnvironmentID(tests.DefaultEnvironmentIDAsInteger), false)
})
t.Run("Returns error when not found", func(t *testing.T) {
nextHandler := &AbstractManager{nil}
m.SetNextHandler(nextHandler)
_, err := m.Get(tests.DefaultEnvironmentIDAsInteger, false)
assert.ErrorIs(t, err, runner.ErrRunnerNotFound)
})
t.Run("Returns environment when it was added before", func(t *testing.T) {
expectedEnvironment := NewAWSEnvironment()
expectedEnvironment.SetID(tests.DefaultEnvironmentIDAsInteger)
runnerManager.StoreEnvironment(expectedEnvironment)
environment, err := m.Get(tests.DefaultEnvironmentIDAsInteger, false)
assert.NoError(t, err)
assert.Equal(t, expectedEnvironment, environment)
})
}
func TestAWSEnvironmentManager_List(t *testing.T) {
runnerManager := runner.NewAWSRunnerManager()
m := NewAWSEnvironmentManager(runnerManager)
t.Run("contains the \"Load\"-ed environments", func(t *testing.T) {
environments, err := m.List(false)
assert.NoError(t, err)
require.Len(t, environments, 1)
assert.Equal(t, environments[0].ID(), dto.EnvironmentID(runner.AwsJavaEnvironmentID))
})
t.Run("returs also environments of the rest of the manager chain", func(t *testing.T) {
nextHandler := &ManagerHandlerMock{}
existingEnvironment := NewAWSEnvironment()
nextHandler.On("List", mock.AnythingOfType("bool")).
Return([]runner.ExecutionEnvironment{existingEnvironment}, nil)
m.SetNextHandler(nextHandler)
environments, err := m.List(false)
assert.NoError(t, err)
require.Len(t, environments, 2)
assert.Contains(t, environments, existingEnvironment)
})
m.SetNextHandler(nil)
t.Run("Returns added environment", func(t *testing.T) {
localEnvironment := NewAWSEnvironment()
localEnvironment.SetID(tests.DefaultEnvironmentIDAsInteger)
runnerManager.StoreEnvironment(localEnvironment)
environments, err := m.List(false)
assert.NoError(t, err)
assert.Len(t, environments, 2)
assert.Contains(t, environments, localEnvironment)
})
}