X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=csit%2Flibraries%2FOVSDB.robot;h=40893e4d719d30057e1b107346359a933e199c5c;hb=da3d03368e1ce858201f5c018a594c53919d8665;hp=575d666cadb72d9de369656eb7632d2d14898dd9;hpb=d6821c9fe445c2d216fc0d644d128218f4f05f19;p=integration%2Ftest.git diff --git a/csit/libraries/OVSDB.robot b/csit/libraries/OVSDB.robot index 575d666cad..40893e4d71 100644 --- a/csit/libraries/OVSDB.robot +++ b/csit/libraries/OVSDB.robot @@ -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 Mininet ${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 Mininet ${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,33 +108,70 @@ 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 Mininet ${tools_system} sudo ovs-vsctl del-manager - Run Command On Mininet ${tools_system} sudo /usr/share/openvswitch/scripts/ovs-ctl stop - Run Command On Mininet ${tools_system} sudo rm -rf /etc/openvswitch/conf.db - Run Command On Mininet ${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 Set Controller In OVS Bridge - [Arguments] ${mininet} ${bridge} ${controller_opt} + [Arguments] ${tools_system} ${bridge} ${controller_opt} [Documentation] Sets controller for a given OVS ${bridge} using controller options in ${controller_opt} - Run Command On Mininet ${mininet} sudo ovs-vsctl del-controller ${bridge} - Run Command On Mininet ${mininet} sudo ovs-vsctl set-controller ${bridge} ${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] ${mininet} ${controller_index_list} ${ovs_mgr_port}=6640 - [Documentation] Start Mininet with custom topology and connect to all controllers in the ${controller_index_list}. + [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 - Clean Mininet System ${mininet} - ${mininet_conn_id}= Open Connection ${mininet} prompt=${TOOLS_SYSTEM_PROMPT} timeout=${DEFAULT_TIMEOUT} - Set Suite Variable ${mininet_conn_id} - Flexible Mininet Login + Utils.Clean Mininet System ${tools_system} ${ovs_opt}= Set Variable - : FOR ${index} IN @{controller_index_list} + : 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 - Run Command On Mininet ${mininet} sudo ovs-vsctl set-manager ${ovs_opt} - Log Check OVS configuratiom - ${output}= Run Command On Mininet ${mininet} sudo ovs-vsctl show + 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} - [Return] ${mininet_conn_id} + ${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}