From 579cd3bf50f98a914f1570e451cd0ad9ed173444 Mon Sep 17 00:00:00 2001
From: Roman Tsisyk <roman@tsisyk.com>
Date: Thu, 10 Sep 2015 13:16:56 +0300
Subject: [PATCH] Replace disabled replication/status.test with a working one

This test was disabled by me during 1.6 async-master-master development.
Since Tarantool doesn't use proc_title for replication status anymore,
I added a new test that check box.info.replication.
---
 test/replication/status.result   | 125 ++++++++++++++++++++++++++++++-
 test/replication/status.test.lua |  63 ++++++++++++++++
 test/replication/status.test.py  |  41 ----------
 test/replication/suite.ini       |   2 +-
 4 files changed, 186 insertions(+), 45 deletions(-)
 create mode 100644 test/replication/status.test.lua
 delete mode 100644 test/replication/status.test.py

diff --git a/test/replication/status.result b/test/replication/status.result
index b5b02509d7..a78442de13 100644
--- a/test/replication/status.result
+++ b/test/replication/status.result
@@ -1,5 +1,124 @@
-box.schema.user.grant('guest', 'read,write,execute', 'universe')
+--# set connection default
+box.schema.user.grant('guest', 'replication')
+---
+...
+-- box.cfg { custom_proc_title = "master" }
+--# create server replica with rpl_master=default, script='replication/replica.lua'
+--# start server replica
+--# set connection replica
+while box.space['_priv']:len() < 1 do fiber.sleep(0.001) end
+---
+...
+r = box.info.replication
+---
+...
+r.status == "follow"
+---
+- true
+...
+r.lag < 1
+---
+- true
+...
+r.idle < 1
+---
+- true
+...
+box.space._schema:insert({'dup'})
+---
+- ['dup']
+...
+--# set connection default
+box.space._schema:insert({'dup'})
+---
+- ['dup']
+...
+--# set connection replica
+r = box.info.replication
+---
+...
+r.status == "stopped"
+---
+- true
+...
+r.message:match('Duplicate') ~= nil
+---
+- true
+...
+box.cfg { replication_source = "" }
+---
+...
+box.info.replication.status == "off"
+---
+- true
+...
+-- Simulate a slow server to test replication info
+control_ch = require('fiber').channel(1)
+---
+...
+--# setopt delimiter ';'
+local digest = require('digest')
+slowpoke = require('socket').tcp_server('127.0.0.1', 0, function(s, peer)
+    control_ch:get()
+    local seed = digest.urandom(20)
+    local handshake = string.format("Tarantool %-20s %-32s\n%-63s\n",
+    "1.6.3-slowpoke", "@megastorage", digest.base64_encode(seed))
+    s:write(handshake)
+    s:readable()
+    control_ch:get()
+    s:shutdown()
+    s:close()
+end);
+---
+...
+--# setopt delimiter ''
+uri = slowpoke:name()
+---
+...
+box.cfg { replication_source = 'user:pass@'..uri.host..':'..uri.port }
+---
+...
+r = box.info.replication
+---
+...
+r.status == "connect"
+---
+- true
+...
+control_ch:put(true)
+---
+- true
+...
+r = box.info.replication
+---
+...
+r.status == "auth"
+---
+- true
+...
+r.lag < 1
+---
+- true
+...
+-- r.idle < 1 -- broken
+slowpoke:close()
+---
+- true
+...
+control_ch:put("goodbye")
+---
+- true
+...
+r = box.info.replication
+---
+...
+r.status == "disconnected"
+---
+- true
+...
+--# stop server replica
+--# cleanup server replica
+--# set connection default
+box.schema.user.revoke('guest', 'replication')
 ---
 ...
