From: Numan Siddique <[email protected]>

This patch fixes timing related failures in some test cases when run with
-j option. It adds --wait=hv when calling ovn-nbctl and uses OVS_WAIT_*
whereever  appropriate. It also fixes the test case "ovn -- IPv6 periodic RA"
wherein the logical port - sw-p1 is bound on 2 chassis and this causes
both the chassis to fight for the port.

Signed-off-by: Numan Siddique <[email protected]>
---
 tests/ovn.at | 207 +++++++++++++++++++++++++++++++++--------------------------
 1 file changed, 115 insertions(+), 92 deletions(-)

diff --git a/tests/ovn.at b/tests/ovn.at
index 8ee3bf0b5..8e558b179 100644
--- a/tests/ovn.at
+++ b/tests/ovn.at
@@ -7000,7 +7000,7 @@ rm -f 2.expected
 
 # Test IPv6 (AAAA records) using IPv4 packet.
 # Add back the DNS options for ls1-lp1.
-ovn-nbctl set DNS $DNS1 records:vm1.ovn.org="10.0.0.4 aef0::4"
+ovn-nbctl --wait=hv set DNS $DNS1 records:vm1.ovn.org="10.0.0.4 aef0::4"
 
 set_dns_params vm1_ipv6_only
 src_ip=`ip_to_hex 10 0 0 6`
@@ -7184,22 +7184,22 @@ ovs-vsctl -- add-port br-int ext1-vif1 -- \
 # for ARP resolution).
 OVN_POPULATE_ARP
 
-ovn-nbctl create Logical_Router name=R1
+ovn-nbctl --wait=hv create Logical_Router name=R1
 
-ovn-nbctl ls-add foo
-ovn-nbctl ls-add alice
-ovn-nbctl ls-add outside
+ovn-nbctl --wait=hv ls-add foo
+ovn-nbctl --wait=hv ls-add alice
+ovn-nbctl --wait=hv ls-add outside
 
 # Connect foo to R1
-ovn-nbctl lrp-add R1 foo 00:00:01:01:02:03 192.168.1.1/24
-ovn-nbctl lsp-add foo rp-foo -- set Logical_Switch_Port rp-foo \
+ovn-nbctl --wait=hv lrp-add R1 foo 00:00:01:01:02:03 192.168.1.1/24
+ovn-nbctl --wait=hv lsp-add foo rp-foo -- set Logical_Switch_Port rp-foo \
     type=router options:router-port=foo \
     -- lsp-set-addresses rp-foo router
 
 # Connect alice to R1 as distributed router gateway port on gw1
-ovn-nbctl lrp-add R1 alice 00:00:02:01:02:03 172.16.1.1/24
+ovn-nbctl --wait=hv lrp-add R1 alice 00:00:02:01:02:03 172.16.1.1/24
 
-ovn-nbctl \
+ovn-nbctl --wait=hv \
     --id=@gc0 create Gateway_Chassis name=alice_gw1 \
                                      chassis_name=gw1 \
                                      priority=20 -- \
@@ -7208,29 +7208,29 @@ ovn-nbctl \
                                      priority=10 -- \
     set Logical_Router_Port alice 'gateway_chassis=[@gc0,@gc1]'
 
-ovn-nbctl lsp-add alice rp-alice -- set Logical_Switch_Port rp-alice \
+ovn-nbctl --wait=hv lsp-add alice rp-alice -- set Logical_Switch_Port rp-alice 
\
     type=router options:router-port=alice \
     -- lsp-set-addresses rp-alice router
 
 # Create logical port foo1 in foo
-ovn-nbctl lsp-add foo foo1 \
+ovn-nbctl --wait=hv lsp-add foo foo1 \
 -- lsp-set-addresses foo1 "f0:00:00:01:02:03 192.168.1.2"
 
 # Create logical port outside1 in outside
