From 7bf7a0d16325418a4a55f94c41945c74c3989e0c Mon Sep 17 00:00:00 2001
From: Georgy Kirichenko <georgy@tarantool.org>
Date: Wed, 6 Sep 2017 10:23:05 +0300
Subject: [PATCH] replication: add a test case for timeouts

Fixes #2707
---
 test/replication/errinj.result   | 90 ++++++++++++++++++++++++++++++++
 test/replication/errinj.test.lua | 34 ++++++++++++
 2 files changed, 124 insertions(+)

diff --git a/test/replication/errinj.result b/test/replication/errinj.result
index 089d8f90bc..0fd36ba92d 100644
--- a/test/replication/errinj.result
+++ b/test/replication/errinj.result
@@ -215,3 +215,93 @@ test_run:cmd("cleanup server replica")
 ---
 - true
 ...
+box.cfg{replication_timeout = 0.01}
+---
+...
+box.schema.user.grant("guest", "replication")
+---
+...
+test_run:cmd("start server replica")
+---
+- true
+...
+test_run:cmd("switch replica")
+---
+- true
+...
+fiber = require'fiber'
+---
+...
+while box.info.replication[1].upstream.message ~= 'timed out' do fiber.sleep(0.0001) end
+---
+...
+test_run:cmd("switch default")
+---
+- true
+...
+box.cfg{replication_timeout = 0.05}
+---
+...
+test_run:cmd("switch replica")
+---
+- true
+...
+-- wait for reconnect
+while box.info.replication[1].upstream.status ~= 'follow' do fiber.sleep(0.0001) end
+---
+...
+box.info.replication[1].upstream.status
+---
+- follow
+...
+-- wait for ack timeout
+while box.info.replication[1].upstream.message ~= 'timed out' do fiber.sleep(0.0001) end
+---
+...
+test_run:cmd("switch default")
+---
+- true
+...
+box.cfg{replication_timeout = 5}
+---
+...
+test_run:cmd("switch replica")
+---
+- true
+...
+-- wait for reconnect
+while box.info.replication[1].upstream.status ~= 'follow' do fiber.sleep(0.0001) end
+---
+...
+-- wait for ack timeout again, should be ok
+fiber.sleep(0.01)
+---
+...
+{box.info.replication[1].upstream.status, box.info.replication[1].upstream.message}
+---
+- - follow
+...
+test_run:cmd("stop server default")
+---
+- true
+...
+test_run:cmd("deploy server default")
+---
+- true
+...
+test_run:cmd("start server default")
+---
+- true
+...
+test_run:cmd("switch default")
+---
+- true
+...
+test_run:cmd("stop server replica")
+---
+- true
+...
+test_run:cmd("cleanup server replica")
+---
+- true
+...
diff --git a/test/replication/errinj.test.lua b/test/replication/errinj.test.lua
index 9e6fbc53e9..b50b6b0cb6 100644
--- a/test/replication/errinj.test.lua
+++ b/test/replication/errinj.test.lua
@@ -92,3 +92,37 @@ test_run:cmd("start server default")
 test_run:cmd("switch default")
 test_run:cmd("stop server replica")
 test_run:cmd("cleanup server replica")
+
+box.cfg{replication_timeout = 0.01}
+box.schema.user.grant("guest", "replication")
+
+test_run:cmd("start server replica")
+test_run:cmd("switch replica")
+fiber = require'fiber'
+while box.info.replication[1].upstream.message ~= 'timed out' do fiber.sleep(0.0001) end
+
+test_run:cmd("switch default")
+box.cfg{replication_timeout = 0.05}
+test_run:cmd("switch replica")
+-- wait for reconnect
+while box.info.replication[1].upstream.status ~= 'follow' do fiber.sleep(0.0001) end
+box.info.replication[1].upstream.status
+-- wait for ack timeout
+while box.info.replication[1].upstream.message ~= 'timed out' do fiber.sleep(0.0001) end
+
+test_run:cmd("switch default")
+box.cfg{replication_timeout = 5}
+
+test_run:cmd("switch replica")
+-- wait for reconnect
+while box.info.replication[1].upstream.status ~= 'follow' do fiber.sleep(0.0001) end
+-- wait for ack timeout again, should be ok
+fiber.sleep(0.01)
+{box.info.replication[1].upstream.status, box.info.replication[1].upstream.message}
+
+test_run:cmd("stop server default")
+test_run:cmd("deploy server default")
+test_run:cmd("start server default")
+test_run:cmd("switch default")
+test_run:cmd("stop server replica")
+test_run:cmd("cleanup server replica")
-- 
GitLab