[ovs-dev] [PATCH] tests/ofproto.at: Workaround some races

Ben Pfaff blp at ovn.org
Wed May 3 20:28:40 UTC 2017


On Thu, Apr 27, 2017 at 05:24:22PM +0200, Timothy Redaelli wrote:
> Port commit a6d1a2997db4:
>     ofproto.at: Workaround a race
> 
>     While a barrier serializes requests from the same connection,
>     it doesn't wait for requests from other connections to the switch.
>     Replace the barrier with infamous "sleep 1" to workaround the problem.
> 
> to the following tests:
>     "ofproto - asynchronous message control (OpenFlow 1.0)",
>     "ofproto - asynchronous message control (OpenFlow 1.3)",
>     "ofproto - asynchronous message control (OpenFlow 1.4)" and
>     "ofproto - asynchronous message control (OpenFlow 1.5)"
> 
> Sometimes one of these tests fails because the OFPT_BARRIER_REPLY is
> printed before the other message we expect to have.
> 
> Suggested-by: Lance Richardson <lrichard at redhat.com>
> Signed-off-by: Timothy Redaelli <tredaelli at redhat.com>

Thanks for working to make the tests more reliable.

Adding "sleep 1" makes tests slower, especially when it's in a loop as
it is here.

What if we instead make the test wait until monitor.log grows large
enough?  We already have OVS_WAIT_UNTIL, which waits only a short time
when it can.

What do you think of this?

Thanks,

Ben.

--8<--------------------------cut here-------------------------->8--

diff --git a/tests/ofproto.at b/tests/ofproto.at
index 4431c157e9fc..ef5e49a51093 100644
--- a/tests/ofproto.at
+++ b/tests/ofproto.at
@@ -3212,8 +3212,7 @@ udp,vlan_tci=0x0000,dl_src=00:26:b9:8c:b0:f9,dl_dst=00:25:83:df:b4:00,nw_src=172
     fi
     AT_FAIL_IF([test X"$1" != X])
 
-    ovs-appctl -t ovs-ofctl ofctl/barrier
-    echo >>expout "OFPT_BARRIER_REPLY:"
+    OVS_WAIT_UNTIL([test `wc -l < monitor.log` -eq `wc -l < expout`])
 
     AT_CHECK(
       [[sed '
@@ -3316,7 +3315,7 @@ udp,vlan_tci=0x0000,dl_src=00:26:b9:8c:b0:f9,dl_dst=00:25:83:df:b4:00,nw_src=172
     fi
     AT_FAIL_IF([test X"$1" != X])
 
-    sleep 1
+    OVS_WAIT_UNTIL([test `wc -l < monitor.log` -eq `wc -l < expout`])
 
     AT_CHECK(
       [[sed '
@@ -3435,8 +3434,7 @@ udp,vlan_tci=0x0000,dl_src=00:26:b9:8c:b0:f9,dl_dst=00:25:83:df:b4:00,nw_src=172
 
     AT_FAIL_IF([test X"$1" != X])
 
-    ovs-appctl -t ovs-ofctl ofctl/barrier
-    echo >>expout "OFPT_BARRIER_REPLY (OF1.3):"
+    OVS_WAIT_UNTIL([test `wc -l < monitor.log` -eq `wc -l < expout`])
 
     AT_CHECK(
       [[sed '
@@ -3645,8 +3643,7 @@ table_desc:-
 
     AT_FAIL_IF([test X"$1" != X])
 
-    ovs-appctl -t ovs-ofctl ofctl/barrier
-    echo >>expout "OFPT_BARRIER_REPLY (OF1.4):"
+    OVS_WAIT_UNTIL([test `wc -l < monitor.log` -eq `wc -l < expout`])
 
     AT_CHECK(
       [[sed '
@@ -3734,8 +3731,7 @@ OFPT_PORT_STATUS (OF1.5): MOD: 2(test): addr:aa:55:aa:55:00:0x
 
     AT_FAIL_IF([test X"$1" != X])
 
-    ovs-appctl -t ovs-ofctl ofctl/barrier
-    echo >>expout "OFPT_BARRIER_REPLY (OF1.5):"
+    OVS_WAIT_UNTIL([test `wc -l < monitor.log` -eq `wc -l < expout`])
 
     AT_CHECK(
       [[sed '
-- 
2.10.2



More information about the dev mailing list