Convert arguments of CompareStream into String
[integration/test.git] / csit / libraries / OVSDB.robot
index 8174fb97f03935eca68c4b5e9d0b818733b3600f..cdf23e71cd8a531e670e3908aecbdb663d904e28 100644 (file)
@@ -1,10 +1,13 @@
 *** Settings ***
 Library           SSHLibrary
-Resource          Utils.robot
 Library           String
 Library           Collections
-Variables         ../variables/Variables.py
 Library           RequestsLibrary
+Library           ipaddress
+Resource          Utils.robot
+Resource          ClusterManagement.robot
+Resource          ${CURDIR}/TemplatedRequests.robot
+Variables         ../variables/Variables.py
 
 *** Variables ***
 ${OVSDB_CONFIG_DIR}    ../variables/ovsdb
@@ -21,7 +24,7 @@ Connect To Ovsdb Node
     Log    data: ${body}
     ${resp}    RequestsLibrary.Put Request    session    ${SOUTHBOUND_CONFIG_API}${mininet_ip}:${OVSDB_PORT}    data=${body}
     Log    ${resp.content}
-    Should Be Equal As Strings    ${resp.status_code}    200
+    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
 
 Disconnect From Ovsdb Node
     [Arguments]    ${mininet_ip}
@@ -42,7 +45,7 @@ Add Bridge To Ovsdb Node
     Log    data: ${body}
     ${resp}    RequestsLibrary.Put Request    session    ${SOUTHBOUND_CONFIG_API}${mininet_ip}:${OVSDB_PORT}%2Fbridge%2F${bridge_num}    data=${body}
     Log    ${resp.content}
-    Should Be Equal As Strings    ${resp.status_code}    200
+    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
 
 Delete Bridge From Ovsdb Node
     [Arguments]    ${mininet_ip}    ${bridge_num}
@@ -59,16 +62,17 @@ Add Vxlan To Bridge
     Log    data: ${body}
     ${resp}    RequestsLibrary.Put Request    session    ${SOUTHBOUND_CONFIG_API}${mininet_ip}:${OVSDB_PORT}%2Fbridge%2F${bridge_num}/termination-point/${vxlan_port}/    data=${body}
     Log    ${resp.content}
-    Should Be Equal As Strings    ${resp.status_code}    200
+    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
 
 Verify OVS Reports Connected
     [Arguments]    ${tools_system}=${TOOLS_SYSTEM_IP}
     [Documentation]    Uses "vsctl show" to check for string "is_connected"
-    ${output}=    Run Command On Remote System    ${tools_system}    sudo ovs-vsctl show
+    ${output}=    Utils.Run Command On Mininet    ${tools_system}    sudo ovs-vsctl show
     Should Contain    ${output}    is_connected
+    [Return]    ${output}
 
 Get OVSDB UUID
-    [Arguments]    ${ovs_system_ip}=${TOOLS_SYSTEM_IP}    ${controller_ip}=${ODL_SYSTEM_IP}    ${controller_http_session}=session
+    [Arguments]    ${ovs_system_ip}=${TOOLS_SYSTEM_IP}    ${controller_http_session}=session
     [Documentation]    Queries the topology in the operational datastore and searches for the node that has
     ...    the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
     ...    node-id stripped of "ovsdb://uuid/". If not found, ${EMPTY} will be returned.
@@ -81,11 +85,11 @@ Get OVSDB UUID
     ${topology}=    Get From List    ${topologies}    0
     ${node_list}=    Get From Dictionary    ${topology}    node
     Log    ${node_list}
+    # Since bridges are also listed as nodes, but will not have the extra "ovsdb:connection-info data,
+    # we need to use "Run Keyword And Ignore Error" below.
     : FOR    ${node}    IN    @{node_list}
     \    ${node_id}=    Get From Dictionary    ${node}    node-id
     \    ${node_uuid}=    Replace String    ${node_id}    ovsdb://uuid/    ${EMPTY}
-    \    # Since    bridges are also listed as nodes, but will not have the extra "ovsdb:connection-info data, we need to
-    \    # use "Run Keyword And Ignore Error" below.
     \    ${status}    ${connection_info}    Run Keyword And Ignore Error    Get From Dictionary    ${node}    ovsdb:connection-info
     \    ${status}    ${remote_ip}    Run Keyword And Ignore Error    Get From Dictionary    ${connection_info}    remote-ip
     \    ${uuid}=    Set Variable If    '${remote_ip}' == '${ovs_system_ip}'    ${node_uuid}    ${uuid}
@@ -94,9 +98,9 @@ Get OVSDB UUID
 Collect OVSDB Debugs
     [Arguments]    ${switch}=br-int
     [Documentation]    Used to log useful test debugs for OVSDB related system tests.
-    ${output}=    Run Command On Remote System    ${TOOLS_SYSTEM_IP}    sudo ovs-vsctl show
+    ${output}=    Utils.Run Command On Mininet    ${TOOLS_SYSTEM_IP}    sudo ovs-vsctl show
     Log    ${output}
-    ${output}=    Run Command On Remote System    ${TOOLS_SYSTEM_IP}    sudo ovs-ofctl -O OpenFlow13 dump-flows ${switch} | cut -d',' -f3-
+    ${output}=    Utils.Run Command On Mininet    ${TOOLS_SYSTEM_IP}    sudo ovs-ofctl -O OpenFlow13 dump-flows ${switch} | cut -d',' -f3-
     Log    ${output}
 
 Clean OVSDB Test Environment
@@ -104,8 +108,78 @@ Clean OVSDB Test Environment
     [Documentation]    General Use Keyword attempting to sanitize test environment for OVSDB related
     ...    tests. Not every step will always be neccessary, but should not cause any problems for
     ...    any new ovsdb test suites.
