X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=csit%2Flibraries%2FKarafKeywords.robot;h=f1cc295755a3754a111b9595baf87351249ca309;hb=ca65f6e3eb43b80a6d1a7d5046f128ed2fe30f67;hp=9816d3563db695b2aa96606d0c8b984c3876cbc9;hpb=519dde2f454f7a8b1e4a71f43e97fdf0b9415b77;p=integration%2Ftest.git diff --git a/csit/libraries/KarafKeywords.robot b/csit/libraries/KarafKeywords.robot index 9816d3563d..f1cc295755 100644 --- a/csit/libraries/KarafKeywords.robot +++ b/csit/libraries/KarafKeywords.robot @@ -1,4 +1,5 @@ *** Settings *** +Documentation Karaf library. This library is useful to deal with controller Karaf console. Library SSHLibrary Library OperatingSystem Variables ../variables/Variables.py @@ -6,32 +7,20 @@ Variables ../variables/Variables.py *** Variables *** ${WORKSPACE} /tmp ${BUNDLEFOLDER} distribution-karaf-0.3.0-SNAPSHOT +${KarafKeywords__karaf_connection_index} -1 *** Keywords *** -Check Karaf Log File Does Not Have Messages - [Arguments] ${ip} ${message} ${user}=${CONTROLLER_USER} ${password}=${CONTROLLER_PASSWORD} ${prompt}=${DEFAULT_LINUX_PROMPT} ${log_file}=${WORKSPACE}/${BUNDLEFOLDER}/data/log/karaf.log - [Documentation] Fails if the provided ${message} is found in the karaf.log file. Uses grep to search. The - ... karaf.log file can be overridden with ${log_file} to be any file on the given system @ ${ip} - ${output}= Run Command On Controller ${ip} grep ${message} ${log_file} user=${user} password=${password} prompt=${prompt} - Should Not Contain ${output} ${message} - Verify Feature Is Installed - [Arguments] ${feature_name} ${controller}=${CONTROLLER} ${karaf_port}=${KARAF_SHELL_PORT} + [Arguments] ${feature_name} ${controller}=${ODL_SYSTEM_IP} ${karaf_port}=${KARAF_SHELL_PORT} [Documentation] Will Succeed if the given ${feature_name} is found in the output of "feature:list -i" ${output}= Issue Command On Karaf Console feature:list -i | grep ${feature_name} ${controller} ${karaf_port} Should Contain ${output} ${feature_name} [Return] ${output} -Verify Feature Is Not Installed - [Arguments] ${feature_name} ${controller}=${CONTROLLER} ${karaf_port}=${KARAF_SHELL_PORT} - [Documentation] Will Succeed if the given ${feature_name} is NOT found in the output of "feature:list -i" - ${output}= Issue Command On Karaf Console feature:list -i | grep ${feature_name} ${controller} ${karaf_port} - Should Not Contain ${output} ${feature_name} - [Return] ${output} - Issue Command On Karaf Console - [Arguments] ${cmd} ${controller}=${CONTROLLER} ${karaf_port}=${KARAF_SHELL_PORT} ${timeout}=5 - [Documentation] Will execute the given ${cmd} by ssh'ing to the karaf console running on ${CONTROLLER} + [Arguments] ${cmd} ${controller}=${ODL_SYSTEM_IP} ${karaf_port}=${KARAF_SHELL_PORT} ${timeout}=5 + [Documentation] Will execute the given ${cmd} by ssh'ing to the karaf console running on ${ODL_SYSTEM_IP} + ... Note that this keyword will open&close new SSH connection, without switching back to previously current session. Open Connection ${controller} port=${karaf_port} prompt=${KARAF_PROMPT} timeout=${timeout} Login ${KARAF_USER} ${KARAF_PASSWORD} Write ${cmd} @@ -40,15 +29,23 @@ Issue Command On Karaf Console Log ${output} [Return] ${output} +Check For Elements On Karaf Command Output Message + [Arguments] ${cmd} ${elements} ${controller}=${ODL_SYSTEM_IP} ${karaf_port}=${KARAF_SHELL_PORT} ${timeout}=5 + [Documentation] Will execute the command using Issue Command On Karaf Console then check for the given elements + ... in the command output message + ${output} Issue Command On Karaf Console ${cmd} ${controller} ${karaf_port} ${timeout} + : FOR ${i} IN @{elements} + \ Should Contain ${output} ${i} + Verify Bundle Is Installed - [Arguments] ${bundle_name} ${controller}=${CONTROLLER} ${karaf_port}=${KARAF_SHELL_PORT} + [Arguments] ${bundle_name} ${controller}=${ODL_SYSTEM_IP} ${karaf_port}=${KARAF_SHELL_PORT} [Documentation] Will succeed if the given ${bundle name} is present in the output of "bundle:list -s " ${output}= Issue Command On Karaf Console bundle:list -s | grep ${bundle_name} ${controller} ${karaf_port} Should Contain ${output} ${bundle_name} [Return] ${output} Verify Bundle Is Not Installed - [Arguments] ${bundle_name} ${controller}=${CONTROLLER} ${karaf_port}=${KARAF_SHELL_PORT} + [Arguments] ${bundle_name} ${controller}=${ODL_SYSTEM_IP} ${karaf_port}=${KARAF_SHELL_PORT} [Documentation] Will succeed if the given ${bundle_name} is NOT found in the output of "bundle:list -s" ${output}= Issue Command On Karaf Console bundle:list -i | grep ${bundle_name} ${controller} ${karaf_port} Should Not Contain ${output} ${bundle_name} @@ -62,8 +59,15 @@ Check Karaf Log Has Messages \ Should Contain ${output} ${message} [Return] ${output} +Check Karaf Log File Does Not Have Messages + [Arguments] ${ip} ${message} ${user}=${ODL_SYSTEM_USER} ${password}=${CONTROLLER_PASSWORD} ${prompt}=${DEFAULT_LINUX_PROMPT} ${log_file}=${WORKSPACE}/${BUNDLEFOLDER}/data/log/karaf.log + [Documentation] Fails if the provided ${message} is found in the karaf.log file. Uses grep to search. The + ... karaf.log file can be overridden with ${log_file} to be any file on the given system @ ${ip} + ${output}= Run Command On Controller ${ip} grep -c '${message}' ${log_file} user=${user} password=${password} prompt=${prompt} + Should Be Equal As Strings ${output} 0 + Install a Feature - [Arguments] ${feature_name} ${controller}=${CONTROLLER} ${karaf_port}=${KARAF_SHELL_PORT} ${timeout}=15 + [Arguments] ${feature_name} ${controller}=${ODL_SYSTEM_IP} ${karaf_port}=${KARAF_SHELL_PORT} ${timeout}=15 [Documentation] Will Install the given ${feature_name} Log ${timeout} ${output}= Issue Command On Karaf Console feature:install ${feature_name} ${controller} ${karaf_port} ${timeout} @@ -71,8 +75,107 @@ Install a Feature [Return] ${output} Uninstall a Feature - [Arguments] ${feature_name} ${controller}=${CONTROLLER} ${karaf_port}=${KARAF_SHELL_PORT} ${timeout}=15 + [Arguments] ${feature_name} ${controller}=${ODL_SYSTEM_IP} ${karaf_port}=${KARAF_SHELL_PORT} ${timeout}=15 [Documentation] Will UnInstall the given ${feature_name} ${output}= Issue Command On Karaf Console feature:uninstall ${feature_name} ${controller} ${karaf_port} ${timeout} Log ${output} [Return] ${output} + +Restore Current SSH Connection From Index + [Arguments] ${connection_index} + [Documentation] Restore active SSH connection in SSHLibrary to given index. + ... + ... Restore the currently active connection state in + ... SSHLibrary to match the state returned by "Switch + ... Connection" or "Get Connection". More specifically makes + ... sure that there will be no active connection when the + ... \${connection_index} reported by these means is None. + ... + ... There is a misfeature in SSHLibrary: Invoking "SSHLibrary.Switch_Connection" + ... and passing None as the "index_or_alias" argument to it has exactly the + ... same effect as invoking "Close Connection". + ... https://github.com/robotframework/SSHLibrary/blob/master/src/SSHLibrary/library.py#L560 + ... + ... We want to have Keyword which will "switch out" to previous + ... "no connection active" state without killing the background one. + ... + ... As some suites may hypothetically rely on non-writability of active connection, + ... workaround is applied by opening and closing temporary connection. + ... Unfortunately this will fail if run on Jython and there is no SSH server + ... running on localhost, port 22 but there is nothing easy that can be done about it. + BuiltIn.Run Keyword And Return If ${connection_index} is not None SSHLibrary.Switch Connection ${connection_index} + # The background connection is still current, bury it. + SSHLibrary.Open Connection 127.0.0.1 + SSHLibrary.Close Connection + +Open Controller Karaf Console On Background + [Documentation] Connect to the controller's karaf console, but do not switch to it. + ${current_ssh_connection}= SSHLibrary.Get Connection + SSHLibrary.Open Connection ${ODL_SYSTEM_IP} port=${KARAF_SHELL_PORT} prompt=${KARAF_DETAILED_PROMPT} + ${karaf_connection}= SSHLibrary.Get Connection + SSHLibrary.Login ${KARAF_USER} ${KARAF_PASSWORD} + BuiltIn.Set Suite Variable ${KarafKeywords__karaf_connection_index} ${karaf_connection.index} + Restore Current SSH Connection From Index ${current_ssh_connection.index} + +Configure Timeout For Karaf Console + [Arguments] ${timeout} + [Documentation] Configure a different timeout for the Karaf console + BuiltIn.Run Keyword If ${KarafKeywords__karaf_connection_index} == -1 Fail Need to connect to a Karaf Console first + ${current_connection_index}= SSHLibrary.Switch Connection ${KarafKeywords__karaf_connection_index} + SSHLibrary.Set_Client_Configuration timeout=${timeout} + Restore Current SSH Connection From Index ${current_connection_index} + +Execute Controller Karaf Command On Background + [Arguments] ${command} + [Documentation] Send command to karaf without affecting current SSH connection. Read, log and return response. + ... This assumes Karaf connection has index saved and correct prompt set. + BuiltIn.Run Keyword If ${KarafKeywords__karaf_connection_index} == -1 Fail Need to connect to a Karaf Console first + ${current_connection_index}= SSHLibrary.Switch Connection ${KarafKeywords__karaf_connection_index} + ${status_write} ${message_write}= BuiltIn.Run Keyword And Ignore Error SSHLibrary.Write ${command} + ${status_wait} ${message_wait}= BuiltIn.Run Keyword And Ignore Error SSHLibrary.Read Until Prompt + Restore Current SSH Connection From Index ${current_connection_index} + BuiltIn.Run Keyword If '${status_write}' != 'PASS' BuiltIn.Fail Failed to send the command: ${command} + BuiltIn.Log ${message_wait} + BuiltIn.Run Keyword If '${status_wait}' != 'PASS' BuiltIn.Fail Failed to see prompt after sending the command: ${command} + [Return] ${message_wait} + +Execute Controller Karaf Command With Retry On Background + [Arguments] ${command} + [Documentation] Attemp to send command to karaf, if fail then open connection and try again. + ${status} ${message}= BuiltIn.Run Keyword And Ignore Error Execute Controller Karaf Command On Background ${command} + BuiltIn.Return_From_Keyword_If '${status}' == 'PASS' ${message} + # TODO: Verify this does not leak connections indices. + Open Controller Karaf Console On Background + ${message}= Execute Controller Karaf Command On Background ${command} + [Return] ${message} + +Log Message To Controller Karaf + [Arguments] ${message} + [Documentation] Send a message into the controller's karaf log file. Do not change current SSH connection. + ${reply}= Execute Controller Karaf Command With Retry On Background log:log "ROBOT MESSAGE: ${message}" + [Return] ${reply} + +Log Test Suite Start To Controller Karaf + [Documentation] Log suite name to karaf log, useful in suite setup. + Log Message To Controller Karaf Starting suite ${SUITE_SOURCE} + +Log Testcase Start To Controller Karaf + [Documentation] Log test case name to karaf log, useful in test case setup. + Log Message To Controller Karaf Starting test ${TEST_NAME} + +Set Bgpcep Log Levels + [Arguments] ${bgpcep_level}=${DEFAULT_BGPCEP_LOG_LEVEL} ${protocol_level}=${DEFAULT_PROTOCOL_LOG_LEVEL} + [Documentation] Assuming OCKCOB was used, set logging level on bgpcep and protocol loggers without affecting current SSH session. + # FIXME: Move to appropriate Resource + Execute Controller Karaf Command On Background log:set ${bgpcep_level} org.opendaylight.bgpcep + Execute Controller Karaf Command On Background log:set ${protocol_level} org.opendaylight.protocol + +Wait For Karaf Log + [Arguments] ${message} ${timeout}=60 + [Documentation] Read karaf logs until message appear + Log Waiting for '${message}' in karaf log + Open Connection ${ODL_SYSTEM_IP} port=${KARAF_SHELL_PORT} prompt=${KARAF_PROMPT} timeout=${timeout} + Flexible SSH Login ${KARAF_USER} ${KARAF_PASSWORD} + Write log:tail + Read Until ${message} + Close Connection