Add isolation scenarios for clustered car/people tests
[integration/test.git] / csit / libraries / OVSDB.robot
index 4249bb720e29b4ad516582926d6b7d09d2260a5d..cdf23e71cd8a531e670e3908aecbdb663d904e28 100644 (file)
@@ -3,8 +3,10 @@ Library           SSHLibrary
 Library           String
 Library           Collections
 Library           RequestsLibrary
+Library           ipaddress
 Resource          Utils.robot
 Resource          ClusterManagement.robot
+Resource          ${CURDIR}/TemplatedRequests.robot
 Variables         ../variables/Variables.py
 
 *** Variables ***
@@ -22,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}    "20?"
+    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
 
 Disconnect From Ovsdb Node
     [Arguments]    ${mininet_ip}
@@ -43,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}    "20?"
+    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
 
 Delete Bridge From Ovsdb Node
     [Arguments]    ${mininet_ip}    ${bridge_num}
@@ -60,7 +62,7 @@ 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}    "20?"
+    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
 
 Verify OVS Reports Connected
     [Arguments]    ${tools_system}=${TOOLS_SYSTEM_IP}
@@ -112,12 +114,26 @@ Clean OVSDB Test Environment
     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 del-controller ${bridge}
     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.
@@ -137,3 +153,33 @@ Add Multiple Managers to OVS
     ${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}