From bc93568287db24847a316fea035e8931ba6410ef Mon Sep 17 00:00:00 2001
From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
Date: Fri, 21 Jul 2017 20:14:58 +0300
Subject: [PATCH] xrow: test missing SYNC in JOIN/SUBSCRIBE

See #2334
---
 test/box-py/iproto.result  |  1 +
 test/box-py/iproto.test.py | 42 ++++++++++++++++++++++++++++++--------
 test/box-py/replica.lua    |  9 --------
 3 files changed, 34 insertions(+), 18 deletions(-)
 delete mode 100644 test/box-py/replica.lua

diff --git a/test/box-py/iproto.result b/test/box-py/iproto.result
index 9f4881592b..3d1111c6d0 100644
--- a/test/box-py/iproto.result
+++ b/test/box-py/iproto.result
@@ -137,6 +137,7 @@ space2 = box.schema.create_space('test2')
 ...
 Schema changed -> error: True
 Got another schema_id: True
+Sync ok
 space:drop()
 ---
 ...
diff --git a/test/box-py/iproto.test.py b/test/box-py/iproto.test.py
index fe1e665d7f..d242a7fed8 100644
--- a/test/box-py/iproto.test.py
+++ b/test/box-py/iproto.test.py
@@ -215,15 +215,7 @@ c = Connection('localhost', server.iproto.port)
 c.connect()
 s = c._socket
 
-def test_request(req_header, req_body):
-    query_header = msgpack.dumps(req_header)
-    query_body = msgpack.dumps(req_body)
-    packet_len = len(query_header) + len(query_body)
-    query = msgpack.dumps(packet_len) + query_header + query_body
-    try:
-        s.send(query)
-    except OSError as e:
-        print '   => ', 'Failed to send request'
+def receive_response():
     resp_len = ''
     resp_headerbody = ''
     resp_header = {}
@@ -243,6 +235,17 @@ def test_request(req_header, req_body):
     res['body'] = resp_body
     return res
 
+def test_request(req_header, req_body):
+    query_header = msgpack.dumps(req_header)
+    query_body = msgpack.dumps(req_body)
+    packet_len = len(query_header) + len(query_body)
+    query = msgpack.dumps(packet_len) + query_header + query_body
+    try:
+        s.send(query)
+    except OSError as e:
+        print '   => ', 'Failed to send request'
+    return receive_response()
+
 header = { IPROTO_CODE : REQUEST_TYPE_SELECT}
 body = { IPROTO_SPACE_ID: space_id,
     IPROTO_INDEX_ID: 0,
@@ -277,6 +280,27 @@ resp = test_request(header, body)
 print 'Schema changed -> error:', resp['header'][0] != 0
 print 'Got another schema_id:', resp['header'][5] != schema_id
 
+#
+# gh-2334 Lost SYNC in JOIN response.
+#
+uuid = '0d5bd431-7f3e-4695-a5c2-82de0a9cbc95'
+header = { IPROTO_CODE: REQUEST_TYPE_JOIN, IPROTO_SYNC: 2334 }
+body = { IPROTO_SERVER_UUID: uuid }
+resp = test_request(header, body)
+if resp['header'][IPROTO_SYNC] == 2334:
+    i = 1
+    while i < 3:
+        resp = receive_response()
+        if resp['header'][IPROTO_SYNC] != 2334:
+            print 'Bad sync on response with number ', i
+            break
+        if resp['header'][IPROTO_CODE] == REQUEST_TYPE_OK:
+            i += 1
+    else:
+        print 'Sync ok'
+else:
+    print 'Bad first sync'
+
 c.close()
 
 admin("space:drop()")
diff --git a/test/box-py/replica.lua b/test/box-py/replica.lua
deleted file mode 100644
index ed0ba38cc8..0000000000
--- a/test/box-py/replica.lua
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env tarantool
-
-box.cfg({
-    listen              = os.getenv("LISTEN"),
-    replication         = os.getenv("MASTER"),
-    memtx_memory        = 107374182,
-})
-
-require('console').listen(os.getenv('ADMIN'))
-- 
GitLab