-ovn-nbctl lsp-add outside outside1 \
+ovn-nbctl --wait=hv lsp-add outside outside1 \
 -- lsp-set-addresses outside1 "f0:00:00:01:02:04 172.16.1.3"
 
 # Create localnet port in alice
-ovn-nbctl lsp-add alice ln-alice
-ovn-nbctl lsp-set-addresses ln-alice unknown
-ovn-nbctl lsp-set-type ln-alice localnet
-ovn-nbctl lsp-set-options ln-alice network_name=phys
+ovn-nbctl --wait=hv lsp-add alice ln-alice
+ovn-nbctl --wait=hv lsp-set-addresses ln-alice unknown
+ovn-nbctl --wait=hv lsp-set-type ln-alice localnet
+ovn-nbctl --wait=hv lsp-set-options ln-alice network_name=phys
 
 # Create localnet port in outside
-ovn-nbctl lsp-add outside ln-outside
-ovn-nbctl lsp-set-addresses ln-outside unknown
-ovn-nbctl lsp-set-type ln-outside localnet
-ovn-nbctl lsp-set-options ln-outside network_name=phys
+ovn-nbctl --wait=hv lsp-add outside ln-outside
+ovn-nbctl --wait=hv lsp-set-addresses ln-outside unknown
+ovn-nbctl --wait=hv lsp-set-type ln-outside localnet
+ovn-nbctl --wait=hv lsp-set-options ln-outside network_name=phys
 
 # Create bridge-mappings on gw1, gw2 and ext1, hv1 doesn't need
 # mapping to the external network, is the one generating packets
@@ -7286,6 +7286,11 @@ test_ip_packet()
 
     as ext1 ovs-appctl netdev-dummy/receive ext1-vif1 $arp_reply
 
+    OVS_WAIT_UNTIL([
+        test `as $active_gw ovs-ofctl dump-flows br-int | grep table=66 | \
+grep actions=mod_dl_dst:f0:00:00:01:02:04 | wc -l` -eq 1
+    ])
+
     # Packet to Expect at ext1 chassis, outside1 port
     src_mac="000002010203"
     dst_mac="f00000010204"
@@ -7367,40 +7372,40 @@ ovs-vsctl -- add-port br-int ext1-vif1 -- \
 # for ARP resolution).
 OVN_POPULATE_ARP
 
-ovn-nbctl create Logical_Router name=R0
-ovn-nbctl create Logical_Router name=R1
+ovn-nbctl --wait=hv create Logical_Router name=R0
+ovn-nbctl --wait=hv create Logical_Router name=R1
 
-ovn-nbctl ls-add foo
-ovn-nbctl ls-add join
-ovn-nbctl ls-add alice
-ovn-nbctl ls-add outside
+ovn-nbctl --wait=hv ls-add foo
+ovn-nbctl --wait=hv ls-add join
+ovn-nbctl --wait=hv ls-add alice
+ovn-nbctl --wait=hv ls-add outside
 
 #Connect foo to R0
-ovn-nbctl lrp-add R0 R0-foo 00:00:01:01:02:03 192.168.1.1/24
-ovn-nbctl lsp-add foo foo-R0 -- set Logical_Switch_Port foo-R0 \
+ovn-nbctl --wait=hv lrp-add R0 R0-foo 00:00:01:01:02:03 192.168.1.1/24
+ovn-nbctl --wait=hv lsp-add foo foo-R0 -- set Logical_Switch_Port foo-R0 \
     type=router options:router-port=R0-foo \
     -- lsp-set-addresses foo-R0 router
 
 #Connect R0 to join
-ovn-nbctl lrp-add R0 R0-join 00:00:0d:01:02:03 100.60.1.1/24
-ovn-nbctl lsp-add join join-R0 -- set Logical_Switch_Port join-R0 \
+ovn-nbctl --wait=hv lrp-add R0 R0-join 00:00:0d:01:02:03 100.60.1.1/24
+ovn-nbctl --wait=hv lsp-add join join-R0 -- set Logical_Switch_Port join-R0 \
     type=router options:router-port=R0-join \
     -- lsp-set-addresses join-R0 router
 
 #Connect join to R1
