integration: test cluster terminates quickly
parent
8ad935ef2c
commit
f5f4791023
|
@ -313,9 +313,15 @@ func (c *cluster) removeMember(t *testing.T, id uint64) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *cluster) Terminate(t *testing.T) {
|
func (c *cluster) Terminate(t *testing.T) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(len(c.Members))
|
||||||
for _, m := range 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) {
|
func (c *cluster) waitMembersMatch(t *testing.T, membs []client.Member) {
|
||||||
|
|
|
@ -568,3 +568,23 @@ func TestTransferLeader(t *testing.T) {
|
||||||
t.Fatalf("expected old leader %d != new leader %d", oldLeadID, newLeadIDs[0])
|
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:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue