test handleTaskGroup
This commit is contained in:
parent
049a9213d2
commit
7d2aae2c11
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue