diff mbox

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

Message ID 17f5a56089cca78d8c183c0dcd3c26abe94cb66b.1493980565.git.tredaelli@redhat.com
State Accepted
Headers show

Commit Message

Timothy Redaelli May 5, 2017, 10:39 a.m. UTC
Port a variant of 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)"

Do not use "sleep 1", but wait for log file to have (at least) the same
number of lines we expect (it generally waits less time).

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@redhat.com>
Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
---
v2:
* wait for log file to have (at least) the same number of lines we expect
  as per review comment

 tests/ofproto.at | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

Comments

Ben Pfaff May 5, 2017, 3:42 p.m. UTC | #1
On Fri, May 05, 2017 at 12:39:12PM +0200, Timothy Redaelli wrote:
> Port a variant of 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)"
> 
> Do not use "sleep 1", but wait for log file to have (at least) the same
> number of lines we expect (it generally waits less time).
> 
> 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@redhat.com>
> Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
> ---
> v2:
> * wait for log file to have (at least) the same number of lines we expect
>   as per review comment

Thanks!  Reliable tests are important to everyone.  I applied this to
master.
diff mbox

Patch

diff --git a/tests/ofproto.at b/tests/ofproto.at
index 4431c157..5431f4e8 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"` -ge `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"` -ge `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"` -ge `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"` -ge `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"` -ge `wc -l < "expout"`])
 
     AT_CHECK(
       [[sed '