-ovn-nbctl lrp-add R1 R1-join 00:00:0e:01:02:03 100.60.1.2/24
-ovn-nbctl lsp-add join join-R1 -- set Logical_Switch_Port join-R1 \
+ovn-nbctl --wait=hv lrp-add R1 R1-join 00:00:0e:01:02:03 100.60.1.2/24
+ovn-nbctl --wait=hv lsp-add join join-R1 -- set Logical_Switch_Port join-R1 \
     type=router options:router-port=R1-join \
     -- lsp-set-addresses join-R1 router
 
 #add route rules
-ovn-nbctl lr-route-add R0 0.0.0.0/0 100.60.1.2
-ovn-nbctl lr-route-add R1 192.168.0.0/16 100.60.1.1
+ovn-nbctl --wait=hv lr-route-add R0 0.0.0.0/0 100.60.1.2
+ovn-nbctl --wait=hv lr-route-add R1 192.168.0.0/16 100.60.1.1
 
 # Connect alice to R1 as distributed router gateway port on gw1
-ovn-nbctl lrp-add R1 alice 00:00:02:01:02:03 172.16.1.1/24
+ovn-nbctl --wait=hv lrp-add R1 alice 00:00:02:01:02:03 172.16.1.1/24
 
-ovn-nbctl \
+ovn-nbctl --wait=hv \
     --id=@gc0 create Gateway_Chassis name=alice_gw1 \
                                      chassis_name=gw1 \
                                      priority=20 -- \
@@ -7409,29 +7414,29 @@ ovn-nbctl \
                                      priority=10 -- \
     set Logical_Router_Port alice 'gateway_chassis=[@gc0,@gc1]'
 
-ovn-nbctl lsp-add alice rp-alice -- set Logical_Switch_Port rp-alice \
+ovn-nbctl --wait=hv lsp-add alice rp-alice -- set Logical_Switch_Port rp-alice 
\
     type=router options:router-port=alice \
     -- lsp-set-addresses rp-alice router
 
 # Create logical port foo1 in foo
-ovn-nbctl lsp-add foo foo1 \
+ovn-nbctl --wait=hv lsp-add foo foo1 \
 -- lsp-set-addresses foo1 "f0:00:00:01:02:03 192.168.1.2"
 
 # Create logical port outside1 in outside
-ovn-nbctl lsp-add outside outside1 \
+ovn-nbctl --wait=hv lsp-add outside outside1 \
 -- lsp-set-addresses outside1 "f0:00:00:01:02:04 172.16.1.3"
 
 # Create localnet port in alice
-ovn-nbctl lsp-add alice ln-alice
-ovn-nbctl lsp-set-addresses ln-alice unknown
-ovn-nbctl lsp-set-type ln-alice localnet
-ovn-nbctl lsp-set-options ln-alice network_name=phys
+ovn-nbctl --wait=hv lsp-add alice ln-alice
+ovn-nbctl --wait=hv lsp-set-addresses ln-alice unknown
+ovn-nbctl --wait=hv lsp-set-type ln-alice localnet
+ovn-nbctl --wait=hv lsp-set-options ln-alice network_name=phys
 
 # Create localnet port in outside
-ovn-nbctl lsp-add outside ln-outside
-ovn-nbctl lsp-set-addresses ln-outside unknown
-ovn-nbctl lsp-set-type ln-outside localnet
-ovn-nbctl lsp-set-options ln-outside network_name=phys
+ovn-nbctl --wait=hv lsp-add outside ln-outside
+ovn-nbctl --wait=hv lsp-set-addresses ln-outside unknown
+ovn-nbctl --wait=hv lsp-set-type ln-outside localnet
+ovn-nbctl --wait=hv lsp-set-options ln-outside network_name=phys
 
 # Create bridge-mappings on gw1, gw2 and ext1, hv1 doesn't need
 # mapping to the external network, is the one generating packets
