The `tunnel_push_pop - action` test case may fail due to a race
condition between the revalidator modifying flows and dummy `receive`
action.

To fix the race for this test case and other test cases in the same
file, this patch will call revalidator/wait every time a flow is
modified.

Signed-off-by: Ihar Hrachyshka <[email protected]>
---
 tests/tunnel-push-pop.at | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/tests/tunnel-push-pop.at b/tests/tunnel-push-pop.at
index 64c41460b..b6fac1426 100644
--- a/tests/tunnel-push-pop.at
+++ b/tests/tunnel-push-pop.at
@@ -42,6 +42,7 @@ Cached: 2001:ca00::/24 dev br0 SRC 2001:cafe::88 local
 ])
 
 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
 
 dnl Check ARP request
 AT_CHECK([ovs-vsctl -- set Interface p0 options:pcap=p0.pcap])
@@ -81,6 +82,7 @@ erspan_sys (3) ref_cnt=4
 dnl Check ERSPAN v1 tunnel push
 AT_CHECK([ovs-vsctl -- set Interface br0 options:pcap=br0.pcap])
 AT_CHECK([ovs-ofctl add-flow int-br action=2])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'],
 [0], [stdout])
 AT_CHECK([tail -1 stdout], [0],
   [Datapath actions: 
tnl_push(tnl_port(3),header(size=50,type=107,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x4000),erspan(ver=1,sid=0x7b,idx=0x3)),out_port(100)),1
@@ -151,6 +153,7 @@ AT_CHECK([tail -1 stdout], [0],
 ])
 
 AT_CHECK([ovs-ofctl del-flows int-br])
+AT_CHECK([ovs-appctl revalidator/wait])
 
 dnl Check decapsulation of ERSPAN v1
 dnl Hex dump: GRE:(100088be)
@@ -252,6 +255,7 @@ User: 1.1.2.0/24 MARK 1234 dev br0 SRC 1.1.2.88
 ])
 
 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
 
 dnl Check ARP request
 AT_CHECK([ovs-vsctl -- set Interface p0 options:pcap=p0.pcap])
