66 lines
1.3 KiB
Go
66 lines
1.3 KiB
Go
|
package nomad
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/hashicorp/nomad/nomad/mock"
|
||
|
"github.com/hashicorp/nomad/nomad/structs"
|
||
|
"github.com/hashicorp/nomad/testutil"
|
||
|
)
|
||
|
|
||
|
func TestCoreScheduler_EvalGC(t *testing.T) {
|
||
|
s1 := testServer(t, nil)
|
||
|
defer s1.Shutdown()
|
||
|
testutil.WaitForLeader(t, s1.RPC)
|
||
|
|
||
|
// Insert "dead" eval
|
||
|
state := s1.fsm.State()
|
||
|
eval := mock.Eval()
|
||
|
eval.Status = structs.EvalStatusFailed
|
||
|
err := state.UpsertEvals(1000, []*structs.Evaluation{eval})
|
||
|
if err != nil {
|
||
|
t.Fatalf("err: %v", err)
|
||
|
}
|
||
|
|
||
|
// Insert "dead" alloc
|
||
|
alloc := mock.Alloc()
|
||
|
alloc.EvalID = eval.ID
|
||
|
alloc.Status = structs.AllocStatusFailed
|
||
|
err = state.UpdateAllocations(1001, nil, []*structs.Allocation{alloc})
|
||
|
if err != nil {
|
||
|
t.Fatalf("err: %v", err)
|
||
|
}
|
||
|
|
||
|
// Create a core scheduler
|
||
|
snap, err := state.Snapshot()
|
||
|
if err != nil {
|
||
|
t.Fatalf("err: %v", err)
|
||
|
}
|
||
|
core := NewCoreScheduler(s1, snap)
|
||
|
|
||
|
// Attempt the GC
|
||
|
gc := s1.coreJobEval(structs.CoreJobEvalGC)
|
||
|
gc.ModifyIndex = 2000
|
||
|
err = core.Process(gc)
|
||
|
if err != nil {
|
||
|
t.Fatalf("err: %v", err)
|
||
|
}
|
||
|
|
||
|
// Should be gone
|
||
|
out, err := state.GetEvalByID(eval.ID)
|
||
|
if err != nil {
|
||
|
t.Fatalf("err: %v", err)
|
||
|
}
|
||
|
if out != nil {
|
||
|
t.Fatalf("bad: %v", out)
|
||
|
}
|
||
|
|
||
|
outA, err := state.GetAllocByID(alloc.ID)
|
||
|
if err != nil {
|
||
|
t.Fatalf("err: %v", err)
|
||
|
}
|
||
|
if outA != nil {
|
||
|
t.Fatalf("bad: %v", outA)
|
||
|
}
|
||
|
}
|