*** Settings ***
+Documentation Karaf library. This library is useful to deal with controller Karaf console.
Library SSHLibrary
Library OperatingSystem
Variables ../variables/Variables.py
${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}
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}
\ Should Contain ${output} ${message}
[Return] ${output}
+Check Karaf Log File Does Not Have Messages
+ [Arguments] ${ip} ${message} ${user}=${ODL_SYSTEM_USER} ${password}=${ODL_SYSTEM_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}=180
[Documentation] Will Install the given ${feature_name}
Log ${timeout}
${output}= Issue Command On Karaf Console feature:install ${feature_name} ${controller} ${karaf_port} ${timeout}
[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}=180
[Documentation] Will UnInstall the given ${feature_name}
${output}= Issue Command On Karaf Console feature:uninstall ${feature_name} ${controller} ${karaf_port} ${timeout}
Log ${output}
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 ${CONTROLLER} port=${KARAF_SHELL_PORT} prompt=${KARAF_DETAILED_PROMPT}
+ 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.
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 On Background log:log "ROBOT MESSAGE: ${message}"
+ ${reply}= Execute Controller Karaf Command With Retry On Background log:log "ROBOT MESSAGE: ${message}"
[Return] ${reply}
Log Test Suite Start To Controller Karaf
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