@@ -992,6 +992,118 @@ func TestIsReadyToPromoteMember(t *testing.T) {
992
992
}
993
993
}
994
994
995
+ func TestPromoteMember (t * testing.T ) {
996
+ clientURLs := []string {"http://127.0.0.1:2379" }
997
+ testCases := []struct {
998
+ name string
999
+ members []* Member
1000
+ promoteID types.ID
1001
+ wantMembers map [types.ID ]* Member
1002
+ }{
1003
+ {
1004
+ name : "promote a voting member" ,
1005
+ members : []* Member {
1006
+ newTestMember (1 , nil , "1" , clientURLs ),
1007
+ newTestMemberAsLearner (2 , nil , "2" , clientURLs ),
1008
+ },
1009
+ promoteID : 1 ,
1010
+ wantMembers : map [types.ID ]* Member {
1011
+ 1 : newTestMember (1 , nil , "1" , clientURLs ),
1012
+ 2 : newTestMemberAsLearner (2 , nil , "2" , clientURLs ),
1013
+ },
1014
+ },
1015
+ {
1016
+ name : "promote a learner" ,
1017
+ members : []* Member {
1018
+ newTestMember (1 , nil , "1" , clientURLs ),
1019
+ newTestMemberAsLearner (2 , nil , "2" , clientURLs ),
1020
+ },
1021
+ promoteID : 2 ,
1022
+ wantMembers : map [types.ID ]* Member {
1023
+ 1 : newTestMember (1 , nil , "1" , clientURLs ),
1024
+ 2 : newTestMember (2 , nil , "2" , clientURLs ),
1025
+ },
1026
+ },
1027
+ {
1028
+ name : "promote a non-exist member" ,
1029
+ members : []* Member {
1030
+ newTestMember (1 , nil , "1" , clientURLs ),
1031
+ newTestMemberAsLearner (2 , nil , "2" , clientURLs ),
1032
+ },
1033
+ promoteID : 3 ,
1034
+ wantMembers : map [types.ID ]* Member {
1035
+ 1 : newTestMember (1 , nil , "1" , clientURLs ),
1036
+ 2 : newTestMemberAsLearner (2 , nil , "2" , clientURLs ),
1037
+ },
1038
+ },
1039
+ }
1040
+
1041
+ for _ , tc := range testCases {
1042
+ t .Run (tc .name , func (t * testing.T ) {
1043
+ c := newTestCluster (t , tc .members )
1044
+ st := v2store .New ("/0" , "/1" )
1045
+ c .Store (st )
1046
+ c .SetStore (st )
1047
+
1048
+ c .PromoteMember (tc .promoteID , false )
1049
+
1050
+ mst , _ := membersFromStore (c .lg , st )
1051
+ require .Equal (t , tc .wantMembers , mst )
1052
+ })
1053
+ }
1054
+ }
1055
+
1056
+ func TestUpdateRaftAttributes (t * testing.T ) {
1057
+ clientURLs := []string {"http://127.0.0.1:2379" }
1058
+ oldPeerURLs := []string {"http://127.0.0.1:2380" }
1059
+ newPeerURLs := []string {"http://127.0.0.1:2382" }
1060
+ testCases := []struct {
1061
+ name string
1062
+ members []* Member
1063
+ updateMemberID types.ID
1064
+ wantMembers map [types.ID ]* Member
1065
+ }{
1066
+ {
1067
+ name : "update an existing member" ,
1068
+ members : []* Member {
1069
+ newTestMember (1 , oldPeerURLs , "1" , clientURLs ),
1070
+ newTestMember (2 , oldPeerURLs , "2" , clientURLs ),
1071
+ },
1072
+ updateMemberID : 2 ,
1073
+ wantMembers : map [types.ID ]* Member {
1074
+ 1 : newTestMember (1 , oldPeerURLs , "1" , clientURLs ),
1075
+ 2 : newTestMember (2 , newPeerURLs , "2" , clientURLs ),
1076
+ },
1077
+ },
1078
+ {
1079
+ name : "update a non-exist member" ,
1080
+ members : []* Member {
1081
+ newTestMember (1 , oldPeerURLs , "1" , clientURLs ),
1082
+ newTestMember (2 , oldPeerURLs , "2" , clientURLs ),
1083
+ },
1084
+ updateMemberID : 3 ,
1085
+ wantMembers : map [types.ID ]* Member {
1086
+ 1 : newTestMember (1 , oldPeerURLs , "1" , clientURLs ),
1087
+ 2 : newTestMember (2 , oldPeerURLs , "2" , clientURLs ),
1088
+ },
1089
+ },
1090
+ }
1091
+
1092
+ for _ , tc := range testCases {
1093
+ t .Run (tc .name , func (t * testing.T ) {
1094
+ c := newTestCluster (t , tc .members )
1095
+ st := v2store .New ("/0" , "/1" )
1096
+ c .Store (st )
1097
+ c .SetStore (st )
1098
+
1099
+ c .UpdateRaftAttributes (tc .updateMemberID , RaftAttributes {PeerURLs : newPeerURLs }, false )
1100
+
1101
+ mst , _ := membersFromStore (c .lg , st )
1102
+ require .Equal (t , tc .wantMembers , mst )
1103
+ })
1104
+ }
1105
+ }
1106
+
995
1107
func TestClusterStore (t * testing.T ) {
996
1108
name := "etcd"
997
1109
clientURLs := []string {"http://127.0.0.1:4001" }
0 commit comments