* [Tarantool-patches] [PATCH v1] Support to run tests with Python 3
@ 2020-11-21 9:44 sergeyb
2020-12-01 17:03 ` Leonid Vasiliev
0 siblings, 1 reply; 4+ messages in thread
From: sergeyb @ 2020-11-21 9:44 UTC (permalink / raw)
To: tarantool-patches, lvasiliev, alexander.turenko
From: Sergey Bronnikov <sergeyb@tarantool.org>
In a Python 3 'print' becomes a function, see [1]. Patch makes 'print'
in a regression tests written in Python compatible with Python 3.
1. https://docs.python.org/3/whatsnew/3.0.html#print-is-a-function
Closes #5538
---
Gitlab CI: https://gitlab.com/tarantool/tarantool/-/pipelines/219268877
GH issue: https://github.com/tarantool/tarantool/issues/5538
test/box-py/bad_trigger.test.py | 14 +--
test/box-py/call.test.py | 20 +--
test/box-py/iproto.test.py | 148 ++++++++++++-----------
test/box-py/snapshot.test.py | 16 +--
test/replication-py/cluster.test.py | 113 ++++++++---------
test/replication-py/conflict.test.py | 8 +-
test/replication-py/init_storage.test.py | 26 ++--
test/replication-py/multi.test.py | 66 +++++-----
test/replication-py/swap.test.py | 20 +--
test/xlog-py/dup_key.test.py | 12 +-
test/xlog-py/empty.test.py | 2 +-
test/xlog-py/lsn_gap.test.py | 8 +-
test/xlog-py/misc.test.py | 24 ++--
test/xlog-py/missing.test.py | 8 +-
14 files changed, 245 insertions(+), 240 deletions(-)
diff --git a/test/box-py/bad_trigger.test.py b/test/box-py/bad_trigger.test.py
index 7d200b921..d85b9055f 100644
--- a/test/box-py/bad_trigger.test.py
+++ b/test/box-py/bad_trigger.test.py
@@ -6,11 +6,11 @@ from tarantool.const import IPROTO_GREETING_SIZE, IPROTO_CODE, IPROTO_ERROR, \
import socket
import msgpack
-print """
+print("""
#
# if on_connect() trigger raises an exception, the connection is dropped
#
- """
+ """)
# silence possible error of strict mode
server.admin("nosuchfunction = nil")
@@ -24,12 +24,12 @@ conn.connect()
s = conn.socket
# Read greeting
-print 'greeting: ', len(s.recv(IPROTO_GREETING_SIZE)) == IPROTO_GREETING_SIZE
+print('greeting: {}'.format(len(s.recv(IPROTO_GREETING_SIZE)) == IPROTO_GREETING_SIZE))
# Read error packet
IPROTO_FIXHEADER_SIZE = 5
fixheader = s.recv(IPROTO_FIXHEADER_SIZE)
-print 'fixheader: ', len(fixheader) == IPROTO_FIXHEADER_SIZE
+print('fixheader: {}'.format(len(fixheader) == IPROTO_FIXHEADER_SIZE))
unpacker.feed(fixheader)
packet_len = unpacker.unpack()
packet = s.recv(packet_len)
@@ -38,9 +38,9 @@ unpacker.feed(packet)
# Parse packet
header = unpacker.unpack()
body = unpacker.unpack()
-print 'error code', (header[IPROTO_CODE] & (REQUEST_TYPE_ERROR - 1))
-print 'error message: ', body[IPROTO_ERROR]
-print 'eof:', len(s.recv(1024)) == 0
+print('error code {}'.format((header[IPROTO_CODE] & (REQUEST_TYPE_ERROR - 1))))
+print('error message: {}'.format(body[IPROTO_ERROR]))
+print('eof: {}'.format(len(s.recv(1024)) == 0))
s.close()
server.admin("box.session.on_connect(nil, f1)")
diff --git a/test/box-py/call.test.py b/test/box-py/call.test.py
index 974ba0cac..133c3fcfd 100644
--- a/test/box-py/call.test.py
+++ b/test/box-py/call.test.py
@@ -21,11 +21,11 @@ call("f1")
# IPROTO required!
call("box.error", 33333, 'Hey!')
-print """
+print("""
# A test case for Bug#103491
# server CALL processing bug with name path longer than two
# https://bugs.launchpad.net/tarantool/+bug/1034912
-"""
+""")
admin("f = function() return 'OK' end")
admin("test = {}")
admin("test.f = f")
@@ -35,11 +35,11 @@ call("f")
call("test.f")
call("test.test.f")
-print """
+print("""
# Test for Bug #955226
# Lua Numbers are passed back wrongly as strings
#
-"""
+""")
admin("function foo() return 1, 2, '1', '2' end")
call("foo")
@@ -136,14 +136,14 @@ admin("index = space:create_index('primary', { type = 'tree' })")
def lua_eval(name, *args):
- print 'eval (%s)(%s)' % (name, ','.join([ str(arg) for arg in args]))
- print '---'
- print iproto.py_con.eval(name, args)
+ print('eval (%s)(%s)' % (name, ','.join([ str(arg) for arg in args])))
+ print('---')
+ print(iproto.py_con.eval(name, args))
def lua_call(name, *args):
- print 'call %s(%s)' % (name, ','.join([ str(arg) for arg in args]))
- print '---'
- print iproto.py_con.call(name, args)
+ print('call %s(%s)' % (name, ','.join([ str(arg) for arg in args])))
+ print('---')
+ print(iproto.py_con.call(name, args))
def test(expr, *args):
lua_eval('return ' + expr, *args)
diff --git a/test/box-py/iproto.test.py b/test/box-py/iproto.test.py
index cdd1a71c5..cc1db9a09 100644
--- a/test/box-py/iproto.test.py
+++ b/test/box-py/iproto.test.py
@@ -1,3 +1,5 @@
+from __future__ import print_function
+
import os
import sys
import struct
@@ -11,25 +13,25 @@ from lib.tarantool_connection import TarantoolConnection
admin("box.schema.user.grant('guest', 'read,write,execute', 'universe')")
-print """
+print("""
#
# iproto packages test
#
-"""
+""")
# opeing new connection to tarantool/box
conn = TarantoolConnection(server.iproto.host, server.iproto.port)
conn.connect()
s = conn.socket
-print """
+print("""
# Test bug #899343 (server assertion failure on incorrect packet)
-"""
-print "# send the package with invalid length"
+""")
+print("# send the package with invalid length")
invalid_request = struct.pack('<LLL', 1, 4294967290, 1)
-print s.send(invalid_request)
-print "# check that is server alive"
-print iproto.py_con.ping() > 0
+print(s.send(invalid_request))
+print("# check that is server alive")
+print(iproto.py_con.ping() > 0)
# closing connection
s.close()
@@ -50,7 +52,7 @@ def test(header, body):
# Connect and authenticate
c = Connection('localhost', server.iproto.port)
c.connect()
- print 'query', repr_dict(header), repr_dict(body)
+ print('query', repr_dict(header), repr_dict(body))
header = msgpack.dumps(header)
body = msgpack.dumps(body)
query = msgpack.dumps(len(header) + len(body)) + header + body
@@ -59,36 +61,36 @@ def test(header, body):
try:
s.send(query)
except OSError as e:
- print ' => ', 'Failed to send request'
+ print(' => ', 'Failed to send request')
c.close()
- print iproto.py_con.ping() > 0
+ print(iproto.py_con.ping() > 0)
-print """
+print("""
# Test gh-206 "Segfault if sending IPROTO package without `KEY` field"
-"""
+""")
-print "IPROTO_SELECT"
+print("IPROTO_SELECT")
test({ IPROTO_CODE : REQUEST_TYPE_SELECT }, { IPROTO_SPACE_ID: 280 })
-print "\n"
+print("\n")
-print "IPROTO_DELETE"
+print("IPROTO_DELETE")
test({ IPROTO_CODE : REQUEST_TYPE_DELETE }, { IPROTO_SPACE_ID: 280 })
-print "\n"
+print("\n")
-print "IPROTO_UPDATE"
+print("IPROTO_UPDATE")
test({ IPROTO_CODE : REQUEST_TYPE_UPDATE }, { IPROTO_SPACE_ID: 280 })
test({ IPROTO_CODE : REQUEST_TYPE_UPDATE },
{ IPROTO_SPACE_ID: 280, IPROTO_KEY: (1, )})
-print "\n"
+print("\n")
-print "IPROTO_REPLACE"
+print("IPROTO_REPLACE")
test({ IPROTO_CODE : REQUEST_TYPE_REPLACE }, { IPROTO_SPACE_ID: 280 })
-print "\n"
+print("\n")
-print "IPROTO_CALL"
+print("IPROTO_CALL")
test({ IPROTO_CODE : REQUEST_TYPE_CALL }, {})
test({ IPROTO_CODE : REQUEST_TYPE_CALL }, { IPROTO_KEY: ('procname', )})
-print "\n"
+print("\n")
# gh-434 Tarantool crashes on multiple iproto requests with WAL enabled
admin("box.cfg.wal_mode")
@@ -104,11 +106,11 @@ s = c._socket
try:
s.send(bytes(request1) + bytes(request2))
except OSError as e:
- print ' => ', 'Failed to send request'
+ print(' => ', 'Failed to send request')
response1 = Response(c, c._read_response())
response2 = Response(c, c._read_response())
-print response1.__str__()
-print response2.__str__()
+print(response1.__str__())
+print(response2.__str__())
request1 = RequestInsert(c, 567, [3, "occama"])
request2 = RequestSelect(c, 567, 0, [1], 0, 1, 0)
@@ -116,11 +118,11 @@ s = c._socket
try:
s.send(bytes(request1) + bytes(request2))
except OSError as e:
- print ' => ', 'Failed to send request'
+ print(' => ', 'Failed to send request')
response1 = Response(c, c._read_response())
response2 = Response(c, c._read_response())
-print response1.__str__()
-print response2.__str__()
+print(response1.__str__())
+print(response2.__str__())
request1 = RequestSelect(c, 567, 0, [2], 0, 1, 0)
request2 = RequestInsert(c, 567, [4, "ockham"])
@@ -128,11 +130,11 @@ s = c._socket
try:
s.send(bytes(request1) + bytes(request2))
except OSError as e:
- print ' => ', 'Failed to send request'
+ print(' => ', 'Failed to send request')
response1 = Response(c, c._read_response())
response2 = Response(c, c._read_response())
-print response1.__str__()
-print response2.__str__()
+print(response1.__str__())
+print(response2.__str__())
request1 = RequestSelect(c, 567, 0, [1], 0, 1, 0)
request2 = RequestSelect(c, 567, 0, [2], 0, 1, 0)
@@ -140,11 +142,11 @@ s = c._socket
try:
s.send(bytes(request1) + bytes(request2))
except OSError as e:
- print ' => ', 'Failed to send request'
+ print(' => ', 'Failed to send request')
response1 = Response(c, c._read_response())
response2 = Response(c, c._read_response())
-print response1.__str__()
-print response2.__str__()
+print(response1.__str__())
+print(response2.__str__())
c.close()
@@ -192,27 +194,27 @@ TESTS = [
for test in TESTS:
it = iter(test)
size = next(it)
- print 'STR', size
- print '--'
+ print('STR', size)
+ print('--')
for fmt in it:
- print '0x' + fmt.encode('hex'), '=>',
+ print('0x' + fmt.encode('hex'), '=>', end=" ")
field = '*' * size
c._send_request(RawInsert(c, space_id, "\x91" + fmt + field))
tuple = space.select(field)[0]
- print len(tuple[0])== size and 'ok' or 'fail',
+ print(len(tuple[0])== size and 'ok' or 'fail', end=" ")
it2 = iter(test)
next(it2)
for fmt2 in it2:
tuple = c._send_request(RawSelect(c, space_id,
"\x91" + fmt2 + field))[0]
- print len(tuple[0]) == size and 'ok' or 'fail',
+ print(len(tuple[0]) == size and 'ok' or 'fail', end=" ")
tuple = space.delete(field)[0]
- print len(tuple[0]) == size and 'ok' or 'fail',
- print
- print
+ print(len(tuple[0]) == size and 'ok' or 'fail', end="")
+ print()
+ print()
-print 'Test of schema_id in iproto.'
+print('Test of schema_id in iproto.')
c = Connection('localhost', server.iproto.port)
c.connect()
s = c._socket
@@ -235,7 +237,7 @@ def receive_response():
resp_header = unpacker.unpack()
resp_body = unpacker.unpack()
except OSError as e:
- print ' => ', 'Failed to recv response'
+ print(' => ', 'Failed to recv response')
res = {}
res['header'] = resp_header
res['body'] = resp_body
@@ -249,7 +251,7 @@ def test_request(req_header, req_body):
try:
s.send(query)
except OSError as e:
- print ' => ', 'Failed to send request'
+ print(' => ', 'Failed to send request')
return receive_response()
header = { IPROTO_CODE : REQUEST_TYPE_SELECT}
@@ -260,31 +262,31 @@ body = { IPROTO_SPACE_ID: space_id,
IPROTO_OFFSET: 0,
IPROTO_LIMIT: 1 }
resp = test_request(header, body)
-print 'Normal connect done w/o errors:', resp['header'][0] == 0
-print 'Got schema_id:', resp['header'][5] > 0
+print('Normal connect done w/o errors:', resp['header'][0] == 0)
+print('Got schema_id:', resp['header'][5] > 0)
schema_id = resp['header'][5]
header = { IPROTO_CODE : REQUEST_TYPE_SELECT, 5 : 0 }
resp = test_request(header, body)
-print 'Zero-schema_id connect done w/o errors:', resp['header'][0] == 0
-print 'Same schema_id:', resp['header'][5] == schema_id
+print('Zero-schema_id connect done w/o errors:', resp['header'][0] == 0)
+print('Same schema_id:', resp['header'][5] == schema_id)
header = { IPROTO_CODE : REQUEST_TYPE_SELECT, 5 : schema_id }
resp = test_request(header, body)
-print 'Normal connect done w/o errors:', resp['header'][0] == 0
-print 'Same schema_id:', resp['header'][5] == schema_id
+print('Normal connect done w/o errors:', resp['header'][0] == 0)
+print('Same schema_id:', resp['header'][5] == schema_id)
header = { IPROTO_CODE : REQUEST_TYPE_SELECT, 5 : schema_id + 1 }
resp = test_request(header, body)
-print 'Wrong schema_id leads to error:', resp['header'][0] != 0
-print 'Same schema_id:', resp['header'][5] == schema_id
+print('Wrong schema_id leads to error:', resp['header'][0] != 0)
+print('Same schema_id:', resp['header'][5] == schema_id)
admin("space2 = box.schema.create_space('test2')")
header = { IPROTO_CODE : REQUEST_TYPE_SELECT, 5 : schema_id }
resp = test_request(header, body)
-print 'Schema changed -> error:', resp['header'][0] != 0
-print 'Got another schema_id:', resp['header'][5] != schema_id
+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.
@@ -298,14 +300,14 @@ if resp['header'][IPROTO_SYNC] == 2334:
while i < 3:
resp = receive_response()
if resp['header'][IPROTO_SYNC] != 2334:
- print 'Bad sync on response with number ', i
+ print('Bad sync on response with number ', i)
break
if resp['header'][IPROTO_CODE] == REQUEST_TYPE_OK:
i += 1
else:
- print 'Sync ok'
+ print('Sync ok')
else:
- print 'Bad first sync'
+ print('Bad first sync')
#
# Try incorrect JOIN. SYNC must be also returned.
@@ -344,10 +346,10 @@ admin("box.schema.user.revoke('guest', 'read,write,execute', 'universe')")
# gh-272 if the packet was incorrect, respond with an error code
# gh-1654 do not close connnection on invalid request
#
-print """
+print("""
# Test bugs gh-272, gh-1654 if the packet was incorrect, respond with
# an error code and do not close connection
-"""
+""")
c = Connection('localhost', server.iproto.port)
c.connect()
@@ -355,15 +357,15 @@ s = c._socket
header = { "hello": "world"}
body = { "bug": 272 }
resp = test_request(header, body)
-print 'sync=%d, %s' % (resp['header'][IPROTO_SYNC], resp['body'].get(IPROTO_ERROR))
+print('sync=%d, %s' % (resp['header'][IPROTO_SYNC], resp['body'].get(IPROTO_ERROR)))
header = { IPROTO_CODE : REQUEST_TYPE_SELECT }
header[IPROTO_SYNC] = 1234
resp = test_request(header, body)
-print 'sync=%d, %s' % (resp['header'][IPROTO_SYNC], resp['body'].get(IPROTO_ERROR))
+print('sync=%d, %s' % (resp['header'][IPROTO_SYNC], resp['body'].get(IPROTO_ERROR)))
header[IPROTO_SYNC] = 5678
body = { IPROTO_SPACE_ID: 304, IPROTO_KEY: [], IPROTO_LIMIT: 1 }
resp = test_request(header, body)
-print 'sync=%d, %s' % (resp['header'][IPROTO_SYNC], resp['body'].get(IPROTO_ERROR))
+print('sync=%d, %s' % (resp['header'][IPROTO_SYNC], resp['body'].get(IPROTO_ERROR)))
c.close()
@@ -379,32 +381,32 @@ request = RequestInsert(c, 568, [1, 0, 0, 0])
try:
s.send(bytes(request))
except OSError as e:
- print ' => ', 'Failed to send request'
+ print(' => ', 'Failed to send request')
response = Response(c, c._read_response())
-print response.__str__()
+print(response.__str__())
request = RequestUpdate(c, 568, 0, [1], [['+', 2, 1], ['-', 3, 1]])
try:
s.send(bytes(request))
except OSError as e:
- print ' => ', 'Failed to send request'
+ print(' => ', 'Failed to send request')
response = Response(c, c._read_response())
-print response.__str__()
+print(response.__str__())
request = RequestUpsert(c, 568, 0, [1, 0, 0, 0], [['+', 2, 1], ['-', 3, 1]])
try:
s.send(bytes(request))
except OSError as e:
- print ' => ', 'Failed to send request'
+ print(' => ', 'Failed to send request')
response = Response(c, c._read_response())
request = RequestSelect(c, 568, 0, [1], 0, 1, 0)
try:
s.send(bytes(request))
except OSError as e:
- print ' => ', 'Failed to send request'
+ print(' => ', 'Failed to send request')
response = Response(c, c._read_response())
-print response.__str__()
+print(response.__str__())
c.close()
@@ -421,8 +423,8 @@ s = c._socket
header = { IPROTO_CODE: REQUEST_TYPE_CALL, IPROTO_SYNC: 100 }
body = { IPROTO_FUNCTION_NAME: 'kek' }
resp = test_request(header, body)
-print "Sync: ", resp['header'][IPROTO_SYNC]
-print "Retcode: ", resp['body'][IPROTO_DATA]
+print("Sync: ", resp['header'][IPROTO_SYNC])
+print("Retcode: ", resp['body'][IPROTO_DATA])
c.close()
diff --git a/test/box-py/snapshot.test.py b/test/box-py/snapshot.test.py
index 2bfb8f621..dc5f3ee08 100644
--- a/test/box-py/snapshot.test.py
+++ b/test/box-py/snapshot.test.py
@@ -9,13 +9,13 @@ sys.stdout.push_filter(server.vardir, "<dir>")
admin("space = box.schema.space.create('tweedledum')")
admin("index = space:create_index('primary', { type = 'hash' })")
-print """#
+print("""#
# A test case for: http://bugs.launchpad.net/bugs/686411
# Check that 'box.snapshot()' does not overwrite a snapshot
# file that already exists. Verify also that any other
# error that happens when saving snapshot is propagated
# to the caller.
-"""
+""")
admin("space:insert{1, 'first tuple'}")
admin("box.snapshot()")
#
@@ -38,14 +38,14 @@ os.rmdir(snapshot)
admin("space:delete{1}")
admin("space:delete{2}")
-print """#
+print("""#
# A test case for http://bugs.launchpad.net/bugs/727174
# "tarantool_box crashes when saving snapshot on SIGUSR1"
-#"""
+#""")
-print """
+print("""
# Increment the lsn number, to make sure there is no such snapshot yet
-#"""
+#""")
admin("space:insert{1, 'Test tuple'}")
@@ -65,9 +65,9 @@ while not os.access(snapshot, os.F_OK) and iteration < MAX_ITERATIONS:
iteration = iteration + 1
if iteration == 0 or iteration >= MAX_ITERATIONS:
- print "Snapshot is missing."
+ print("Snapshot is missing.")
else:
- print "Snapshot exists."
+ print("Snapshot exists.")
admin("space:drop()")
diff --git a/test/replication-py/cluster.test.py b/test/replication-py/cluster.test.py
index 088ca9c34..6a83611d7 100644
--- a/test/replication-py/cluster.test.py
+++ b/test/replication-py/cluster.test.py
@@ -12,14 +12,14 @@ try:
cluster_uuid = yaml.safe_load(server.admin("box.space._schema:get('cluster')",
silent = True))[0][1]
uuid.UUID('{' + cluster_uuid + '}')
- print 'ok - cluster uuid'
+ print('ok - cluster uuid')
except Exception as e:
- print 'not ok - invalid cluster uuid', e
+ print('not ok - invalid cluster uuid', e)
server.iproto.reconnect() # re-connect with new permissions
-print '-------------------------------------------------------------'
-print ' gh-696: Check global READ permissions for replication'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print(' gh-696: Check global READ permissions for replication')
+print('-------------------------------------------------------------')
# Generate replica cluster UUID
@@ -27,23 +27,26 @@ replica_uuid = str(uuid.uuid4())
## Universal read permission is required to perform JOIN/SUBSCRIBE
rows = list(server.iproto.py_con.join(replica_uuid))
-print len(rows) == 1 and rows[0].return_message.find('Read access') >= 0 and \
- 'ok' or 'not ok', '-', 'join without read permissions on universe'
+status = len(rows) == 1 and rows[0].return_message.find('Read access') >= 0 and \
+ 'ok' or 'not ok'
+print('{} - join without read permissions on universe'.format(status))
rows = list(server.iproto.py_con.subscribe(cluster_uuid, replica_uuid))
-print len(rows) == 1 and rows[0].return_message.find('Read access') >= 0 and \
- 'ok' or 'not ok', '-', 'subscribe without read permissions on universe'
+status = len(rows) == 1 and rows[0].return_message.find('Read access') >= 0 and \
+ 'ok' or 'not ok'
+print('{} - subscribe without read permissions on universe'.format(status))
## Write permission to space `_cluster` is required to perform JOIN
server.admin("box.schema.user.grant('guest', 'read', 'universe')")
server.iproto.reconnect() # re-connect with new permissions
rows = list(server.iproto.py_con.join(replica_uuid))
-print len(rows) == 1 and rows[0].return_message.find('Write access') >= 0 and \
- 'ok' or 'not ok', '-', 'join without write permissions to _cluster'
+status = len(rows) == 1 and rows[0].return_message.find('Write access') >= 0 and \
+ 'ok' or 'not ok'
+print('{} - join without write permissions to _cluster'.format(status))
def check_join(msg):
ok = True
for resp in server.iproto.py_con.join(replica_uuid):
if resp._return_code != 0:
- print 'not ok', '-', msg, resp.return_message
+ print('not ok - {} {}'.format(msg, resp.return_message))
ok = False
server.iproto.reconnect() # the only way to stop JOIN
@@ -51,10 +54,10 @@ def check_join(msg):
return
tuples = server.iproto.py_con.space('_cluster').select(replica_uuid, index = 1)
if len(tuples) == 0:
- print 'not ok', '-', msg, 'missing entry in _cluster'
+ print('not ok - {} missing entry in _cluster'.format(msg))
return
server_id = tuples[0][0]
- print 'ok', '-', msg
+ print('ok - {}'.format(msg))
return server_id
## JOIN with permissions
@@ -71,9 +74,9 @@ server.iproto.reconnect() # re-connect with new permissions
server_id = check_join('join with granted role')
server.iproto.py_con.space('_cluster').delete(server_id)
-print '-------------------------------------------------------------'
-print 'gh-434: Assertion if replace _cluster tuple for local server'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print('gh-434: Assertion if replace _cluster tuple for local server')
+print('-------------------------------------------------------------')
master_uuid = server.get_param('uuid')
sys.stdout.push_filter(master_uuid, '<master uuid>')
@@ -87,9 +90,9 @@ server.admin("box.space._cluster:replace{1, require('uuid').str()}")
# Update of tail is OK
server.admin("box.space._cluster:update(1, {{'=', 3, 'test'}})")
-print '-------------------------------------------------------------'
-print 'gh-1140: Assertion if replace _cluster tuple for remote server'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print('gh-1140: Assertion if replace _cluster tuple for remote server')
+print('-------------------------------------------------------------')
# Test that insert is OK
new_uuid = '0d5bd431-7f3e-4695-a5c2-82de0a9cbc95'
@@ -112,9 +115,9 @@ server.admin("box.info.vclock[5] == nil")
server.stop()
server.deploy()
-print '-------------------------------------------------------------'
-print 'Start a new replica and check box.info on the start'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print('Start a new replica and check box.info on the start')
+print('-------------------------------------------------------------')
# master server
master = server
master_id = master.get_param('id')
@@ -135,45 +138,45 @@ replica.admin('not box.info.ro')
replica.admin('box.info.lsn == 0')
replica.admin('box.info.vclock[%d] == nil' % replica_id)
-print '-------------------------------------------------------------'
-print 'Modify data to bump LSN and check box.info'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print('Modify data to bump LSN and check box.info')
+print('-------------------------------------------------------------')
replica.admin('box.space._schema:insert{"test", 48}')
replica.admin('box.info.lsn == 1')
replica.admin('box.info.vclock[%d] == 1' % replica_id)
-print '-------------------------------------------------------------'
-print 'Connect master to replica'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print('Connect master to replica')
+print('-------------------------------------------------------------')
replication_source = yaml.safe_load(replica.admin('box.cfg.listen', silent = True))[0]
sys.stdout.push_filter(replication_source, '<replication_source>')
master.admin("box.cfg{ replication_source = '%s' }" % replication_source)
master.wait_lsn(replica_id, replica.get_lsn(replica_id))
-print '-------------------------------------------------------------'
-print 'Disconnect replica from master'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print('Disconnect replica from master')
+print('-------------------------------------------------------------')
replica.admin('box.cfg { replication_source = "" }')
-print '-------------------------------------------------------------'
-print 'Unregister replica'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print('Unregister replica')
+print('-------------------------------------------------------------')
master.admin('box.space._cluster:delete{%d} ~= nil' % replica_id)
# gh-1219: LSN must not be removed from vclock on unregister
master.admin('box.info.vclock[%d] == 1' % replica_id)
-print '-------------------------------------------------------------'
-print 'Modify data to bump LSN on replica'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print('Modify data to bump LSN on replica')
+print('-------------------------------------------------------------')
replica.admin('box.space._schema:insert{"tost", 49}')
replica.admin('box.info.lsn == 2')
replica.admin('box.info.vclock[%d] == 2' % replica_id)
-print '-------------------------------------------------------------'
-print 'Master must not crash then receives orphan rows from replica'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print('Master must not crash then receives orphan rows from replica')
+print('-------------------------------------------------------------')
replication_source = yaml.safe_load(replica.admin('box.cfg.listen', silent = True))[0]
sys.stdout.push_filter(replication_source, '<replication>')
@@ -186,9 +189,9 @@ master.admin("box.cfg{ replication = '' }")
replica.stop()
replica.cleanup()
-print '-------------------------------------------------------------'
-print 'Start a new replica and check that server_id, LSN is re-used'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print('Start a new replica and check that server_id, LSN is re-used')
+print('-------------------------------------------------------------')
#
# gh-1219: Proper removal of servers with non-zero LSN from _cluster
@@ -216,9 +219,9 @@ replica.stop()
replica.cleanup()
master.admin('box.space._cluster:delete{%d} ~= nil' % replica_id)
-print '-------------------------------------------------------------'
-print 'JOIN replica to read-only master'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print('JOIN replica to read-only master')
+print('-------------------------------------------------------------')
# master server
master = server
@@ -235,13 +238,13 @@ try:
except Exception as e:
line = "ER_READONLY"
if failed.logfile_pos.seek_once(line) >= 0:
- print "'%s' exists in server log" % line
+ print("'%s' exists in server log" % line)
master.admin('box.cfg { read_only = false }')
-print '-------------------------------------------------------------'
-print 'JOIN replica with different replica set UUID'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print('JOIN replica with different replica set UUID')
+print('-------------------------------------------------------------')
failed = TarantoolServer(server.ini)
failed.script = 'replication-py/uuid_mismatch.lua'
@@ -254,13 +257,13 @@ try:
except Exception as e:
line = "ER_REPLICASET_UUID_MISMATCH"
if failed.logfile_pos.seek_once(line) >= 0:
- print "'%s' exists in server log" % line
+ print("'%s' exists in server log" % line)
failed.cleanup()
-print '-------------------------------------------------------------'
-print 'Cleanup'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print('Cleanup')
+print('-------------------------------------------------------------')
# Cleanup
sys.stdout.pop_filter()
diff --git a/test/replication-py/conflict.test.py b/test/replication-py/conflict.test.py
index 1dcd66765..70afdeda4 100644
--- a/test/replication-py/conflict.test.py
+++ b/test/replication-py/conflict.test.py
@@ -16,8 +16,8 @@ replica.rpl_master = master
replica.deploy()
def parallel_run(cmd1, cmd2, compare):
- print 'parallel send: %s' % cmd1
- print 'parallel send: %s' % cmd2
+ print('parallel send: %s' % cmd1)
+ print('parallel send: %s' % cmd2)
master.admin.socket.sendall('%s\n' % cmd1)
replica.admin.socket.sendall('%s\n' % cmd2)
@@ -37,11 +37,11 @@ def parallel_run(cmd1, cmd2, compare):
while True:
sleep(0.01)
if any(results):
- print 'replication state is correct'
+ print('replication state is correct')
break
def prepare_cluster():
- print 'reset master-master replication'
+ print('reset master-master replication')
master.stop()
master.cleanup()
master.start()
diff --git a/test/replication-py/init_storage.test.py b/test/replication-py/init_storage.test.py
index 4be531f8d..c65fca27b 100644
--- a/test/replication-py/init_storage.test.py
+++ b/test/replication-py/init_storage.test.py
@@ -7,9 +7,9 @@ master = server
master_id = master.get_param('id')
master.admin("box.schema.user.grant('guest', 'replication')")
-print '-------------------------------------------------------------'
-print 'gh-484: JOIN doesn\'t save data to snapshot with TREE index'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print('gh-484: JOIN doesn\'t save data to snapshot with TREE index')
+print('-------------------------------------------------------------')
master.admin("space = box.schema.space.create('test', {id = 42})")
master.admin("index = space:create_index('primary', { type = 'tree'})")
@@ -28,9 +28,9 @@ replica.admin('box.space.test:select()')
replica.stop()
replica.cleanup()
-print '-------------------------------------------------------------'
-print 'replica test 2 (must be ok)'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print('replica test 2 (must be ok)')
+print('-------------------------------------------------------------')
master.restart()
master.admin('for k = 10, 19 do box.space[42]:insert{k, k*k*k} end')
@@ -51,9 +51,9 @@ for i in range(1, 20):
replica.stop()
replica.cleanup()
-print '-------------------------------------------------------------'
-print 'reconnect on JOIN/SUBSCRIBE'
-print '-------------------------------------------------------------'
+print('-------------------------------------------------------------')
+print('reconnect on JOIN/SUBSCRIBE')
+print('-------------------------------------------------------------')
server.stop()
replica = TarantoolServer(server.ini)
@@ -62,19 +62,19 @@ replica.vardir = server.vardir #os.path.join(server.vardir, 'replica')
replica.rpl_master = master
replica.deploy(wait=False)
-print 'waiting reconnect on JOIN...'
+print('waiting reconnect on JOIN...')
server.start()
replica.wait_until_started()
-print 'ok'
+print('ok')
replica.stop()
server.stop()
-print 'waiting reconnect on SUBSCRIBE...'
+print('waiting reconnect on SUBSCRIBE...')
replica.start(wait=False)
server.start()
replica.wait_until_started()
-print 'ok'
+print('ok')
replica.stop()
replica.cleanup()
diff --git a/test/replication-py/multi.test.py b/test/replication-py/multi.test.py
index 233802458..21495fa2e 100644
--- a/test/replication-py/multi.test.py
+++ b/test/replication-py/multi.test.py
@@ -14,9 +14,9 @@ master.admin("fiber = require('fiber')")
master.admin("box.schema.user.grant('guest', 'replication')")
master.admin("box.schema.user.grant('guest', 'execute', 'universe')")
-print '----------------------------------------------------------------------'
-print 'Bootstrap replicas'
-print '----------------------------------------------------------------------'
+print('----------------------------------------------------------------------')
+print('Bootstrap replicas')
+print('----------------------------------------------------------------------')
# Start replicas
master.id = master.get_param('id')
@@ -31,17 +31,17 @@ for i in range(REPLICA_N - 1):
# Otherwise can get ACCESS_DENIED error.
cluster.append(server)
-# Make a list of servers
+# Makie a list of servers
sources = []
for server in cluster:
sources.append(yaml.safe_load(server.admin('box.cfg.listen', silent = True))[0])
server.id = server.get_param('id')
-print 'done'
+print('done')
-print '----------------------------------------------------------------------'
-print 'Make a full mesh'
-print '----------------------------------------------------------------------'
+print('----------------------------------------------------------------------')
+print('Make a full mesh')
+print('----------------------------------------------------------------------')
# Connect each server to each other to make full mesh
for server in cluster:
@@ -54,55 +54,55 @@ for server in cluster:
while #box.info.vclock[...] ~= nil do
fiber.sleep(0.01)
end;""", server2.id)
- print 'server', server.id, "connected"
+ print('server {} connected'.format(server.id))
-print 'done'
+print('done')
-print '----------------------------------------------------------------------'
-print 'Test inserts'
-print '----------------------------------------------------------------------'
+print('----------------------------------------------------------------------')
+print('Test inserts')
+print('----------------------------------------------------------------------')
-print 'Create a test space'
+print('Create a test space')
master.admin("_ = box.schema.space.create('test')")
master.admin("_ = box.space.test:create_index('primary')")
master_lsn = master.get_lsn(master.id)
# Wait changes to propagate to replicas
for server in cluster:
server.wait_lsn(master.id, master_lsn)
- print 'server', server.id, 'is ok'
-print
+ print('server {} is ok'.format(server.id))
+print('')
-print 'Insert records'
+print('Insert records')
for i in range(ROW_N):
server = cluster[i % REPLICA_N]
server.admin("box.space.test:insert{%d, %s}" % (i, server.id), silent = True)
-print 'inserted %d records' % ROW_N
-print
+print('inserted {} records'.format(ROW_N))
+print('')
-print 'Synchronize'
+print('Synchronize')
for server1 in cluster:
for server2 in cluster:
server1.wait_lsn(server2.id, server2.get_lsn(server2.id))
- print 'server', server1.id, 'done'
-print 'done'
-print
+ print('server {} done'.format(server1.id))
+print('done')
+print('')
-print 'Check data'
+print('Check data')
for server in cluster:
cnt = yaml.safe_load(server.admin("box.space.test:len()", silent = True))[0]
- print 'server', server.id, 'is', cnt == ROW_N and 'ok' or 'not ok'
-print 'Done'
-print
+ print('server {} is {}'.format(server.id, cnt == ROW_N and 'ok' or 'not ok'))
+print('Done')
+print('')
-print
-print '----------------------------------------------------------------------'
-print 'Cleanup'
-print '----------------------------------------------------------------------'
+print('')
+print('----------------------------------------------------------------------')
+print('Cleanup')
+print('----------------------------------------------------------------------')
for server in cluster:
server.stop()
- print 'server', server.id, 'done'
-print
+ print('server {} done'.format(server.id))
+print('')
master.cleanup()
master.deploy()
diff --git a/test/replication-py/swap.test.py b/test/replication-py/swap.test.py
index 98eeeea6d..a96b5a117 100644
--- a/test/replication-py/swap.test.py
+++ b/test/replication-py/swap.test.py
@@ -15,18 +15,18 @@ engines = ['memtx', 'vinyl']
def insert_tuples(_server, begin, end, msg = "tuple"):
for engine in engines:
for i in range(begin, end):
- print 'box.space.%s:insert{%d, "%s %d"}' % (engine, i, msg, i)
- print '-'
+ print('box.space.%s:insert{%d, "%s %d"}' % (engine, i, msg, i))
+ print('-')
space = _server.iproto.py_con.space(engine)
- print space.insert((i, '%s %d' % (msg, i)))
+ print(space.insert((i, '%s %d' % (msg, i))))
def select_tuples(_server, begin, end):
for engine in engines:
for i in range(begin, end):
- print 'box.space.%s:select{%d}' % (engine, i)
- print '-'
+ print('box.space.%s:select{%d}' % (engine, i))
+ print('-')
space = _server.iproto.py_con.space(engine)
- print space.select(i)
+ print(space.select(i))
# master server
master = server
@@ -59,14 +59,14 @@ for engine in engines:
#host_port = "%s:%s" % master.iproto.uri
#m = re.search(r'replica/(.*)/.*', status)
#if not m or m.group(1) != host_port:
-# print 'invalid box.info.status', status, 'expected host:port', host_port
+# print('invalid box.info.status', status, 'expected host:port', host_port)
master_id = master.get_param('id')
replica_id = replica.get_param('id')
id = ID_BEGIN
for i in range(REPEAT):
- print "test %d iteration" % i
+ print("test %d iteration" % i)
# insert to master
insert_tuples(master, id, id + ID_STEP)
@@ -82,7 +82,7 @@ for i in range(REPEAT):
select_tuples(replica, id, id + ID_STEP)
id += ID_STEP
- print "swap servers"
+ print("swap servers")
# reconfigure replica to master
replica.rpl_master = None
print("switch replica to master")
@@ -106,7 +106,7 @@ for i in range(REPEAT):
select_tuples(master, id, id + ID_STEP)
id += ID_STEP
- print "rollback servers configuration"
+ print("rollback servers configuration")
# reconfigure replica to master
master.rpl_master = None
print("switch master to master")
diff --git a/test/xlog-py/dup_key.test.py b/test/xlog-py/dup_key.test.py
index 7609c9555..0b11c863d 100644
--- a/test/xlog-py/dup_key.test.py
+++ b/test/xlog-py/dup_key.test.py
@@ -26,7 +26,7 @@ server.stop()
# Save wal#1
if os.access(wal, os.F_OK):
- print ".xlog exists"
+ print(".xlog exists")
os.rename(wal, wal_old)
# Write wal#2
@@ -37,16 +37,16 @@ server.stop()
# Restore wal#1
if not os.access(wal, os.F_OK):
- print ".xlog does not exist"
+ print(".xlog does not exist")
os.rename(wal_old, wal)
server.start()
line = 'Duplicate key'
-print "check log line for '%s'" % line
-print
+print("check log line for '%s'" % line)
+print('')
if server.logfile_pos.seek_once(line) >= 0:
- print "'%s' exists in server log" % line
-print
+ print("'%s' exists in server log" % line)
+print('')
server.admin("box.space.test:get{1}")
server.admin("box.space.test:get{2}")
diff --git a/test/xlog-py/empty.test.py b/test/xlog-py/empty.test.py
index d6f89e0fb..f284e2046 100644
--- a/test/xlog-py/empty.test.py
+++ b/test/xlog-py/empty.test.py
@@ -20,7 +20,7 @@ f.close()
server.start()
server.stop()
if os.access(filename, os.F_OK):
- print ".xlog exists"
+ print(".xlog exists")
# the server has started but is crippled since it
# can't override an existing file
server.start()
diff --git a/test/xlog-py/lsn_gap.test.py b/test/xlog-py/lsn_gap.test.py
index 7a503ff07..d16198756 100644
--- a/test/xlog-py/lsn_gap.test.py
+++ b/test/xlog-py/lsn_gap.test.py
@@ -28,11 +28,11 @@ os.unlink(wal)
server.start()
line="ignoring a gap in LSN"
-print "check log line for '%s'" % line
-print
+print("check log line for '%s'" % line)
+print('')
if server.logfile_pos.seek_once(line) >= 0:
- print "'%s' exists in server log" % line
-print
+ print("'%s' exists in server log" % line)
+print('')
# missing tuple from removed xlog
server.admin("box.space.test:select{}")
diff --git a/test/xlog-py/misc.test.py b/test/xlog-py/misc.test.py
index e39ae1495..8dd2e2516 100644
--- a/test/xlog-py/misc.test.py
+++ b/test/xlog-py/misc.test.py
@@ -11,9 +11,9 @@ server.stop()
data_path = os.path.join(server.vardir, server.name)
-print """
+print("""
# xlog file must exist after inserts.
-"""
+""")
filename = str(lsn).zfill(20) + ".xlog"
wal = os.path.join(data_path, filename)
@@ -21,16 +21,16 @@ server.start()
server.admin("space = box.schema.space.create('tweedledum')")
if os.access(wal, os.F_OK):
- print ".xlog exists"
+ print(".xlog exists")
server.admin("index = space:create_index('primary', { type = 'hash' })")
server.stop()
lsn += 2
-print """
+print("""
# a new xlog must be opened after regular termination.
-"""
+""")
filename = str(lsn).zfill(20) + ".xlog"
server.start()
@@ -39,17 +39,17 @@ wal = os.path.join(data_path, filename)
server.admin("box.space.tweedledum:insert{3, 'third tuple'}")
if os.access(wal, os.F_OK):
- print "a new .xlog exists"
+ print("a new .xlog exists")
server.stop()
if os.access(wal, os.F_OK):
- print ".xlog stays around after sutdown"
+ print(".xlog stays around after sutdown")
lsn += 1
-print """
+print("""
# An xlog file with one record during recovery.
-"""
+""")
server.start()
filename = str(lsn).zfill(20) + ".xlog"
@@ -63,7 +63,7 @@ if pid > 0:
server.stop()
if os.access(wal, os.F_OK):
- print ".xlog exists after kill -9"
+ print(".xlog exists after kill -9")
# Remove last byte from xlog
f = open(wal, "a")
size = f.tell()
@@ -73,7 +73,7 @@ if os.access(wal, os.F_OK):
server.start()
if os.access(wal, os.F_OK):
- print "corrupt .xlog exists after start"
+ print("corrupt .xlog exists after start")
server.stop()
lsn += 1
@@ -98,4 +98,4 @@ for f in os.listdir(data_path):
server.start()
lsn = int(yaml.safe_load(admin("box.info.lsn", silent=True))[0])
if lsn == orig_lsn:
- print ".snap.inprogress is ignored"
+ print(".snap.inprogress is ignored")
diff --git a/test/xlog-py/missing.test.py b/test/xlog-py/missing.test.py
index df35dc6d7..f30c331e5 100644
--- a/test/xlog-py/missing.test.py
+++ b/test/xlog-py/missing.test.py
@@ -34,11 +34,11 @@ os.unlink(wal)
# this may lead to infinite recursion at start
server.start()
line="ignoring a gap in LSN"
-print "check log line for '%s'" % line
-print
+print("check log line for '%s'" % line)
+print('')
if server.logfile_pos.seek_once(line) >= 0:
- print "'%s' exists in server log" % line
-print
+ print("'%s' exists in server log" % line)
+print('')
# missing tuples from removed xlog
server.admin("box.space.test:select{}")
--
2.25.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Tarantool-patches] [PATCH v1] Support to run tests with Python 3
2020-11-21 9:44 [Tarantool-patches] [PATCH v1] Support to run tests with Python 3 sergeyb
@ 2020-12-01 17:03 ` Leonid Vasiliev
2020-12-06 17:43 ` Sergey Bronnikov
0 siblings, 1 reply; 4+ messages in thread
From: Leonid Vasiliev @ 2020-12-01 17:03 UTC (permalink / raw)
To: sergeyb, tarantool-patches, alexander.turenko
Hi! Thank you for the patch.
See some comments bellow:
1) According to
https://github.com/tarantool/tarantool/wiki/Code-review-procedure#commit-message
the title of commit message might look like:"tests:..."
2) According to PEP8, mixing using double quotes and quotes in a project
looks inconsistent (one must be selected). I understand that this is not
the purpose of your patch, but it can be cleaned up as well.
3) In addition to the previous one, I suggest choosing one of the
"format" or "%".
On 21.11.2020 12:44, sergeyb@tarantool.org wrote:
> From: Sergey Bronnikov <sergeyb@tarantool.org>
>
> In a Python 3 'print' becomes a function, see [1]. Patch makes 'print'
> in a regression tests written in Python compatible with Python 3.
>
> 1. https://docs.python.org/3/whatsnew/3.0.html#print-is-a-function
>
> Closes #5538
> ---
4) Add link to branch.
> Gitlab CI: https://gitlab.com/tarantool/tarantool/-/pipelines/219268877
> GH issue: https://github.com/tarantool/tarantool/issues/5538
>
> test/box-py/bad_trigger.test.py | 14 +--
> test/box-py/call.test.py | 20 +--
> test/box-py/iproto.test.py | 148 ++++++++++++-----------
> test/box-py/snapshot.test.py | 16 +--
> test/replication-py/cluster.test.py | 113 ++++++++---------
> test/replication-py/conflict.test.py | 8 +-
> test/replication-py/init_storage.test.py | 26 ++--
> test/replication-py/multi.test.py | 66 +++++-----
> test/replication-py/swap.test.py | 20 +--
> test/xlog-py/dup_key.test.py | 12 +-
> test/xlog-py/empty.test.py | 2 +-
> test/xlog-py/lsn_gap.test.py | 8 +-
> test/xlog-py/misc.test.py | 24 ++--
> test/xlog-py/missing.test.py | 8 +-
> 14 files changed, 245 insertions(+), 240 deletions(-)
>
> diff --git a/test/box-py/bad_trigger.test.py b/test/box-py/bad_trigger.test.py
> index 7d200b921..d85b9055f 100644
> --- a/test/box-py/bad_trigger.test.py
> +++ b/test/box-py/bad_trigger.test.py
> @@ -6,11 +6,11 @@ from tarantool.const import IPROTO_GREETING_SIZE, IPROTO_CODE, IPROTO_ERROR, \
> import socket
> import msgpack
>
> -print """
> +print("""
> #
> # if on_connect() trigger raises an exception, the connection is dropped
> #
> - """
> + """)
>
> # silence possible error of strict mode
> server.admin("nosuchfunction = nil")
> @@ -24,12 +24,12 @@ conn.connect()
> s = conn.socket
>
> # Read greeting
> -print 'greeting: ', len(s.recv(IPROTO_GREETING_SIZE)) == IPROTO_GREETING_SIZE
> +print('greeting: {}'.format(len(s.recv(IPROTO_GREETING_SIZE)) == IPROTO_GREETING_SIZE))
>
> # Read error packet
> IPROTO_FIXHEADER_SIZE = 5
> fixheader = s.recv(IPROTO_FIXHEADER_SIZE)
> -print 'fixheader: ', len(fixheader) == IPROTO_FIXHEADER_SIZE
> +print('fixheader: {}'.format(len(fixheader) == IPROTO_FIXHEADER_SIZE))
> unpacker.feed(fixheader)
> packet_len = unpacker.unpack()
> packet = s.recv(packet_len)
> @@ -38,9 +38,9 @@ unpacker.feed(packet)
> # Parse packet
> header = unpacker.unpack()
> body = unpacker.unpack()
> -print 'error code', (header[IPROTO_CODE] & (REQUEST_TYPE_ERROR - 1))
> -print 'error message: ', body[IPROTO_ERROR]
> -print 'eof:', len(s.recv(1024)) == 0
> +print('error code {}'.format((header[IPROTO_CODE] & (REQUEST_TYPE_ERROR - 1))))
> +print('error message: {}'.format(body[IPROTO_ERROR]))
> +print('eof: {}'.format(len(s.recv(1024)) == 0))
> s.close()
>
> server.admin("box.session.on_connect(nil, f1)")
> diff --git a/test/box-py/call.test.py b/test/box-py/call.test.py
> index 974ba0cac..133c3fcfd 100644
> --- a/test/box-py/call.test.py
> +++ b/test/box-py/call.test.py
> @@ -21,11 +21,11 @@ call("f1")
> # IPROTO required!
> call("box.error", 33333, 'Hey!')
>
> -print """
> +print("""
> # A test case for Bug#103491
> # server CALL processing bug with name path longer than two
> # https://bugs.launchpad.net/tarantool/+bug/1034912
> -"""
> +""")
> admin("f = function() return 'OK' end")
> admin("test = {}")
> admin("test.f = f")
> @@ -35,11 +35,11 @@ call("f")
> call("test.f")
> call("test.test.f")
>
> -print """
> +print("""
> # Test for Bug #955226
> # Lua Numbers are passed back wrongly as strings
> #
> -"""
> +""")
> admin("function foo() return 1, 2, '1', '2' end")
> call("foo")
>
> @@ -136,14 +136,14 @@ admin("index = space:create_index('primary', { type = 'tree' })")
>
>
> def lua_eval(name, *args):
> - print 'eval (%s)(%s)' % (name, ','.join([ str(arg) for arg in args]))
> - print '---'
> - print iproto.py_con.eval(name, args)
> + print('eval (%s)(%s)' % (name, ','.join([ str(arg) for arg in args])))
> + print('---')
> + print(iproto.py_con.eval(name, args))
>
> def lua_call(name, *args):
> - print 'call %s(%s)' % (name, ','.join([ str(arg) for arg in args]))
> - print '---'
> - print iproto.py_con.call(name, args)
> + print('call %s(%s)' % (name, ','.join([ str(arg) for arg in args])))
> + print('---')
> + print(iproto.py_con.call(name, args))
>
> def test(expr, *args):
> lua_eval('return ' + expr, *args)
> diff --git a/test/box-py/iproto.test.py b/test/box-py/iproto.test.py
> index cdd1a71c5..cc1db9a09 100644
> --- a/test/box-py/iproto.test.py
> +++ b/test/box-py/iproto.test.py
> @@ -1,3 +1,5 @@
> +from __future__ import print_function
> +
> import os
> import sys
> import struct
> @@ -11,25 +13,25 @@ from lib.tarantool_connection import TarantoolConnection
>
> admin("box.schema.user.grant('guest', 'read,write,execute', 'universe')")
>
> -print """
> +print("""
> #
> # iproto packages test
> #
> -"""
> +""")
>
> # opeing new connection to tarantool/box
> conn = TarantoolConnection(server.iproto.host, server.iproto.port)
> conn.connect()
> s = conn.socket
>
> -print """
> +print("""
> # Test bug #899343 (server assertion failure on incorrect packet)
> -"""
> -print "# send the package with invalid length"
> +""")
> +print("# send the package with invalid length")
> invalid_request = struct.pack('<LLL', 1, 4294967290, 1)
> -print s.send(invalid_request)
> -print "# check that is server alive"
> -print iproto.py_con.ping() > 0
> +print(s.send(invalid_request))
> +print("# check that is server alive")
> +print(iproto.py_con.ping() > 0)
>
> # closing connection
> s.close()
> @@ -50,7 +52,7 @@ def test(header, body):
> # Connect and authenticate
> c = Connection('localhost', server.iproto.port)
> c.connect()
> - print 'query', repr_dict(header), repr_dict(body)
> + print('query', repr_dict(header), repr_dict(body))
> header = msgpack.dumps(header)
> body = msgpack.dumps(body)
> query = msgpack.dumps(len(header) + len(body)) + header + body
> @@ -59,36 +61,36 @@ def test(header, body):
> try:
> s.send(query)
> except OSError as e:
> - print ' => ', 'Failed to send request'
> + print(' => ', 'Failed to send request')
> c.close()
> - print iproto.py_con.ping() > 0
> + print(iproto.py_con.ping() > 0)
>
> -print """
> +print("""
> # Test gh-206 "Segfault if sending IPROTO package without `KEY` field"
> -"""
> +""")
>
> -print "IPROTO_SELECT"
> +print("IPROTO_SELECT")
> test({ IPROTO_CODE : REQUEST_TYPE_SELECT }, { IPROTO_SPACE_ID: 280 })
> -print "\n"
> +print("\n")
>
> -print "IPROTO_DELETE"
> +print("IPROTO_DELETE")
> test({ IPROTO_CODE : REQUEST_TYPE_DELETE }, { IPROTO_SPACE_ID: 280 })
> -print "\n"
> +print("\n")
>
> -print "IPROTO_UPDATE"
> +print("IPROTO_UPDATE")
> test({ IPROTO_CODE : REQUEST_TYPE_UPDATE }, { IPROTO_SPACE_ID: 280 })
> test({ IPROTO_CODE : REQUEST_TYPE_UPDATE },
> { IPROTO_SPACE_ID: 280, IPROTO_KEY: (1, )})
> -print "\n"
> +print("\n")
>
> -print "IPROTO_REPLACE"
> +print("IPROTO_REPLACE")
> test({ IPROTO_CODE : REQUEST_TYPE_REPLACE }, { IPROTO_SPACE_ID: 280 })
> -print "\n"
> +print("\n")
>
> -print "IPROTO_CALL"
> +print("IPROTO_CALL")
> test({ IPROTO_CODE : REQUEST_TYPE_CALL }, {})
> test({ IPROTO_CODE : REQUEST_TYPE_CALL }, { IPROTO_KEY: ('procname', )})
> -print "\n"
> +print("\n")
>
> # gh-434 Tarantool crashes on multiple iproto requests with WAL enabled
> admin("box.cfg.wal_mode")
> @@ -104,11 +106,11 @@ s = c._socket
> try:
> s.send(bytes(request1) + bytes(request2))
> except OSError as e:
> - print ' => ', 'Failed to send request'
> + print(' => ', 'Failed to send request')
> response1 = Response(c, c._read_response())
> response2 = Response(c, c._read_response())
> -print response1.__str__()
> -print response2.__str__()
> +print(response1.__str__())
> +print(response2.__str__())
>
> request1 = RequestInsert(c, 567, [3, "occama"])
> request2 = RequestSelect(c, 567, 0, [1], 0, 1, 0)
> @@ -116,11 +118,11 @@ s = c._socket
> try:
> s.send(bytes(request1) + bytes(request2))
> except OSError as e:
> - print ' => ', 'Failed to send request'
> + print(' => ', 'Failed to send request')
> response1 = Response(c, c._read_response())
> response2 = Response(c, c._read_response())
> -print response1.__str__()
> -print response2.__str__()
> +print(response1.__str__())
> +print(response2.__str__())
>
> request1 = RequestSelect(c, 567, 0, [2], 0, 1, 0)
> request2 = RequestInsert(c, 567, [4, "ockham"])
> @@ -128,11 +130,11 @@ s = c._socket
> try:
> s.send(bytes(request1) + bytes(request2))
> except OSError as e:
> - print ' => ', 'Failed to send request'
> + print(' => ', 'Failed to send request')
> response1 = Response(c, c._read_response())
> response2 = Response(c, c._read_response())
> -print response1.__str__()
> -print response2.__str__()
> +print(response1.__str__())
> +print(response2.__str__())
>
> request1 = RequestSelect(c, 567, 0, [1], 0, 1, 0)
> request2 = RequestSelect(c, 567, 0, [2], 0, 1, 0)
> @@ -140,11 +142,11 @@ s = c._socket
> try:
> s.send(bytes(request1) + bytes(request2))
> except OSError as e:
> - print ' => ', 'Failed to send request'
> + print(' => ', 'Failed to send request')
> response1 = Response(c, c._read_response())
> response2 = Response(c, c._read_response())
> -print response1.__str__()
> -print response2.__str__()
> +print(response1.__str__())
> +print(response2.__str__())
>
> c.close()
>
> @@ -192,27 +194,27 @@ TESTS = [
> for test in TESTS:
> it = iter(test)
> size = next(it)
> - print 'STR', size
> - print '--'
> + print('STR', size)
> + print('--')
> for fmt in it:
> - print '0x' + fmt.encode('hex'), '=>',
> + print('0x' + fmt.encode('hex'), '=>', end=" ")
5) What for the "end" is needed here? (and in the same changes below).
> field = '*' * size
> c._send_request(RawInsert(c, space_id, "\x91" + fmt + field))
> tuple = space.select(field)[0]
> - print len(tuple[0])== size and 'ok' or 'fail',
> + print(len(tuple[0])== size and 'ok' or 'fail', end=" ")
> it2 = iter(test)
> next(it2)
> for fmt2 in it2:
> tuple = c._send_request(RawSelect(c, space_id,
> "\x91" + fmt2 + field))[0]
> - print len(tuple[0]) == size and 'ok' or 'fail',
> + print(len(tuple[0]) == size and 'ok' or 'fail', end=" ")
> tuple = space.delete(field)[0]
> - print len(tuple[0]) == size and 'ok' or 'fail',
> - print
> - print
> + print(len(tuple[0]) == size and 'ok' or 'fail', end="")
> + print()
> + print()
6) What for this `print()` needed? (and in the same changes below).
>
>
> -print 'Test of schema_id in iproto.'
> +print('Test of schema_id in iproto.')
> c = Connection('localhost', server.iproto.port)
> c.connect()
> s = c._socket
> @@ -235,7 +237,7 @@ def receive_response():
> resp_header = unpacker.unpack()
> resp_body = unpacker.unpack()
> except OSError as e:
> - print ' => ', 'Failed to recv response'
> + print(' => ', 'Failed to recv response')
> res = {}
> res['header'] = resp_header
> res['body'] = resp_body
> @@ -249,7 +251,7 @@ def test_request(req_header, req_body):
> try:
> s.send(query)
> except OSError as e:
> - print ' => ', 'Failed to send request'
> + print(' => ', 'Failed to send request')
> return receive_response()
>
> header = { IPROTO_CODE : REQUEST_TYPE_SELECT}
> @@ -260,31 +262,31 @@ body = { IPROTO_SPACE_ID: space_id,
> IPROTO_OFFSET: 0,
> IPROTO_LIMIT: 1 }
> resp = test_request(header, body)
> -print 'Normal connect done w/o errors:', resp['header'][0] == 0
> -print 'Got schema_id:', resp['header'][5] > 0
> +print('Normal connect done w/o errors:', resp['header'][0] == 0)
> +print('Got schema_id:', resp['header'][5] > 0)
> schema_id = resp['header'][5]
>
> header = { IPROTO_CODE : REQUEST_TYPE_SELECT, 5 : 0 }
> resp = test_request(header, body)
> -print 'Zero-schema_id connect done w/o errors:', resp['header'][0] == 0
> -print 'Same schema_id:', resp['header'][5] == schema_id
> +print('Zero-schema_id connect done w/o errors:', resp['header'][0] == 0)
> +print('Same schema_id:', resp['header'][5] == schema_id)
>
> header = { IPROTO_CODE : REQUEST_TYPE_SELECT, 5 : schema_id }
> resp = test_request(header, body)
> -print 'Normal connect done w/o errors:', resp['header'][0] == 0
> -print 'Same schema_id:', resp['header'][5] == schema_id
> +print('Normal connect done w/o errors:', resp['header'][0] == 0)
> +print('Same schema_id:', resp['header'][5] == schema_id)
>
> header = { IPROTO_CODE : REQUEST_TYPE_SELECT, 5 : schema_id + 1 }
> resp = test_request(header, body)
> -print 'Wrong schema_id leads to error:', resp['header'][0] != 0
> -print 'Same schema_id:', resp['header'][5] == schema_id
> +print('Wrong schema_id leads to error:', resp['header'][0] != 0)
> +print('Same schema_id:', resp['header'][5] == schema_id)
>
> admin("space2 = box.schema.create_space('test2')")
>
> header = { IPROTO_CODE : REQUEST_TYPE_SELECT, 5 : schema_id }
> resp = test_request(header, body)
> -print 'Schema changed -> error:', resp['header'][0] != 0
> -print 'Got another schema_id:', resp['header'][5] != schema_id
> +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.
> @@ -298,14 +300,14 @@ if resp['header'][IPROTO_SYNC] == 2334:
> while i < 3:
> resp = receive_response()
> if resp['header'][IPROTO_SYNC] != 2334:
> - print 'Bad sync on response with number ', i
> + print('Bad sync on response with number ', i)
> break
> if resp['header'][IPROTO_CODE] == REQUEST_TYPE_OK:
> i += 1
> else:
> - print 'Sync ok'
> + print('Sync ok')
> else:
> - print 'Bad first sync'
> + print('Bad first sync')
>
> #
> # Try incorrect JOIN. SYNC must be also returned.
> @@ -344,10 +346,10 @@ admin("box.schema.user.revoke('guest', 'read,write,execute', 'universe')")
> # gh-272 if the packet was incorrect, respond with an error code
> # gh-1654 do not close connnection on invalid request
> #
> -print """
> +print("""
> # Test bugs gh-272, gh-1654 if the packet was incorrect, respond with
> # an error code and do not close connection
> -"""
> +""")
>
> c = Connection('localhost', server.iproto.port)
> c.connect()
> @@ -355,15 +357,15 @@ s = c._socket
> header = { "hello": "world"}
> body = { "bug": 272 }
> resp = test_request(header, body)
> -print 'sync=%d, %s' % (resp['header'][IPROTO_SYNC], resp['body'].get(IPROTO_ERROR))
> +print('sync=%d, %s' % (resp['header'][IPROTO_SYNC], resp['body'].get(IPROTO_ERROR)))
> header = { IPROTO_CODE : REQUEST_TYPE_SELECT }
> header[IPROTO_SYNC] = 1234
> resp = test_request(header, body)
> -print 'sync=%d, %s' % (resp['header'][IPROTO_SYNC], resp['body'].get(IPROTO_ERROR))
> +print('sync=%d, %s' % (resp['header'][IPROTO_SYNC], resp['body'].get(IPROTO_ERROR)))
> header[IPROTO_SYNC] = 5678
> body = { IPROTO_SPACE_ID: 304, IPROTO_KEY: [], IPROTO_LIMIT: 1 }
> resp = test_request(header, body)
> -print 'sync=%d, %s' % (resp['header'][IPROTO_SYNC], resp['body'].get(IPROTO_ERROR))
> +print('sync=%d, %s' % (resp['header'][IPROTO_SYNC], resp['body'].get(IPROTO_ERROR)))
> c.close()
>
>
> @@ -379,32 +381,32 @@ request = RequestInsert(c, 568, [1, 0, 0, 0])
> try:
> s.send(bytes(request))
> except OSError as e:
> - print ' => ', 'Failed to send request'
> + print(' => ', 'Failed to send request')
> response = Response(c, c._read_response())
> -print response.__str__()
> +print(response.__str__())
>
> request = RequestUpdate(c, 568, 0, [1], [['+', 2, 1], ['-', 3, 1]])
> try:
> s.send(bytes(request))
> except OSError as e:
> - print ' => ', 'Failed to send request'
> + print(' => ', 'Failed to send request')
> response = Response(c, c._read_response())
> -print response.__str__()
> +print(response.__str__())
>
> request = RequestUpsert(c, 568, 0, [1, 0, 0, 0], [['+', 2, 1], ['-', 3, 1]])
> try:
> s.send(bytes(request))
> except OSError as e:
> - print ' => ', 'Failed to send request'
> + print(' => ', 'Failed to send request')
> response = Response(c, c._read_response())
>
> request = RequestSelect(c, 568, 0, [1], 0, 1, 0)
> try:
> s.send(bytes(request))
> except OSError as e:
> - print ' => ', 'Failed to send request'
> + print(' => ', 'Failed to send request')
> response = Response(c, c._read_response())
> -print response.__str__()
> +print(response.__str__())
>
> c.close()
>
> @@ -421,8 +423,8 @@ s = c._socket
> header = { IPROTO_CODE: REQUEST_TYPE_CALL, IPROTO_SYNC: 100 }
> body = { IPROTO_FUNCTION_NAME: 'kek' }
> resp = test_request(header, body)
> -print "Sync: ", resp['header'][IPROTO_SYNC]
> -print "Retcode: ", resp['body'][IPROTO_DATA]
> +print("Sync: ", resp['header'][IPROTO_SYNC])
> +print("Retcode: ", resp['body'][IPROTO_DATA])
>
> c.close()
>
> diff --git a/test/box-py/snapshot.test.py b/test/box-py/snapshot.test.py
> index 2bfb8f621..dc5f3ee08 100644
> --- a/test/box-py/snapshot.test.py
> +++ b/test/box-py/snapshot.test.py
> @@ -9,13 +9,13 @@ sys.stdout.push_filter(server.vardir, "<dir>")
> admin("space = box.schema.space.create('tweedledum')")
> admin("index = space:create_index('primary', { type = 'hash' })")
>
> -print """#
> +print("""#
> # A test case for: http://bugs.launchpad.net/bugs/686411
> # Check that 'box.snapshot()' does not overwrite a snapshot
> # file that already exists. Verify also that any other
> # error that happens when saving snapshot is propagated
> # to the caller.
> -"""
> +""")
> admin("space:insert{1, 'first tuple'}")
> admin("box.snapshot()")
> #
> @@ -38,14 +38,14 @@ os.rmdir(snapshot)
> admin("space:delete{1}")
> admin("space:delete{2}")
>
> -print """#
> +print("""#
> # A test case for http://bugs.launchpad.net/bugs/727174
> # "tarantool_box crashes when saving snapshot on SIGUSR1"
> -#"""
> +#""")
>
> -print """
> +print("""
> # Increment the lsn number, to make sure there is no such snapshot yet
> -#"""
> +#""")
>
> admin("space:insert{1, 'Test tuple'}")
>
> @@ -65,9 +65,9 @@ while not os.access(snapshot, os.F_OK) and iteration < MAX_ITERATIONS:
> iteration = iteration + 1
>
> if iteration == 0 or iteration >= MAX_ITERATIONS:
> - print "Snapshot is missing."
> + print("Snapshot is missing.")
> else:
> - print "Snapshot exists."
> + print("Snapshot exists.")
>
> admin("space:drop()")
>
> diff --git a/test/replication-py/cluster.test.py b/test/replication-py/cluster.test.py
> index 088ca9c34..6a83611d7 100644
> --- a/test/replication-py/cluster.test.py
> +++ b/test/replication-py/cluster.test.py
> @@ -12,14 +12,14 @@ try:
> cluster_uuid = yaml.safe_load(server.admin("box.space._schema:get('cluster')",
> silent = True))[0][1]
> uuid.UUID('{' + cluster_uuid + '}')
> - print 'ok - cluster uuid'
> + print('ok - cluster uuid')
> except Exception as e:
> - print 'not ok - invalid cluster uuid', e
> + print('not ok - invalid cluster uuid', e)
7) If I understand correctly, this will not look as previously in
python2. (Possibly, the `from __future__ import print_function` is needed.)
>
> server.iproto.reconnect() # re-connect with new permissions
> -print '-------------------------------------------------------------'
> -print ' gh-696: Check global READ permissions for replication'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print(' gh-696: Check global READ permissions for replication')
> +print('-------------------------------------------------------------')
>
>
> # Generate replica cluster UUID
> @@ -27,23 +27,26 @@ replica_uuid = str(uuid.uuid4())
>
> ## Universal read permission is required to perform JOIN/SUBSCRIBE
> rows = list(server.iproto.py_con.join(replica_uuid))
> -print len(rows) == 1 and rows[0].return_message.find('Read access') >= 0 and \
> - 'ok' or 'not ok', '-', 'join without read permissions on universe'
> +status = len(rows) == 1 and rows[0].return_message.find('Read access') >= 0 and \
> + 'ok' or 'not ok'
> +print('{} - join without read permissions on universe'.format(status))
> rows = list(server.iproto.py_con.subscribe(cluster_uuid, replica_uuid))
> -print len(rows) == 1 and rows[0].return_message.find('Read access') >= 0 and \
> - 'ok' or 'not ok', '-', 'subscribe without read permissions on universe'
> +status = len(rows) == 1 and rows[0].return_message.find('Read access') >= 0 and \
> + 'ok' or 'not ok'
> +print('{} - subscribe without read permissions on universe'.format(status))
> ## Write permission to space `_cluster` is required to perform JOIN
> server.admin("box.schema.user.grant('guest', 'read', 'universe')")
> server.iproto.reconnect() # re-connect with new permissions
> rows = list(server.iproto.py_con.join(replica_uuid))
> -print len(rows) == 1 and rows[0].return_message.find('Write access') >= 0 and \
> - 'ok' or 'not ok', '-', 'join without write permissions to _cluster'
> +status = len(rows) == 1 and rows[0].return_message.find('Write access') >= 0 and \
> + 'ok' or 'not ok'
> +print('{} - join without write permissions to _cluster'.format(status))
>
> def check_join(msg):
> ok = True
> for resp in server.iproto.py_con.join(replica_uuid):
> if resp._return_code != 0:
> - print 'not ok', '-', msg, resp.return_message
> + print('not ok - {} {}'.format(msg, resp.return_message))
> ok = False
>
> server.iproto.reconnect() # the only way to stop JOIN
> @@ -51,10 +54,10 @@ def check_join(msg):
> return
> tuples = server.iproto.py_con.space('_cluster').select(replica_uuid, index = 1)
> if len(tuples) == 0:
> - print 'not ok', '-', msg, 'missing entry in _cluster'
> + print('not ok - {} missing entry in _cluster'.format(msg))
> return
> server_id = tuples[0][0]
> - print 'ok', '-', msg
> + print('ok - {}'.format(msg))
> return server_id
>
> ## JOIN with permissions
> @@ -71,9 +74,9 @@ server.iproto.reconnect() # re-connect with new permissions
> server_id = check_join('join with granted role')
> server.iproto.py_con.space('_cluster').delete(server_id)
>
> -print '-------------------------------------------------------------'
> -print 'gh-434: Assertion if replace _cluster tuple for local server'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print('gh-434: Assertion if replace _cluster tuple for local server')
> +print('-------------------------------------------------------------')
>
> master_uuid = server.get_param('uuid')
> sys.stdout.push_filter(master_uuid, '<master uuid>')
> @@ -87,9 +90,9 @@ server.admin("box.space._cluster:replace{1, require('uuid').str()}")
> # Update of tail is OK
> server.admin("box.space._cluster:update(1, {{'=', 3, 'test'}})")
>
> -print '-------------------------------------------------------------'
> -print 'gh-1140: Assertion if replace _cluster tuple for remote server'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print('gh-1140: Assertion if replace _cluster tuple for remote server')
> +print('-------------------------------------------------------------')
>
> # Test that insert is OK
> new_uuid = '0d5bd431-7f3e-4695-a5c2-82de0a9cbc95'
> @@ -112,9 +115,9 @@ server.admin("box.info.vclock[5] == nil")
> server.stop()
> server.deploy()
>
> -print '-------------------------------------------------------------'
> -print 'Start a new replica and check box.info on the start'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print('Start a new replica and check box.info on the start')
> +print('-------------------------------------------------------------')
> # master server
> master = server
> master_id = master.get_param('id')
> @@ -135,45 +138,45 @@ replica.admin('not box.info.ro')
> replica.admin('box.info.lsn == 0')
> replica.admin('box.info.vclock[%d] == nil' % replica_id)
>
> -print '-------------------------------------------------------------'
> -print 'Modify data to bump LSN and check box.info'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print('Modify data to bump LSN and check box.info')
> +print('-------------------------------------------------------------')
> replica.admin('box.space._schema:insert{"test", 48}')
> replica.admin('box.info.lsn == 1')
> replica.admin('box.info.vclock[%d] == 1' % replica_id)
>
> -print '-------------------------------------------------------------'
> -print 'Connect master to replica'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print('Connect master to replica')
> +print('-------------------------------------------------------------')
> replication_source = yaml.safe_load(replica.admin('box.cfg.listen', silent = True))[0]
> sys.stdout.push_filter(replication_source, '<replication_source>')
> master.admin("box.cfg{ replication_source = '%s' }" % replication_source)
> master.wait_lsn(replica_id, replica.get_lsn(replica_id))
>
> -print '-------------------------------------------------------------'
> -print 'Disconnect replica from master'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print('Disconnect replica from master')
> +print('-------------------------------------------------------------')
> replica.admin('box.cfg { replication_source = "" }')
>
> -print '-------------------------------------------------------------'
> -print 'Unregister replica'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print('Unregister replica')
> +print('-------------------------------------------------------------')
>
> master.admin('box.space._cluster:delete{%d} ~= nil' % replica_id)
>
> # gh-1219: LSN must not be removed from vclock on unregister
> master.admin('box.info.vclock[%d] == 1' % replica_id)
>
> -print '-------------------------------------------------------------'
> -print 'Modify data to bump LSN on replica'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print('Modify data to bump LSN on replica')
> +print('-------------------------------------------------------------')
> replica.admin('box.space._schema:insert{"tost", 49}')
> replica.admin('box.info.lsn == 2')
> replica.admin('box.info.vclock[%d] == 2' % replica_id)
>
> -print '-------------------------------------------------------------'
> -print 'Master must not crash then receives orphan rows from replica'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print('Master must not crash then receives orphan rows from replica')
> +print('-------------------------------------------------------------')
>
> replication_source = yaml.safe_load(replica.admin('box.cfg.listen', silent = True))[0]
> sys.stdout.push_filter(replication_source, '<replication>')
> @@ -186,9 +189,9 @@ master.admin("box.cfg{ replication = '' }")
> replica.stop()
> replica.cleanup()
>
> -print '-------------------------------------------------------------'
> -print 'Start a new replica and check that server_id, LSN is re-used'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print('Start a new replica and check that server_id, LSN is re-used')
> +print('-------------------------------------------------------------')
>
> #
> # gh-1219: Proper removal of servers with non-zero LSN from _cluster
> @@ -216,9 +219,9 @@ replica.stop()
> replica.cleanup()
> master.admin('box.space._cluster:delete{%d} ~= nil' % replica_id)
>
> -print '-------------------------------------------------------------'
> -print 'JOIN replica to read-only master'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print('JOIN replica to read-only master')
> +print('-------------------------------------------------------------')
>
> # master server
> master = server
> @@ -235,13 +238,13 @@ try:
> except Exception as e:
> line = "ER_READONLY"
> if failed.logfile_pos.seek_once(line) >= 0:
> - print "'%s' exists in server log" % line
> + print("'%s' exists in server log" % line)
>
> master.admin('box.cfg { read_only = false }')
>
> -print '-------------------------------------------------------------'
> -print 'JOIN replica with different replica set UUID'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print('JOIN replica with different replica set UUID')
> +print('-------------------------------------------------------------')
>
> failed = TarantoolServer(server.ini)
> failed.script = 'replication-py/uuid_mismatch.lua'
> @@ -254,13 +257,13 @@ try:
> except Exception as e:
> line = "ER_REPLICASET_UUID_MISMATCH"
> if failed.logfile_pos.seek_once(line) >= 0:
> - print "'%s' exists in server log" % line
> + print("'%s' exists in server log" % line)
>
> failed.cleanup()
>
> -print '-------------------------------------------------------------'
> -print 'Cleanup'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print('Cleanup')
> +print('-------------------------------------------------------------')
>
> # Cleanup
> sys.stdout.pop_filter()
> diff --git a/test/replication-py/conflict.test.py b/test/replication-py/conflict.test.py
> index 1dcd66765..70afdeda4 100644
> --- a/test/replication-py/conflict.test.py
> +++ b/test/replication-py/conflict.test.py
> @@ -16,8 +16,8 @@ replica.rpl_master = master
> replica.deploy()
>
> def parallel_run(cmd1, cmd2, compare):
> - print 'parallel send: %s' % cmd1
> - print 'parallel send: %s' % cmd2
> + print('parallel send: %s' % cmd1)
> + print('parallel send: %s' % cmd2)
> master.admin.socket.sendall('%s\n' % cmd1)
> replica.admin.socket.sendall('%s\n' % cmd2)
>
> @@ -37,11 +37,11 @@ def parallel_run(cmd1, cmd2, compare):
> while True:
> sleep(0.01)
> if any(results):
> - print 'replication state is correct'
> + print('replication state is correct')
> break
>
> def prepare_cluster():
> - print 'reset master-master replication'
> + print('reset master-master replication')
> master.stop()
> master.cleanup()
> master.start()
> diff --git a/test/replication-py/init_storage.test.py b/test/replication-py/init_storage.test.py
> index 4be531f8d..c65fca27b 100644
> --- a/test/replication-py/init_storage.test.py
> +++ b/test/replication-py/init_storage.test.py
> @@ -7,9 +7,9 @@ master = server
> master_id = master.get_param('id')
> master.admin("box.schema.user.grant('guest', 'replication')")
>
> -print '-------------------------------------------------------------'
> -print 'gh-484: JOIN doesn\'t save data to snapshot with TREE index'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print('gh-484: JOIN doesn\'t save data to snapshot with TREE index')
> +print('-------------------------------------------------------------')
>
> master.admin("space = box.schema.space.create('test', {id = 42})")
> master.admin("index = space:create_index('primary', { type = 'tree'})")
> @@ -28,9 +28,9 @@ replica.admin('box.space.test:select()')
> replica.stop()
> replica.cleanup()
>
> -print '-------------------------------------------------------------'
> -print 'replica test 2 (must be ok)'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print('replica test 2 (must be ok)')
> +print('-------------------------------------------------------------')
>
> master.restart()
> master.admin('for k = 10, 19 do box.space[42]:insert{k, k*k*k} end')
> @@ -51,9 +51,9 @@ for i in range(1, 20):
> replica.stop()
> replica.cleanup()
>
> -print '-------------------------------------------------------------'
> -print 'reconnect on JOIN/SUBSCRIBE'
> -print '-------------------------------------------------------------'
> +print('-------------------------------------------------------------')
> +print('reconnect on JOIN/SUBSCRIBE')
> +print('-------------------------------------------------------------')
>
> server.stop()
> replica = TarantoolServer(server.ini)
> @@ -62,19 +62,19 @@ replica.vardir = server.vardir #os.path.join(server.vardir, 'replica')
> replica.rpl_master = master
> replica.deploy(wait=False)
>
> -print 'waiting reconnect on JOIN...'
> +print('waiting reconnect on JOIN...')
> server.start()
> replica.wait_until_started()
> -print 'ok'
> +print('ok')
>
> replica.stop()
> server.stop()
>
> -print 'waiting reconnect on SUBSCRIBE...'
> +print('waiting reconnect on SUBSCRIBE...')
> replica.start(wait=False)
> server.start()
> replica.wait_until_started()
> -print 'ok'
> +print('ok')
>
> replica.stop()
> replica.cleanup()
> diff --git a/test/replication-py/multi.test.py b/test/replication-py/multi.test.py
> index 233802458..21495fa2e 100644
> --- a/test/replication-py/multi.test.py
> +++ b/test/replication-py/multi.test.py
> @@ -14,9 +14,9 @@ master.admin("fiber = require('fiber')")
> master.admin("box.schema.user.grant('guest', 'replication')")
> master.admin("box.schema.user.grant('guest', 'execute', 'universe')")
>
> -print '----------------------------------------------------------------------'
> -print 'Bootstrap replicas'
> -print '----------------------------------------------------------------------'
> +print('----------------------------------------------------------------------')
> +print('Bootstrap replicas')
> +print('----------------------------------------------------------------------')
>
> # Start replicas
> master.id = master.get_param('id')
> @@ -31,17 +31,17 @@ for i in range(REPLICA_N - 1):
> # Otherwise can get ACCESS_DENIED error.
> cluster.append(server)
>
> -# Make a list of servers
> +# Makie a list of servers
8) I don't understand the change.
> sources = []
> for server in cluster:
> sources.append(yaml.safe_load(server.admin('box.cfg.listen', silent = True))[0])
> server.id = server.get_param('id')
>
> -print 'done'
> +print('done')
>
> -print '----------------------------------------------------------------------'
> -print 'Make a full mesh'
> -print '----------------------------------------------------------------------'
> +print('----------------------------------------------------------------------')
> +print('Make a full mesh')
> +print('----------------------------------------------------------------------')
>
> # Connect each server to each other to make full mesh
> for server in cluster:
> @@ -54,55 +54,55 @@ for server in cluster:
> while #box.info.vclock[...] ~= nil do
> fiber.sleep(0.01)
> end;""", server2.id)
> - print 'server', server.id, "connected"
> + print('server {} connected'.format(server.id))
>
> -print 'done'
> +print('done')
>
> -print '----------------------------------------------------------------------'
> -print 'Test inserts'
> -print '----------------------------------------------------------------------'
> +print('----------------------------------------------------------------------')
> +print('Test inserts')
> +print('----------------------------------------------------------------------')
>
> -print 'Create a test space'
> +print('Create a test space')
> master.admin("_ = box.schema.space.create('test')")
> master.admin("_ = box.space.test:create_index('primary')")
> master_lsn = master.get_lsn(master.id)
> # Wait changes to propagate to replicas
> for server in cluster:
> server.wait_lsn(master.id, master_lsn)
> - print 'server', server.id, 'is ok'
> -print
> + print('server {} is ok'.format(server.id))
> +print('') >
> -print 'Insert records'
> +print('Insert records')
> for i in range(ROW_N):
> server = cluster[i % REPLICA_N]
> server.admin("box.space.test:insert{%d, %s}" % (i, server.id), silent = True)
> -print 'inserted %d records' % ROW_N
> -print
> +print('inserted {} records'.format(ROW_N))
> +print('')
>
> -print 'Synchronize'
> +print('Synchronize')
> for server1 in cluster:
> for server2 in cluster:
> server1.wait_lsn(server2.id, server2.get_lsn(server2.id))
> - print 'server', server1.id, 'done'
> -print 'done'
> -print
> + print('server {} done'.format(server1.id))
> +print('done')
> +print('')
>
> -print 'Check data'
> +print('Check data')
> for server in cluster:
> cnt = yaml.safe_load(server.admin("box.space.test:len()", silent = True))[0]
> - print 'server', server.id, 'is', cnt == ROW_N and 'ok' or 'not ok'
> -print 'Done'
> -print
> + print('server {} is {}'.format(server.id, cnt == ROW_N and 'ok' or 'not ok'))
> +print('Done')
> +print('')
>
> -print
> -print '----------------------------------------------------------------------'
> -print 'Cleanup'
> -print '----------------------------------------------------------------------'
> +print('')
> +print('----------------------------------------------------------------------')
> +print('Cleanup')
> +print('----------------------------------------------------------------------')
>
> for server in cluster:
> server.stop()
> - print 'server', server.id, 'done'
> -print
> + print('server {} done'.format(server.id))
> +print('')
>
> master.cleanup()
> master.deploy()
> diff --git a/test/replication-py/swap.test.py b/test/replication-py/swap.test.py
> index 98eeeea6d..a96b5a117 100644
> --- a/test/replication-py/swap.test.py
> +++ b/test/replication-py/swap.test.py
> @@ -15,18 +15,18 @@ engines = ['memtx', 'vinyl']
> def insert_tuples(_server, begin, end, msg = "tuple"):
> for engine in engines:
> for i in range(begin, end):
> - print 'box.space.%s:insert{%d, "%s %d"}' % (engine, i, msg, i)
> - print '-'
> + print('box.space.%s:insert{%d, "%s %d"}' % (engine, i, msg, i))
> + print('-')
> space = _server.iproto.py_con.space(engine)
> - print space.insert((i, '%s %d' % (msg, i)))
> + print(space.insert((i, '%s %d' % (msg, i))))
>
> def select_tuples(_server, begin, end):
> for engine in engines:
> for i in range(begin, end):
> - print 'box.space.%s:select{%d}' % (engine, i)
> - print '-'
> + print('box.space.%s:select{%d}' % (engine, i))
> + print('-')
> space = _server.iproto.py_con.space(engine)
> - print space.select(i)
> + print(space.select(i))
>
> # master server
> master = server
> @@ -59,14 +59,14 @@ for engine in engines:
> #host_port = "%s:%s" % master.iproto.uri
> #m = re.search(r'replica/(.*)/.*', status)
> #if not m or m.group(1) != host_port:
> -# print 'invalid box.info.status', status, 'expected host:port', host_port
> +# print('invalid box.info.status', status, 'expected host:port', host_port)
9) Maybe just delete this dead code?
>
> master_id = master.get_param('id')
> replica_id = replica.get_param('id')
>
> id = ID_BEGIN
> for i in range(REPEAT):
> - print "test %d iteration" % i
> + print("test %d iteration" % i)
>
> # insert to master
> insert_tuples(master, id, id + ID_STEP)
> @@ -82,7 +82,7 @@ for i in range(REPEAT):
> select_tuples(replica, id, id + ID_STEP)
> id += ID_STEP
>
> - print "swap servers"
> + print("swap servers")
> # reconfigure replica to master
> replica.rpl_master = None
> print("switch replica to master")
> @@ -106,7 +106,7 @@ for i in range(REPEAT):
> select_tuples(master, id, id + ID_STEP)
> id += ID_STEP
>
> - print "rollback servers configuration"
> + print("rollback servers configuration")
> # reconfigure replica to master
> master.rpl_master = None
> print("switch master to master")
> diff --git a/test/xlog-py/dup_key.test.py b/test/xlog-py/dup_key.test.py
> index 7609c9555..0b11c863d 100644
> --- a/test/xlog-py/dup_key.test.py
> +++ b/test/xlog-py/dup_key.test.py
> @@ -26,7 +26,7 @@ server.stop()
>
> # Save wal#1
> if os.access(wal, os.F_OK):
> - print ".xlog exists"
> + print(".xlog exists")
> os.rename(wal, wal_old)
>
> # Write wal#2
> @@ -37,16 +37,16 @@ server.stop()
>
> # Restore wal#1
> if not os.access(wal, os.F_OK):
> - print ".xlog does not exist"
> + print(".xlog does not exist")
> os.rename(wal_old, wal)
>
> server.start()
> line = 'Duplicate key'
> -print "check log line for '%s'" % line
> -print
> +print("check log line for '%s'" % line)
> +print('')
> if server.logfile_pos.seek_once(line) >= 0:
> - print "'%s' exists in server log" % line
> -print
> + print("'%s' exists in server log" % line)
> +print('')
>
> server.admin("box.space.test:get{1}")
> server.admin("box.space.test:get{2}")
> diff --git a/test/xlog-py/empty.test.py b/test/xlog-py/empty.test.py
> index d6f89e0fb..f284e2046 100644
> --- a/test/xlog-py/empty.test.py
> +++ b/test/xlog-py/empty.test.py
> @@ -20,7 +20,7 @@ f.close()
> server.start()
> server.stop()
> if os.access(filename, os.F_OK):
> - print ".xlog exists"
> + print(".xlog exists")
> # the server has started but is crippled since it
> # can't override an existing file
> server.start()
> diff --git a/test/xlog-py/lsn_gap.test.py b/test/xlog-py/lsn_gap.test.py
> index 7a503ff07..d16198756 100644
> --- a/test/xlog-py/lsn_gap.test.py
> +++ b/test/xlog-py/lsn_gap.test.py
> @@ -28,11 +28,11 @@ os.unlink(wal)
>
> server.start()
> line="ignoring a gap in LSN"
> -print "check log line for '%s'" % line
> -print
> +print("check log line for '%s'" % line)
> +print('')
> if server.logfile_pos.seek_once(line) >= 0:
> - print "'%s' exists in server log" % line
> -print
> + print("'%s' exists in server log" % line)
> +print('')
>
> # missing tuple from removed xlog
> server.admin("box.space.test:select{}")
> diff --git a/test/xlog-py/misc.test.py b/test/xlog-py/misc.test.py
> index e39ae1495..8dd2e2516 100644
> --- a/test/xlog-py/misc.test.py
> +++ b/test/xlog-py/misc.test.py
> @@ -11,9 +11,9 @@ server.stop()
>
> data_path = os.path.join(server.vardir, server.name)
>
> -print """
> +print("""
> # xlog file must exist after inserts.
> -"""
> +""")
> filename = str(lsn).zfill(20) + ".xlog"
> wal = os.path.join(data_path, filename)
>
> @@ -21,16 +21,16 @@ server.start()
>
> server.admin("space = box.schema.space.create('tweedledum')")
> if os.access(wal, os.F_OK):
> - print ".xlog exists"
> + print(".xlog exists")
>
> server.admin("index = space:create_index('primary', { type = 'hash' })")
>
> server.stop()
> lsn += 2
>
> -print """
> +print("""
> # a new xlog must be opened after regular termination.
> -"""
> +""")
> filename = str(lsn).zfill(20) + ".xlog"
> server.start()
>
> @@ -39,17 +39,17 @@ wal = os.path.join(data_path, filename)
> server.admin("box.space.tweedledum:insert{3, 'third tuple'}")
>
> if os.access(wal, os.F_OK):
> - print "a new .xlog exists"
> + print("a new .xlog exists")
>
> server.stop()
>
> if os.access(wal, os.F_OK):
> - print ".xlog stays around after sutdown"
> + print(".xlog stays around after sutdown")
> lsn += 1
>
> -print """
> +print("""
> # An xlog file with one record during recovery.
> -"""
> +""")
>
> server.start()
> filename = str(lsn).zfill(20) + ".xlog"
> @@ -63,7 +63,7 @@ if pid > 0:
> server.stop()
>
> if os.access(wal, os.F_OK):
> - print ".xlog exists after kill -9"
> + print(".xlog exists after kill -9")
> # Remove last byte from xlog
> f = open(wal, "a")
> size = f.tell()
> @@ -73,7 +73,7 @@ if os.access(wal, os.F_OK):
> server.start()
>
> if os.access(wal, os.F_OK):
> - print "corrupt .xlog exists after start"
> + print("corrupt .xlog exists after start")
> server.stop()
> lsn += 1
>
> @@ -98,4 +98,4 @@ for f in os.listdir(data_path):
> server.start()
> lsn = int(yaml.safe_load(admin("box.info.lsn", silent=True))[0])
> if lsn == orig_lsn:
> - print ".snap.inprogress is ignored"
> + print(".snap.inprogress is ignored")
> diff --git a/test/xlog-py/missing.test.py b/test/xlog-py/missing.test.py
> index df35dc6d7..f30c331e5 100644
> --- a/test/xlog-py/missing.test.py
> +++ b/test/xlog-py/missing.test.py
> @@ -34,11 +34,11 @@ os.unlink(wal)
> # this may lead to infinite recursion at start
> server.start()
> line="ignoring a gap in LSN"
> -print "check log line for '%s'" % line
> -print
> +print("check log line for '%s'" % line)
> +print('')
> if server.logfile_pos.seek_once(line) >= 0:
> - print "'%s' exists in server log" % line
> -print
> + print("'%s' exists in server log" % line)
> +print('')
>
> # missing tuples from removed xlog
> server.admin("box.space.test:select{}")
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Tarantool-patches] [PATCH v1] Support to run tests with Python 3
2020-12-01 17:03 ` Leonid Vasiliev
@ 2020-12-06 17:43 ` Sergey Bronnikov
2020-12-08 18:04 ` Alexander Turenko
0 siblings, 1 reply; 4+ messages in thread
From: Sergey Bronnikov @ 2020-12-06 17:43 UTC (permalink / raw)
To: Leonid Vasiliev, tarantool-patches, alexander.turenko
Hello,
thanks for review!
Leonid, please see my comments below. Updated patches pushed to a branch
and I'll sent new patch series.
On 01.12.2020 20:03, Leonid Vasiliev wrote:
> Hi! Thank you for the patch.
> See some comments bellow:
>
> 1) According to
> https://github.com/tarantool/tarantool/wiki/Code-review-procedure#commit-message
> the title of commit message might look like:"tests:..."
Added prefix in a new version of patch
>
> 2) According to PEP8, mixing using double quotes and quotes in a project
> looks inconsistent (one must be selected). I understand that this is not
> the purpose of your patch, but it can be cleaned up as well.
Added changes to a new version of patch that makes using quotes consistent.
>
> 3) In addition to the previous one, I suggest choosing one of the
> "format" or "%".
Added changes to a new version of patch that switch using "%" to using
"format".
>
> On 21.11.2020 12:44, sergeyb@tarantool.org wrote:
>> From: Sergey Bronnikov <sergeyb@tarantool.org>
>>
>> In a Python 3 'print' becomes a function, see [1]. Patch makes 'print'
>> in a regression tests written in Python compatible with Python 3.
>>
>> 1. https://docs.python.org/3/whatsnew/3.0.html#print-is-a-function
>>
>> Closes #5538
>> ---
>
> 4) Add link to branch.
ligurio/gh-5538-support-python3
Will do in a new patch series.
>
>> Gitlab CI: https://gitlab.com/tarantool/tarantool/-/pipelines/219268877
>> GH issue: https://github.com/tarantool/tarantool/issues/5538
>>
>> test/box-py/bad_trigger.test.py | 14 +--
>> test/box-py/call.test.py | 20 +--
>> test/box-py/iproto.test.py | 148 ++++++++++++-----------
>> test/box-py/snapshot.test.py | 16 +--
>> test/replication-py/cluster.test.py | 113 ++++++++---------
>> test/replication-py/conflict.test.py | 8 +-
>> test/replication-py/init_storage.test.py | 26 ++--
>> test/replication-py/multi.test.py | 66 +++++-----
>> test/replication-py/swap.test.py | 20 +--
>> test/xlog-py/dup_key.test.py | 12 +-
>> test/xlog-py/empty.test.py | 2 +-
>> test/xlog-py/lsn_gap.test.py | 8 +-
>> test/xlog-py/misc.test.py | 24 ++--
>> test/xlog-py/missing.test.py | 8 +-
>> 14 files changed, 245 insertions(+), 240 deletions(-)
>>
>> diff --git a/test/box-py/bad_trigger.test.py
>> b/test/box-py/bad_trigger.test.py
>> index 7d200b921..d85b9055f 100644
>> --- a/test/box-py/bad_trigger.test.py
>> +++ b/test/box-py/bad_trigger.test.py
>> @@ -6,11 +6,11 @@ from tarantool.const import IPROTO_GREETING_SIZE,
>> IPROTO_CODE, IPROTO_ERROR, \
>> import socket
>> import msgpack
>> -print """
>> +print("""
>> #
>> # if on_connect() trigger raises an exception, the connection is
>> dropped
>> #
>> - """
>> + """)
>> # silence possible error of strict mode
>> server.admin("nosuchfunction = nil")
>> @@ -24,12 +24,12 @@ conn.connect()
>> s = conn.socket
>> # Read greeting
>> -print 'greeting: ', len(s.recv(IPROTO_GREETING_SIZE)) ==
>> IPROTO_GREETING_SIZE
>> +print('greeting: {}'.format(len(s.recv(IPROTO_GREETING_SIZE)) ==
>> IPROTO_GREETING_SIZE))
>> # Read error packet
>> IPROTO_FIXHEADER_SIZE = 5
>> fixheader = s.recv(IPROTO_FIXHEADER_SIZE)
>> -print 'fixheader: ', len(fixheader) == IPROTO_FIXHEADER_SIZE
>> +print('fixheader: {}'.format(len(fixheader) == IPROTO_FIXHEADER_SIZE))
>> unpacker.feed(fixheader)
>> packet_len = unpacker.unpack()
>> packet = s.recv(packet_len)
>> @@ -38,9 +38,9 @@ unpacker.feed(packet)
>> # Parse packet
>> header = unpacker.unpack()
>> body = unpacker.unpack()
>> -print 'error code', (header[IPROTO_CODE] & (REQUEST_TYPE_ERROR - 1))
>> -print 'error message: ', body[IPROTO_ERROR]
>> -print 'eof:', len(s.recv(1024)) == 0
>> +print('error code {}'.format((header[IPROTO_CODE] &
>> (REQUEST_TYPE_ERROR - 1))))
>> +print('error message: {}'.format(body[IPROTO_ERROR]))
>> +print('eof: {}'.format(len(s.recv(1024)) == 0))
>> s.close()
>> server.admin("box.session.on_connect(nil, f1)")
>> diff --git a/test/box-py/call.test.py b/test/box-py/call.test.py
>> index 974ba0cac..133c3fcfd 100644
>> --- a/test/box-py/call.test.py
>> +++ b/test/box-py/call.test.py
>> @@ -21,11 +21,11 @@ call("f1")
>> # IPROTO required!
>> call("box.error", 33333, 'Hey!')
>> -print """
>> +print("""
>> # A test case for Bug#103491
>> # server CALL processing bug with name path longer than two
>> # https://bugs.launchpad.net/tarantool/+bug/1034912
>> -"""
>> +""")
>> admin("f = function() return 'OK' end")
>> admin("test = {}")
>> admin("test.f = f")
>> @@ -35,11 +35,11 @@ call("f")
>> call("test.f")
>> call("test.test.f")
>> -print """
>> +print("""
>> # Test for Bug #955226
>> # Lua Numbers are passed back wrongly as strings
>> #
>> -"""
>> +""")
>> admin("function foo() return 1, 2, '1', '2' end")
>> call("foo")
>> @@ -136,14 +136,14 @@ admin("index = space:create_index('primary',
>> { type = 'tree' })")
>> def lua_eval(name, *args):
>> - print 'eval (%s)(%s)' % (name, ','.join([ str(arg) for arg in
>> args]))
>> - print '---'
>> - print iproto.py_con.eval(name, args)
>> + print('eval (%s)(%s)' % (name, ','.join([ str(arg) for arg in
>> args])))
>> + print('---')
>> + print(iproto.py_con.eval(name, args))
>> def lua_call(name, *args):
>> - print 'call %s(%s)' % (name, ','.join([ str(arg) for arg in args]))
>> - print '---'
>> - print iproto.py_con.call(name, args)
>> + print('call %s(%s)' % (name, ','.join([ str(arg) for arg in
>> args])))
>> + print('---')
>> + print(iproto.py_con.call(name, args))
>> def test(expr, *args):
>> lua_eval('return ' + expr, *args)
>> diff --git a/test/box-py/iproto.test.py b/test/box-py/iproto.test.py
>> index cdd1a71c5..cc1db9a09 100644
>> --- a/test/box-py/iproto.test.py
>> +++ b/test/box-py/iproto.test.py
>> @@ -1,3 +1,5 @@
>> +from __future__ import print_function
>> +
>> import os
>> import sys
>> import struct
>> @@ -11,25 +13,25 @@ from lib.tarantool_connection import
>> TarantoolConnection
>> admin("box.schema.user.grant('guest', 'read,write,execute',
>> 'universe')")
>> -print """
>> +print("""
>> #
>> # iproto packages test
>> #
>> -"""
>> +""")
>> # opeing new connection to tarantool/box
>> conn = TarantoolConnection(server.iproto.host, server.iproto.port)
>> conn.connect()
>> s = conn.socket
>> -print """
>> +print("""
>> # Test bug #899343 (server assertion failure on incorrect packet)
>> -"""
>> -print "# send the package with invalid length"
>> +""")
>> +print("# send the package with invalid length")
>> invalid_request = struct.pack('<LLL', 1, 4294967290, 1)
>> -print s.send(invalid_request)
>> -print "# check that is server alive"
>> -print iproto.py_con.ping() > 0
>> +print(s.send(invalid_request))
>> +print("# check that is server alive")
>> +print(iproto.py_con.ping() > 0)
>> # closing connection
>> s.close()
>> @@ -50,7 +52,7 @@ def test(header, body):
>> # Connect and authenticate
>> c = Connection('localhost', server.iproto.port)
>> c.connect()
>> - print 'query', repr_dict(header), repr_dict(body)
>> + print('query', repr_dict(header), repr_dict(body))
>> header = msgpack.dumps(header)
>> body = msgpack.dumps(body)
>> query = msgpack.dumps(len(header) + len(body)) + header + body
>> @@ -59,36 +61,36 @@ def test(header, body):
>> try:
>> s.send(query)
>> except OSError as e:
>> - print ' => ', 'Failed to send request'
>> + print(' => ', 'Failed to send request')
>> c.close()
>> - print iproto.py_con.ping() > 0
>> + print(iproto.py_con.ping() > 0)
>> -print """
>> +print("""
>> # Test gh-206 "Segfault if sending IPROTO package without `KEY`
>> field"
>> -"""
>> +""")
>> -print "IPROTO_SELECT"
>> +print("IPROTO_SELECT")
>> test({ IPROTO_CODE : REQUEST_TYPE_SELECT }, { IPROTO_SPACE_ID: 280 })
>> -print "\n"
>> +print("\n")
>> -print "IPROTO_DELETE"
>> +print("IPROTO_DELETE")
>> test({ IPROTO_CODE : REQUEST_TYPE_DELETE }, { IPROTO_SPACE_ID: 280 })
>> -print "\n"
>> +print("\n")
>> -print "IPROTO_UPDATE"
>> +print("IPROTO_UPDATE")
>> test({ IPROTO_CODE : REQUEST_TYPE_UPDATE }, { IPROTO_SPACE_ID: 280 })
>> test({ IPROTO_CODE : REQUEST_TYPE_UPDATE },
>> { IPROTO_SPACE_ID: 280, IPROTO_KEY: (1, )})
>> -print "\n"
>> +print("\n")
>> -print "IPROTO_REPLACE"
>> +print("IPROTO_REPLACE")
>> test({ IPROTO_CODE : REQUEST_TYPE_REPLACE }, { IPROTO_SPACE_ID: 280 })
>> -print "\n"
>> +print("\n")
>> -print "IPROTO_CALL"
>> +print("IPROTO_CALL")
>> test({ IPROTO_CODE : REQUEST_TYPE_CALL }, {})
>> test({ IPROTO_CODE : REQUEST_TYPE_CALL }, { IPROTO_KEY:
>> ('procname', )})
>> -print "\n"
>> +print("\n")
>> # gh-434 Tarantool crashes on multiple iproto requests with WAL
>> enabled
>> admin("box.cfg.wal_mode")
>> @@ -104,11 +106,11 @@ s = c._socket
>> try:
>> s.send(bytes(request1) + bytes(request2))
>> except OSError as e:
>> - print ' => ', 'Failed to send request'
>> + print(' => ', 'Failed to send request')
>> response1 = Response(c, c._read_response())
>> response2 = Response(c, c._read_response())
>> -print response1.__str__()
>> -print response2.__str__()
>> +print(response1.__str__())
>> +print(response2.__str__())
>> request1 = RequestInsert(c, 567, [3, "occama"])
>> request2 = RequestSelect(c, 567, 0, [1], 0, 1, 0)
>> @@ -116,11 +118,11 @@ s = c._socket
>> try:
>> s.send(bytes(request1) + bytes(request2))
>> except OSError as e:
>> - print ' => ', 'Failed to send request'
>> + print(' => ', 'Failed to send request')
>> response1 = Response(c, c._read_response())
>> response2 = Response(c, c._read_response())
>> -print response1.__str__()
>> -print response2.__str__()
>> +print(response1.__str__())
>> +print(response2.__str__())
>> request1 = RequestSelect(c, 567, 0, [2], 0, 1, 0)
>> request2 = RequestInsert(c, 567, [4, "ockham"])
>> @@ -128,11 +130,11 @@ s = c._socket
>> try:
>> s.send(bytes(request1) + bytes(request2))
>> except OSError as e:
>> - print ' => ', 'Failed to send request'
>> + print(' => ', 'Failed to send request')
>> response1 = Response(c, c._read_response())
>> response2 = Response(c, c._read_response())
>> -print response1.__str__()
>> -print response2.__str__()
>> +print(response1.__str__())
>> +print(response2.__str__())
>> request1 = RequestSelect(c, 567, 0, [1], 0, 1, 0)
>> request2 = RequestSelect(c, 567, 0, [2], 0, 1, 0)
>> @@ -140,11 +142,11 @@ s = c._socket
>> try:
>> s.send(bytes(request1) + bytes(request2))
>> except OSError as e:
>> - print ' => ', 'Failed to send request'
>> + print(' => ', 'Failed to send request')
>> response1 = Response(c, c._read_response())
>> response2 = Response(c, c._read_response())
>> -print response1.__str__()
>> -print response2.__str__()
>> +print(response1.__str__())
>> +print(response2.__str__())
>> c.close()
>> @@ -192,27 +194,27 @@ TESTS = [
>> for test in TESTS:
>> it = iter(test)
>> size = next(it)
>> - print 'STR', size
>> - print '--'
>> + print('STR', size)
>> + print('--')
>> for fmt in it:
>> - print '0x' + fmt.encode('hex'), '=>',
>> + print('0x' + fmt.encode('hex'), '=>', end=" ")
>
> 5) What for the "end" is needed here? (and in the same changes below).
"end" used in a Python 3 to avoid printing newline at the of string.
See [1].
>
>> field = '*' * size
>> c._send_request(RawInsert(c, space_id, "\x91" + fmt + field))
>> tuple = space.select(field)[0]
>> - print len(tuple[0])== size and 'ok' or 'fail',
>> + print(len(tuple[0])== size and 'ok' or 'fail', end=" ")
>> it2 = iter(test)
>> next(it2)
>> for fmt2 in it2:
>> tuple = c._send_request(RawSelect(c, space_id,
>> "\x91" + fmt2 + field))[0]
>> - print len(tuple[0]) == size and 'ok' or 'fail',
>> + print(len(tuple[0]) == size and 'ok' or 'fail', end=" ")
>> tuple = space.delete(field)[0]
>> - print len(tuple[0]) == size and 'ok' or 'fail',
>> - print
>> - print
>> + print(len(tuple[0]) == size and 'ok' or 'fail', end="")
>> + print()
>> + print()
>
> 6) What for this `print()` needed? (and in the same changes below).
I don't know why you asked me because I'm not an author of these changes.
But I'll try to answer. Python tests are based on a reference output: on
every run output produced by a test
compared to reference output and test become passed when both output are
equal. Perhaps empty print()'s
used as a delimeter for testscases in produced output, so the main
purpose is a reader's convenience.
I added a separate patch that removes empty print's(), let's evaluate it
and decide should we merge it or not.
>> -print 'Test of schema_id in iproto.'
>> +print('Test of schema_id in iproto.')
>> c = Connection('localhost', server.iproto.port)
>> c.connect()
>> s = c._socket
>> @@ -235,7 +237,7 @@ def receive_response():
>> resp_header = unpacker.unpack()
>> resp_body = unpacker.unpack()
>> except OSError as e:
>> - print ' => ', 'Failed to recv response'
>> + print(' => ', 'Failed to recv response')
>> res = {}
>> res['header'] = resp_header
>> res['body'] = resp_body
>> @@ -249,7 +251,7 @@ def test_request(req_header, req_body):
>> try:
>> s.send(query)
>> except OSError as e:
>> - print ' => ', 'Failed to send request'
>> + print(' => ', 'Failed to send request')
>> return receive_response()
>> header = { IPROTO_CODE : REQUEST_TYPE_SELECT}
>> @@ -260,31 +262,31 @@ body = { IPROTO_SPACE_ID: space_id,
>> IPROTO_OFFSET: 0,
>> IPROTO_LIMIT: 1 }
>> resp = test_request(header, body)
>> -print 'Normal connect done w/o errors:', resp['header'][0] == 0
>> -print 'Got schema_id:', resp['header'][5] > 0
>> +print('Normal connect done w/o errors:', resp['header'][0] == 0)
>> +print('Got schema_id:', resp['header'][5] > 0)
>> schema_id = resp['header'][5]
>> header = { IPROTO_CODE : REQUEST_TYPE_SELECT, 5 : 0 }
>> resp = test_request(header, body)
>> -print 'Zero-schema_id connect done w/o errors:', resp['header'][0] == 0
>> -print 'Same schema_id:', resp['header'][5] == schema_id
>> +print('Zero-schema_id connect done w/o errors:', resp['header'][0]
>> == 0)
>> +print('Same schema_id:', resp['header'][5] == schema_id)
>> header = { IPROTO_CODE : REQUEST_TYPE_SELECT, 5 : schema_id }
>> resp = test_request(header, body)
>> -print 'Normal connect done w/o errors:', resp['header'][0] == 0
>> -print 'Same schema_id:', resp['header'][5] == schema_id
>> +print('Normal connect done w/o errors:', resp['header'][0] == 0)
>> +print('Same schema_id:', resp['header'][5] == schema_id)
>> header = { IPROTO_CODE : REQUEST_TYPE_SELECT, 5 : schema_id + 1 }
>> resp = test_request(header, body)
>> -print 'Wrong schema_id leads to error:', resp['header'][0] != 0
>> -print 'Same schema_id:', resp['header'][5] == schema_id
>> +print('Wrong schema_id leads to error:', resp['header'][0] != 0)
>> +print('Same schema_id:', resp['header'][5] == schema_id)
>> admin("space2 = box.schema.create_space('test2')")
>> header = { IPROTO_CODE : REQUEST_TYPE_SELECT, 5 : schema_id }
>> resp = test_request(header, body)
>> -print 'Schema changed -> error:', resp['header'][0] != 0
>> -print 'Got another schema_id:', resp['header'][5] != schema_id
>> +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.
>> @@ -298,14 +300,14 @@ if resp['header'][IPROTO_SYNC] == 2334:
>> while i < 3:
>> resp = receive_response()
>> if resp['header'][IPROTO_SYNC] != 2334:
>> - print 'Bad sync on response with number ', i
>> + print('Bad sync on response with number ', i)
>> break
>> if resp['header'][IPROTO_CODE] == REQUEST_TYPE_OK:
>> i += 1
>> else:
>> - print 'Sync ok'
>> + print('Sync ok')
>> else:
>> - print 'Bad first sync'
>> + print('Bad first sync')
>> #
>> # Try incorrect JOIN. SYNC must be also returned.
>> @@ -344,10 +346,10 @@ admin("box.schema.user.revoke('guest',
>> 'read,write,execute', 'universe')")
>> # gh-272 if the packet was incorrect, respond with an error code
>> # gh-1654 do not close connnection on invalid request
>> #
>> -print """
>> +print("""
>> # Test bugs gh-272, gh-1654 if the packet was incorrect, respond with
>> # an error code and do not close connection
>> -"""
>> +""")
>> c = Connection('localhost', server.iproto.port)
>> c.connect()
>> @@ -355,15 +357,15 @@ s = c._socket
>> header = { "hello": "world"}
>> body = { "bug": 272 }
>> resp = test_request(header, body)
>> -print 'sync=%d, %s' % (resp['header'][IPROTO_SYNC],
>> resp['body'].get(IPROTO_ERROR))
>> +print('sync=%d, %s' % (resp['header'][IPROTO_SYNC],
>> resp['body'].get(IPROTO_ERROR)))
>> header = { IPROTO_CODE : REQUEST_TYPE_SELECT }
>> header[IPROTO_SYNC] = 1234
>> resp = test_request(header, body)
>> -print 'sync=%d, %s' % (resp['header'][IPROTO_SYNC],
>> resp['body'].get(IPROTO_ERROR))
>> +print('sync=%d, %s' % (resp['header'][IPROTO_SYNC],
>> resp['body'].get(IPROTO_ERROR)))
>> header[IPROTO_SYNC] = 5678
>> body = { IPROTO_SPACE_ID: 304, IPROTO_KEY: [], IPROTO_LIMIT: 1 }
>> resp = test_request(header, body)
>> -print 'sync=%d, %s' % (resp['header'][IPROTO_SYNC],
>> resp['body'].get(IPROTO_ERROR))
>> +print('sync=%d, %s' % (resp['header'][IPROTO_SYNC],
>> resp['body'].get(IPROTO_ERROR)))
>> c.close()
>> @@ -379,32 +381,32 @@ request = RequestInsert(c, 568, [1, 0, 0, 0])
>> try:
>> s.send(bytes(request))
>> except OSError as e:
>> - print ' => ', 'Failed to send request'
>> + print(' => ', 'Failed to send request')
>> response = Response(c, c._read_response())
>> -print response.__str__()
>> +print(response.__str__())
>> request = RequestUpdate(c, 568, 0, [1], [['+', 2, 1], ['-', 3, 1]])
>> try:
>> s.send(bytes(request))
>> except OSError as e:
>> - print ' => ', 'Failed to send request'
>> + print(' => ', 'Failed to send request')
>> response = Response(c, c._read_response())
>> -print response.__str__()
>> +print(response.__str__())
>> request = RequestUpsert(c, 568, 0, [1, 0, 0, 0], [['+', 2, 1],
>> ['-', 3, 1]])
>> try:
>> s.send(bytes(request))
>> except OSError as e:
>> - print ' => ', 'Failed to send request'
>> + print(' => ', 'Failed to send request')
>> response = Response(c, c._read_response())
>> request = RequestSelect(c, 568, 0, [1], 0, 1, 0)
>> try:
>> s.send(bytes(request))
>> except OSError as e:
>> - print ' => ', 'Failed to send request'
>> + print(' => ', 'Failed to send request')
>> response = Response(c, c._read_response())
>> -print response.__str__()
>> +print(response.__str__())
>> c.close()
>> @@ -421,8 +423,8 @@ s = c._socket
>> header = { IPROTO_CODE: REQUEST_TYPE_CALL, IPROTO_SYNC: 100 }
>> body = { IPROTO_FUNCTION_NAME: 'kek' }
>> resp = test_request(header, body)
>> -print "Sync: ", resp['header'][IPROTO_SYNC]
>> -print "Retcode: ", resp['body'][IPROTO_DATA]
>> +print("Sync: ", resp['header'][IPROTO_SYNC])
>> +print("Retcode: ", resp['body'][IPROTO_DATA])
>> c.close()
>> diff --git a/test/box-py/snapshot.test.py
>> b/test/box-py/snapshot.test.py
>> index 2bfb8f621..dc5f3ee08 100644
>> --- a/test/box-py/snapshot.test.py
>> +++ b/test/box-py/snapshot.test.py
>> @@ -9,13 +9,13 @@ sys.stdout.push_filter(server.vardir, "<dir>")
>> admin("space = box.schema.space.create('tweedledum')")
>> admin("index = space:create_index('primary', { type = 'hash' })")
>> -print """#
>> +print("""#
>> # A test case for: http://bugs.launchpad.net/bugs/686411
>> # Check that 'box.snapshot()' does not overwrite a snapshot
>> # file that already exists. Verify also that any other
>> # error that happens when saving snapshot is propagated
>> # to the caller.
>> -"""
>> +""")
>> admin("space:insert{1, 'first tuple'}")
>> admin("box.snapshot()")
>> #
>> @@ -38,14 +38,14 @@ os.rmdir(snapshot)
>> admin("space:delete{1}")
>> admin("space:delete{2}")
>> -print """#
>> +print("""#
>> # A test case for http://bugs.launchpad.net/bugs/727174
>> # "tarantool_box crashes when saving snapshot on SIGUSR1"
>> -#"""
>> +#""")
>> -print """
>> +print("""
>> # Increment the lsn number, to make sure there is no such snapshot yet
>> -#"""
>> +#""")
>> admin("space:insert{1, 'Test tuple'}")
>> @@ -65,9 +65,9 @@ while not os.access(snapshot, os.F_OK) and
>> iteration < MAX_ITERATIONS:
>> iteration = iteration + 1
>> if iteration == 0 or iteration >= MAX_ITERATIONS:
>> - print "Snapshot is missing."
>> + print("Snapshot is missing.")
>> else:
>> - print "Snapshot exists."
>> + print("Snapshot exists.")
>> admin("space:drop()")
>> diff --git a/test/replication-py/cluster.test.py
>> b/test/replication-py/cluster.test.py
>> index 088ca9c34..6a83611d7 100644
>> --- a/test/replication-py/cluster.test.py
>> +++ b/test/replication-py/cluster.test.py
>> @@ -12,14 +12,14 @@ try:
>> cluster_uuid =
>> yaml.safe_load(server.admin("box.space._schema:get('cluster')",
>> silent = True))[0][1]
>> uuid.UUID('{' + cluster_uuid + '}')
>> - print 'ok - cluster uuid'
>> + print('ok - cluster uuid')
>> except Exception as e:
>> - print 'not ok - invalid cluster uuid', e
>> + print('not ok - invalid cluster uuid', e)
>
> 7) If I understand correctly, this will not look as previously in
> python2. (Possibly, the `from __future__ import print_function` is
> needed.)
Yep.
>
>> server.iproto.reconnect() # re-connect with new permissions
>> -print '-------------------------------------------------------------'
>> -print ' gh-696: Check global READ permissions for replication'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print(' gh-696: Check global READ permissions for replication')
>> +print('-------------------------------------------------------------')
>> # Generate replica cluster UUID
>> @@ -27,23 +27,26 @@ replica_uuid = str(uuid.uuid4())
>> ## Universal read permission is required to perform JOIN/SUBSCRIBE
>> rows = list(server.iproto.py_con.join(replica_uuid))
>> -print len(rows) == 1 and rows[0].return_message.find('Read access')
>> >= 0 and \
>> - 'ok' or 'not ok', '-', 'join without read permissions on universe'
>> +status = len(rows) == 1 and rows[0].return_message.find('Read
>> access') >= 0 and \
>> + 'ok' or 'not ok'
>> +print('{} - join without read permissions on universe'.format(status))
>> rows = list(server.iproto.py_con.subscribe(cluster_uuid,
>> replica_uuid))
>> -print len(rows) == 1 and rows[0].return_message.find('Read access')
>> >= 0 and \
>> - 'ok' or 'not ok', '-', 'subscribe without read permissions on
>> universe'
>> +status = len(rows) == 1 and rows[0].return_message.find('Read
>> access') >= 0 and \
>> + 'ok' or 'not ok'
>> +print('{} - subscribe without read permissions on
>> universe'.format(status))
>> ## Write permission to space `_cluster` is required to perform JOIN
>> server.admin("box.schema.user.grant('guest', 'read', 'universe')")
>> server.iproto.reconnect() # re-connect with new permissions
>> rows = list(server.iproto.py_con.join(replica_uuid))
>> -print len(rows) == 1 and rows[0].return_message.find('Write access')
>> >= 0 and \
>> - 'ok' or 'not ok', '-', 'join without write permissions to _cluster'
>> +status = len(rows) == 1 and rows[0].return_message.find('Write
>> access') >= 0 and \
>> + 'ok' or 'not ok'
>> +print('{} - join without write permissions to _cluster'.format(status))
>> def check_join(msg):
>> ok = True
>> for resp in server.iproto.py_con.join(replica_uuid):
>> if resp._return_code != 0:
>> - print 'not ok', '-', msg, resp.return_message
>> + print('not ok - {} {}'.format(msg, resp.return_message))
>> ok = False
>> server.iproto.reconnect() # the only way to stop JOIN
>> @@ -51,10 +54,10 @@ def check_join(msg):
>> return
>> tuples =
>> server.iproto.py_con.space('_cluster').select(replica_uuid, index = 1)
>> if len(tuples) == 0:
>> - print 'not ok', '-', msg, 'missing entry in _cluster'
>> + print('not ok - {} missing entry in _cluster'.format(msg))
>> return
>> server_id = tuples[0][0]
>> - print 'ok', '-', msg
>> + print('ok - {}'.format(msg))
>> return server_id
>> ## JOIN with permissions
>> @@ -71,9 +74,9 @@ server.iproto.reconnect() # re-connect with new
>> permissions
>> server_id = check_join('join with granted role')
>> server.iproto.py_con.space('_cluster').delete(server_id)
>> -print '-------------------------------------------------------------'
>> -print 'gh-434: Assertion if replace _cluster tuple for local server'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print('gh-434: Assertion if replace _cluster tuple for local server')
>> +print('-------------------------------------------------------------')
>> master_uuid = server.get_param('uuid')
>> sys.stdout.push_filter(master_uuid, '<master uuid>')
>> @@ -87,9 +90,9 @@ server.admin("box.space._cluster:replace{1,
>> require('uuid').str()}")
>> # Update of tail is OK
>> server.admin("box.space._cluster:update(1, {{'=', 3, 'test'}})")
>> -print '-------------------------------------------------------------'
>> -print 'gh-1140: Assertion if replace _cluster tuple for remote server'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print('gh-1140: Assertion if replace _cluster tuple for remote server')
>> +print('-------------------------------------------------------------')
>> # Test that insert is OK
>> new_uuid = '0d5bd431-7f3e-4695-a5c2-82de0a9cbc95'
>> @@ -112,9 +115,9 @@ server.admin("box.info.vclock[5] == nil")
>> server.stop()
>> server.deploy()
>> -print '-------------------------------------------------------------'
>> -print 'Start a new replica and check box.info on the start'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print('Start a new replica and check box.info on the start')
>> +print('-------------------------------------------------------------')
>> # master server
>> master = server
>> master_id = master.get_param('id')
>> @@ -135,45 +138,45 @@ replica.admin('not box.info.ro')
>> replica.admin('box.info.lsn == 0')
>> replica.admin('box.info.vclock[%d] == nil' % replica_id)
>> -print '-------------------------------------------------------------'
>> -print 'Modify data to bump LSN and check box.info'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print('Modify data to bump LSN and check box.info')
>> +print('-------------------------------------------------------------')
>> replica.admin('box.space._schema:insert{"test", 48}')
>> replica.admin('box.info.lsn == 1')
>> replica.admin('box.info.vclock[%d] == 1' % replica_id)
>> -print '-------------------------------------------------------------'
>> -print 'Connect master to replica'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print('Connect master to replica')
>> +print('-------------------------------------------------------------')
>> replication_source = yaml.safe_load(replica.admin('box.cfg.listen',
>> silent = True))[0]
>> sys.stdout.push_filter(replication_source, '<replication_source>')
>> master.admin("box.cfg{ replication_source = '%s' }" %
>> replication_source)
>> master.wait_lsn(replica_id, replica.get_lsn(replica_id))
>> -print '-------------------------------------------------------------'
>> -print 'Disconnect replica from master'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print('Disconnect replica from master')
>> +print('-------------------------------------------------------------')
>> replica.admin('box.cfg { replication_source = "" }')
>> -print '-------------------------------------------------------------'
>> -print 'Unregister replica'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print('Unregister replica')
>> +print('-------------------------------------------------------------')
>> master.admin('box.space._cluster:delete{%d} ~= nil' % replica_id)
>> # gh-1219: LSN must not be removed from vclock on unregister
>> master.admin('box.info.vclock[%d] == 1' % replica_id)
>> -print '-------------------------------------------------------------'
>> -print 'Modify data to bump LSN on replica'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print('Modify data to bump LSN on replica')
>> +print('-------------------------------------------------------------')
>> replica.admin('box.space._schema:insert{"tost", 49}')
>> replica.admin('box.info.lsn == 2')
>> replica.admin('box.info.vclock[%d] == 2' % replica_id)
>> -print '-------------------------------------------------------------'
>> -print 'Master must not crash then receives orphan rows from replica'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print('Master must not crash then receives orphan rows from replica')
>> +print('-------------------------------------------------------------')
>> replication_source =
>> yaml.safe_load(replica.admin('box.cfg.listen', silent = True))[0]
>> sys.stdout.push_filter(replication_source, '<replication>')
>> @@ -186,9 +189,9 @@ master.admin("box.cfg{ replication = '' }")
>> replica.stop()
>> replica.cleanup()
>> -print '-------------------------------------------------------------'
>> -print 'Start a new replica and check that server_id, LSN is re-used'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print('Start a new replica and check that server_id, LSN is re-used')
>> +print('-------------------------------------------------------------')
>> #
>> # gh-1219: Proper removal of servers with non-zero LSN from _cluster
>> @@ -216,9 +219,9 @@ replica.stop()
>> replica.cleanup()
>> master.admin('box.space._cluster:delete{%d} ~= nil' % replica_id)
>> -print '-------------------------------------------------------------'
>> -print 'JOIN replica to read-only master'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print('JOIN replica to read-only master')
>> +print('-------------------------------------------------------------')
>> # master server
>> master = server
>> @@ -235,13 +238,13 @@ try:
>> except Exception as e:
>> line = "ER_READONLY"
>> if failed.logfile_pos.seek_once(line) >= 0:
>> - print "'%s' exists in server log" % line
>> + print("'%s' exists in server log" % line)
>> master.admin('box.cfg { read_only = false }')
>> -print '-------------------------------------------------------------'
>> -print 'JOIN replica with different replica set UUID'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print('JOIN replica with different replica set UUID')
>> +print('-------------------------------------------------------------')
>> failed = TarantoolServer(server.ini)
>> failed.script = 'replication-py/uuid_mismatch.lua'
>> @@ -254,13 +257,13 @@ try:
>> except Exception as e:
>> line = "ER_REPLICASET_UUID_MISMATCH"
>> if failed.logfile_pos.seek_once(line) >= 0:
>> - print "'%s' exists in server log" % line
>> + print("'%s' exists in server log" % line)
>> failed.cleanup()
>> -print '-------------------------------------------------------------'
>> -print 'Cleanup'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print('Cleanup')
>> +print('-------------------------------------------------------------')
>> # Cleanup
>> sys.stdout.pop_filter()
>> diff --git a/test/replication-py/conflict.test.py
>> b/test/replication-py/conflict.test.py
>> index 1dcd66765..70afdeda4 100644
>> --- a/test/replication-py/conflict.test.py
>> +++ b/test/replication-py/conflict.test.py
>> @@ -16,8 +16,8 @@ replica.rpl_master = master
>> replica.deploy()
>> def parallel_run(cmd1, cmd2, compare):
>> - print 'parallel send: %s' % cmd1
>> - print 'parallel send: %s' % cmd2
>> + print('parallel send: %s' % cmd1)
>> + print('parallel send: %s' % cmd2)
>> master.admin.socket.sendall('%s\n' % cmd1)
>> replica.admin.socket.sendall('%s\n' % cmd2)
>> @@ -37,11 +37,11 @@ def parallel_run(cmd1, cmd2, compare):
>> while True:
>> sleep(0.01)
>> if any(results):
>> - print 'replication state is correct'
>> + print('replication state is correct')
>> break
>> def prepare_cluster():
>> - print 'reset master-master replication'
>> + print('reset master-master replication')
>> master.stop()
>> master.cleanup()
>> master.start()
>> diff --git a/test/replication-py/init_storage.test.py
>> b/test/replication-py/init_storage.test.py
>> index 4be531f8d..c65fca27b 100644
>> --- a/test/replication-py/init_storage.test.py
>> +++ b/test/replication-py/init_storage.test.py
>> @@ -7,9 +7,9 @@ master = server
>> master_id = master.get_param('id')
>> master.admin("box.schema.user.grant('guest', 'replication')")
>> -print '-------------------------------------------------------------'
>> -print 'gh-484: JOIN doesn\'t save data to snapshot with TREE index'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print('gh-484: JOIN doesn\'t save data to snapshot with TREE index')
>> +print('-------------------------------------------------------------')
>> master.admin("space = box.schema.space.create('test', {id = 42})")
>> master.admin("index = space:create_index('primary', { type =
>> 'tree'})")
>> @@ -28,9 +28,9 @@ replica.admin('box.space.test:select()')
>> replica.stop()
>> replica.cleanup()
>> -print '-------------------------------------------------------------'
>> -print 'replica test 2 (must be ok)'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print('replica test 2 (must be ok)')
>> +print('-------------------------------------------------------------')
>> master.restart()
>> master.admin('for k = 10, 19 do box.space[42]:insert{k, k*k*k} end')
>> @@ -51,9 +51,9 @@ for i in range(1, 20):
>> replica.stop()
>> replica.cleanup()
>> -print '-------------------------------------------------------------'
>> -print 'reconnect on JOIN/SUBSCRIBE'
>> -print '-------------------------------------------------------------'
>> +print('-------------------------------------------------------------')
>> +print('reconnect on JOIN/SUBSCRIBE')
>> +print('-------------------------------------------------------------')
>> server.stop()
>> replica = TarantoolServer(server.ini)
>> @@ -62,19 +62,19 @@ replica.vardir = server.vardir
>> #os.path.join(server.vardir, 'replica')
>> replica.rpl_master = master
>> replica.deploy(wait=False)
>> -print 'waiting reconnect on JOIN...'
>> +print('waiting reconnect on JOIN...')
>> server.start()
>> replica.wait_until_started()
>> -print 'ok'
>> +print('ok')
>> replica.stop()
>> server.stop()
>> -print 'waiting reconnect on SUBSCRIBE...'
>> +print('waiting reconnect on SUBSCRIBE...')
>> replica.start(wait=False)
>> server.start()
>> replica.wait_until_started()
>> -print 'ok'
>> +print('ok')
>> replica.stop()
>> replica.cleanup()
>> diff --git a/test/replication-py/multi.test.py
>> b/test/replication-py/multi.test.py
>> index 233802458..21495fa2e 100644
>> --- a/test/replication-py/multi.test.py
>> +++ b/test/replication-py/multi.test.py
>> @@ -14,9 +14,9 @@ master.admin("fiber = require('fiber')")
>> master.admin("box.schema.user.grant('guest', 'replication')")
>> master.admin("box.schema.user.grant('guest', 'execute', 'universe')")
>> -print
>> '----------------------------------------------------------------------'
>> -print 'Bootstrap replicas'
>> -print
>> '----------------------------------------------------------------------'
>> +print('----------------------------------------------------------------------')
>>
>> +print('Bootstrap replicas')
>> +print('----------------------------------------------------------------------')
>>
>> # Start replicas
>> master.id = master.get_param('id')
>> @@ -31,17 +31,17 @@ for i in range(REPLICA_N - 1):
>> # Otherwise can get ACCESS_DENIED error.
>> cluster.append(server)
>> -# Make a list of servers
>> +# Makie a list of servers
>
> 8) I don't understand the change.
>
Reverted.
>> sources = []
>> for server in cluster:
>> sources.append(yaml.safe_load(server.admin('box.cfg.listen', silent =
>> True))[0])
>> server.id = server.get_param('id')
>> -print 'done'
>> +print('done')
>> -print
>> '----------------------------------------------------------------------'
>> -print 'Make a full mesh'
>> -print
>> '----------------------------------------------------------------------'
>> +print('----------------------------------------------------------------------')
>>
>> +print('Make a full mesh')
>> +print('----------------------------------------------------------------------')
>>
>> # Connect each server to each other to make full mesh
>> for server in cluster:
>> @@ -54,55 +54,55 @@ for server in cluster:
>> while #box.info.vclock[...] ~= nil do
>> fiber.sleep(0.01)
>> end;""", server2.id)
>> - print 'server', server.id, "connected"
>> + print('server {} connected'.format(server.id))
>> -print 'done'
>> +print('done')
>> -print
>> '----------------------------------------------------------------------'
>> -print 'Test inserts'
>> -print
>> '----------------------------------------------------------------------'
>> +print('----------------------------------------------------------------------')
>>
>> +print('Test inserts')
>> +print('----------------------------------------------------------------------')
>>
>> -print 'Create a test space'
>> +print('Create a test space')
>> master.admin("_ = box.schema.space.create('test')")
>> master.admin("_ = box.space.test:create_index('primary')")
>> master_lsn = master.get_lsn(master.id)
>> # Wait changes to propagate to replicas
>> for server in cluster:
>> server.wait_lsn(master.id, master_lsn)
>> - print 'server', server.id, 'is ok'
>> -print
>> + print('server {} is ok'.format(server.id))
>> +print('') >
>> -print 'Insert records'
>> +print('Insert records')
>> for i in range(ROW_N):
>> server = cluster[i % REPLICA_N]
>> server.admin("box.space.test:insert{%d, %s}" % (i, server.id),
>> silent = True)
>> -print 'inserted %d records' % ROW_N
>> -print
>> +print('inserted {} records'.format(ROW_N))
>> +print('')
>> -print 'Synchronize'
>> +print('Synchronize')
>> for server1 in cluster:
>> for server2 in cluster:
>> server1.wait_lsn(server2.id, server2.get_lsn(server2.id))
>> - print 'server', server1.id, 'done'
>> -print 'done'
>> -print
>> + print('server {} done'.format(server1.id))
>> +print('done')
>> +print('')
>> -print 'Check data'
>> +print('Check data')
>> for server in cluster:
>> cnt = yaml.safe_load(server.admin("box.space.test:len()",
>> silent = True))[0]
>> - print 'server', server.id, 'is', cnt == ROW_N and 'ok' or 'not ok'
>> -print 'Done'
>> -print
>> + print('server {} is {}'.format(server.id, cnt == ROW_N and 'ok'
>> or 'not ok'))
>> +print('Done')
>> +print('')
>> -print
>> -print
>> '----------------------------------------------------------------------'
>> -print 'Cleanup'
>> -print
>> '----------------------------------------------------------------------'
>> +print('')
>> +print('----------------------------------------------------------------------')
>>
>> +print('Cleanup')
>> +print('----------------------------------------------------------------------')
>>
>> for server in cluster:
>> server.stop()
>> - print 'server', server.id, 'done'
>> -print
>> + print('server {} done'.format(server.id))
>> +print('')
>> master.cleanup()
>> master.deploy()
>> diff --git a/test/replication-py/swap.test.py
>> b/test/replication-py/swap.test.py
>> index 98eeeea6d..a96b5a117 100644
>> --- a/test/replication-py/swap.test.py
>> +++ b/test/replication-py/swap.test.py
>> @@ -15,18 +15,18 @@ engines = ['memtx', 'vinyl']
>> def insert_tuples(_server, begin, end, msg = "tuple"):
>> for engine in engines:
>> for i in range(begin, end):
>> - print 'box.space.%s:insert{%d, "%s %d"}' % (engine, i,
>> msg, i)
>> - print '-'
>> + print('box.space.%s:insert{%d, "%s %d"}' % (engine, i,
>> msg, i))
>> + print('-')
>> space = _server.iproto.py_con.space(engine)
>> - print space.insert((i, '%s %d' % (msg, i)))
>> + print(space.insert((i, '%s %d' % (msg, i))))
>> def select_tuples(_server, begin, end):
>> for engine in engines:
>> for i in range(begin, end):
>> - print 'box.space.%s:select{%d}' % (engine, i)
>> - print '-'
>> + print('box.space.%s:select{%d}' % (engine, i))
>> + print('-')
>> space = _server.iproto.py_con.space(engine)
>> - print space.select(i)
>> + print(space.select(i))
>> # master server
>> master = server
>> @@ -59,14 +59,14 @@ for engine in engines:
>> #host_port = "%s:%s" % master.iproto.uri
>> #m = re.search(r'replica/(.*)/.*', status)
>> #if not m or m.group(1) != host_port:
>> -# print 'invalid box.info.status', status, 'expected host:port',
>> host_port
>> +# print('invalid box.info.status', status, 'expected host:port',
>> host_port)
>
> 9) Maybe just delete this dead code?
Deleted dead code in a separate commit.
>
>> master_id = master.get_param('id')
>> replica_id = replica.get_param('id')
>> id = ID_BEGIN
>> for i in range(REPEAT):
>> - print "test %d iteration" % i
>> + print("test %d iteration" % i)
>> # insert to master
>> insert_tuples(master, id, id + ID_STEP)
>> @@ -82,7 +82,7 @@ for i in range(REPEAT):
>> select_tuples(replica, id, id + ID_STEP)
>> id += ID_STEP
>> - print "swap servers"
>> + print("swap servers")
>> # reconfigure replica to master
>> replica.rpl_master = None
>> print("switch replica to master")
>> @@ -106,7 +106,7 @@ for i in range(REPEAT):
>> select_tuples(master, id, id + ID_STEP)
>> id += ID_STEP
>> - print "rollback servers configuration"
>> + print("rollback servers configuration")
>> # reconfigure replica to master
>> master.rpl_master = None
>> print("switch master to master")
>> diff --git a/test/xlog-py/dup_key.test.py b/test/xlog-py/dup_key.test.py
>> index 7609c9555..0b11c863d 100644
>> --- a/test/xlog-py/dup_key.test.py
>> +++ b/test/xlog-py/dup_key.test.py
>> @@ -26,7 +26,7 @@ server.stop()
>> # Save wal#1
>> if os.access(wal, os.F_OK):
>> - print ".xlog exists"
>> + print(".xlog exists")
>> os.rename(wal, wal_old)
>> # Write wal#2
>> @@ -37,16 +37,16 @@ server.stop()
>> # Restore wal#1
>> if not os.access(wal, os.F_OK):
>> - print ".xlog does not exist"
>> + print(".xlog does not exist")
>> os.rename(wal_old, wal)
>> server.start()
>> line = 'Duplicate key'
>> -print "check log line for '%s'" % line
>> -print
>> +print("check log line for '%s'" % line)
>> +print('')
>> if server.logfile_pos.seek_once(line) >= 0:
>> - print "'%s' exists in server log" % line
>> -print
>> + print("'%s' exists in server log" % line)
>> +print('')
>> server.admin("box.space.test:get{1}")
>> server.admin("box.space.test:get{2}")
>> diff --git a/test/xlog-py/empty.test.py b/test/xlog-py/empty.test.py
>> index d6f89e0fb..f284e2046 100644
>> --- a/test/xlog-py/empty.test.py
>> +++ b/test/xlog-py/empty.test.py
>> @@ -20,7 +20,7 @@ f.close()
>> server.start()
>> server.stop()
>> if os.access(filename, os.F_OK):
>> - print ".xlog exists"
>> + print(".xlog exists")
>> # the server has started but is crippled since it
>> # can't override an existing file
>> server.start()
>> diff --git a/test/xlog-py/lsn_gap.test.py b/test/xlog-py/lsn_gap.test.py
>> index 7a503ff07..d16198756 100644
>> --- a/test/xlog-py/lsn_gap.test.py
>> +++ b/test/xlog-py/lsn_gap.test.py
>> @@ -28,11 +28,11 @@ os.unlink(wal)
>> server.start()
>> line="ignoring a gap in LSN"
>> -print "check log line for '%s'" % line
>> -print
>> +print("check log line for '%s'" % line)
>> +print('')
>> if server.logfile_pos.seek_once(line) >= 0:
>> - print "'%s' exists in server log" % line
>> -print
>> + print("'%s' exists in server log" % line)
>> +print('')
>> # missing tuple from removed xlog
>> server.admin("box.space.test:select{}")
>> diff --git a/test/xlog-py/misc.test.py b/test/xlog-py/misc.test.py
>> index e39ae1495..8dd2e2516 100644
>> --- a/test/xlog-py/misc.test.py
>> +++ b/test/xlog-py/misc.test.py
>> @@ -11,9 +11,9 @@ server.stop()
>> data_path = os.path.join(server.vardir, server.name)
>> -print """
>> +print("""
>> # xlog file must exist after inserts.
>> -"""
>> +""")
>> filename = str(lsn).zfill(20) + ".xlog"
>> wal = os.path.join(data_path, filename)
>> @@ -21,16 +21,16 @@ server.start()
>> server.admin("space = box.schema.space.create('tweedledum')")
>> if os.access(wal, os.F_OK):
>> - print ".xlog exists"
>> + print(".xlog exists")
>> server.admin("index = space:create_index('primary', { type =
>> 'hash' })")
>> server.stop()
>> lsn += 2
>> -print """
>> +print("""
>> # a new xlog must be opened after regular termination.
>> -"""
>> +""")
>> filename = str(lsn).zfill(20) + ".xlog"
>> server.start()
>> @@ -39,17 +39,17 @@ wal = os.path.join(data_path, filename)
>> server.admin("box.space.tweedledum:insert{3, 'third tuple'}")
>> if os.access(wal, os.F_OK):
>> - print "a new .xlog exists"
>> + print("a new .xlog exists")
>> server.stop()
>> if os.access(wal, os.F_OK):
>> - print ".xlog stays around after sutdown"
>> + print(".xlog stays around after sutdown")
>> lsn += 1
>> -print """
>> +print("""
>> # An xlog file with one record during recovery.
>> -"""
>> +""")
>> server.start()
>> filename = str(lsn).zfill(20) + ".xlog"
>> @@ -63,7 +63,7 @@ if pid > 0:
>> server.stop()
>> if os.access(wal, os.F_OK):
>> - print ".xlog exists after kill -9"
>> + print(".xlog exists after kill -9")
>> # Remove last byte from xlog
>> f = open(wal, "a")
>> size = f.tell()
>> @@ -73,7 +73,7 @@ if os.access(wal, os.F_OK):
>> server.start()
>> if os.access(wal, os.F_OK):
>> - print "corrupt .xlog exists after start"
>> + print("corrupt .xlog exists after start")
>> server.stop()
>> lsn += 1
>> @@ -98,4 +98,4 @@ for f in os.listdir(data_path):
>> server.start()
>> lsn = int(yaml.safe_load(admin("box.info.lsn", silent=True))[0])
>> if lsn == orig_lsn:
>> - print ".snap.inprogress is ignored"
>> + print(".snap.inprogress is ignored")
>> diff --git a/test/xlog-py/missing.test.py b/test/xlog-py/missing.test.py
>> index df35dc6d7..f30c331e5 100644
>> --- a/test/xlog-py/missing.test.py
>> +++ b/test/xlog-py/missing.test.py
>> @@ -34,11 +34,11 @@ os.unlink(wal)
>> # this may lead to infinite recursion at start
>> server.start()
>> line="ignoring a gap in LSN"
>> -print "check log line for '%s'" % line
>> -print
>> +print("check log line for '%s'" % line)
>> +print('')
>> if server.logfile_pos.seek_once(line) >= 0:
>> - print "'%s' exists in server log" % line
>> -print
>> + print("'%s' exists in server log" % line)
>> +print('')
>> # missing tuples from removed xlog
>> server.admin("box.space.test:select{}")
>>
1. https://docs.python.org/3/whatsnew/3.0.html#print-is-a-function
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Tarantool-patches] [PATCH v1] Support to run tests with Python 3
2020-12-06 17:43 ` Sergey Bronnikov
@ 2020-12-08 18:04 ` Alexander Turenko
0 siblings, 0 replies; 4+ messages in thread
From: Alexander Turenko @ 2020-12-08 18:04 UTC (permalink / raw)
To: Sergey Bronnikov; +Cc: tarantool-patches
If you want my opinion, I think that the technical changes for support
Python 3 are enough. I don't mind style fixes, though.
> > > - print len(tuple[0]) == size and 'ok' or 'fail',
> > > - print
> > > - print
> > > + print(len(tuple[0]) == size and 'ok' or 'fail', end="")
> > > + print()
> > > + print()
> >
> > 6) What for this `print()` needed? (and in the same changes below).
>
> I don't know why you asked me because I'm not an author of these changes.
>
> But I'll try to answer. <...>
I see, you answered the question, but I would highlight this part of the
discussion.
When you touch some code, you becomes its owner. Any questions like 'how
it supposed to work / how it works' are applicable.
If a developer would legally respond 'it is not my deal' on questions
regarding changed code, we would accumulate tech debts even faster than
now.
Of course, there is a line, where it starts to contradict with a common
sense, but in general a knowledge about the changed code is required to
actually change it.
I find this approach nice. It pushes me to know more and be more
confident about my patches.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-12-08 18:04 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-21 9:44 [Tarantool-patches] [PATCH v1] Support to run tests with Python 3 sergeyb
2020-12-01 17:03 ` Leonid Vasiliev
2020-12-06 17:43 ` Sergey Bronnikov
2020-12-08 18:04 ` Alexander Turenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox