From e8dc4c5c25a5795c5b07c702952f42e752c48303 Mon Sep 17 00:00:00 2001 From: Jingyi Hu Date: Fri, 12 Apr 2019 17:48:08 -0700 Subject: [PATCH] integration: add TestMoveLeaderToLearnerError Adding integration test TestMoveLeaderToLearnerError, which ensures that leader transfer to learner member will fail. --- integration/v3_leadership_test.go | 33 +++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/integration/v3_leadership_test.go b/integration/v3_leadership_test.go index f25eb1519..0cb83539c 100644 --- a/integration/v3_leadership_test.go +++ b/integration/v3_leadership_test.go @@ -16,6 +16,7 @@ package integration import ( "context" + "strings" "testing" "time" @@ -106,3 +107,35 @@ func TestMoveLeaderError(t *testing.T) { t.Errorf("err = %v, want %v", err, rpctypes.ErrGRPCNotLeader) } } + +// TestMoveLeaderToLearnerError ensures that leader transfer to learner member will fail. +func TestMoveLeaderToLearnerError(t *testing.T) { + defer testutil.AfterTest(t) + + clus := NewClusterV3(t, &ClusterConfig{Size: 3}) + defer clus.Terminate(t) + + // we have to add and launch learner member after initial cluster was created, because + // bootstrapping a cluster with learner member is not supported. + clus.AddAndLaunchLearnerMember(t) + + learners, err := clus.GetLearnerMembers() + if err != nil { + t.Fatalf("failed to get the learner members in cluster: %v", err) + } + if len(learners) != 1 { + t.Fatalf("added 1 learner to cluster, got %d", len(learners)) + } + + learnerID := learners[0].ID + leaderIdx := clus.WaitLeader(t) + cli := clus.Client(leaderIdx) + _, err = cli.MoveLeader(context.Background(), uint64(learnerID)) + if err == nil { + t.Fatalf("expecting leader transfer to learner to fail, got no error") + } + expectedErrKeywords := "bad leader transferee" + if !strings.Contains(err.Error(), expectedErrKeywords) { + t.Errorf("expecting error to contain %s, got %s", expectedErrKeywords, err.Error()) + } +}