test handleTaskGroup

This commit is contained in:
Alex Dadgar 2018-03-29 16:38:47 -07:00
parent 049a9213d2
commit 7d2aae2c11

View file

@ -304,6 +304,9 @@ type handleTaskGroupTestCase struct {
// Name of test // Name of test
Name string Name string
// Batch uses a batch job and alloc
Batch bool
// Expectations // Expectations
ExpectedDrained int ExpectedDrained int
ExpectedMigrated int ExpectedMigrated int
@ -393,6 +396,21 @@ func TestHandeTaskGroup_Table(t *testing.T) {
a.NodeID = runningID a.NodeID = runningID
}, },
}, },
{
// One already drained, other allocs on non-draining node and healthy
Name: "OneAlreadyDrainedBatched",
Batch: true,
ExpectedDrained: 0,
ExpectedMigrated: 1,
ExpectedDone: true,
AddAlloc: func(i int, a *structs.Allocation, drainingID, runningID string) {
if i == 0 {
a.DesiredStatus = structs.AllocDesiredStatusStop
return
}
a.NodeID = runningID
},
},
{ {
// All allocs are terminl, nothing to be drained // All allocs are terminl, nothing to be drained
Name: "AllMigrating", Name: "AllMigrating",
@ -403,6 +421,17 @@ func TestHandeTaskGroup_Table(t *testing.T) {
a.DesiredStatus = structs.AllocDesiredStatusStop a.DesiredStatus = structs.AllocDesiredStatusStop
}, },
}, },
{
// All allocs are terminl, nothing to be drained
Name: "AllMigratingBatch",
Batch: true,
ExpectedDrained: 0,
ExpectedMigrated: 10,
ExpectedDone: true,
AddAlloc: func(i int, a *structs.Allocation, drainingID, runningID string) {
a.DesiredStatus = structs.AllocDesiredStatusStop
},
},
{ {
// All allocs may be drained at once // All allocs may be drained at once
Name: "AllAtOnce", Name: "AllAtOnce",
@ -522,6 +551,9 @@ func testHandleTaskGroup(t *testing.T, tc handleTaskGroupTestCase) {
drainingNode, runningNode := testNodes(t, state) drainingNode, runningNode := testNodes(t, state)
job := mock.Job() job := mock.Job()
if tc.Batch {
job = mock.BatchJob()
}
job.TaskGroups[0].Count = 10 job.TaskGroups[0].Count = 10
if tc.Count > 0 { if tc.Count > 0 {
job.TaskGroups[0].Count = tc.Count job.TaskGroups[0].Count = tc.Count
@ -534,6 +566,9 @@ func testHandleTaskGroup(t *testing.T, tc handleTaskGroupTestCase) {
var allocs []*structs.Allocation var allocs []*structs.Allocation
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
a := mock.Alloc() a := mock.Alloc()
if tc.Batch {
a = mock.BatchAlloc()
}
a.JobID = job.ID a.JobID = job.ID
a.Job = job a.Job = job
a.TaskGroup = job.TaskGroups[0].Name a.TaskGroup = job.TaskGroups[0].Name
@ -554,7 +589,7 @@ func testHandleTaskGroup(t *testing.T, tc handleTaskGroupTestCase) {
require.Nil(err) require.Nil(err)
res := newJobResult() res := newJobResult()
require.Nil(handleTaskGroup(snap, false, job.TaskGroups[0], allocs, 102, res)) require.Nil(handleTaskGroup(snap, tc.Batch, job.TaskGroups[0], allocs, 102, res))
assert.Lenf(res.drain, tc.ExpectedDrained, "Drain expected %d but found: %d", assert.Lenf(res.drain, tc.ExpectedDrained, "Drain expected %d but found: %d",
tc.ExpectedDrained, len(res.drain)) tc.ExpectedDrained, len(res.drain))
assert.Lenf(res.migrated, tc.ExpectedMigrated, "Migrate expected %d but found: %d", assert.Lenf(res.migrated, tc.ExpectedMigrated, "Migrate expected %d but found: %d",
@ -603,16 +638,28 @@ func TestHandleTaskGroup_Migrations(t *testing.T) {
snap, err := state.Snapshot() snap, err := state.Snapshot()
require.Nil(err) require.Nil(err)
// Handle before and after indexes // Handle before and after indexes as both service and batch
res := newJobResult() res := newJobResult()
require.Nil(handleTaskGroup(snap, false, job.TaskGroups[0], allocs, 101, res)) require.Nil(handleTaskGroup(snap, false, job.TaskGroups[0], allocs, 101, res))
require.Empty(res.drain) require.Empty(res.drain)
require.Len(res.migrated, 10) require.Len(res.migrated, 10)
require.True(res.done) require.True(res.done)
res = newJobResult()
require.Nil(handleTaskGroup(snap, true, job.TaskGroups[0], allocs, 101, res))
require.Empty(res.drain)
require.Len(res.migrated, 10)
require.True(res.done)
res = newJobResult() res = newJobResult()
require.Nil(handleTaskGroup(snap, false, job.TaskGroups[0], allocs, 103, res)) require.Nil(handleTaskGroup(snap, false, job.TaskGroups[0], allocs, 103, res))
require.Empty(res.drain) require.Empty(res.drain)
require.Empty(res.migrated) require.Empty(res.migrated)
require.True(res.done) require.True(res.done)
res = newJobResult()
require.Nil(handleTaskGroup(snap, true, job.TaskGroups[0], allocs, 103, res))
require.Empty(res.drain)
require.Empty(res.migrated)
require.True(res.done)
} }