From a42b9708ae61fce10017eda72f9b25fbea65a128 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Fri, 24 Apr 2015 11:52:36 -0700 Subject: [PATCH] integration: add tests around the membership change issues --- integration/cluster_test.go | 40 +++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/integration/cluster_test.go b/integration/cluster_test.go index 8a95c00c0..c847ae1ee 100644 --- a/integration/cluster_test.go +++ b/integration/cluster_test.go @@ -209,6 +209,46 @@ func TestForceNewCluster(t *testing.T) { clusterMustProgress(t, c.Members[:1]) } +// Ensure we can remove a member then add a new one back immediately. +func TestIssue2681(t *testing.T) { + defer afterTest(t) + c := NewCluster(t, 5) + c.Launch(t) + defer c.Terminate(t) + + c.RemoveMember(t, uint64(c.Members[4].s.ID())) + c.waitLeader(t, c.Members) + + c.AddMember(t) + c.waitLeader(t, c.Members) + clusterMustProgress(t, c.Members) +} + +// Ensure we can remove a member after a snapshot then add a new one back. +func TestIssue2746(t *testing.T) { + defer afterTest(t) + c := NewCluster(t, 5) + + for _, m := range c.Members { + m.SnapCount = 10 + } + + c.Launch(t) + defer c.Terminate(t) + + // force a snapshot + for i := 0; i < 20; i++ { + clusterMustProgress(t, c.Members) + } + + c.RemoveMember(t, uint64(c.Members[4].s.ID())) + c.waitLeader(t, c.Members) + + c.AddMember(t) + c.waitLeader(t, c.Members) + clusterMustProgress(t, c.Members) +} + // clusterMustProgress ensures that cluster can make progress. It creates // a random key first, and check the new key could be got from all client urls // of the cluster.