X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=csit%2Flibraries%2FOVSDB.robot;h=a1549c172825edbbc77919456cf3af4a6a286da1;hb=e02ae1a6a3ba18cd88d245a3f6d9da005e21cc98;hp=85cb1dce875d3cdf78cb64dd568caa189ee28916;hpb=35b75f408c76906537d262ab80974281e787de21;p=integration%2Ftest.git diff --git a/csit/libraries/OVSDB.robot b/csit/libraries/OVSDB.robot index 85cb1dce87..a1549c1728 100644 --- a/csit/libraries/OVSDB.robot +++ b/csit/libraries/OVSDB.robot @@ -9,6 +9,7 @@ Resource ClusterManagement.robot Resource Utils.robot Resource ${CURDIR}/TemplatedRequests.robot Resource ../variables/Variables.robot +Resource ../variables/netvirt/Variables.robot *** Variables *** ${OVSDB_CONFIG_DIR} ${CURDIR}/../variables/ovsdb @@ -139,7 +140,7 @@ Get OVSDB UUID [Return] ${uuid} Collect OVSDB Debugs - [Arguments] ${switch}=br-int + [Arguments] ${switch}=${INTEGRATION_BRIDGE} [Documentation] Used to log useful test debugs for OVSDB related system tests. ${output} = Utils.Run Command On Mininet ${TOOLS_SYSTEM_IP} sudo ovs-vsctl show BuiltIn.Log ${output} @@ -160,9 +161,7 @@ Clean OVSDB Test Environment 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 - BuiltIn.Log ${output} - ${output} = Utils.Run Command On Mininet ${ovs_ip} sudo /usr/share/openvswitch/scripts/ovs-ctl start + ${output} = Utils.Run Command On Mininet ${ovs_ip} sudo systemctl restart openvswitch BuiltIn.Log ${output} Set Controller In OVS Bridge @@ -198,7 +197,7 @@ Add Multiple Managers to OVS 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} = Utils.Run Command On Remote System ${ip} sudo ovs-ofctl show -O Openflow13 br-int | head -1 | awk -F "dpid:" '{print $2}' + ${output} = Utils.Run Command On Remote System ${ip} sudo ovs-ofctl show -O Openflow13 ${INTEGRATION_BRIDGE} | head -1 | awk -F "dpid:" '{print $2}' ${dpnid} = BuiltIn.Convert To Integer ${output} 16 BuiltIn.Log ${dpnid} [Return] ${dpnid} @@ -228,8 +227,8 @@ Get Default Gateway Get Port Number [Arguments] ${subportid} ${ip_addr} [Documentation] Get the port number for the given sub-port id - ${command} = Set Variable sudo ovs-ofctl -O OpenFlow13 show br-int | grep ${subportid} | awk '{print$1}' - BuiltIn.Log sudo ovs-ofctl -O OpenFlow13 show br-int | grep ${subportid} | awk '{print$1}' + ${command} = Set Variable sudo ovs-ofctl -O OpenFlow13 show ${INTEGRATION_BRIDGE} | grep ${subportid} | awk '{print$1}' + BuiltIn.Log sudo ovs-ofctl -O OpenFlow13 show ${INTEGRATION_BRIDGE} | grep ${subportid} | awk '{print$1}' ${output} = Utils.Run Command On Remote System ${ip_addr} ${command} ${port_number} = BuiltIn.Should Match Regexp ${output} [0-9]+ [Return] ${port_number} @@ -237,7 +236,7 @@ Get Port Number Get Port Metadata [Arguments] ${ip_addr} ${port} [Documentation] Get the Metadata for a given port - ${cmd} = Set Variable sudo ovs-ofctl dump-flows -O Openflow13 br-int| grep table=0 | grep in_port=${port} + ${cmd} = Set Variable sudo ovs-ofctl dump-flows -O Openflow13 ${INTEGRATION_BRIDGE} | grep table=0 | grep in_port=${port} ${output} = Utils.Run Command On Remote System ${ip_addr} ${cmd} @{list_any_matches} = String.Get_Regexp_Matches ${output} metadata:(\\w{12}) 1 ${metadata} = Builtin.Convert To String @{list_any_matches} @@ -374,3 +373,130 @@ Stop OVS [Documentation] Stop the OVS node. ${output} = Utils.Run Command On Mininet ${ovs_ip} sudo /usr/share/openvswitch/scripts/ovs-ctl stop BuiltIn.Log ${output} + +Get Bridge Data + [Documentation] This keyword returns first bridge name and UUID from list of bridges. + ${result} = SSHLibrary.Execute Command sudo ovs-vsctl show + ${uuid} = String.Get Line ${result} 0 + ${line} ${bridge_name} Builtin.Should Match Regexp ${result} Bridge ([\\w-]+) + [Return] ${uuid} ${bridge_name} + +Delete OVS Controller + [Arguments] ${ovs_ip} ${bridge}=${INTEGRATION_BRIDGE} + [Documentation] Delete controller from OVS + ${del_ctr} = Utils.Run Command On Remote System ${ovs_ip} sudo ovs-vsctl del-controller ${bridge} + BuiltIn.Log ${del_ctr} + +Delete OVS Manager + [Arguments] ${ovs_ip} + [Documentation] Delete manager from OVS + ${del_mgr} = Utils.Run Command On Remote System ${ovs_ip} sudo ovs-vsctl del-manager + BuiltIn.Log ${del_mgr} + +Delete Groups On Bridge + [Arguments] ${ovs_ip} ${br}=${INTEGRATION_BRIDGE} + [Documentation] Delete OVS groups from ${br} + ${del_grp} = Utils.Run Command On Remote System ${ovs_ip} sudo ovs-ofctl -O Openflow13 del-groups ${br} + BuiltIn.Log ${del_grp} + +Get Ports From Bridge By Type + [Arguments] ${ovs_ip} ${br} ${type} + [Documentation] Get ${type} ports for a bridge ${br} on node ${ovs_ip}. + ${ports} = Utils.Run Command On Remote System ${ovs_ip} sudo ovs-vsctl list-ports ${br} | grep "${type}" + ${ports_list} = String.Split to lines ${ports} + [Return] ${ports_list} + +Delete Ports On Bridge By Type + [Arguments] ${ovs_ip} ${br} ${type} + [Documentation] List all ports of ${br} and delete ${type} ports + ${ports_present} = Get Ports From Bridge By Type ${ovs_ip} ${br} ${type} + : FOR ${port} IN @{ports_present} + \ ${del-ports} = Utils.Run Command On Remote System ${ovs_ip} sudo ovs-vsctl del-port ${br} ${port} + \ BuiltIn.Log ${del-ports} + ${ports_present_after_delete} = Get Ports From Bridge By Type ${ovs_ip} ${br} ${type} + BuiltIn.Log ${ports_present_after_delete} + +Get Tunnel Id And Packet Count + [Arguments] ${conn_id} ${table_id} ${tun_id} ${mac}="" + [Documentation] Get tunnel id and packet count from specified table id + ... Using regex get the n_packet and the tunnel_id from the table flow. + ${tun_id} = BuiltIn.Convert To Hex ${tun_id} prefix=0x lowercase=yes + ${cmd} = BuiltIn.Run Keyword If "${table_id}" == "${INTERNAL_TUNNEL_TABLE}" BuiltIn.Set Variable sudo ovs-ofctl dump-flows br-int -OOpenFlow13 | grep table=${table_id} | grep ${mac} | grep tun_id=${tun_id} | grep goto_table:${ELAN_DMACTABLE} + ... ELSE BuiltIn.Set Variable sudo ovs-ofctl dump-flows br-int -OOpenFlow13 | grep table=${table_id} | grep ${mac} + SSHLibrary.Switch Connection ${conn_id} + ${output} = Utils.Write Commands Until Expected Prompt ${cmd} ${DEFAULT_LINUX_PROMPT_STRICT} + @{list}= Split to lines ${output} + ${output} = Set Variable @{list}[0] + ${output} = String.Get Regexp Matches ${output} n_packets=([0-9]+),.*set_field:(0x[0-9a-z]+)|n_packets=([0-9]+),.*tun_id=(0x[0-9a-z]+) 1 2 3 + ... 4 + ${output} = BuiltIn.Set Variable @{output}[0] + ${output} Convert To List ${output} + ${packet_count} ${tunnel_id} = BuiltIn.Run Keyword If "${table_id}" == "${ELAN_DMACTABLE}" BuiltIn.Set Variable @{output}[0] @{output}[1] + ... ELSE IF "${table_id}" == "${INTERNAL_TUNNEL_TABLE}" BuiltIn.Set Variable @{output}[2] @{output}[3] + ... ELSE IF "${table_id}" == "${L3_TABLE}" BuiltIn.Set Variable @{output}[0] @{output}[1] + ${tunnel_id} = Convert To Integer ${tunnel_id} 16 + [Return] ${tunnel_id} ${packet_count} + +Verify Dump Flows For Specific Table + [Arguments] ${compute_ip} ${table_num} ${flag} ${additional_args}=${EMPTY} @{matching_paras} + [Documentation] To Verify flows are present for the corresponding table Number + ${flow_output} = Utils.Run Command On Remote System ${compute_ip} sudo ovs-ofctl -O OpenFlow13 dump-flows ${INTEGRATION_BRIDGE}|grep table=${table_num} ${additional_args} + Log ${flow_output} + : FOR ${matching_str} IN @{matching_paras} + \ BuiltIn.Run Keyword If ${flag}==True BuiltIn.Should Contain ${flow_output} ${matching_str} + \ ... ELSE BuiltIn.Should Not Contain ${flow_output} ${matching_str} + +Verify Vni Segmentation Id and Tunnel Id + [Arguments] ${port1} ${port2} ${net1} ${net2} ${vm1_ip} ${vm2_ip} + ... ${ip}="" + [Documentation] Get tunnel id and packet count from specified table id and destination port mac address + ${port_mac1} = OpenStackOperations.Get Port Mac ${port1} + ${port_mac2} = OpenStackOperations.Get Port Mac ${port2} + ${segmentation_id1} = OpenStackOperations.Get Network Segmentation Id ${net1} + ${segmentation_id2} = OpenStackOperations.Get Network Segmentation Id ${net2} + ${egress_tun_id} ${before_count_egress_port1} = OVSDB.Get Tunnel Id And Packet Count ${OS_CMP1_CONN_ID} ${L3_TABLE} tun_id=${segmentation_id2} mac=${port_mac2} + BuiltIn.Should Be Equal As Numbers ${segmentation_id2} ${egress_tun_id} + ${egress_tun_id} ${before_count_egress_port2} = OVSDB.Get Tunnel Id And Packet Count ${OS_CMP2_CONN_ID} ${L3_TABLE} tun_id=${segmentation_id1} mac=${port_mac1} + BuiltIn.Should Be Equal As Numbers ${segmentation_id1} ${egress_tun_id} + ${ingress_tun_id} ${before_count_ingress_port1} = OVSDB.Get Tunnel Id And Packet Count ${OS_CMP1_CONN_ID} ${INTERNAL_TUNNEL_TABLE} tun_id=${segmentation_id1} + BuiltIn.Should Be Equal As Numbers ${segmentation_id1} ${ingress_tun_id} + ${ingress_tun_id} ${before_count_ingress_port2} = OVSDB.Get Tunnel Id And Packet Count ${OS_CMP2_CONN_ID} ${INTERNAL_TUNNEL_TABLE} tun_id=${segmentation_id2} + BuiltIn.Should Be Equal As Numbers ${segmentation_id2} ${ingress_tun_id} + ${ping_cmd} = BuiltIn.Run Keyword If '${ip}'=='ipv4' BuiltIn.Set Variable ping -c ${DEFAULT_PING_COUNT} ${vm2_ip} + ... ELSE BuiltIn.Set Variable ping6 -c ${DEFAULT_PING_COUNT} ${vm2_ip} + ${output} = OpenStackOperations.Execute Command on VM Instance ${net1} ${vm1_ip} ${ping_cmd} + BuiltIn.Should Contain ${output} 64 bytes + BuiltIn.Wait Until Keyword Succeeds 60s 5s OVSDB.Verify Vni Packet Count After Traffic ${before_count_egress_port1} ${before_count_egress_port2} ${before_count_ingress_port1} + ... ${before_count_ingress_port2} ${segmentation_id1} ${segmentation_id2} ${port_mac1} ${port_mac2} + +Verify Vni Packet Count After Traffic + [Arguments] ${before_count_egress_port1} ${before_count_egress_port2} ${before_count_ingress_port1} ${before_count_ingress_port2} ${segmentation_id1} ${segmentation_id2} + ... ${port_mac1} ${port_mac2} + [Documentation] Verify the packet count after the traffic sent + ${tun_id} ${after_count_egress_port2} = OVSDB.Get Tunnel Id And Packet Count ${OS_CMP2_CONN_ID} ${L3_TABLE} tun_id=${segmentation_id1} mac=${port_mac1} + ${tun_id} ${after_count_ingress_port2} = OVSDB.Get Tunnel Id And Packet Count ${OS_CMP2_CONN_ID} ${INTERNAL_TUNNEL_TABLE} tun_id=${segmentation_id2} + ${tun_id} ${after_count_egress_port1} = OVSDB.Get Tunnel Id And Packet Count ${OS_CMP1_CONN_ID} ${L3_TABLE} tun_id=${segmentation_id2} mac=${port_mac2} + ${tun_id} ${after_count_ingress_port1} = OVSDB.Get Tunnel Id And Packet Count ${OS_CMP1_CONN_ID} ${INTERNAL_TUNNEL_TABLE} tun_id=${segmentation_id1} + ${diff_count_egress_port1} = BuiltIn.Evaluate ${after_count_egress_port1} - ${before_count_egress_port1} + ${diff_count_ingress_port1} = BuiltIn.Evaluate ${after_count_ingress_port1} - ${before_count_ingress_port1} + ${diff_count_egress_port2} = BuiltIn.Evaluate ${after_count_egress_port2} - ${before_count_egress_port2} + ${diff_count_ingress_port2} = BuiltIn.Evaluate ${after_count_ingress_port2} - ${before_count_ingress_port2} + BuiltIn.Should Be True ${diff_count_egress_port1} >= ${DEFAULT_PING_COUNT} + BuiltIn.Should Be True ${diff_count_ingress_port1} >= ${DEFAULT_PING_COUNT} + BuiltIn.Should Be True ${diff_count_egress_port2} >= ${DEFAULT_PING_COUNT} + BuiltIn.Should Be True ${diff_count_ingress_port2} >= ${DEFAULT_PING_COUNT} + +Get Flow Entries On Node + [Arguments] ${conn_id} ${switch}=${INTEGRATION_BRIDGE} + [Documentation] Return flow entries on the given Node. + SSHLibrary.Switch Connection ${conn_id} + ${output} = Utils.Write Commands Until Expected Prompt sudo ovs-ofctl -O OpenFlow13 dump-flows ${switch} ${DEFAULT_LINUX_PROMPT_STRICT} + BuiltIn.Log ${output} + [Return] ${output} + +Verify Ovsdb State + [Arguments] ${dpn_ip} ${state}=ACTIVE + [Documentation] Verify ovsdb state for the given DPN + ${output} = Utils.Run Command On Remote System And Log ${dpn_ip} sudo ovsdb-client dump -f list Open_vSwitch Controller | grep state + BuiltIn.Log ${output} + BuiltIn.Should Contain ${output} state=${state}