@@ -450,6 +454,7 @@ AT_CHECK([tail -1 stdout], [0],
 
 dnl Check VXLAN tunnel push
 AT_CHECK([ovs-ofctl add-flow int-br action=2])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'],
 [0], [stdout])
 AT_CHECK([tail -1 stdout], [0],
   [Datapath actions: 
tnl_push(tnl_port(4789),header(size=50,type=4,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=4789,csum=0x0),vxlan(flags=0x8000000,vni=0x7b)),out_port(100)),1
@@ -457,6 +462,7 @@ AT_CHECK([tail -1 stdout], [0],
 
 dnl Check VXLAN GPE tunnel push
 AT_CHECK([ovs-ofctl add-flow int-br action=8])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:01),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'],
 [0], [stdout])
 AT_CHECK([tail -1 stdout], [0],
   [Datapath actions: 
tnl_push(tnl_port(4789),header(size=50,type=4,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=4789,csum=0x0),vxlan(flags=0xc000003,vni=0x159)),out_port(100)),1
@@ -464,6 +470,7 @@ AT_CHECK([tail -1 stdout], [0],
 
 dnl Check VXLAN tunnel push set tunnel id by flow and checksum
 AT_CHECK([ovs-ofctl add-flow int-br "actions=set_tunnel:124,4"])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'],
 [0], [stdout])
 AT_CHECK([tail -1 stdout], [0],
   [Datapath actions: 
tnl_push(tnl_port(4789),header(size=50,type=4,eth(dst=f8:bc:12:44:34:b7,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.93,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=4789,csum=0xffff),vxlan(flags=0x8000000,vni=0x7c)),out_port(100)),1
@@ -471,6 +478,7 @@ AT_CHECK([tail -1 stdout], [0],
 
 dnl Check GRE tunnel push
 AT_CHECK([ovs-ofctl add-flow int-br action=3])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'],
 [0], [stdout])
 AT_CHECK([tail -1 stdout], [0],
   [Datapath actions: 
tnl_push(tnl_port(3),header(size=42,type=3,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x2000,proto=0x6558),key=0x1c8)),out_port(100)),1
@@ -478,6 +486,7 @@ AT_CHECK([tail -1 stdout], [0],
 
 dnl Check L3GRE tunnel push
 AT_CHECK([ovs-ofctl add-flow int-br action=7])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:01),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'],
 [0], [stdout])
 AT_CHECK([tail -1 stdout], [0],
   [Datapath actions: 
pop_eth,tnl_push(tnl_port(3),header(size=42,type=3,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x2000,proto=0x800),key=0x1c8)),out_port(100)),1
@@ -485,6 +494,7 @@ AT_CHECK([tail -1 stdout], [0],
 
 dnl Check Geneve tunnel push
 AT_CHECK([ovs-ofctl add-flow int-br "actions=set_field:1.1.2.92->tun_dst,5"])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'],
 [0], [stdout])
 AT_CHECK([tail -1 stdout], [0],
   [Datapath actions: 
tnl_push(tnl_port(6081),header(size=50,type=5,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0x0),geneve(vni=0x7b)),out_port(100)),1
@@ -492,6 +502,7 @@ AT_CHECK([tail -1 stdout], [0],
 
 dnl Check Geneve tunnel push with pkt-mark
 AT_CHECK([ovs-ofctl add-flow int-br "actions=set_tunnel:234,6"])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'],
 [0], [stdout])
 AT_CHECK([tail -1 stdout], [0],
   [Datapath actions: 
set(skb_mark(0x4d2)),tnl_push(tnl_port(6081),header(size=50,type=5,eth(dst=f8:bc:12:44:34:b7,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.93,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0x0),geneve(vni=0xea)),out_port(100)),1
@@ -500,6 +511,7 @@ AT_CHECK([tail -1 stdout], [0],
 dnl Check Geneve tunnel push with options
 AT_CHECK([ovs-ofctl add-tlv-map int-br 
"{class=0xffff,type=0x80,len=4}->tun_metadata0"])
 AT_CHECK([ovs-ofctl add-flow int-br 
"actions=set_field:1.1.2.92->tun_dst,set_field:0xa->tun_metadata0,5"])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'],
 [0], [stdout])
 AT_CHECK([tail -1 stdout], [0],
   [Datapath actions: 
tnl_push(tnl_port(6081),header(size=58,type=5,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0x0),geneve(crit,vni=0x7b,options({class=0xffff,type=0x80,len=4,0xa}))),out_port(100)),1
@@ -507,12 +519,14 @@ AT_CHECK([tail -1 stdout], [0],
 
 dnl Check GTP-U tunnel push
 AT_CHECK([ovs-ofctl add-flow int-br "actions=9"])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'],
 [0], [stdout])
 AT_CHECK([tail -1 stdout], [0],
   [Datapath actions: 
pop_eth,tnl_push(tnl_port(2152),header(size=50,type=110,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=2152,csum=0x0),gtpu(flags=0x30,msgtype=255,teid=0x7b)),out_port(100)),1
 ])
 AT_CHECK([ovs-ofctl del-flows int-br])
+AT_CHECK([ovs-appctl revalidator/wait])
 
 dnl Check decapsulation of VXLAN packet
 AT_CHECK([ovs-appctl netdev-dummy/receive p0 
'aa55aa550000001b213cab6408004500004e00010000401173e90101025c0101025812b512b5003a00000800000000007b00fe71d883724fbeb6f4e1494a08004500001c0001000040013ede1e0000011e0000020000ffff00000000'])
@@ -646,6 +660,7 @@ AT_CHECK([ovs-ofctl dump-ports int-br | grep 'port  [[37]]' 
| sort], [0], [dnl
 dnl Send out packets received from L3GRE tunnel back to L3GRE tunnel
 AT_CHECK([ovs-ofctl del-flows int-br])
 AT_CHECK([ovs-ofctl add-flow int-br 
"in_port=7,actions=set_field:3->in_port,7"])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-vsctl -- set Interface br0 options:pcap=br0.pcap])
 
 AT_CHECK([ovs-appctl netdev-dummy/receive p0 
'aa55aa550000001b213cab6408004500007079464000402fba630101025c0101025820000800000001c845000054ba200000400184861e0000011e00000200004227e75400030af3195500000000f265010000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637'])
@@ -671,6 +686,7 @@ AT_CHECK([ovs-ofctl monitor int-br 65534 --detach 
--no-chdir --pidfile 2> ofctl_
 
 AT_CHECK([ovs-ofctl del-flows int-br])
 AT_CHECK([ovs-ofctl add-flow int-br 
"tun_metadata0=0xa/0xf,actions=5,controller"])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-appctl netdev-dummy/receive p0 
'aa55aa550000001b213cab64080045000096794640004011ba5b0101025c01010258308817c1008200000400655800007b00ffff80010000000affff00010000000bfe71d883724fbeb6f4e1494a080045000054ba200000400184861e0000011e00000200004227e75400030af3195500000000f265010000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637'])
 
 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
@@ -696,6 +712,7 @@ ovs-appctl time/warp 1000
 
 dnl Check VXLAN tunnel push
 AT_CHECK([ovs-ofctl add-flow int-br action=2])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
'in_port(2),eth(src=36:b1:ee:7c:01:01,dst=36:b1:ee:7c:01:02),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'],
 [0], [stdout])
 AT_CHECK([tail -1 stdout], [0],
   [Datapath actions: 
tnl_push(tnl_port(4789),header(size=50,type=4,eth(dst=f8:bc:12:44:ca:fe,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=4789,csum=0x0),vxlan(flags=0x8000000,vni=0x7b)),out_port(100)),1
@@ -783,6 +800,7 @@ Cached: 1.1.2.0/24 dev br0 SRC 1.1.2.88 local
 ])
 
 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
 
 dnl This ARP reply from p0 has two effects:
 dnl 1. The ARP cache will learn that 1.1.2.92 is at f8:bc:12:44:34:b6.
@@ -793,6 +811,7 @@ AT_CHECK([ovs-vsctl -- set Interface p0 
options:tx_pcap=p0.pcap])
 
 dnl Output to tunnel from a int-br internal port
 AT_CHECK([ovs-ofctl add-flow int-br "in_port=LOCAL,actions=output:2"])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-appctl netdev-dummy/receive int-br 
'50540000000a5054000000091234'])
 OVS_WAIT_UNTIL([test `ovs-pcap p0.pcap | grep 50540000000a5054000000091234 | 
wc -l` -ge 1])
 
@@ -823,6 +842,7 @@ AT_CHECK([ovs-appctl ovs/route/show | grep Cached], [0], 
[dnl
 Cached: 1.1.2.0/24 dev br0 SRC 1.1.2.88 local
 ])
 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
 
 dnl This ARP reply from p0 has two effects:
 dnl 1. The ARP cache will learn that 1.1.2.92 is at f8:bc:12:44:34:b6.
@@ -844,6 +864,7 @@ 
encap=f8bc124434b6aa55aa5500000800450000320000400040113406010102580101025c....17
 dnl Output to tunnel from a int-br internal port.
 dnl Checking that the packet arrived and it was correctly encapsulated.
 AT_CHECK([ovs-ofctl add-flow int-br 
"in_port=LOCAL,actions=debug_slow,output:2"])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-appctl netdev-dummy/receive int-br "${packet}4"])
 OVS_WAIT_UNTIL([test `ovs-pcap p0.pcap | grep -E "${encap}${packet}4" | wc -l` 
-ge 1])
 dnl Sending again to exercise the non-miss upcall path.
