Make ClusterManagement keywords preserve active SSH connection
[integration/test.git] / csit / libraries / ClusterManagement.robot
index ed3979a101ea6bac3521d3c5e5dda2bdf0880e7c..c2b8ac678722344f19e0b87dad576d57a74cb510 100644 (file)
@@ -10,16 +10,12 @@ Documentation     Resource housing Keywords common to several suites for cluster
 ...
 ...               This resource holds private state (in suite variables),
 ...               which is generated once at Setup.
-...               The state includes list with indexes (numbers enumerating cluster members),
-...               IP addresses and Http (RequestsLibrary) sessions.
+...               The state includes IP addresses and Http (RequestsLibrary) sessions.
 ...               Most functionality deals with stopping/starting controllers
 ...               and finding leaders/followers for a Shard.
 ...
 ...               odl-jolokia is assumed to be installed.
 ...
-...               Keywords which run commands on ODL systems do not preserve active SSH session.
-...               TODO: Should they?
-...
 ...               Keywords are ordered from friendly ones to fiddly ones.
 ...               TODO: Figure out more deterministic but still user-friendly ordering.
 ...
@@ -63,6 +59,18 @@ Kill_Members_From_List_Or_All
     : FOR    ${index}    IN    @{index_list}
     \    Verify_Karaf_Is_Not_Running_On_Member    member_index=${index}
 
+ClusterManagement__Build_List
+    [Arguments]    ${member}
+    ${member_int}=    BuiltIn.Convert_To_Integer    ${member}
+    ${index_list}=    BuiltIn.Create_List    ${member_int}
+    [Return]    ${index_list}
+
+Kill_Single_Member
+    [Arguments]    ${member}    ${confirm}=True
+    [Documentation]    Convenience keyword that kills the specified member of the cluster.
+    ${index_list}=    ClusterManagement__Build_List    ${member}
+    Kill_Members_From_List_Or_All    ${index_list}    ${confirm}
+
 Clean_Journals_And_Snapshots_On_List_Or_All
     [Arguments]    ${member_index_list}=${EMPTY}
     [Documentation]    Delete journal and snapshots directories on every node listed (or all).
@@ -81,6 +89,12 @@ Start_Members_From_List_Or_All
     BuiltIn.Wait_Until_Keyword_Succeeds    ${timeout}    1s    Check_Cluster_Is_In_Sync    member_index_list=${member_index_list}
     # TODO: Do we also want to check Shard Leaders here?
 
+Start_Single_Member
+    [Arguments]    ${member}    ${wait_for_sync}=True    ${timeout}=300s
+    [Documentation]    Convenience keyword that starts the specified member of the cluster.
+    ${index_list}=    ClusterManagement__Build_List    ${member}
+    Start_Members_From_List_Or_All    ${index_list}    ${wait_for_sync}    ${timeout}
+
 Verify_Leader_Exists_For_Each_Shard
     [Arguments]    ${shard_name_list}    ${shard_type}=operational    ${member_index_list}=${EMPTY}    ${verify_restconf}=True
     [Documentation]    For each shard name, call Get_Leader_And_Followers_For_Shard.
@@ -239,5 +253,5 @@ ClusterManagement__Include_Member_Index
     Collections.Set_To_Dictionary    ${index_to_ip_mapping}    ${index}    ${member_ip}
     # Http session, with ${AUTH}, without headers.
     ${session_alias} =    Resolve_Http_Session_For_Member    member_index=${index}
-    RequestsLibrary.Create_Session    ${session_alias}    http://${member_ip}:${RESTCONFPORT}    auth=${AUTH}
+    RequestsLibrary.Create_Session    ${session_alias}    http://${member_ip}:${RESTCONFPORT}    auth=${AUTH}    max_retries=0
     Collections.Append_To_List    ${session_list}    ${session_alias}