X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=csit%2Flibraries%2FOVSDB.robot;h=e09f1e2e54779dbfbe9008ea357e1796628cb125;hb=c97210d403b181f11b66fc1a840398e7a3e911dd;hp=58cd7ba75a4db7f245c7c6971b2bd8c7ba51b10c;hpb=d883b8eb7f8831ced0ea7289045c7074fbd4ba43;p=integration%2Ftest.git diff --git a/csit/libraries/OVSDB.robot b/csit/libraries/OVSDB.robot index 58cd7ba75a..e09f1e2e54 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} @@ -53,22 +56,39 @@ Delete Bridge From Ovsdb Node Add Vxlan To Bridge [Arguments] ${mininet_ip} ${bridge_num} ${vxlan_port} ${remote_ip} ${custom_port}=create_port.json [Documentation] This request will create vxlan port for vxlan tunnel and attach it to the specific bridge - ${sample} OperatingSystem.Get File ${OVSDB_CONFIG_DIR}/${custom_port} - ${body} Replace String ${sample} 192.168.0.21 ${remote_ip} - Log URL is ${SOUTHBOUND_CONFIG_API}${mininet_ip}:${OVSDB_PORT}%2Fbridge%2F${bridge_num}/termination-point/${vxlan_port}/ - 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 + Add Termination Point ${mininet_ip}:${OVSDB_PORT} ${bridge_num} ${vxlan_port} ${remote_ip} + +Add Termination Point + [Arguments] ${node_id} ${bridge_name} ${tp_name} ${remote_ip}=${TOOLS_SYSTEM_IP} + [Documentation] Using the json data body file as a template, a REST config request is made to + ... create a termination-point ${tp_name} on ${bridge_name} for the given ${node_id}. The ports + ... remote-ip defaults to ${TOOLS_SYSTEM_IP} + ${body} OperatingSystem.Get File ${OVSDB_CONFIG_DIR}/create_port.json + ${body} Replace String ${body} 192.168.0.21 ${remote_ip} + ${body} Replace String ${body} vxlanport ${tp_name} + ${uri}= Set Variable ${CONFIG_TOPO_API}/topology/ovsdb:1/node/ovsdb:%2F%2F${node_id}%2Fbridge%2F${bridge_name} + ${resp} RequestsLibrary.Put Request session ${uri}/termination-point/${tp_name}/ data=${body} + 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}= Utils.Run Command On Remote System ${tools_system} sudo ovs-vsctl show - Should Contain ${output} is_connected + ${output} Verify Ovs-vsctl Output show is_connected ${tools_system} + [Return] ${output} + +Verify Ovs-vsctl Output + [Arguments] ${vsctl_args} ${expected_output} ${ovs_system}=${TOOLS_SYSTEM_IP} ${should_match}=True + [Documentation] A wrapper keyword to make it easier to validate ovs-vsctl output, and gives an easy + ... way to check this output in a WUKS. The argument ${should_match} can control if the match should + ... exist (True} or not (False) or don't care (anything but True or False). ${should_match} is True by default + ${output}= Utils.Run Command On Mininet ${ovs_system} sudo ovs-vsctl ${vsctl_args} + Log ${output} + Run Keyword If "${should_match}"=="True" Should Contain ${output} ${expected_output} + Run Keyword If "${should_match}"=="False" Should Not Contain ${output} ${expected_output} + [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. @@ -110,25 +130,89 @@ 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} + [Arguments] ${tools_system} ${bridge} ${controller_opt} ${ofversion}=13 + [Documentation] Sets controller for the OVS bridge ${bridge} using ${controller_opt} and OF version ${ofversion}. + Utils.Run Command On Mininet ${tools_system} sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion} 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} ${controller_index_list} ${ovs_mgr_port}=6640 - [Documentation] Connect OVS 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.List Indices Or All given_list=${controller_index_list} Log Clear any existing mininet 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 Utils.Run Command On Mininet ${tools_system} sudo ovs-vsctl set-manager ${ovs_opt} - Log Check OVS configuratiom - ${output}= Utils.Run Command On Mininet ${tools_system} sudo ovs-vsctl show + Log Check OVS configuration + ${output}= Wait Until Keyword Succeeds 5s 1s Verify OVS Reports Connected ${tools_system} Log ${output} - ${ovsdb_uuid}= Get OVSDB UUID controller_http_session=controller1 + ${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} + +Add OVS Logging + [Arguments] ${conn_id} + [Documentation] Add higher levels of OVS logging + SSHLibrary.Switch Connection ${conn_id} + @{modules} = BuiltIn.Create List bridge:file:dbg connmgr:file:dbg inband:file:dbg ofp_actions:file:dbg ofp_errors:file:dbg + ... ofp_msgs:file:dbg ovsdb_error:file:dbg rconn:file:dbg tunnel:file:dbg vconn:file:dbg + : FOR ${module} IN @{modules} + \ Write Commands Until Expected Prompt sudo ovs-appctl --target ovs-vswitchd vlog/set ${module} ${DEFAULT_LINUX_PROMPT_STRICT} + Write Commands Until Expected Prompt sudo ovs-appctl --target ovs-vswitchd vlog/list ${DEFAULT_LINUX_PROMPT_STRICT} + +Reset OVS Logging + [Arguments] ${conn_id} + [Documentation] Reset the OVS logging + SSHLibrary.Switch Connection ${conn_id} + ${output} = Write Commands Until Expected Prompt sudo ovs-appctl --target ovs-vswitchd vlog/set :file:info ${DEFAULT_LINUX_PROMPT_STRICT}