@@ -7487,6 +7492,11 @@ test_ip_packet()
 
     as ext1 ovs-appctl netdev-dummy/receive ext1-vif1 $arp_reply
 
+    OVS_WAIT_UNTIL([
+        test `as $active_gw ovs-ofctl dump-flows br-int | grep table=66 | \
+grep actions=mod_dl_dst:f0:00:00:01:02:04 | wc -l` -eq 1
+    ])
+
     # Packet to Expect at ext1 chassis, outside1 port
     src_mac="000002010203"
     dst_mac="f00000010204"
@@ -7587,44 +7597,44 @@ ovs-vsctl -- add-port br-int hv3-vif1 -- \
 # for ARP resolution).
 OVN_POPULATE_ARP
 
-ovn-nbctl create Logical_Router name=R1
+ovn-nbctl --wait=hv create Logical_Router name=R1
 
-ovn-nbctl ls-add foo
-ovn-nbctl ls-add alice
-ovn-nbctl ls-add outside
+ovn-nbctl --wait=hv ls-add foo
+ovn-nbctl --wait=hv ls-add alice
+ovn-nbctl --wait=hv ls-add outside
 
 # Connect foo to R1
-ovn-nbctl lrp-add R1 foo 00:00:01:01:02:03 192.168.1.1/24
-ovn-nbctl lsp-add foo rp-foo -- set Logical_Switch_Port rp-foo \
+ovn-nbctl --wait=hv lrp-add R1 foo 00:00:01:01:02:03 192.168.1.1/24
+ovn-nbctl --wait=hv lsp-add foo rp-foo -- set Logical_Switch_Port rp-foo \
     type=router options:router-port=foo \
     -- lsp-set-addresses rp-foo router
 
 # Connect alice to R1 as distributed router gateway port on hv2
-ovn-nbctl lrp-add R1 alice 00:00:02:01:02:03 172.16.1.1/24 \
+ovn-nbctl --wait=hv lrp-add R1 alice 00:00:02:01:02:03 172.16.1.1/24 \
     -- set Logical_Router_Port alice options:redirect-chassis="hv2"
-ovn-nbctl lsp-add alice rp-alice -- set Logical_Switch_Port rp-alice \
+ovn-nbctl --wait=hv lsp-add alice rp-alice -- set Logical_Switch_Port rp-alice 
\
     type=router options:router-port=alice \
     -- lsp-set-addresses rp-alice router
 
 # Create logical port foo1 in foo
-ovn-nbctl lsp-add foo foo1 \
+ovn-nbctl --wait=hv lsp-add foo foo1 \
 -- lsp-set-addresses foo1 "f0:00:00:01:02:03 192.168.1.2"
 
 # Create logical port outside1 in outside
-ovn-nbctl lsp-add outside outside1 \
+ovn-nbctl --wait=hv lsp-add outside outside1 \
 -- lsp-set-addresses outside1 "f0:00:00:01:02:04 172.16.1.3"
 
 # Create localnet port in alice
-ovn-nbctl lsp-add alice ln-alice
-ovn-nbctl lsp-set-addresses ln-alice unknown
-ovn-nbctl lsp-set-type ln-alice localnet
-ovn-nbctl lsp-set-options ln-alice network_name=phys
+ovn-nbctl --wait=hv lsp-add alice ln-alice
+ovn-nbctl --wait=hv lsp-set-addresses ln-alice unknown
+ovn-nbctl --wait=hv lsp-set-type ln-alice localnet
+ovn-nbctl --wait=hv lsp-set-options ln-alice network_name=phys
 
 # Create localnet port in outside
