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