Cardinal simple system test suites
[integration/test.git] / csit / libraries / SSHKeywords.robot
index 763dfe707704decd222d77a7484370366a9019b9..2113ebb88eadfde8897b3746800323ac7821d084 100644 (file)
@@ -1,3 +1,4 @@
+*** Settings ***
 Documentation     Resource enhancing SSHLibrary with Keywords used in multiple suites.
 ...
 ...               Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
@@ -11,18 +12,51 @@ Documentation     Resource enhancing SSHLibrary with Keywords used in multiple s
 ...               When the Keywords assume a SSH session is active,
 ...               and if the Keywords do not fit into a more specific Resource,
 ...               you can place them here.
+...
+...               TODO: Migrate Keywords related to handling SSH here.
+...               That may include Utils.Flexible_SSH_Login, KarafKeywords.Restore_Current_SSH_Connection_From_Index and similar.
 Library           SSHLibrary
+Resource          ${CURDIR}/Utils.robot
 
 *** Keywords ***
+Open_Connection_To_ODL_System
+    [Documentation]    Open a connection to the ODL system and return its identifier.
+    ...    On clustered systems this opens the connection to the first node.
+    ${odl}=    SSHLibrary.Open_Connection    ${ODL_SYSTEM_IP}    prompt=${ODL_SYSTEM_PROMPT}    timeout=10s
+    Utils.Flexible_Controller_Login
+    [Return]    ${odl}
+
+Open_Connection_To_Tools_System
+    [Documentation]    Open a connection to the tools system and return its identifier.
+    ${tools}=    SSHLibrary.Open_Connection    ${TOOLS_SYSTEM_IP}    prompt=${TOOLS_SYSTEM_PROMPT}
+    Utils.Flexible_Mininet_Login
+    [Return]    ${tools}
+
 Execute_Command_Passes
-    [Arguments]    ${command}
-    [Documentation]    Execute command via SSH. If RC is nonzero, log everything. Retrun bool string of command success.
+    [Arguments]    ${command}    ${return_success_only}=True    ${log_on_success}=False    ${log_on_failure}=True    ${stderr_must_be_empty}=False
+    [Documentation]    Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
+    ...    Log everything, depending on arguments and success. Retrun either success string or stdout.
+    ...    TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?
     ${stdout}    ${stderr}    ${rc} =    SSHLibrary.Execute_Command    ${command}    return_stderr=True    return_rc=True
-    BuiltIn.Return_From_Keyword_If    ${rc} == 0    True
+    ${emptiness_status}    ${result} =    BuiltIn.Run_Keyword_And_Ignore_Error    BuiltIn.Should_Be_Empty    ${stderr}
+    ${success} =    BuiltIn.Set_Variable_If    (${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})    True    False
+    BuiltIn.Run_Keyword_If    (${log_on_success} and ${success}) or (${log_on_failure} and not ${success})    Log_Command_Results    ${stdout}    ${stderr}    ${rc}
+    BuiltIn.Return_From_Keyword_If    ${return_success_only}    ${success}
+    BuiltIn.Return_From_Keyword_If    ${success}    ${stdout}
+    BuiltIn.Fail    Got rc: ${rc} or stdout was not empty: ${stdout}
+
+Execute_Command_Should_Pass
+    [Arguments]    ${command}    ${log_on_success}=True    ${log_on_failure}=True    ${stderr_must_be_empty}=False
+    [Documentation]    A wrapper for Execute_Command_Passes with return_success_only=False
+    ...    Also, log_on_success defaults to True (but is customizable, unlike return_success_only)..
+    BuiltIn.Run_Keyword_And_Return    Execute_Command_Passes    ${command}    return_success_only=False    log_on_success=${log_on_success}    log_on_failure=${log_on_failure}    stderr_must_be_empty=${stderr_must_be_empty}
+
+Log_Command_Results
+    [Arguments]    ${stdout}    ${stderr}    ${rc}
+    [Documentation]    Log everything returned by SSHLibrary.Execute_Command
     BuiltIn.Log    ${stdout}
     BuiltIn.Log    ${stderr}
     BuiltIn.Log    ${rc}
-    [Return]    False
 
 Require_Python
     [Documentation]    Verify current SSH connection leads to machine with python working. Fatal fail otherwise.