Add a missing keyword
[integration/test.git] / csit / libraries / ShardStability.robot
index 015c2c95e3e8d630fb3b2a6c2d00554a54eabf42..44ab75f403f00660c536c515dc266d17fb259bbf 100644 (file)
@@ -14,12 +14,14 @@ Documentation     Robot library to monitor shard stability.
 ...               Requirements: ClusterManagement.ClusterManagement_Setup must be called before Shard_Stability_Init
 ...
 ...               It is possible to use it for stateless comparison.
+...               Variable @{DEFAULT_SHARD_LIST} contains default module shards.
 Library           Collections
 Library           String
 Resource          ${CURDIR}/ClusterManagement.robot
 
 *** Variables ***
 &{stored_details}
+@{DEFAULT_SHARD_LIST}    default:config    default:operational    topology:config    topology:operational    inventory:config    inventory:operational    entity-ownership:operational
 
 *** Keywords ***
 Shards_Stability_Init_Details
@@ -30,16 +32,19 @@ Shards_Stability_Init_Details
     BuiltIn.Set_Suite_Variable    ${stored_details}    ${shards_details}
 
 Shards_Stability_Get_Details
-    [Arguments]    ${shard_list}    ${member_index_list}=${EMPTY}
+    [Arguments]    ${shard_list}    ${member_index_list}=${EMPTY}    ${verify_restconf}=False    ${http_timeout}=${EMPTY}
     [Documentation]    Return shard details stored in dictionary.
     ...    ${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..
     &{shards_details}    BuiltIn.Create_Dictionary
-    : FOR    ${shard_details}    IN    @{shard_list}
-    \    ${shard_name}    ${shard_type}    String.Split_String    ${shard_details}    separator=:
-    \    ${leader}    ${followers}    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${shard_name}    shard_type=${shard_type}    member_index_list=${member_index_list}
-    \    Collections.Sort_List    ${followers}
-    \    Collections.Set_To_Dictionary    ${shards_details}    ${shard_name}_${shard_type}_leader=${leader}
-    \    Collections.Set_To_Dictionary    ${shards_details}    ${shard_name}_${shard_type}_followers=${followers}
+    CompareStream.Run_Keyword_If_At_Least_Phosphorus    Collections.Remove_Values_From_List    ${shard_list}    entity-ownership:operational
+    FOR    ${shard_details}    IN    @{shard_list}
+        ${shard_name}    ${shard_type}    String.Split_String    ${shard_details}    separator=:
+        ${leader}    ${followers}    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=${shard_name}    shard_type=${shard_type}    member_index_list=${member_index_list}
+        ...    verify_restconf=${verify_restconf}    http_timeout=${http_timeout}
+        Collections.Sort_List    ${followers}
+        Collections.Set_To_Dictionary    ${shards_details}    ${shard_name}_${shard_type}_leader=${leader}
+        Collections.Set_To_Dictionary    ${shards_details}    ${shard_name}_${shard_type}_followers=${followers}
+    END
     BuiltIn.Return_From_Keyword    ${shards_details}
 
 Shards_Stability_Verify
@@ -55,3 +60,24 @@ Shards_Stability_Compare_Same
     Collections.Log_Dictionary    ${exp_details}
     Collections.Log_Dictionary    ${details}
     Collections.Dictionaries_Should_Be_Equal    ${exp_details}    ${details}
+
+Set_Shard_Location
+    [Arguments]    ${requested_leader_idx}
+    [Documentation]    Move default/topology config/operational shard location to local or remote node as requested
+    ...    towards the given member.
+    ClusterAdmin.Make_Leader_Local    ${requested_leader_idx}    default    config
+    ClusterAdmin.Make_Leader_Local    ${requested_leader_idx}    default    operational
+    ClusterAdmin.Make_Leader_Local    ${requested_leader_idx}    topology    config
+    ClusterAdmin.Make_Leader_Local    ${requested_leader_idx}    topology    operational
+
+Verify_Shard_Leader_Located_As_Expected
+    [Arguments]    ${expected_leader_idx}    ${http_timeout}=${EMPTY}
+    [Documentation]    Verify default/topology config/operational shard leader location is as expected
+    ${leader}    ${follower_list} =    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=default    shard_type=config    verify_restconf=False    http_timeout=${http_timeout}
+    BuiltIn.Should_Be_Equal_As_Numbers    ${expected_leader_idx}    ${leader}
+    ${leader}    ${follower_list} =    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=default    shard_type=operational    verify_restconf=False    http_timeout=${http_timeout}
+    BuiltIn.Should_Be_Equal_As_Numbers    ${expected_leader_idx}    ${leader}
+    ${leader}    ${follower_list} =    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=topology    shard_type=config    verify_restconf=False    http_timeout=${http_timeout}
+    BuiltIn.Should_Be_Equal_As_Numbers    ${expected_leader_idx}    ${leader}
+    ${leader}    ${follower_list} =    ClusterManagement.Get_Leader_And_Followers_For_Shard    shard_name=topology    shard_type=operational    verify_restconf=False    http_timeout=${http_timeout}
+    BuiltIn.Should_Be_Equal_As_Numbers    ${expected_leader_idx}    ${leader}