Test to do repeated, random boots
Utilizes additional keywords:
Validate Connection
Intersect Lists
Search List
Change-Id: I29a2a4805bb685a0519d4e0f7eec5ab1568edca0
Signed-off-by: Gunnar Mills <gmills@us.ibm.com>
diff --git a/lib/connection_client.robot b/lib/connection_client.robot
index 5616071..7e88882 100755
--- a/lib/connection_client.robot
+++ b/lib/connection_client.robot
@@ -68,3 +68,69 @@
${https_num}= Convert To Integer ${HTTPS_PORT}
Set Global Variable ${AUTH_URI} https://${OPENBMC_HOST}:${https_num}
+
+Validate Or Open Connection
+ [Documentation] Checks for an open connection to a host or alias.
+ [Arguments] ${alias}=None ${host}=${EMPTY} &{connection_args}
+
+ # alias The alias of the connection to validate.
+ # host The DNS name or IP of the host to validate.
+ # connection_args A dictionary of arguments to pass to Open Conection
+ # and Log In (see above) if the connection is not open. May
+ # contain, but does not need to contain, the host or alias.
+
+ # Check to make sure we have an alias or host to search for.
+ Run Keyword If '${host}' == '${EMPTY}' Should Not Be Equal ${alias} None
+ ... msg=Need to provide a host or an alias. values=False
+
+ # Search the dictionary to see if it includes the host and alias.
+ ${host_exists}= Run Keyword and Return Status
+ ... Dictionary Should Contain Key ${connection_args} host
+ ${alias_exists}= Run Keyword and Return Status
+ ... Dictionary Should Contain Key ${connection_args} alias
+
+ # Add the alias and host back into the dictionary of connection arguments,
+ # if needed.
+ Run Keyword If '${host}' != '${EMPTY}' and ${host_exists} == ${FALSE}
+ ... Set to Dictionary ${connection_args} host ${host}
+ Run Keyword If '${alias}' != 'None' and ${alias_exists} == ${FALSE}
+ ... Set to Dictionary ${connection_args} alias ${alias}
+
+ @{open_connections}= Get Connections
+ # If there are no open connections, open one and return.
+ Run Keyword If '${open_connections}' == '[]'
+ ... Open Connection and Log In &{connection_args}
+ Return From Keyword If '${open_connections}' == '[]'
+
+ # Connect to the alias or host that matches. If both are given, only connect
+ # to a connection that has both.
+ :FOR ${connection} IN @{open_connections}
+ \ Log ${connection}
+ \ ${alias_match}= Evaluate '${alias}' == '${connection.alias}'
+ \ ${host_match}= Evaluate '${host}' == '${connection.host}'
+ \ ${given_alias}= Evaluate '${alias}' != 'None'
+ \ ${no_alias}= Evaluate '${alias}' == 'None'
+ \ ${given_host}= Evaluate '${host}' != '${EMPTY}'
+ \ ${no_host}= Evaluate '${host}' == '${EMPTY}'
+ \ Run Keyword If
+ ... ${given_alias} and ${given_host} and ${alias_match} and ${host_match}
+ ... Run Keywords
+ ... Switch Connection ${alias} AND
+ ... Log to Console Found connection. Switched to ${alias} ${host} AND
+ ... Return From Keyword If ${alias_match} and ${host_match}
+ ... ELSE Run Keyword If
+ ... ${given_alias} and ${no_host} and ${alias_match}
+ ... Run Keywords
+ ... Switch Connection ${alias} AND
+ ... Log to Console Found connection. Switched to: ${alias} AND
+ ... Return From Keyword If ${alias_match}
+ ... ELSE Run Keyword If
+ ... ${given_host} and ${no_alias} and ${host_match}
+ ... Run Keywords
+ ... Switch Connection ${connection.index} AND
+ ... Log to Console Found Connection. Switched to: ${host} AND
+ ... Return From Keyword If ${host_match}
+
+ # If no connections are found, open a connection with the provided args.
+ Log No connection with provided arguments. Opening a connection.
+ Open Connection and Log In &{connection_args}