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.
 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.
 ...               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
 Library           SSHLibrary
+Resource          ${CURDIR}/Utils.robot
 
 *** Keywords ***
 
 *** 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
 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
     ${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}
     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.
 
 Require_Python
     [Documentation]    Verify current SSH connection leads to machine with python working. Fatal fail otherwise.