@@ -898,6 +919,7 @@ Cached: 2.2.2.0/24 dev br0 SRC 2.2.2.88 local
 ])
 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
 AT_CHECK([ovs-ofctl add-flow int-br action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
 
 dnl This ARP reply from p0 has two effects:
 dnl 1. The ARP cache will learn that 1.1.2.92 is at f8:bc:12:44:34:b6.
@@ -979,6 +1001,7 @@ Cached: 1.1.2.0/24 dev br0 SRC 1.1.2.88 local
 ])
 
 AT_CHECK([ovs-ofctl add-flow br0 'arp,priority=1,action=normal'])
+AT_CHECK([ovs-appctl revalidator/wait])
 
 dnl Use arp reply to achieve tunnel next hop mac binding
 AT_CHECK([ovs-appctl netdev-dummy/receive p0 
'recirc_id(0),in_port(1),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:b6,tha=00:00:00:00:00:00)'])
@@ -991,6 +1014,7 @@ AT_CHECK([ovs-ofctl add-flow br0 
'ip,ip_proto=47,nw_tos=0,eth_src=aa:55:aa:55:00
 
 dnl Direct traffic from the integration bridge to the GRE tunnel
 AT_CHECK([ovs-ofctl add-flow int-br action=3])
+AT_CHECK([ovs-appctl revalidator/wait])
 
 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=17,tos=0,ttl=64,frag=no),udp(src=51283,dst=4789)'],
 [0], [stdout])
 AT_CHECK([tail -1 stdout], [0],
@@ -1028,6 +1052,7 @@ AT_CHECK([ovs-appctl ovs/route/show | grep Cached], [0], 
[dnl
 Cached: 1.1.2.0/24 dev br0 SRC 1.1.2.88 local
 ])
 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
 
 dnl This ARP reply from p0 has two effects:
 dnl 1. The ARP cache will learn that 1.1.2.92 is at f8:bc:12:44:34:b6.
@@ -1047,6 +1072,7 @@ add_of_ports br-non-tunnel 7 8
 AT_CHECK([ovs-ofctl del-flows br-non-tunnel])
 AT_CHECK([ovs-ofctl add-flow br-non-tunnel in_port=p7,action=p8])
 AT_CHECK([ovs-ofctl add-flow br-non-tunnel in_port=p8,action=p7])
+AT_CHECK([ovs-appctl revalidator/wait])
 
 dnl Checking that tunnel configuration doesn't impact flow translation
 dnl on this bridge (Megaflow should contain a bare minimum of fields
@@ -1100,6 +1126,7 @@ Cached: 10.0.0.0/24 dev br0 SRC 10.0.0.2 local
 dnl Send an ARP reply to port b8 on br0, so that packets will be forwarded
 dnl to learned port.
 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
 
 AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),dnl
    eth(src=aa:55:aa:66:00:00,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),dnl
@@ -1149,6 +1176,7 @@ dnl to learned port.
 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
 AT_CHECK([ovs-ofctl del-flows ovs-tun0])
 AT_CHECK([ovs-ofctl add-flow ovs-tun0 "in_port=p7,actions=tun0"])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),dnl
    eth(src=aa:55:aa:66:00:00,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),dnl
    