-ovn-nbctl lsp-add outside ln-outside
-ovn-nbctl lsp-set-addresses ln-outside unknown
-ovn-nbctl lsp-set-type ln-outside localnet
-ovn-nbctl lsp-set-options ln-outside network_name=phys
+ovn-nbctl --wait=hv lsp-add outside ln-outside
+ovn-nbctl --wait=hv lsp-set-addresses ln-outside unknown
+ovn-nbctl --wait=hv lsp-set-type ln-outside localnet
+ovn-nbctl --wait=hv lsp-set-options ln-outside network_name=phys
 
 # Create bridge-mappings on hv1 and hv3, leaving hv2 for later
 as hv1 ovs-vsctl set open . external-ids:ovn-bridge-mappings=phys:br-phys
@@ -8987,34 +8997,34 @@ AT_KEYWORDS([ovn-nd_ns for unknown mac])
 AT_SKIP_IF([test $HAVE_PYTHON = no])
 ovn_start
 
-ovn-nbctl ls-add sw0_ip6
-ovn-nbctl lsp-add sw0_ip6 sw0_ip6-port1
-ovn-nbctl lsp-set-addresses sw0_ip6-port1 \
+ovn-nbctl --wait=hv ls-add sw0_ip6
+ovn-nbctl --wait=hv lsp-add sw0_ip6 sw0_ip6-port1
+ovn-nbctl --wait=hv lsp-set-addresses sw0_ip6-port1 \
 "50:64:00:00:00:02 aef0::5264:00ff:fe00:0002"
 
-ovn-nbctl lsp-set-port-security sw0_ip6-port1 \
+ovn-nbctl --wait=hv lsp-set-port-security sw0_ip6-port1 \
 "50:64:00:00:00:02 aef0::5264:00ff:fe00:0002"
 
-ovn-nbctl lr-add lr0_ip6
-ovn-nbctl lrp-add lr0_ip6 lrp0_ip6 00:00:00:00:af:01 aef0:0:0:0:0:0:0:0/64
-ovn-nbctl lsp-add sw0_ip6 lrp0_ip6-attachment
-ovn-nbctl lsp-set-type lrp0_ip6-attachment router
-ovn-nbctl lsp-set-addresses lrp0_ip6-attachment 00:00:00:00:af:01
-ovn-nbctl lsp-set-options lrp0_ip6-attachment router-port=lrp0_ip6
-ovn-nbctl set logical_router_port lrp0_ip6 ipv6_ra_configs:address_mode=slaac
-
-ovn-nbctl ls-add public
-ovn-nbctl lsp-add public ln-public
-ovn-nbctl lsp-set-addresses ln-public unknown
-ovn-nbctl lsp-set-type ln-public localnet
-ovn-nbctl lsp-set-options ln-public network_name=phys
-
-ovn-nbctl lrp-add lr0_ip6 ip6_public 00:00:02:01:02:04 \
+ovn-nbctl --wait=hv lr-add lr0_ip6
+ovn-nbctl --wait=hv lrp-add lr0_ip6 lrp0_ip6 00:00:00:00:af:01 
aef0:0:0:0:0:0:0:0/64
+ovn-nbctl --wait=hv lsp-add sw0_ip6 lrp0_ip6-attachment
+ovn-nbctl --wait=hv lsp-set-type lrp0_ip6-attachment router
+ovn-nbctl --wait=hv lsp-set-addresses lrp0_ip6-attachment 00:00:00:00:af:01
+ovn-nbctl --wait=hv lsp-set-options lrp0_ip6-attachment router-port=lrp0_ip6
+ovn-nbctl --wait=hv set logical_router_port lrp0_ip6 
ipv6_ra_configs:address_mode=slaac
+
+ovn-nbctl --wait=hv ls-add public
+ovn-nbctl --wait=hv lsp-add public ln-public
+ovn-nbctl --wait=hv lsp-set-addresses ln-public unknown
+ovn-nbctl --wait=hv lsp-set-type ln-public localnet
+ovn-nbctl --wait=hv lsp-set-options ln-public network_name=phys
+
+ovn-nbctl --wait=hv lrp-add lr0_ip6 ip6_public 00:00:02:01:02:04 \
 2001:db8:1:0:200:02ff:fe01:0204/64 \
 -- set Logical_Router_port ip6_public options:redirect-chassis="hv1"
 
 
