Skip to content

Commit

Permalink
e2e: force endpoint for member removal
Browse files Browse the repository at this point in the history
e2e tests use different invocations of etcdctl, so the endpoint used to get
the member list will not necessarily be the same to make the remove call.
Instead, select an endpoint that is not being remove, and connect with that.
  • Loading branch information
Anthony Romano committed Mar 17, 2017
1 parent 5015480 commit 21ac657
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 17 deletions.
6 changes: 3 additions & 3 deletions e2e/ctl_v3_auth_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -487,17 +487,17 @@ func authTestMemberRemove(cx ctlCtx) {
cx.user, cx.pass = "root", "root"
authSetupTestUser(cx)

memIDToRemove, clusterID := cx.memberToRemove()
ep, memIDToRemove, clusterID := cx.memberToRemove()

// ordinal user cannot remove a member
cx.user, cx.pass = "test-user", "pass"
if err := ctlV3MemberRemove(cx, memIDToRemove, clusterID); err == nil {
if err := ctlV3MemberRemove(cx, ep, memIDToRemove, clusterID); err == nil {
cx.t.Fatalf("ordinal user must not be allowed to remove a member")
}

// root can remove a member
cx.user, cx.pass = "root", "root"
if err := ctlV3MemberRemove(cx, memIDToRemove, clusterID); err != nil {
if err := ctlV3MemberRemove(cx, ep, memIDToRemove, clusterID); err != nil {
cx.t.Fatal(err)
}
}
Expand Down
8 changes: 4 additions & 4 deletions e2e/ctl_v3_member_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,14 +71,14 @@ func getMemberList(cx ctlCtx) (etcdserverpb.MemberListResponse, error) {
}

func memberRemoveTest(cx ctlCtx) {
memIDToRemove, clusterID := cx.memberToRemove()
if err := ctlV3MemberRemove(cx, memIDToRemove, clusterID); err != nil {
ep, memIDToRemove, clusterID := cx.memberToRemove()
if err := ctlV3MemberRemove(cx, ep, memIDToRemove, clusterID); err != nil {
cx.t.Fatal(err)
}
}

func ctlV3MemberRemove(cx ctlCtx, memberID, clusterID string) error {
cmdArgs := append(cx.PrefixArgs(), "member", "remove", memberID)
func ctlV3MemberRemove(cx ctlCtx, ep, memberID, clusterID string) error {
cmdArgs := append(cx.prefixArgs([]string{ep}), "member", "remove", memberID)
return spawnWithExpect(cmdArgs, fmt.Sprintf("%s removed from cluster %s", memberID, clusterID))
}

Expand Down
14 changes: 4 additions & 10 deletions e2e/ctl_v3_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ func isGRPCTimedout(err error) bool {
return strings.Contains(err.Error(), "grpc: timed out trying to connect")
}

func (cx *ctlCtx) memberToRemove() (memberID string, clusterID string) {
func (cx *ctlCtx) memberToRemove() (ep string, memberID string, clusterID string) {
n1 := cx.cfg.clusterSize
if n1 < 2 {
cx.t.Fatalf("%d-node is too small to test 'member remove'", n1)
Expand All @@ -229,15 +229,9 @@ func (cx *ctlCtx) memberToRemove() (memberID string, clusterID string) {
cx.t.Fatalf("expected %d, got %d", n1, len(resp.Members))
}

ep = resp.Members[0].ClientURLs[0]
clusterID = fmt.Sprintf("%x", resp.Header.ClusterId)
memberID = fmt.Sprintf("%x", resp.Members[1].ID)

// remove one member that is not the one we connected to.
for _, m := range resp.Members {
if m.ID != resp.Header.MemberId {
memberID = fmt.Sprintf("%x", m.ID)
break
}
}

return memberID, clusterID
return ep, memberID, clusterID
}

0 comments on commit 21ac657

Please sign in to comment.