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}