-ovn-nbctl lsp-add public rp-ip6_public -- set Logical_Switch_Port \
+ovn-nbctl --wait=hv lsp-add public rp-ip6_public -- set Logical_Switch_Port \
 rp-ip6_public  type=router options:router-port=ip6_public \
 -- lsp-set-addresses rp-ip6_public router
 
@@ -9033,7 +9043,12 @@ ovs-vsctl set open . 
external-ids:ovn-bridge-mappings=phys:br-phys
 
 # Allow some time for ovn-northd and ovn-controller to catch up.
 # XXX This should be more systematic.
-sleep 1
+OVS_WAIT_UNTIL([test x`ovn-nbctl lsp-get-up sw0_ip6-port1` = xup])
+cr_uuid=`ovn-sbctl find port_binding logical_port=cr-ip6_public | grep _uuid | 
cut -f2 -d ":"`
+
+# There is only one chassis.
+chassis_uuid=`ovn-sbctl list chassis | grep _uuid | cut -f2 -d ":"`
+OVS_WAIT_UNTIL([test $chassis_uuid = `ovn-sbctl get port_binding $cr_uuid 
chassis`])
 
 trim_zeros() {
     sed 's/\(00\)\{1,\}$//'
@@ -9066,10 +9081,14 @@ test_ipv6() {
 src_mac=506400000002
 dst_mac=00000000af01
 src_ip=aef0000000000000526400fffe000002
+
 # Send an IPv6 packet. Generated IPv6 Neighbor solicitation packet
 # should be received by the ports attached to br-phys.
 test_ipv6 1 $src_mac $dst_mac $src_ip 2
 
+OVS_WAIT_WHILE([test 24 = $(wc -c hv1/br-phys_n1-tx.pcap | cut -d " " -f1)])
+OVS_WAIT_WHILE([test 24 = $(wc -c hv1/br-phys-tx.pcap | cut -d " " -f1)])
+
 $PYTHON "$top_srcdir/utilities/ovs-pcap.in" hv1/br-phys_n1-tx.pcap | \
 trim_zeros > 1.packets
 $PYTHON "$top_srcdir/utilities/ovs-pcap.in" hv1/br-phys-tx.pcap | \
@@ -9226,15 +9245,19 @@ ovn-nbctl set Logical_Router_Port ro-sw 
ipv6_ra_configs:address_mode=slaac
 ovn-nbctl set Logical_Router_Port ro-sw ipv6_ra_configs:max_interval=4
 ovn-nbctl set Logical_Router_Port ro-sw ipv6_ra_configs:min_interval=3
 
-for i in hv1 hv2 ; do
-    as $i
-    ovs-vsctl -- add-port br-int $i-vif1 -- \
-        set interface $i-vif1 external-ids:iface-id=sw-p1 \
-        options:tx_pcap=$i/vif1-tx.pcap \
-        options:rxq_pcap=$i/vif1-rx.pcap \
+for i in 1 2 ; do
+    as hv$i
+    ovs-vsctl -- add-port br-int hv$i-vif1 -- \
+        set interface hv$i-vif1 external-ids:iface-id=sw-p$i \
+        options:tx_pcap=hv$i/vif1-tx.pcap \
+        options:rxq_pcap=hv$i/vif1-rx.pcap \
         ofport-request=1
 done
 
+
+OVS_WAIT_UNTIL([test x`ovn-nbctl lsp-get-up sw-p1` = xup])
+OVS_WAIT_UNTIL([test x`ovn-nbctl lsp-get-up sw-p2` = xup])
+
 # Allow time for ovn-northd and ovn-controller to catch up
 sleep 1
 
-- 
2.14.3

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to