arp(sip=10.0.0.11,tip=10.0.0.2,op=2,sha=aa:55:aa:66:00:00,tha=00:00:00:00:00:00)'])
@@ -1164,6 +1192,7 @@ 
udp(src=0,dst=4789,csum=0x0),vxlan(flags=0x8000000,vni=0x0)),out_port(100)),8
 dnl Perform a negative check to make sure clone is still present.
 AT_CHECK([ovs-ofctl del-flows ovs-tun0])
 AT_CHECK([ovs-ofctl add-flow ovs-tun0 "in_port=p7,actions=tun0,in_port"])
+AT_CHECK([ovs-appctl revalidator/wait])
 AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),dnl
    eth(src=aa:55:aa:66:00:00,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),dnl
    
arp(sip=10.0.0.11,tip=10.0.0.2,op=2,sha=aa:55:aa:66:00:00,tha=00:00:00:00:00:00)'])
@@ -1218,6 +1247,7 @@ Cached: 1.1.2.0/24 dev vtep0 SRC 1.1.2.88 local
 
 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
 AT_CHECK([ovs-ofctl add-flow int-br action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
 
 dnl Use arp request and reply to achieve tunnel next hop mac binding.
 dnl By default, vtep0's MAC address is aa:55:aa:55:00:03.
@@ -1287,6 +1317,7 @@ AT_CHECK([ovs-ofctl add-flow br0 
in_port=br0,action=group:1234])
 AT_CHECK([ovs-ofctl add-flow br0 in_port=p0,action=normal])
 
 AT_CHECK([ovs-ofctl add-flow int-br action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
 
 dnl This ARP reply from p0 has two effects:
 dnl 1. The ARP cache will learn that 1.1.2.92 is at f8:bc:12:44:34:b6.
@@ -1372,6 +1403,7 @@ AT_CHECK([dnl
 
 AT_CHECK([ovs-ofctl add-flow br-ext actions=normal])
 AT_CHECK([ovs-ofctl add-flow br0 actions=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
 
 dnl Make sure ephemeral ports stay static across tests.
 AT_CHECK([ovs-appctl tnl/egress_port_range 35190 35190], [0], [OK
@@ -1432,6 +1464,7 @@ OVS_VSWITCHD_START([dnl
 add_of_ports br0 1 2
 
 AT_CHECK([ovs-ofctl add-flow br0 in_port=p1,action=t1,p2])
+AT_CHECK([ovs-appctl revalidator/wait])
 
 AT_CHECK([ovs-appctl ofproto/trace --names br0 in_port=p1], [0], [stdout])
 AT_CHECK([tail -1 stdout], [0],
-- 
2.50.1

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

Reply via email to