From 077c8397d2033260e8b2597c7569db8f1b56834f Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Fri, 24 Apr 2015 14:34:21 -0700 Subject: [PATCH] integration: add a test case for a full cluster rotation --- integration/cluster_test.go | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/integration/cluster_test.go b/integration/cluster_test.go index c847ae1ee..411762427 100644 --- a/integration/cluster_test.go +++ b/integration/cluster_test.go @@ -209,6 +209,27 @@ func TestForceNewCluster(t *testing.T) { clusterMustProgress(t, c.Members[:1]) } +func TestAddMemberAfterClusterFullRotation(t *testing.T) { + defer afterTest(t) + c := NewCluster(t, 3) + c.Launch(t) + defer c.Terminate(t) + + // remove all the previous three members and add in three new members. + for i := 0; i < 3; i++ { + c.RemoveMember(t, uint64(c.Members[0].s.ID())) + c.waitLeader(t, c.Members) + + c.AddMember(t) + c.waitLeader(t, c.Members) + } + + c.AddMember(t) + c.waitLeader(t, c.Members) + + clusterMustProgress(t, c.Members) +} + // Ensure we can remove a member then add a new one back immediately. func TestIssue2681(t *testing.T) { defer afterTest(t) @@ -399,8 +420,7 @@ func (c *cluster) HTTPMembers() []client.Member { func (c *cluster) addMember(t *testing.T, usePeerTLS bool) { clusterStr := c.Members[0].Cluster.String() - idx := len(c.Members) - m := mustNewMember(t, c.name(idx), usePeerTLS) + m := mustNewMember(t, c.name(rand.Int()), usePeerTLS) scheme := "http" if usePeerTLS { scheme = "https" @@ -447,7 +467,7 @@ func (c *cluster) AddTLSMember(t *testing.T) { func (c *cluster) RemoveMember(t *testing.T, id uint64) { // send remove request to the cluster - cc := mustNewHTTPClient(t, []string{c.URL(0)}) + cc := mustNewHTTPClient(t, c.URLs()) ma := client.NewMembersAPI(cc) ctx, cancel := context.WithTimeout(context.Background(), requestTimeout) if err := ma.Remove(ctx, types.ID(id).String()); err != nil {