2 Documentation Suite mixing basic operations with restart of car Leader.
4 ... Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
6 ... This program and the accompanying materials are made available under the
7 ... terms of the Eclipse Public License v1.0 which accompanies this distribution,
8 ... and is available at http://www.eclipse.org/legal/epl-v10.html
11 ... This test kills the current leader of the "car" shard and then executes CRD
12 ... operations on the new leader and a new follower. The killed member is brought back.
13 ... This suite uses 3 different car sets, same size but different starting ID.
15 ... Other models and shards (people, car-people) are not accessed by this suite.
17 ... All data is deleted at the end of the suite.
18 ... This suite expects car module to have a separate Shard.
20 Default Tags clustering carpeople critical
22 Resource ${CURDIR}/../../../libraries/CarPeople.robot
23 Resource ${CURDIR}/../../../libraries/ClusterManagement.robot
24 Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot
25 Variables ${CURDIR}/../../../variables/Variables.py
29 ${FOLLOWER_2NODE_START_I} 300
30 ${LEADER_2NODE_START_I} 200
31 ${MEMBER_START_TIMEOUT} 300s
32 ${ORIGINAL_START_I} 100
33 @{SHARD_NAME_LIST} car
34 ${VAR_DIR} ${CURDIR}/../../../variables/carpeople/crud
37 Add_Original_Cars_On_Old_Leader
38 [Documentation] Add initial cars on car Leader.
39 TemplatedRequests.Put_As_Json_Templated folder=${VAR_DIR}/cars session=${car_leader_session} iterations=${CAR_ITEMS} iter_start=${ORIGINAL_START_I}
41 Kill_Original_Car_Leader
42 [Documentation] Kill the car Leader to cause a new leader to get elected.
43 ${kill_list} = BuiltIn.Create_List ${car_leader_index}
44 ClusterManagement.Kill_Members_From_List_Or_All member_index_list=${kill_list} confirm=True
47 [Documentation] Wait until new car Leader is elected.
48 BuiltIn.Wait_Until_Keyword_Succeeds 30s 2s Set_Variables_For_Less_Nodes member_index_list=${car_follower_indices}
50 See_Original_Cars_On_New_Leader
51 [Documentation] GET cars from new Leader, should be the initial ones.
52 TemplatedRequests.Get_As_Json_Templated folder=${VAR_DIR}/cars session=${new_leader_session} verify=True iterations=${CAR_ITEMS} iter_start=${ORIGINAL_START_I}
54 See_Original_Cars_On_New_Followers
55 [Documentation] The same check on other existing member(s).
56 : FOR ${session} IN @{new_follower_sessions}
57 \ TemplatedRequests.Get_As_Json_Templated folder=${VAR_DIR}/cars session=${session} verify=True iterations=${CAR_ITEMS} iter_start=${ORIGINAL_START_I}
59 Delete_Original_Cars_On_New_Leader
60 [Documentation] Delete cars on the new Leader.
61 TemplatedRequests.Delete_Templated folder=${VAR_DIR}/cars session=${new_leader_session}
63 Add_Leader_Cars_On_New_Leader
64 [Documentation] Add cars on the new Leader.
65 TemplatedRequests.Put_As_Json_Templated folder=${VAR_DIR}/cars session=${new_leader_session} iterations=${CAR_ITEMS} iter_start=${LEADER_2NODE_START_I}
67 See_Leader_Cars_On_New_Leader
68 [Documentation] GET cars from new Leader, should be the new ones.
69 TemplatedRequests.Get_As_Json_Templated folder=${VAR_DIR}/cars session=${new_leader_session} verify=True iterations=${CAR_ITEMS} iter_start=${LEADER_2NODE_START_I}
71 See_Leader_Cars_On_New_Followers
72 [Documentation] The same check on other existing members.
73 : FOR ${session} IN @{new_follower_sessions}
74 \ TemplatedRequests.Get_As_Json_Templated folder=${VAR_DIR}/cars session=${session} verify=True iterations=${CAR_ITEMS} iter_start=${LEADER_2NODE_START_I}
76 Delete_Leader_Cars_On_New_First_Follower
77 [Documentation] Delete cars in new first Follower.
78 TemplatedRequests.Delete_Templated folder=${VAR_DIR}/cars session=${new_first_follower_session}
80 Add_Follower_Cars_On_New_First_Follower
81 [Documentation] Add cars on the new first Follower.
82 TemplatedRequests.Put_As_Json_Templated folder=${VAR_DIR}/cars session=${new_first_follower_session} iterations=${CAR_ITEMS} iter_start=${FOLLOWER_2NODE_START_I}
84 See_Folower_Cars_On_New_Leader
85 [Documentation] Get cars from the new Leader, should be the ones added on follower.
86 TemplatedRequests.Get_As_Json_Templated folder=${VAR_DIR}/cars session=${new_leader_session} verify=True iterations=${CAR_ITEMS} iter_start=${FOLLOWER_2NODE_START_I}
88 See_Follower_Cars_On_New_Followers
89 [Documentation] The same check on other existing members.
90 : FOR ${session} IN @{new_follower_sessions}
91 \ TemplatedRequests.Get_As_Json_Templated folder=${VAR_DIR}/cars session=${session} verify=True iterations=${CAR_ITEMS} iter_start=${FOLLOWER_2NODE_START_I}
94 [Documentation] Start the killed member without deleting the persisted data.
95 ${revive_list} = BuiltIn.Create_List ${car_leader_index}
96 ClusterManagement.Start_Members_From_List_Or_All member_index_list=${revive_list} wait_for_sync=True timeout=${MEMBER_START_TIMEOUT}
97 BuiltIn.Wait_Until_Keyword_Succeeds 30s 2s ClusterManagement.Verify_Leader_Exists_For_Each_Shard shard_name_list=${SHARD_NAME_LIST} shard_type=config
99 See_Folower_Cars_On_Old_Leader
100 [Documentation] GET cars from the restarted member, should be the ones added on follower.
101 TemplatedRequests.Get_As_Json_Templated folder=${VAR_DIR}/cars session=${car_leader_session} verify=True iterations=${CAR_ITEMS} iter_start=${FOLLOWER_2NODE_START_I}
103 Delete_Follower_Cars_On_New_Leader
104 [Documentation] Delete cars on the last Leader.
105 TemplatedRequests.Delete_Templated folder=${VAR_DIR}/cars session=${new_leader_session}
109 [Documentation] Initialize resources, memorize car shard leader and followers.
110 ClusterManagement.ClusterManagement_Setup
111 CarPeople.Set_Variables_For_Shard shard_name=car
113 Set_Variables_For_Less_Nodes
114 [Arguments] ${member_index_list}
115 [Documentation] Get current leader and followers for car shard, set additional suite variables.
116 ${leader} ${follower_list} = ClusterManagement.Get_Leader_And_Followers_For_Shard shard_name=car shard_type=config member_index_list=${member_index_list}
117 ${leader_session} = ClusterManagement.Resolve_Http_Session_For_Member member_index=${leader}
118 BuiltIn.Set_Suite_Variable \${new_leader_session} ${leader_session}
119 ${sessions} = BuiltIn.Create_List
120 : FOR ${follower_index} IN @{follower_list}
121 \ ${follower_session} = ClusterManagement.Resolve_Http_Session_For_Member member_index=${follower_index}
122 \ Collections.Append_To_List ${sessions} ${follower_session}
123 BuiltIn.Set_Suite_Variable \${new_follower_sessions} ${sessions}
124 ${first_follower_session} = Collections.Get_From_List ${sessions} 0
125 BuiltIn.Set_Suite_Variable \${new_first_follower_session} ${first_follower_session}