-True
-True
diff --git a/test/replication/status.test.lua b/test/replication/status.test.lua
new file mode 100644
index 0000000000..cb540de27d
--- /dev/null
+++ b/test/replication/status.test.lua
@@ -0,0 +1,63 @@
+--# set connection default
+box.schema.user.grant('guest', 'replication')
+-- box.cfg { custom_proc_title = "master" }
+--# create server replica with rpl_master=default, script='replication/replica.lua'
+--# start server replica
+--# set connection replica
+while box.space['_priv']:len() < 1 do fiber.sleep(0.001) end
+
+r = box.info.replication
+r.status == "follow"
+r.lag < 1
+r.idle < 1
+
+box.space._schema:insert({'dup'})
+--# set connection default
+box.space._schema:insert({'dup'})
+--# set connection replica
+r = box.info.replication
+r.status == "stopped"
+r.message:match('Duplicate') ~= nil
+
+box.cfg { replication_source = "" }
+box.info.replication.status == "off"
+
+-- Simulate a slow server to test replication info
+control_ch = require('fiber').channel(1)
+--# setopt delimiter ';'
+local digest = require('digest')
+slowpoke = require('socket').tcp_server('127.0.0.1', 0, function(s, peer)
+    control_ch:get()
+    local seed = digest.urandom(20)
+    local handshake = string.format("Tarantool %-20s %-32s\n%-63s\n",
+    "1.6.3-slowpoke", "@megastorage", digest.base64_encode(seed))
+    s:write(handshake)
+    s:readable()
+    control_ch:get()
+    s:shutdown()
+    s:close()
+end);
+--# setopt delimiter ''
+
+uri = slowpoke:name()
+box.cfg { replication_source = 'user:pass@'..uri.host..':'..uri.port }
+
+r = box.info.replication
+r.status == "connect"
+
+control_ch:put(true)
+
+r = box.info.replication
+r.status == "auth"
+r.lag < 1
+-- r.idle < 1 -- broken
+
+slowpoke:close()
+control_ch:put("goodbye")
+r = box.info.replication
+r.status == "disconnected"
+
+--# stop server replica
+--# cleanup server replica
+--# set connection default
+box.schema.user.revoke('guest', 'replication')
diff --git a/test/replication/status.test.py b/test/replication/status.test.py
deleted file mode 100644
index 766b8d3993..0000000000
--- a/test/replication/status.test.py
+++ /dev/null
@@ -1,41 +0,0 @@
-import os
-import re
-import time
-
-from lib.tarantool_server import TarantoolServer
-
-# master server
-master = server
-master.admin("box.schema.user.grant('guest', 'read,write,execute', 'universe')")
-
-# replica server
-replica = TarantoolServer()
-replica.script = "replication/replica.lua"
-replica.rpl_master = master
-replica.vardir = os.path.join(master.vardir, 'replica')
-replica.deploy()
-
-replica.get_param('node')
-
-cycles = 0
-status = replica.admin.execute_no_reconnect("box.info.status", True)
-while (re.search(r'replica/.*/(connecting|connected)\n', status) == None and cycles < 500):
-    time.sleep(0.01)
-    status = replica.admin.execute_no_reconnect("box.info.status", True)
-    cycles += 1
-print(re.search(r'replica/.*/(connecting|connected)\n', status) != None)
-
-master.stop()
-cycles = 0
-
-while (re.search(r'replica/.*/(connecting|failed)\n', status) == None and cycles < 500):
-    time.sleep(0.01)
-    status = replica.admin.execute_no_reconnect("box.info.status", True)
-    cycles += 1
-print(re.search(r'replica/.*/(connecting|failed)\n', status) != None)
-
-# Cleanup.
-replica.stop()
-replica.cleanup(True)
-
-master.deploy()
diff --git a/test/replication/suite.ini b/test/replication/suite.ini
index 1841d9fb39..ecebdef354 100644
--- a/test/replication/suite.ini
+++ b/test/replication/suite.ini
@@ -2,5 +2,5 @@
 core = tarantool
 script =  master.lua
 description = tarantool/box, replication
-disabled = consistent.test.lua status.test.py
+disabled = consistent.test.lua
 release_disabled = catch.test.lua
-- 
GitLab