diff --git a/nomad/leader_test.go b/nomad/leader_test.go index 7f48b7500..d08b62598 100644 --- a/nomad/leader_test.go +++ b/nomad/leader_test.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "testing" + "time" "github.com/hashicorp/nomad/testutil" ) @@ -133,3 +134,69 @@ func TestLeader_MultiBootstrap(t *testing.T) { } } } + +func TestLeader_PlanQueue_Reset(t *testing.T) { + s1 := testServer(t, nil) + defer s1.Shutdown() + + s2 := testServer(t, func(c *Config) { + c.DevDisableBootstrap = true + }) + defer s2.Shutdown() + + s3 := testServer(t, func(c *Config) { + c.DevDisableBootstrap = true + }) + defer s3.Shutdown() + servers := []*Server{s1, s2, s3} + testJoin(t, s1, s2, s3) + + for _, s := range servers { + testutil.WaitForResult(func() (bool, error) { + peers, _ := s.raftPeers.Peers() + return len(peers) == 3, nil + }, func(err error) { + t.Fatalf("should have 3 peers") + }) + } + + var leader *Server + for _, s := range servers { + if s.IsLeader() { + leader = s + break + } + } + if leader == nil { + t.Fatalf("Should have a leader") + } + + if !leader.planQueue.Enabled() { + t.Fatalf("should enable plan queue") + } + + // Kill the leader + leader.Shutdown() + time.Sleep(100 * time.Millisecond) + + // Wait for a new leader + leader = nil + testutil.WaitForResult(func() (bool, error) { + for _, s := range servers { + if s.IsLeader() { + leader = s + return true, nil + } + } + return false, nil + }, func(err error) { + t.Fatalf("should have leader") + }) + + // Check that the new leader has a pending GC expiration + testutil.WaitForResult(func() (bool, error) { + return leader.planQueue.Enabled(), nil + }, func(err error) { + t.Fatalf("should enable plan queue") + }) +}