integration: test cluster terminates quickly

release-3.2
Anthony Romano 2017-03-31 18:09:19 -07:00
parent 8ad935ef2c
commit f5f4791023
2 changed files with 27 additions and 1 deletions

View File

@ -313,9 +313,15 @@ func (c *cluster) removeMember(t *testing.T, id uint64) error {
}
func (c *cluster) Terminate(t *testing.T) {
var wg sync.WaitGroup
wg.Add(len(c.Members))
for _, m := range c.Members {
m.Terminate(t)
go func(mm *member) {
defer wg.Done()
mm.Terminate(t)
}(m)
}
wg.Wait()
}
func (c *cluster) waitMembersMatch(t *testing.T, membs []client.Member) {

View File

@ -568,3 +568,23 @@ func TestTransferLeader(t *testing.T) {
t.Fatalf("expected old leader %d != new leader %d", oldLeadID, newLeadIDs[0])
}
}
func TestSpeedyTerminate(t *testing.T) {
defer testutil.AfterTest(t)
clus := NewClusterV3(t, &ClusterConfig{Size: 3})
// Stop/Restart so requests will time out on lost leaders
for i := 0; i < 3; i++ {
clus.Members[i].Stop(t)
clus.Members[i].Restart(t)
}
donec := make(chan struct{})
go func() {
defer close(donec)
clus.Terminate(t)
}()
select {
case <-time.After(10 * time.Second):
t.Fatalf("cluster took too long to terminate")
case <-donec:
}
}