-    Clean Mininet System    ${tools_system}
-    Run Command On Remote System    ${tools_system}    sudo ovs-vsctl del-manager
-    Run Command On Remote System    ${tools_system}    sudo /usr/share/openvswitch/scripts/ovs-ctl stop
-    Run Command On Remote System    ${tools_system}    sudo rm -rf /etc/openvswitch/conf.db
-    Run Command On Remote System    ${tools_system}    sudo /usr/share/openvswitch/scripts/ovs-ctl start
+    Utils.Clean Mininet System    ${tools_system}
+    Utils.Run Command On Mininet    ${tools_system}    sudo ovs-vsctl del-manager
+    Utils.Run Command On Mininet    ${tools_system}    sudo /usr/share/openvswitch/scripts/ovs-ctl stop
+    Utils.Run Command On Mininet    ${tools_system}    sudo rm -rf /etc/openvswitch/conf.db
+    Utils.Run Command On Mininet    ${tools_system}    sudo /usr/share/openvswitch/scripts/ovs-ctl start
+
+Restart OVSDB
+    [Arguments]    ${ovs_ip}
+    [Documentation]    Restart the OVS node without cleaning the current configuration.
+    ${output} =    Utils.Run Command On Mininet    ${ovs_ip}    sudo /usr/share/openvswitch/scripts/ovs-ctl stop
+    Log    ${output}
+    ${output} =    Utils.Run Command On Mininet    ${ovs_ip}    sudo /usr/share/openvswitch/scripts/ovs-ctl start
+    Log    ${output}
+
+Set Controller In OVS Bridge
+    [Arguments]    ${tools_system}    ${bridge}    ${controller_opt}
+    [Documentation]    Sets controller for a given OVS ${bridge} using controller options in ${controller_opt}
+    Utils.Run Command On Mininet    ${tools_system}    sudo ovs-vsctl set-controller ${bridge} ${controller_opt}
+
+Check OVS OpenFlow Connections
+    [Arguments]    ${tools_system}    ${of_connections}
+    [Documentation]    Check OVS instance with IP ${tools_system} has ${of_connections} OpenFlow connections.
+    ${output}=    Utils.Run Command On Mininet    ${tools_system}    sudo ovs-vsctl show
+    Log    ${output}
+    BuiltIn.Should Contain X Times    ${output}    is_connected    ${of_connections}
+
+Add Multiple Managers to OVS
+    [Arguments]    ${tools_system}=${TOOLS_SYSTEM_IP}    ${controller_index_list}=${EMPTY}    ${ovs_mgr_port}=6640
+    [Documentation]    Connect OVS to the list of controllers in the ${controller_index_list} or all if no list is provided.
+    ${index_list} =    ClusterManagement__Given_Or_Internal_Index_List    given_list=${controller_index_list}
+    Log    Clear any existing mininet
+    Utils.Clean Mininet System    ${tools_system}
+    ${ovs_opt}=    Set Variable
+    : FOR    ${index}    IN    @{index_list}
+    \    ${ovs_opt}=    Catenate    ${ovs_opt}    ${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}
+    \    Log    ${ovs_opt}
+    Log    Configure OVS Managers in the OVS
+    Utils.Run Command On Mininet    ${tools_system}    sudo ovs-vsctl set-manager ${ovs_opt}
+    Log    Check OVS configuration
+    ${output}=    Wait Until Keyword Succeeds    5s    1s    Verify OVS Reports Connected    ${tools_system}
+    Log    ${output}
+    ${controller_index}=    Collections.Get_From_List    ${index_list}    0
+    ${session}=    ClusterManagement.Resolve_Http_Session_For_Member    member_index=${controller_index}
+    ${ovsdb_uuid}=    Wait Until Keyword Succeeds    30s    2s    Get OVSDB UUID    controller_http_session=${session}
+    [Return]    ${ovsdb_uuid}
+
+Get DPID
+    [Arguments]    ${ip}
+    [Documentation]    Returns the dpnid from the system at the given ip address using ovs-ofctl assuming br-int is present.
+    ${output} =    Run Command On Remote System    ${ip}    sudo ovs-ofctl show -O Openflow13 br-int | head -1 | awk -F "dpid:" '{print $2}'
+    ${dpnid} =    Convert To Integer    ${output}    16
+    Log    ${dpnid}
+    [Return]    ${dpnid}
+
+Get Subnet
+    [Arguments]    ${ip}
+    [Documentation]    Return the subnet from the system at the given ip address and interface
+    ${output} =    Run Command On Remote System    ${ip}    /usr/sbin/ip addr show | grep ${ip} | cut -d' ' -f6
+    ${interface} =    ipaddress.ip_interface    ${output}
+    ${network}=    Set Variable    ${interface.network.__str__()}
+    [Return]    ${network}
+
+Get Ethernet Adapter
+    [Arguments]    ${ip}
+    [Documentation]    Returns the ethernet adapter name from the system at the given ip address using ip addr show.
+    ${adapter} =    Run Command On Remote System    ${ip}    /usr/sbin/ip addr show | grep ${ip} | cut -d " " -f 11
+    Log    ${adapter}
+    [Return]    ${adapter}
+
+Get Default Gateway
+    [Arguments]    ${ip}
+    [Documentation]    Returns the default gateway at the given ip address using route command.
+    ${gateway} =    Run Command On Remote System    ${ip}    /usr/sbin/route -n | grep '^0.0.0.0' | cut -d " " -f 10
+    Log    ${gateway}
+    [Return]    ${gateway}