aboutsummaryrefslogtreecommitdiff
path: root/tests/reconnect.at
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2009-11-10 15:30:49 -0800
committerBen Pfaff <blp@nicira.com>2009-11-12 12:56:21 -0800
commit3ed497fc10033c9857140270d60ef6aa2d7c0c08 (patch)
tree13fc8d25e8023b1a33c2b003e35c53e963b80423 /tests/reconnect.at
parent8ecd53084ce42e2e868a9c24c57b2d9a7e59cfc2 (diff)
New "reconnect" library for managing network connection attempts.
This library implements the reconnection FSM used by the "rconn" library. Therefore, it makes sense to change rconn to use this, and I have a patch to do that, but I am not applying it at the moment to avoid changing unrelated code on the "db" branch.
Diffstat (limited to 'tests/reconnect.at')
-rw-r--r--tests/reconnect.at1039
1 files changed, 1039 insertions, 0 deletions
diff --git a/tests/reconnect.at b/tests/reconnect.at
new file mode 100644
index 00000000..33e4b951
--- /dev/null
+++ b/tests/reconnect.at
@@ -0,0 +1,1039 @@
+AT_BANNER([reconnect library])
+
+######################################################################
+AT_SETUP([nothing happens if not enabled])
+AT_KEYWORDS([reconnect])
+AT_DATA([input], [run
+timeout
+])
+OVS_CHECK_LCOV([test-reconnect < input], [0],
+ [### t=1000 ###
+run
+timeout
+ no timeout
+])
+AT_CLEANUP
+
+######################################################################
+AT_SETUP([quick connect, idle disconnect])
+AT_KEYWORDS([reconnect])
+AT_DATA([input], [enable
+
+# Connection succeeds.
+run
+connected
+
+# Send inactivity probe.
+timeout
+run
+
+# Idle timeout kills connection.
+timeout
+run
+disconnected
+])
+OVS_CHECK_LCOV([test-reconnect < input], [0],
+ [### t=1000 ###
+enable
+ in BACKOFF for 0 ms (0 ms backoff)
+
+# Connection succeeds.
+run
+ should connect
+connected
+ in ACTIVE for 0 ms (0 ms backoff)
+ 1 successful connections out of 1 attempts, seqno 1
+ connected (0 ms), total 0 ms connected
+
+# Send inactivity probe.
+timeout
+ advance 5000 ms
+
+### t=6000 ###
+ in ACTIVE for 5000 ms (0 ms backoff)
+ connected (5000 ms), total 5000 ms connected
+run
+ should send probe
+ in IDLE for 0 ms (0 ms backoff)
+
+# Idle timeout kills connection.
+timeout
+ advance 5000 ms
+
+### t=11000 ###
+ in IDLE for 5000 ms (0 ms backoff)
+ connected (10000 ms), total 10000 ms connected
+run
+ should disconnect
+disconnected
+ in BACKOFF for 0 ms (1000 ms backoff)
+ 1 successful connections out of 1 attempts, seqno 2
+ not connected (0 ms), total 10000 ms connected
+])
+AT_CLEANUP
+
+######################################################################
+AT_SETUP([slow connect, idle disconnect])
+AT_KEYWORDS([reconnect])
+AT_DATA([input], [enable
+
+# Start connecting.
+run
+connecting
+
+# Connect after 500 ms.
+advance 500
+run
+connected
+
+# Send inactivity probe.
+timeout
+run
+
+# Idle timeout kills connection.
+timeout
+run
+disconnected
+])
+OVS_CHECK_LCOV([test-reconnect < input], [0],
+ [### t=1000 ###
+enable
+ in BACKOFF for 0 ms (0 ms backoff)
+
+# Start connecting.
+run
+ should connect
+connecting
+ in CONNECTING for 0 ms (0 ms backoff)
+
+# Connect after 500 ms.
+advance 500
+
+### t=1500 ###
+ in CONNECTING for 500 ms (0 ms backoff)
+run
+ should connect
+connected
+ in ACTIVE for 0 ms (0 ms backoff)
+ created 1000, last received 1000, last connected 1500
+ 1 successful connections out of 1 attempts, seqno 1
+ connected (0 ms), total 0 ms connected
+
+# Send inactivity probe.
+timeout
+ advance 5000 ms
+
+### t=6500 ###
+ in ACTIVE for 5000 ms (0 ms backoff)
+ connected (5000 ms), total 5000 ms connected
+run
+ should send probe
+ in IDLE for 0 ms (0 ms backoff)
+
+# Idle timeout kills connection.
+timeout
+ advance 5000 ms
+
+### t=11500 ###
+ in IDLE for 5000 ms (0 ms backoff)
+ connected (10000 ms), total 10000 ms connected
+run
+ should disconnect
+disconnected
+ in BACKOFF for 0 ms (1000 ms backoff)
+ 1 successful connections out of 1 attempts, seqno 2
+ not connected (0 ms), total 10000 ms connected
+])
+AT_CLEANUP
+
+######################################################################
+AT_SETUP([connect backs off])
+AT_KEYWORDS([reconnect])
+AT_DATA([input], [enable
+
+# First connection attempt fails after 1000 ms.
+run
+connecting
+run
+timeout
+run
+connect-failed
+
+# Back off for 1000 ms.
+timeout
+run
+
+# Second connection attempt fails after 1000 ms.
+connecting
+timeout
+run
+connect-failed
+
+# Back off for 2000 ms.
+timeout
+run
+
+# Third connection attempt fails after 2000 ms.
+connecting
+timeout
+run
+connect-failed
+
+# Back off for 4000 ms.
+timeout
+run
+
+# Third connection attempt fails after 4000 ms.
+connecting
+timeout
+run
+connect-failed
+
+# Back off for 8000 ms.
+timeout
+run
+
+# Third connection attempt fails after 8000 ms.
+connecting
+timeout
+run
+connect-failed
+
+# Back off for 8000 ms.
+timeout
+run
+
+# Fourth connection attempt fails after 8000 ms.
+connecting
+timeout
+run
+connect-failed
+])
+OVS_CHECK_LCOV([test-reconnect < input], [0],
+ [### t=1000 ###
+enable
+ in BACKOFF for 0 ms (0 ms backoff)
+
+# First connection attempt fails after 1000 ms.
+run
+ should connect
+connecting
+ in CONNECTING for 0 ms (0 ms backoff)
+run
+ should connect
+timeout
+ advance 1000 ms
+
+### t=2000 ###
+ in CONNECTING for 1000 ms (0 ms backoff)
+run
+ should disconnect
+connect-failed
+ in BACKOFF for 0 ms (1000 ms backoff)
+ 0 successful connections out of 1 attempts, seqno 0
+
+# Back off for 1000 ms.
+timeout
+ advance 1000 ms
+
+### t=3000 ###
+ in BACKOFF for 1000 ms (1000 ms backoff)
+run
+ should connect
+
+# Second connection attempt fails after 1000 ms.
+connecting
+ in CONNECTING for 0 ms (1000 ms backoff)
+timeout
+ advance 1000 ms
+
+### t=4000 ###
+ in CONNECTING for 1000 ms (1000 ms backoff)
+run
+ should disconnect
+connect-failed
+ in BACKOFF for 0 ms (2000 ms backoff)
+ 0 successful connections out of 2 attempts, seqno 0
+
+# Back off for 2000 ms.
+timeout
+ advance 2000 ms
+
+### t=6000 ###
+ in BACKOFF for 2000 ms (2000 ms backoff)
+run
+ should connect
+
+# Third connection attempt fails after 2000 ms.
+connecting
+ in CONNECTING for 0 ms (2000 ms backoff)
+timeout
+ advance 2000 ms
+
+### t=8000 ###
+ in CONNECTING for 2000 ms (2000 ms backoff)
+run
+ should disconnect
+connect-failed
+ in BACKOFF for 0 ms (4000 ms backoff)
+ 0 successful connections out of 3 attempts, seqno 0
+
+# Back off for 4000 ms.
+timeout
+ advance 4000 ms
+
+### t=12000 ###
+ in BACKOFF for 4000 ms (4000 ms backoff)
+run
+ should connect
+
+# Third connection attempt fails after 4000 ms.
+connecting
+ in CONNECTING for 0 ms (4000 ms backoff)
+timeout
+ advance 4000 ms
+
+### t=16000 ###
+ in CONNECTING for 4000 ms (4000 ms backoff)
+run
+ should disconnect
+connect-failed
+ in BACKOFF for 0 ms (8000 ms backoff)
+ 0 successful connections out of 4 attempts, seqno 0
+
+# Back off for 8000 ms.
+timeout
+ advance 8000 ms
+
+### t=24000 ###
+ in BACKOFF for 8000 ms (8000 ms backoff)
+run
+ should connect
+
+# Third connection attempt fails after 8000 ms.
+connecting
+ in CONNECTING for 0 ms (8000 ms backoff)
+timeout
+ advance 8000 ms
+
+### t=32000 ###
+ in CONNECTING for 8000 ms (8000 ms backoff)
+run
+ should disconnect
+connect-failed
+ in BACKOFF for 0 ms (8000 ms backoff)
+ 0 successful connections out of 5 attempts, seqno 0
+
+# Back off for 8000 ms.
+timeout
+ advance 8000 ms
+
+### t=40000 ###
+ in BACKOFF for 8000 ms (8000 ms backoff)
+run
+ should connect
+
+# Fourth connection attempt fails after 8000 ms.
+connecting
+ in CONNECTING for 0 ms (8000 ms backoff)
+timeout
+ advance 8000 ms
+
+### t=48000 ###
+ in CONNECTING for 8000 ms (8000 ms backoff)
+run
+ should disconnect
+connect-failed
+ in BACKOFF for 0 ms (8000 ms backoff)
+ 0 successful connections out of 6 attempts, seqno 0
+])
+AT_CLEANUP
+
+######################################################################
+AT_SETUP([connections with no data preserve backoff])
+AT_KEYWORDS([reconnect])
+AT_DATA([input], [enable
+
+# First connect, then idle timeout kills connection.
+run
+connected
+timeout
+run
+timeout
+run
+disconnected
+
+# Back off for 1000 ms.
+timeout
+run
+
+# Second connect, then idle timeout kills connection.
+run
+connected
+timeout
+run
+timeout
+run
+disconnected
+
+# Back off for 2000 ms.
+timeout
+run
+
+# Third connect, then idle timeout kills connection.
+run
+connected
+timeout
+run
+timeout
+run
+disconnected
+
+# Back off for 4000 ms.
+timeout
+], [### t=1000 ###
+enable
+ in BACKOFF for 0 ms (0 ms backoff)
+
+# First connect, then idle timeout kills connection.
+run
+ should connect
+connected
+ in ACTIVE for 0 ms (0 ms backoff)
+ 1 successful connections out of 1 attempts, seqno 1
+ connected (0 ms), total 0 ms connected
+timeout
+ advance 5000 ms
+
+### t=6000 ###
+ in ACTIVE for 5000 ms (0 ms backoff)
+ connected (5000 ms), total 5000 ms connected
+run
+ should send probe
+ in IDLE for 0 ms (0 ms backoff)
+timeout
+ advance 5000 ms
+
+### t=11000 ###
+ in IDLE for 5000 ms (0 ms backoff)
+ connected (10000 ms), total 10000 ms connected
+run
+ should disconnect
+disconnected
+ in BACKOFF for 0 ms (1000 ms backoff)
+ 1 successful connections out of 1 attempts, seqno 2
+ not connected (0 ms), total 10000 ms connected
+
+# Back off for 1000 ms.
+timeout
+ advance 1000 ms
+
+### t=12000 ###
+ in BACKOFF for 1000 ms (1000 ms backoff)
+run
+ should connect
+
+# Second connect, then idle timeout kills connection.
+run
+ should connect
+connected
+ in ACTIVE for 0 ms (1000 ms backoff)
+ created 1000, last received 1000, last connected 12000
+ 2 successful connections out of 2 attempts, seqno 3
+ connected (0 ms), total 10000 ms connected
+timeout
+ advance 5000 ms
+
+### t=17000 ###
+ in ACTIVE for 5000 ms (1000 ms backoff)
+ connected (5000 ms), total 15000 ms connected
+run
+ should send probe
+ in IDLE for 0 ms (1000 ms backoff)
+timeout
+ advance 5000 ms
+
+### t=22000 ###
+ in IDLE for 5000 ms (1000 ms backoff)
+ connected (10000 ms), total 20000 ms connected
+run
+ should disconnect
+disconnected
+ in BACKOFF for 0 ms (2000 ms backoff)
+ 2 successful connections out of 2 attempts, seqno 4
+ not connected (0 ms), total 20000 ms connected
+
+# Back off for 2000 ms.
+timeout
+ advance 2000 ms
+
+### t=24000 ###
+ in BACKOFF for 2000 ms (2000 ms backoff)
+run
+ should connect
+
+# Third connect, then idle timeout kills connection.
+run
+ should connect
+connected
+ in ACTIVE for 0 ms (2000 ms backoff)
+ created 1000, last received 1000, last connected 24000
+ 3 successful connections out of 3 attempts, seqno 5
+ connected (0 ms), total 20000 ms connected
+timeout
+ advance 5000 ms
+
+### t=29000 ###
+ in ACTIVE for 5000 ms (2000 ms backoff)
+ connected (5000 ms), total 25000 ms connected
+run
+ should send probe
+ in IDLE for 0 ms (2000 ms backoff)
+timeout
+ advance 5000 ms
+
+### t=34000 ###
+ in IDLE for 5000 ms (2000 ms backoff)
+ connected (10000 ms), total 30000 ms connected
+run
+ should disconnect
+disconnected
+ in BACKOFF for 0 ms (4000 ms backoff)
+ 3 successful connections out of 3 attempts, seqno 6
+ not connected (0 ms), total 30000 ms connected
+
+# Back off for 4000 ms.
+timeout
+ advance 4000 ms
+
+### t=38000 ###
+ in BACKOFF for 4000 ms (4000 ms backoff)
+
+])
+AT_CLEANUP
+
+######################################################################
+AT_SETUP([brief connection preserves backoff])
+AT_KEYWORDS([reconnect])
+AT_DATA([input], [enable
+
+# First connection attempt fails after 1000 ms.
+run
+connecting
+run
+timeout
+run
+connect-failed
+
+# Back off for 1000 ms.
+timeout
+run
+
+# Second connection attempt fails after 1000 ms.
+connecting
+timeout
+run
+connect-failed
+
+# Back off for 2000 ms.
+timeout
+run
+
+# Third connection attempt succeeds after 500 ms.
+connecting
+advance 500
+run
+connected
+
+# Connection drops after another 250 ms.
+advance 250
+disconnected
+run
+
+# Back off for 4000 ms.
+timeout
+run
+])
+OVS_CHECK_LCOV([test-reconnect < input], [0],
+ [### t=1000 ###
+enable
+ in BACKOFF for 0 ms (0 ms backoff)
+
+# First connection attempt fails after 1000 ms.
+run
+ should connect
+connecting
+ in CONNECTING for 0 ms (0 ms backoff)
+run
+ should connect
+timeout
+ advance 1000 ms
+
+### t=2000 ###
+ in CONNECTING for 1000 ms (0 ms backoff)
+run
+ should disconnect
+connect-failed
+ in BACKOFF for 0 ms (1000 ms backoff)
+ 0 successful connections out of 1 attempts, seqno 0
+
+# Back off for 1000 ms.
+timeout
+ advance 1000 ms
+
+### t=3000 ###
+ in BACKOFF for 1000 ms (1000 ms backoff)
+run
+ should connect
+
+# Second connection attempt fails after 1000 ms.
+connecting
+ in CONNECTING for 0 ms (1000 ms backoff)
+timeout
+ advance 1000 ms
+
+### t=4000 ###
+ in CONNECTING for 1000 ms (1000 ms backoff)
+run
+ should disconnect
+connect-failed
+ in BACKOFF for 0 ms (2000 ms backoff)
+ 0 successful connections out of 2 attempts, seqno 0
+
+# Back off for 2000 ms.
+timeout
+ advance 2000 ms
+
+### t=6000 ###
+ in BACKOFF for 2000 ms (2000 ms backoff)
+run
+ should connect
+
+# Third connection attempt succeeds after 500 ms.
+connecting
+ in CONNECTING for 0 ms (2000 ms backoff)
+advance 500
+
+### t=6500 ###
+ in CONNECTING for 500 ms (2000 ms backoff)
+run
+ should connect
+connected
+ in ACTIVE for 0 ms (2000 ms backoff)
+ created 1000, last received 1000, last connected 6500
+ 1 successful connections out of 3 attempts, seqno 1
+ connected (0 ms), total 0 ms connected
+
+# Connection drops after another 250 ms.
+advance 250
+
+### t=6750 ###
+ in ACTIVE for 250 ms (2000 ms backoff)
+ connected (250 ms), total 250 ms connected
+disconnected
+ in BACKOFF for 0 ms (4000 ms backoff)
+ 1 successful connections out of 3 attempts, seqno 2
+ not connected (0 ms), total 250 ms connected
+run
+
+# Back off for 4000 ms.
+timeout
+ advance 4000 ms
+
+### t=10750 ###
+ in BACKOFF for 4000 ms (4000 ms backoff)
+run
+ should connect
+])
+AT_CLEANUP
+
+######################################################################
+AT_SETUP([brief connection with data preserves backoff])
+AT_KEYWORDS([reconnect])
+AT_DATA([input], [enable
+
+# First connection attempt fails after 1000 ms.
+run
+connecting
+run
+timeout
+run
+connect-failed
+
+# Back off for 1000 ms.
+timeout
+run
+
+# Second connection attempt fails after 1000 ms.
+connecting
+timeout
+run
+connect-failed
+
+# Back off for 2000 ms.
+timeout
+run
+
+# Third connection attempt succeeds after 500 ms.
+connecting
+advance 500
+run
+connected
+
+# Connection receives 3 chunks of data spaced 250 ms apart.
+advance 250
+run
+received
+advance 250
+run
+received
+advance 250
+run
+received
+
+# Connection drops.
+disconnected
+run
+
+# Back off for 4000 ms.
+timeout
+run
+])
+OVS_CHECK_LCOV([test-reconnect < input], [0],
+ [### t=1000 ###
+enable
+ in BACKOFF for 0 ms (0 ms backoff)
+
+# First connection attempt fails after 1000 ms.
+run
+ should connect
+connecting
+ in CONNECTING for 0 ms (0 ms backoff)
+run
+ should connect
+timeout
+ advance 1000 ms
+
+### t=2000 ###
+ in CONNECTING for 1000 ms (0 ms backoff)
+run
+ should disconnect
+connect-failed
+ in BACKOFF for 0 ms (1000 ms backoff)
+ 0 successful connections out of 1 attempts, seqno 0
+
+# Back off for 1000 ms.
+timeout
+ advance 1000 ms
+
+### t=3000 ###
+ in BACKOFF for 1000 ms (1000 ms backoff)
+run
+ should connect
+
+# Second connection attempt fails after 1000 ms.
+connecting
+ in CONNECTING for 0 ms (1000 ms backoff)
+timeout
+ advance 1000 ms
+
+### t=4000 ###
+ in CONNECTING for 1000 ms (1000 ms backoff)
+run
+ should disconnect
+connect-failed
+ in BACKOFF for 0 ms (2000 ms backoff)
+ 0 successful connections out of 2 attempts, seqno 0
+
+# Back off for 2000 ms.
+timeout
+ advance 2000 ms
+
+### t=6000 ###
+ in BACKOFF for 2000 ms (2000 ms backoff)
+run
+ should connect
+
+# Third connection attempt succeeds after 500 ms.
+connecting
+ in CONNECTING for 0 ms (2000 ms backoff)
+advance 500
+
+### t=6500 ###
+ in CONNECTING for 500 ms (2000 ms backoff)
+run
+ should connect
+connected
+ in ACTIVE for 0 ms (2000 ms backoff)
+ created 1000, last received 1000, last connected 6500
+ 1 successful connections out of 3 attempts, seqno 1
+ connected (0 ms), total 0 ms connected
+
+# Connection receives 3 chunks of data spaced 250 ms apart.
+advance 250
+
+### t=6750 ###
+ in ACTIVE for 250 ms (2000 ms backoff)
+ connected (250 ms), total 250 ms connected
+run
+received
+ created 1000, last received 6750, last connected 6500
+advance 250
+
+### t=7000 ###
+ in ACTIVE for 500 ms (2000 ms backoff)
+ connected (500 ms), total 500 ms connected
+run
+received
+ created 1000, last received 7000, last connected 6500
+advance 250
+
+### t=7250 ###
+ in ACTIVE for 750 ms (2000 ms backoff)
+ connected (750 ms), total 750 ms connected
+run
+received
+ created 1000, last received 7250, last connected 6500
+
+# Connection drops.
+disconnected
+ in BACKOFF for 0 ms (4000 ms backoff)
+ 1 successful connections out of 3 attempts, seqno 2
+ not connected (0 ms), total 750 ms connected
+run
+
+# Back off for 4000 ms.
+timeout
+ advance 4000 ms
+
+### t=11250 ###
+ in BACKOFF for 4000 ms (4000 ms backoff)
+run
+ should connect
+])
+AT_CLEANUP
+
+######################################################################
+AT_SETUP([long connection resets backoff])
+AT_KEYWORDS([reconnect])
+AT_DATA([input], [enable
+
+# First connection attempt fails after 1000 ms.
+run
+connecting
+run
+timeout
+run
+connect-failed
+
+# Back off for 1000 ms.
+timeout
+run
+
+# Second connection attempt fails after 1000 ms.
+connecting
+timeout
+run
+connect-failed
+
+# Back off for 2000 ms.
+timeout
+run
+
+# Third connection attempt succeeds after 500 ms.
+connecting
+advance 500
+run
+connected
+
+# Connection receives 3 chunks of data spaced 2000 ms apart.
+advance 2000
+run
+received
+advance 2000
+run
+received
+advance 2000
+run
+received
+
+# Connection drops.
+disconnected
+run
+
+# Back off for 1000 ms.
+timeout
+run
+])
+OVS_CHECK_LCOV([test-reconnect < input], [0],
+ [### t=1000 ###
+enable
+ in BACKOFF for 0 ms (0 ms backoff)
+
+# First connection attempt fails after 1000 ms.
+run
+ should connect
+connecting
+ in CONNECTING for 0 ms (0 ms backoff)
+run
+ should connect
+timeout
+ advance 1000 ms
+
+### t=2000 ###
+ in CONNECTING for 1000 ms (0 ms backoff)
+run
+ should disconnect
+connect-failed
+ in BACKOFF for 0 ms (1000 ms backoff)
+ 0 successful connections out of 1 attempts, seqno 0
+
+# Back off for 1000 ms.
+timeout
+ advance 1000 ms
+
+### t=3000 ###
+ in BACKOFF for 1000 ms (1000 ms backoff)
+run
+ should connect
+
+# Second connection attempt fails after 1000 ms.
+connecting
+ in CONNECTING for 0 ms (1000 ms backoff)
+timeout
+ advance 1000 ms
+
+### t=4000 ###
+ in CONNECTING for 1000 ms (1000 ms backoff)
+run
+ should disconnect
+connect-failed
+ in BACKOFF for 0 ms (2000 ms backoff)
+ 0 successful connections out of 2 attempts, seqno 0
+
+# Back off for 2000 ms.
+timeout
+ advance 2000 ms
+
+### t=6000 ###
+ in BACKOFF for 2000 ms (2000 ms backoff)
+run
+ should connect
+
+# Third connection attempt succeeds after 500 ms.
+connecting
+ in CONNECTING for 0 ms (2000 ms backoff)
+advance 500
+
+### t=6500 ###
+ in CONNECTING for 500 ms (2000 ms backoff)
+run
+ should connect
+connected
+ in ACTIVE for 0 ms (2000 ms backoff)
+ created 1000, last received 1000, last connected 6500
+ 1 successful connections out of 3 attempts, seqno 1
+ connected (0 ms), total 0 ms connected
+
+# Connection receives 3 chunks of data spaced 2000 ms apart.
+advance 2000
+
+### t=8500 ###
+ in ACTIVE for 2000 ms (2000 ms backoff)
+ connected (2000 ms), total 2000 ms connected
+run
+received
+ created 1000, last received 8500, last connected 6500
+advance 2000
+
+### t=10500 ###
+ in ACTIVE for 4000 ms (2000 ms backoff)
+ connected (4000 ms), total 4000 ms connected
+run
+received
+ created 1000, last received 10500, last connected 6500
+advance 2000
+
+### t=12500 ###
+ in ACTIVE for 6000 ms (2000 ms backoff)
+ connected (6000 ms), total 6000 ms connected
+run
+received
+ created 1000, last received 12500, last connected 6500
+
+# Connection drops.
+disconnected
+ in BACKOFF for 0 ms (1000 ms backoff)
+ 1 successful connections out of 3 attempts, seqno 2
+ not connected (0 ms), total 6000 ms connected
+run
+
+# Back off for 1000 ms.
+timeout
+ advance 1000 ms
+
+### t=13500 ###
+ in BACKOFF for 1000 ms (1000 ms backoff)
+run
+ should connect
+])
+AT_CLEANUP
+
+######################################################################
+AT_SETUP([connection attempt fails quickly])
+AT_KEYWORDS([reconnect])
+AT_DATA([input], [enable
+
+# Connection fails quickly.
+run
+connect-failed ECONNREFUSED
+
+# Back off for 1000 ms.
+run
+timeout
+
+# Connection fails quickly again.
+run
+connect-failed ECONNREFUSED
+
+# Back off for 2000 ms.
+run
+timeout
+])
+OVS_CHECK_LCOV([test-reconnect < input], [0],
+ [### t=1000 ###
+enable
+ in BACKOFF for 0 ms (0 ms backoff)
+
+# Connection fails quickly.
+run
+ should connect
+connect-failed ECONNREFUSED
+ in BACKOFF for 0 ms (1000 ms backoff)
+ 0 successful connections out of 1 attempts, seqno 0
+
+# Back off for 1000 ms.
+run
+timeout
+ advance 1000 ms
+
+### t=2000 ###
+ in BACKOFF for 1000 ms (1000 ms backoff)
+
+# Connection fails quickly again.
+run
+ should connect
+connect-failed ECONNREFUSED
+ in BACKOFF for 0 ms (2000 ms backoff)
+ 0 successful connections out of 2 attempts, seqno 0
+
+# Back off for 2000 ms.
+run
+timeout
+ advance 2000 ms
+
+### t=4000 ###
+ in BACKOFF for 2000 ms (2000 ms backoff)
+])
+AT_CLEANUP
+