157 lines
4.7 KiB
Go
157 lines
4.7 KiB
Go
package nomad
|
|
|
|
import (
|
|
nomadApi "github.com/hashicorp/nomad/api"
|
|
"github.com/openHPI/poseidon/internal/config"
|
|
"github.com/openHPI/poseidon/pkg/dto"
|
|
"github.com/openHPI/poseidon/tests/helpers"
|
|
)
|
|
|
|
func (s *MainTestSuite) TestFindTaskGroup() {
|
|
s.Run("Returns nil if task group not found", func() {
|
|
group := FindTaskGroup(&nomadApi.Job{}, TaskGroupName)
|
|
s.Nil(group)
|
|
})
|
|
|
|
s.Run("Finds task group when existent", func() {
|
|
_, job := helpers.CreateTemplateJob()
|
|
group := FindTaskGroup(job, TaskGroupName)
|
|
s.NotNil(group)
|
|
})
|
|
}
|
|
|
|
func (s *MainTestSuite) TestFindOrCreateDefaultTask() {
|
|
s.Run("Adds default task group when not set", func() {
|
|
job := &nomadApi.Job{}
|
|
group := FindAndValidateDefaultTaskGroup(job)
|
|
s.NotNil(group)
|
|
s.Equal(TaskGroupName, *group.Name)
|
|
s.Equal(1, len(job.TaskGroups))
|
|
s.Equal(group, job.TaskGroups[0])
|
|
s.Equal(TaskCount, *group.Count)
|
|
})
|
|
|
|
s.Run("Does not modify task group when already set", func() {
|
|
job := &nomadApi.Job{}
|
|
groupName := TaskGroupName
|
|
expectedGroup := &nomadApi.TaskGroup{Name: &groupName}
|
|
job.TaskGroups = []*nomadApi.TaskGroup{expectedGroup}
|
|
|
|
group := FindAndValidateDefaultTaskGroup(job)
|
|
s.NotNil(group)
|
|
s.Equal(1, len(job.TaskGroups))
|
|
s.Equal(expectedGroup, group)
|
|
})
|
|
}
|
|
|
|
func (s *MainTestSuite) TestFindOrCreateConfigTaskGroup() {
|
|
s.Run("Adds config task group when not set", func() {
|
|
job := &nomadApi.Job{}
|
|
group := FindAndValidateConfigTaskGroup(job)
|
|
s.NotNil(group)
|
|
s.Equal(group, job.TaskGroups[0])
|
|
s.Equal(1, len(job.TaskGroups))
|
|
|
|
s.Equal(ConfigTaskGroupName, *group.Name)
|
|
s.Equal(0, *group.Count)
|
|
})
|
|
|
|
s.Run("Does not modify task group when already set", func() {
|
|
job := &nomadApi.Job{}
|
|
groupName := ConfigTaskGroupName
|
|
expectedGroup := &nomadApi.TaskGroup{Name: &groupName}
|
|
job.TaskGroups = []*nomadApi.TaskGroup{expectedGroup}
|
|
|
|
group := FindAndValidateConfigTaskGroup(job)
|
|
s.NotNil(group)
|
|
s.Equal(1, len(job.TaskGroups))
|
|
s.Equal(expectedGroup, group)
|
|
})
|
|
}
|
|
|
|
func (s *MainTestSuite) TestFindOrCreateTask() {
|
|
s.Run("Does not modify default task when already set", func() {
|
|
groupName := TaskGroupName
|
|
group := &nomadApi.TaskGroup{Name: &groupName}
|
|
expectedTask := &nomadApi.Task{Name: TaskName}
|
|
group.Tasks = []*nomadApi.Task{expectedTask}
|
|
|
|
task := FindAndValidateDefaultTask(group)
|
|
s.NotNil(task)
|
|
s.Equal(1, len(group.Tasks))
|
|
s.Equal(expectedTask, task)
|
|
})
|
|
|
|
s.Run("Does not modify config task when already set", func() {
|
|
groupName := ConfigTaskGroupName
|
|
group := &nomadApi.TaskGroup{Name: &groupName}
|
|
expectedTask := &nomadApi.Task{Name: ConfigTaskName}
|
|
group.Tasks = []*nomadApi.Task{expectedTask}
|
|
|
|
task := FindAndValidateConfigTask(group)
|
|
s.NotNil(task)
|
|
s.Equal(1, len(group.Tasks))
|
|
s.Equal(expectedTask, task)
|
|
})
|
|
}
|
|
|
|
func (s *MainTestSuite) TestSetForcePullFlag() {
|
|
_, job := helpers.CreateTemplateJob()
|
|
taskGroup := FindAndValidateDefaultTaskGroup(job)
|
|
task := FindAndValidateDefaultTask(taskGroup)
|
|
|
|
s.Run("Ignoring passed value if DisableForcePull", func() {
|
|
config.Config.Nomad.DisableForcePull = true
|
|
SetForcePullFlag(job, true)
|
|
s.Equal(false, task.Config["force_pull"])
|
|
})
|
|
|
|
s.Run("Using passed value if not DisableForcePull", func() {
|
|
config.Config.Nomad.DisableForcePull = false
|
|
SetForcePullFlag(job, true)
|
|
s.Equal(true, task.Config["force_pull"])
|
|
|
|
SetForcePullFlag(job, false)
|
|
s.Equal(false, task.Config["force_pull"])
|
|
})
|
|
}
|
|
|
|
func (s *MainTestSuite) TestIsEnvironmentTemplateID() {
|
|
s.True(IsEnvironmentTemplateID("template-42"))
|
|
s.False(IsEnvironmentTemplateID("template-42-100"))
|
|
s.False(IsEnvironmentTemplateID("job-42"))
|
|
s.False(IsEnvironmentTemplateID("template-top"))
|
|
}
|
|
|
|
func (s *MainTestSuite) TestRunnerJobID() {
|
|
s.Equal("0-RANDOM-UUID", RunnerJobID(0, "RANDOM-UUID"))
|
|
}
|
|
|
|
func (s *MainTestSuite) TestTemplateJobID() {
|
|
s.Equal("template-42", TemplateJobID(42))
|
|
}
|
|
|
|
func (s *MainTestSuite) TestEnvironmentIDFromRunnerID() {
|
|
id, err := EnvironmentIDFromRunnerID("42-RANDOM-UUID")
|
|
s.NoError(err)
|
|
s.Equal(dto.EnvironmentID(42), id)
|
|
|
|
_, err = EnvironmentIDFromRunnerID("")
|
|
s.Error(err)
|
|
}
|
|
|
|
func (s *MainTestSuite) TestOOMKilledAllocation() {
|
|
event := nomadApi.TaskEvent{Details: map[string]string{"oom_killed": "true"}}
|
|
state := nomadApi.TaskState{Restarts: 2, Events: []*nomadApi.TaskEvent{&event}}
|
|
alloc := nomadApi.Allocation{TaskStates: map[string]*nomadApi.TaskState{TaskName: &state}}
|
|
s.False(isOOMKilled(&alloc))
|
|
|
|
event2 := nomadApi.TaskEvent{Details: map[string]string{"oom_killed": "false"}}
|
|
alloc.TaskStates[TaskName].Events = []*nomadApi.TaskEvent{&event, &event2}
|
|
s.False(isOOMKilled(&alloc))
|
|
|
|
event3 := nomadApi.TaskEvent{Details: map[string]string{"oom_killed": "true"}}
|
|
alloc.TaskStates[TaskName].Events = []*nomadApi.TaskEvent{&event, &event2, &event3}
|
|
s.True(isOOMKilled(&alloc))
|
|
}
|