Skip to content

Commit

Permalink
ofproto.at: Fix races in rule eviciton tests
Browse files Browse the repository at this point in the history
Bump timeout differences, because timeouts different by 1s might end up
to have the same position in the heap as rule_eviction_priority() uses
1024ms as a unit.

Also, use time/stop to avoid relying on how long an add-flow would take.

These tests were introduced by commit 6d56c1f.
("ofproto: Update rule's priority in eviction group.")

Acked-by: Ben Pfaff <[email protected]>
Acked-by: Kmindg G <[email protected]>
Signed-off-by: YAMAMOTO Takashi <[email protected]>
  • Loading branch information
yamt committed Apr 2, 2014
1 parent 6202217 commit 337a386
Showing 1 changed file with 34 additions and 20 deletions.
54 changes: 34 additions & 20 deletions tests/ofproto.at
Original file line number Diff line number Diff line change
Expand Up @@ -1375,27 +1375,34 @@ AT_CHECK(
| ${PERL} $srcdir/uuidfilt.pl],
[0], [<0>
])
ovs-appctl time/stop
# Add 4 flows.
for in_port in 4 3 2 1; do
ovs-ofctl add-flow br0 hard_timeout=1${in_port},in_port=$in_port,actions=drop
ovs-ofctl add-flow br0 hard_timeout=$((10 + in_port * 3)),in_port=$in_port,actions=drop
done
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
hard_timeout=11, in_port=1 actions=drop
hard_timeout=12, in_port=2 actions=drop
hard_timeout=13, in_port=3 actions=drop
hard_timeout=14, in_port=4 actions=drop
hard_timeout=13, in_port=1 actions=drop
hard_timeout=16, in_port=2 actions=drop
hard_timeout=19, in_port=3 actions=drop
hard_timeout=22, in_port=4 actions=drop
NXST_FLOW reply:
])
# Sleep and modify the one that expires soonest
sleep 2
ovs-appctl time/warp 5000
AT_CHECK([ovs-ofctl mod-flows br0 in_port=1,actions=drop])
sleep 2
# At this point the table would looks like:
# in_port seconds to expire
# 1 13
# 2 11
# 3 14
# 4 17
ovs-appctl time/warp 2000
# Adding another flow will cause the one that expires soonest to be evicted.
AT_CHECK([ovs-ofctl add-flow br0 in_port=5,actions=drop])
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
hard_timeout=11, in_port=1 actions=drop
hard_timeout=13, in_port=3 actions=drop
hard_timeout=14, in_port=4 actions=drop
hard_timeout=13, in_port=1 actions=drop
hard_timeout=19, in_port=3 actions=drop
hard_timeout=22, in_port=4 actions=drop
in_port=5 actions=drop
NXST_FLOW reply:
])
Expand All @@ -1414,26 +1421,33 @@ AT_CHECK(
])
# Add 4 flows.
for in_port in 4 3 2 1; do
ovs-ofctl add-flow br0 idle_timeout=1${in_port},in_port=$in_port,actions=drop
ovs-ofctl add-flow br0 idle_timeout=$((10 + in_port * 3)),in_port=$in_port,actions=drop
done
ovs-appctl time/stop
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
idle_timeout=11, in_port=1 actions=drop
idle_timeout=12, in_port=2 actions=drop
idle_timeout=13, in_port=3 actions=drop
idle_timeout=14, in_port=4 actions=drop
idle_timeout=13, in_port=1 actions=drop
idle_timeout=16, in_port=2 actions=drop
idle_timeout=19, in_port=3 actions=drop
idle_timeout=22, in_port=4 actions=drop
NXST_FLOW reply:
])
# Sleep and receive on the flow that expires soonest
sleep 2
ovs-appctl time/warp 5000
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1)'])
sleep 2
# At this point the table would looks like:
# in_port seconds to expire
# 1 13
# 2 11
# 3 14
# 4 17
ovs-appctl time/warp 2000
# Adding another flow will cause the one that expires soonest to be evicted.
AT_CHECK([ovs-ofctl add-flow br0 in_port=5,actions=drop])
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
idle_timeout=13, in_port=3 actions=drop
idle_timeout=14, in_port=4 actions=drop
idle_timeout=19, in_port=3 actions=drop
idle_timeout=22, in_port=4 actions=drop
in_port=5 actions=drop
n_packets=1, n_bytes=60, idle_timeout=11, in_port=1 actions=drop
n_packets=1, n_bytes=60, idle_timeout=13, in_port=1 actions=drop
NXST_FLOW reply:
])
OVS_VSWITCHD_STOP
Expand Down

0 comments on commit 337a386

Please sign in to comment.