diff --git a/test/box/snapshot.test b/test/box/snapshot.test index a8fb2c2b6bf956e2cc8e7c42e9e546065aeb2a79..a653dbaafd0b7ab3d5b9d1a2e41eade711e54ec8 100644 --- a/test/box/snapshot.test +++ b/test/box/snapshot.test @@ -62,7 +62,8 @@ print """ exec sql "insert into t0 values (1, 'Test tuple')" -info = yaml.load(admin.execute("show info\n"))["info"] +result = exec admin silent "show info" +info = yaml.load(result)["info"] pid = info["pid"] snapshot = str(info["lsn"]).zfill(20) + ".snap" diff --git a/test/box_memcached/cas.result b/test/box_memcached/cas.result index 2466f39426ca2e92b9f435e639d1d7c88847dc42..fbebb9746635106ef5159cfac2b356d116fe7864 100644 --- a/test/box_memcached/cas.result +++ b/test/box_memcached/cas.result @@ -24,24 +24,19 @@ barva2 EXISTS # gets foo and verify identifier exists gets foo - -VALUE foo 0 6 42 -barval -END - # cas success -cas foo 0 0 6 42 +cas foo 0 0 6 <unique_id> barva2 STORED # cas failure (reusing the same key) -cas foo 0 0 6 42 +cas foo 0 0 6 <unique_id> barva2 EXISTS # delete foo delete foo DELETED # cas missing -cas foo 0 0 6 42 +cas foo 0 0 6 <unique_id> barva2 NOT_FOUND # set foo1 @@ -54,18 +49,14 @@ set foo2 0 0 1 STORED # gets foo1 check gets foo1 - VALUE foo1 0 1 44 1 END - # gets foo2 check gets foo2 - VALUE foo2 0 1 45 2 END - # validate foo1 != foo2 pass: foo1_cas != foo2_cas # gets foo from memcached1 - should success diff --git a/test/box_memcached/cas.test b/test/box_memcached/cas.test index 6432b91bf2fe2b690c076595b7b5ac2cfa2093dd..515414c3ccf7df19158bebd7a5eaad2c8678b8af 100644 --- a/test/box_memcached/cas.test +++ b/test/box_memcached/cas.test @@ -1,4 +1,5 @@ # encoding: tarantool +import sys from lib.memcached_connection import MemcachedConnection exec memcached "cas bad blah 0 0 0\r\n" @@ -19,20 +20,27 @@ print """# cas fail """ exec memcached "cas foo 0 0 6 123\r\nbarva2\r\n" print """# gets foo and verify identifier exists """ -result = server.memcached.execute("gets foo\r\n", silent=False) -identifier = int(result.split()[4]) +sys.stdout.write("gets foo\r\n") +result = exec memcached silent "gets foo\r\n" +unique_id = int(result.split()[4]) print """# cas success """ -exec memcached "cas foo 0 0 6 %d\r\nbarva2\r\n" % identifier +sys.stdout.write("cas foo 0 0 6 <unique_id>\r\nbarva2\r\n") +result = exec memcached silent "cas foo 0 0 6 %d\r\nbarva2\r\n" % unique_id +sys.stdout.write(result) print """# cas failure (reusing the same key) """ -exec memcached "cas foo 0 0 6 %d\r\nbarva2\r\n" % identifier +sys.stdout.write("cas foo 0 0 6 <unique_id>\r\nbarva2\r\n") +result = exec memcached silent "cas foo 0 0 6 %d\r\nbarva2\r\n" % unique_id +sys.stdout.write(result) print """# delete foo """ exec memcached "delete foo\r\n" print """# cas missing """ -exec memcached "cas foo 0 0 6 %d\r\nbarva2\r\n" % identifier +sys.stdout.write("cas foo 0 0 6 <unique_id>\r\nbarva2\r\n") +result = exec memcached silent "cas foo 0 0 6 %d\r\nbarva2\r\n" % unique_id +sys.stdout.write(result) print """# set foo1 """ exec memcached "set foo1 0 0 1\r\n1\r\n" @@ -41,11 +49,11 @@ print """# set foo2 """ exec memcached "set foo2 0 0 1\r\n2\r\n" print """# gets foo1 check """ -result = server.memcached.execute("gets foo1\r\n", silent=False) +result = exec memcached "gets foo1\r\n" foo1_cas = int(result.split()[4]) print """# gets foo2 check """ -result = server.memcached.execute("gets foo2\r\n", silent=False) +result = exec memcached "gets foo2\r\n" foo2_cas = int(result.split()[4]) print """# validate foo1 != foo2 """ @@ -58,23 +66,23 @@ memcached1 = server.memcached memcached2 = MemcachedConnection('localhost', server.memcached_port) print """# gets foo from memcached1 - should success """ -result = memcached1.execute("gets foo1\r\n", silent = True) +result = exec memcached1 silent "gets foo1\r\n" mem1_cas = int(result.split()[4]) print """# gets foo from memcached2 - should success """ -result = memcached2.execute("gets foo1\r\n", silent = True) +result = exec memcached2 silent "gets foo1\r\n" mem2_cas = int(result.split()[4]) print """# send 'cas foo1' from memcached1 """ -memcached1.send("cas foo1 0 0 6 %d\r\nbarva2\r\n" % mem1_cas, silent = True) +send memcached1 silent "cas foo1 0 0 6 %d\r\nbarva2\r\n" % mem1_cas print """# send 'cas foo1' from memcached2 """ -memcached2.send("cas foo1 0 0 4 %d\r\npear\r\n" % mem2_cas, silent = True) +send memcached2 silent "cas foo1 0 0 4 %d\r\npear\r\n" % mem2_cas print """# recv reply 'cas foo1' from memcached1 """ -result = memcached1.recv(silent = True) +result = recv memcached1 silent mem1_cas_result = result.split()[0] print """# recv reply 'cas foo1' from memcached2 """ -result = memcached2.recv(silent = True) +result = recv memcached2 silent mem2_cas_result = result.split()[0] if mem1_cas_result == "STORED" and mem2_cas_result == "EXISTS": @@ -90,13 +98,13 @@ print """# set bug15 """ exec memcached "set bug15 0 0 1\r\n0\r\n" print """# Check out the first gets. """ -result = server.memcached.execute("gets bug15\r\n", silent=True) +result = exec memcached silent "gets bug15\r\n" bug15_cas = int(result.split()[4]) print """# Increment. """ exec memcached "incr bug15 1\r\n" print """# Validate a changed CAS. """ -result = server.memcached.execute("gets bug15\r\n", silent=True) +result = exec memcached silent "gets bug15\r\n" next_bug15_cas = int(result.split()[4]) print """# validate bug15_cas != next_bug15_cas """ diff --git a/test/box_memcached/expirations.test b/test/box_memcached/expirations.test index 220502537e96d92dc049a91b5c7d50b2d34f231a..3ecd68f8c724fc8bccd7597eb879ab0a8203d12f 100644 --- a/test/box_memcached/expirations.test +++ b/test/box_memcached/expirations.test @@ -18,7 +18,7 @@ print """# expire: time - 1 second""" expire = time.time() - 1 print """# set foo""" -server.memcached.execute("set foo 0 %d 6\r\nfooval\r\n" % expire, silent=True) +exec memcached silent "set foo 0 %d 6\r\nfooval\r\n" % expire print """# foo shoud expired""" exec memcached "get foo\r\n" @@ -28,7 +28,7 @@ print """# expire: time + 1 second""" expire = time.time() + 1 print """# set foo""" -server.memcached.execute("set foo 0 %d 6\r\nfooval\r\n" % expire, silent=True) +exec memcached silent "set foo 0 %d 6\r\nfooval\r\n" % expire print """# foo shoud be exists""" exec memcached "get foo\r\n" @@ -42,7 +42,7 @@ print """# expire: time - 20 second""" expire = time.time() - 20 print """# set boo""" -server.memcached.execute("set boo 0 %d 6\r\nbooval\r\n" % expire, silent=True) +exec memcached silent "set boo 0 %d 6\r\nbooval\r\n" % expire print """# foo shoud expired""" exec memcached "get boo\r\n" diff --git a/test/box_memcached/flags.result b/test/box_memcached/flags.result index ff6afdf4884b82fbb6b4361bea5621a8105a68e8..4a68c769fc67802a718814f95871139346f8543f 100644 --- a/test/box_memcached/flags.result +++ b/test/box_memcached/flags.result @@ -2,29 +2,23 @@ set foo 0 0 6 fooval STORED gets foo - VALUE foo 0 6 42 fooval END - success: flags (0x0) == ret_flags (0x0) set foo 123 0 6 fooval STORED gets foo - VALUE foo 123 6 43 fooval END - success: flags (0x7b) == ret_flags (0x7b) set foo 65535 0 6 fooval STORED gets foo - VALUE foo 65535 6 44 fooval END - success: flags (0xffff) == ret_flags (0xffff) diff --git a/test/box_memcached/flags.test b/test/box_memcached/flags.test index 80cad30332dcf60f5ba01b757f4f968aaebbf7cd..348b4b81bff01030254c656aac2a625d2e4c788c 100644 --- a/test/box_memcached/flags.test +++ b/test/box_memcached/flags.test @@ -3,7 +3,7 @@ flags_list = [ 0x0, 0x7b, 0xffff ] for flags in flags_list: exec memcached "set foo %d 0 6\r\nfooval\r\n" % flags - result = server.memcached.execute("gets foo\r\n", silent=False); + result = exec memcached "gets foo\r\n" ret_flags = int(result.split()[2]) if flags == ret_flags: print "success: flags (0x%x) == ret_flags (0x%x)" % (flags, ret_flags) diff --git a/test/box_memcached/flush-all.test b/test/box_memcached/flush-all.test index 35131970895f3da25ff5465bcb6cdeda0d60a3a3..11c3dc00acec8dcf283afe08e91b59c64a94b97c 100644 --- a/test/box_memcached/flush-all.test +++ b/test/box_memcached/flush-all.test @@ -14,7 +14,7 @@ exec memcached "get foo\r\n" print """# and the other form, specifying a flush_all time... """ expire = time.time() + 2 print "flush_all time + 2" -print server.memcached.execute("flush_all %d\r\n" % expire, silent=True) +print exec memcached silent "flush_all %d\r\n" % expire exec memcached "get foo\r\n" exec memcached "set foo 0 0 3\r\n123\r\n" diff --git a/test/box_memcached/getset.test b/test/box_memcached/getset.test index 14bee7f4c4996e73338f0fb168c2a7d72f5b73ac..b277fb971ce35e56fbc8170b8272918285f9ead5 100644 --- a/test/box_memcached/getset.test +++ b/test/box_memcached/getset.test @@ -35,11 +35,11 @@ print """# check-and-set (cas) failure case, try to set value with incorrect cas exec memcached "cas moo 0 0 6 0\r\nMOOVAL\r\n" exec memcached "get moo\r\n" -result = server.memcached.execute("gets moo\r\n", silent=True) +result = exec memcached silent "gets moo\r\n" unique_id = int(result.split()[4]) print """# now test that we can store moo with the correct unique id""" -server.memcached.execute("cas moo 0 0 6 %d\r\nMOOVAL\r\n" % unique_id, silent=True) +exec memcached silent "cas moo 0 0 6 %d\r\nMOOVAL\r\n" % unique_id exec memcached "get moo\r\n" exec memcached "set foo 0 0 6\r\nfooval\r\ndelete foo\r\nset foo 0 0 6\r\nfooval\r\ndelete foo\r\n" @@ -54,11 +54,11 @@ while len < (1024 * 1028): exec memcached "get foo_%d\r\n" % (len) print "# set big data: - should fail" print "set foo_%d 0 0 %d\r\n<big-data>\r\n" % (len, len) - print server.memcached.execute("set foo_%d 0 0 %d\r\n%s\r\n" % (len, len, val), silent=True) + print exec memcached silent "set foo_%d 0 0 %d\r\n%s\r\n" % (len, len, val) else: print "# set big data: - should pass" print "set foo_%d 0 0 %d\r\n<big-data>\r\n" % (len, len) - print server.memcached.execute("set foo_%d 0 0 %d\r\n%s\r\n" % (len, len, val), silent=True) + print exec memcached silent "set foo_%d 0 0 %d\r\n%s\r\n" % (len, len, val) len += 1024 * 512 # resore default suite config diff --git a/test/box_memcached/multiversioning.result b/test/box_memcached/multiversioning.result index e2d1972d4490d12a7696660957185c30da646ed9..03165794efb01a2bd798e3953de9c713bacc1f2a 100644 --- a/test/box_memcached/multiversioning.result +++ b/test/box_memcached/multiversioning.result @@ -5,8 +5,9 @@ STORED # send command 'get big' to firs memcached client get big - # send command 'delete big' to second client +delete big +DELETED # Store big in lower case via first memcached client set big 0 0 262144 <big-value-upper-case> diff --git a/test/box_memcached/multiversioning.test b/test/box_memcached/multiversioning.test index a49e1a6b58dffb2eb3bf0fde65d3550e6a2a3f1e..13a9cf08e02b4840132ac25e796243add2cb63b6 100644 --- a/test/box_memcached/multiversioning.test +++ b/test/box_memcached/multiversioning.test @@ -10,21 +10,22 @@ memcached2 = MemcachedConnection('localhost', server.memcached_port) print """# Store big in lower case via first memcached client """ print "set big 0 0 %d\r\n<big-value-lower-case>" % buf_size -print memcached1.execute("set big 0 0 %d\r\n%s\r\n" % (buf_size, buf), silent = True) +print exec memcached1 silent "set big 0 0 %d\r\n%s\r\n" % (buf_size, buf) print """# send command 'get big' to firs memcached client """ -memcached1.send("get big\r\n", silent = False) +send memcached1 "get big\r\n" print """# send command 'delete big' to second client """ -memcached2.execute("delete big\r\n") +exec memcached2 "delete big\r\n" print """# Store big in lower case via first memcached client """ print "set big 0 0 %d\r\n<big-value-upper-case>" % buf_size -print memcached2.execute("set big 0 0 %d\r\n%s\r\n" % (buf_size, buf_upper), silent = True) +print exec memcached2 silent "set big 0 0 %d\r\n%s\r\n" % (buf_size, buf_upper) print """# recv reply 'get big' from firs memcached client """ -reply = memcached1.recv(silent = True).split('\r\n')[1] -if buf == reply: +reply = recv memcached1 silent +reply_buf = reply.split('\r\n')[1] +if buf == reply_buf: print "succes: buf == reply" else: print "fail: buf != reply" diff --git a/test/box_memcached/noreply.result b/test/box_memcached/noreply.result index 5739ea9aab135024d491ac9232e1312eff7be9d0..a0cd07e2fe093fb00ec8c4d1076c3ca60b4a6166 100644 --- a/test/box_memcached/noreply.result +++ b/test/box_memcached/noreply.result @@ -32,12 +32,7 @@ VALUE noreply:foo 0 3 534 END gets noreply:foo - -VALUE noreply:foo 0 3 46 -534 -END - -cas noreply:foo 0 0 1 46 noreply +cas noreply:foo 0 0 1 <unique_id> noreply 6 get noreply:foo VALUE noreply:foo 0 1 diff --git a/test/box_memcached/noreply.test b/test/box_memcached/noreply.test index 40b4e3823598d20b76ee4c4cd94a3bfd15bbae93..4c4e7ca3ff39a360ce07d49890a2d95471ed96c1 100644 --- a/test/box_memcached/noreply.test +++ b/test/box_memcached/noreply.test @@ -1,4 +1,6 @@ # encoding: tarantool +import sys + print """# Test that commands can take 'noreply' parameter. """ exec memcached "flush_all noreply\r\n" exec memcached "flush_all 0 noreply\r\n" @@ -18,10 +20,12 @@ exec memcached "get noreply:foo\r\n" exec memcached "prepend noreply:foo 0 0 1 noreply\r\n5\r\n" exec memcached "get noreply:foo\r\n" -result = server.memcached.execute("gets noreply:foo\r\n", silent = False); +sys.stdout.write("gets noreply:foo\r\n") +result = exec memcached silent "gets noreply:foo\r\n" unique_id = int(result.split()[4]) -exec memcached "cas noreply:foo 0 0 1 %d noreply\r\n6\r\n" % unique_id +sys.stdout.write("cas noreply:foo 0 0 1 <unique_id> noreply\r\n6\r\n") +exec memcached silent "cas noreply:foo 0 0 1 %d noreply\r\n6\r\n" % unique_id exec memcached "get noreply:foo\r\n" exec memcached "incr noreply:foo 3 noreply\r\n" diff --git a/test/box_replication/consistent.test b/test/box_replication/consistent.test index 16ab112aeb55f3eccd80f35d182791b774056758..f857dbf47e801068a653d2741f40067545a243f8 100644 --- a/test/box_replication/consistent.test +++ b/test/box_replication/consistent.test @@ -7,14 +7,16 @@ ID_BEGIN = 0 ID_STEP = 10 def insert_tuples(server, begin, end, msg = "tuple"): + server_sql = server.sql for i in range(begin, end): - server.sql.execute("insert into t0 values (%d, '%s %d')" % (i, msg, i), silent=False) + exec server_sql "insert into t0 values (%d, '%s %d')" % (i, msg, i) def select_tuples(server, begin, end): + server_sql = server.sql # the last lsn is end id + 1 server.wait_lsn(end + 1) for i in range(begin, end): - server.sql.execute("select * from t0 where k0 = %d" % i, silent=False) + exec server_sql "select * from t0 where k0 = %d" % i # master server master = server diff --git a/test/box_replication/hot_standby.test b/test/box_replication/hot_standby.test index b1053fb5d8ff7e111cabf81b33bbc25140a8fe4f..d2f15c0d7dd1559c380e854ada967cd50364d73d 100644 --- a/test/box_replication/hot_standby.test +++ b/test/box_replication/hot_standby.test @@ -1,21 +1,25 @@ +# encoding: tarantool import os import time from lib.tarantool_box_server import TarantoolBoxServer # master server master = server +master_sql = master.sql # hot standby server hot_standby = TarantoolBoxServer() hot_standby.deploy("box_replication/cfg/hot_standby.cfg", hot_standby.find_exe(self.args.builddir), os.path.join(self.args.vardir, "hot_standby"), need_init=False) +hot_standby_sql = hot_standby.sql # replica server replica = TarantoolBoxServer() replica.deploy("box_replication/cfg/replica.cfg", replica.find_exe(self.args.builddir), os.path.join(self.args.vardir, "replica")) +replica_sql = replica.sql # Begin tuple id id = 1 @@ -25,14 +29,14 @@ print """ # Insert 10 tuples to master """ for i in range(id, id + 10): - master.sql.execute("insert into t0 values (%d, 'the tuple %d')" % (i, i), silent=False) + exec master_sql "insert into t0 values (%d, 'the tuple %d')" % (i, i) print """ # Select 10 tuples from master """ for i in range(id, id + 10): - master.sql.execute("select * from t0 where k0 = %d" % i, silent=False) + exec master_sql "select * from t0 where k0 = %d" % i print """ @@ -40,7 +44,7 @@ print """ """ replica.wait_lsn(11) for i in range(id, id + 10): - replica.sql.execute("select * from t0 where k0 = %d" % i, silent=False) + exec replica_sql "select * from t0 where k0 = %d" % i print """ @@ -57,14 +61,14 @@ print """ # Insert 10 tuples to hot_standby """ for i in range(id, id + 10): - hot_standby.sql.execute("insert into t0 values (%d, 'the tuple %d')" % (i, i), silent=False) + exec hot_standby_sql "insert into t0 values (%d, 'the tuple %d')" % (i, i) print """ # Select 10 tuples from hot_standby """ for i in range(id, id + 10): - hot_standby.sql.execute("select * from t0 where k0 = %d" % i, silent=False) + exec hot_standby_sql "select * from t0 where k0 = %d" % i print """ @@ -72,7 +76,7 @@ print """ """ replica.wait_lsn(21) for i in range(id, id + 10): - replica.sql.execute("select * from t0 where k0 = %d" % i, silent=False) + exec replica_sql "select * from t0 where k0 = %d" % i # Cleanup. diff --git a/test/box_replication/swap.test b/test/box_replication/swap.test index 54a4187942c4169fa9a780224fbbf6bbb4429f0f..9322d9ce660882271c89fc9bd8c1d9212c60af21 100644 --- a/test/box_replication/swap.test +++ b/test/box_replication/swap.test @@ -8,14 +8,16 @@ ID_BEGIN = 0 ID_STEP = 5 def insert_tuples(server, begin, end, msg = "tuple"): + server_sql = server.sql for i in range(begin, end): - server.sql.execute("insert into t0 values (%d, '%s %d')" % (i, msg, i), silent=False) + exec server_sql "insert into t0 values (%d, '%s %d')" % (i, msg, i) def select_tuples(server, begin, end): + server_sql = server.sql # the last lsn is end id + 1 server.wait_lsn(end + 1) for i in range(begin, end): - server.sql.execute("select * from t0 where k0 = %d" % i, silent=False) + exec server_sql "select * from t0 where k0 = %d" % i # master server master = server diff --git a/test/lib/admin_connection.py b/test/lib/admin_connection.py index 0502c1d80ea2d049d749e2159ef0839bd7605e1e..32562fcd9fd857c4576213e57ec62d411418333c 100644 --- a/test/lib/admin_connection.py +++ b/test/lib/admin_connection.py @@ -23,14 +23,17 @@ __author__ = "Konstantin Osipov <kostja.osipov@gmail.com>" import socket import yaml +import sys import re from tarantool_connection import TarantoolConnection is_admin_re = re.compile("^\s*(show|save|exec|exit|reload|help)", re.I) +ADMIN_SEPARATOR = '\n' + class AdminConnection(TarantoolConnection): def execute_no_reconnect(self, command, silent): - self.socket.sendall(command) + self.socket.sendall(command + ADMIN_SEPARATOR) bufsiz = 4096 res = "" @@ -47,8 +50,8 @@ class AdminConnection(TarantoolConnection): yaml.load(res) if not silent: - print command.replace('\n', '') - print res[:-1] + sys.stdout.write(command + ADMIN_SEPARATOR) + sys.stdout.write(res) return res diff --git a/test/lib/memcached_connection.py b/test/lib/memcached_connection.py index 3a58bd61bc72d613aaae51b6c407eec071c35dfb..e80d19debc164473d964b1830ae2acec1c350b91 100644 --- a/test/lib/memcached_connection.py +++ b/test/lib/memcached_connection.py @@ -26,11 +26,6 @@ class MemcachedCommandBuffer: class MemcachedConnection(TarantoolConnection): - def __init__(self, host, port): - TarantoolConnection.__init__(self, host, port) - self.separator = MEMCACHED_SEPARATOR + '\n' - self.separator_len = 2 - def execute_no_reconnect(self, commands, silent = True): self.send(commands, silent) return self.recv(silent) @@ -39,7 +34,7 @@ class MemcachedConnection(TarantoolConnection): self.commands = commands self.socket.sendall(commands) if not silent: - print self.commands + sys.stdout.write(self.commands) def recv(self, silent = True): self.recv_buffer = '' @@ -70,7 +65,7 @@ class MemcachedConnection(TarantoolConnection): self.reply_unknown(cmd) if not silent: - print self.reply + sys.stdout.write(self.reply) return self.reply diff --git a/test/lib/tarantool_box_server.py b/test/lib/tarantool_box_server.py index 849b235dc1d39053ae6605f6d5232180d556fb12..1e68c5a6e953aa9179fb46af928ef80d66327485 100644 --- a/test/lib/tarantool_box_server.py +++ b/test/lib/tarantool_box_server.py @@ -49,7 +49,7 @@ class TarantoolBoxServer(TarantoolServer): stderr = subprocess.PIPE) def get_param(self, param): - data = self.admin.execute("show info\n", silent = True) + data = self.admin.execute("show info", silent = True) info = yaml.load(data)["info"] return info[param] diff --git a/test/lib/tarantool_connection.py b/test/lib/tarantool_connection.py index 67bc40863e9399d07fd787584ba9a17d6541b7e2..4b322e4c2c8cf1f969d7f5a2b4ee04201464537f 100644 --- a/test/lib/tarantool_connection.py +++ b/test/lib/tarantool_connection.py @@ -30,8 +30,6 @@ class TarantoolConnection: def __init__(self, host, port): self.host = host self.port = port - self.separator = '\n' - self.separator_len = 1 self.is_connected = False self.stream = cStringIO.StringIO() self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) @@ -70,27 +68,6 @@ class TarantoolConnection: self.opt_reconnect() return self.execute_no_reconnect(command, silent) - def write(self, fragment): - """This is to support print >> admin, "command" syntax. - For every print statement, write is invoked twice: one to - write the command itself, and another to write \n. We should - accumulate all writes until we receive \n. When we receive it, - we execute the command, and rewind the stream.""" - - str = self.stream.getvalue() + fragment - separator_index = str.rfind(self.separator) - while separator_index >= 0: - statement = str[:separator_index + self.separator_len] - sys.stdout.write(statement) - sys.stdout.write(self.execute(statement)) - - str = str[separator_index + len(self.separator):] - separator_index = str.rfind(self.separator) - - self.stream.seek(0) - self.stream.truncate() - self.stream.write(str) - def __enter__(self): self.connect() return self diff --git a/test/lib/tarantool_preprocessor.py b/test/lib/tarantool_preprocessor.py index b7ee8b7a9b41ed73cba0c6d4b03f199ce9672b23..6a587ed72fabbac4594377108f0f87b1ce89ee99 100644 --- a/test/lib/tarantool_preprocessor.py +++ b/test/lib/tarantool_preprocessor.py @@ -7,24 +7,116 @@ import re from encodings import utf_8 import sys +# tarantool operators +TARANTOOL_OPERATORS = [ 'exec', 'send', 'recv' ] + +TARANTOOL_METHODS = { + 'exec' : 'execute', + 'send' : 'send', + 'recv' : 'recv' +} def tarantool_translate(readline): token_stream = tokenize.generate_tokens(readline) for token in token_stream: - type, name = token[:2] - if type == tokenize.NAME and name == "exec": - next_token = next(token_stream) - type, name = next_token[:2] - if type == tokenize.NAME and name in [ "sql", "admin", "memcached" ]: - yield (tokenize.NAME, 'print') + token[2:] - yield (tokenize.OP, '>>') + token[2:] - yield next_token - yield (tokenize.OP, ',') + next_token[2:] - else: - yield token - yield next_token - else: - yield token + token_buffer = [ token ] + # chec token type + if token_is_operator(token): + # translate tarantool operator + translate_command(token_buffer, token_stream) + + while len(token_buffer) > 0: + yield token_buffer.pop(0) + + +def translate_command(token_buffer, token_stream): + operator = token_buffer.pop(0) + object = next(token_stream) + if token_is_identifier(object): + # translate operator + translate_operator(token_buffer, operator, object) + translate_operands(token_buffer, operator, token_stream) + else: + token_buffer.append(operator) + token_buffer.append(object) + + +def translate_operator(token_buffer, operator, object): + # operator object -> object.method + # put object + token_buffer.append(object[:2] + operator[2:]) + # put comma + token_buffer.append((tokenize.OP, '.') + operator[2:]) + # put method + operator_name = operator[1] + method_name = TARANTOOL_METHODS[operator_name] + token_buffer.append((tokenize.NAME, method_name) + operator[2:]) + + +def translate_operands(token_buffer, operator, token_stream): + # put open bracket + token_buffer.append((tokenize.OP, '(') + operator[2:]) + + # put all operatands + token = next(token_stream) + + silent = False + if token_is_modifier(token): + silent = modifier_to_value(token[1]) + token = next(token_stream) + + comma_needed = False + while not token_is_separator(token): + token_buffer.append(token[:2] + operator[2:]) + comma_needed = True + token = next(token_stream) + + # set verbose flag + if comma_needed: + # we have operatands, put comma before silent + token_buffer.append((tokenize.OP, ',') + operator[2:]) + token_buffer.append((tokenize.NAME, 'silent') + operator[2:]) + token_buffer.append((tokenize.OP, '=') + operator[2:]) + token_buffer.append((tokenize.NAME, '%s' % silent) + operator[2:]) + + # put close bracket + token_buffer.append((tokenize.OP, ')') + operator[2:]) + # new line + token_buffer.append((tokenize.NEWLINE, '\n') + operator[2:]) + + +def modifier_to_value(name): + if name == 'silent': + return True + return False + + +def token_is_modifier(token): + token_type, token_name = token[:2] + if token_type == tokenize.NAME and token_name in [ 'silent' , 'verbose' ]: + return True + return False + + +def token_is_operator(token): + token_type, token_name = token[:2] + if token_type == tokenize.NAME and token_name in TARANTOOL_OPERATORS: + return True + return False + + +def token_is_identifier(token): + token_type = token[0] + if token_type == tokenize.NAME: + return True + return False + + +def token_is_separator(token): + token_type = token[0] + if token_type == tokenize.NEWLINE or token_type == tokenize.ENDMARKER: + return True + return False class TarantoolStreamReader(utf_8.StreamReader): @@ -33,7 +125,7 @@ class TarantoolStreamReader(utf_8.StreamReader): try: data = tokenize.untokenize(tarantool_translate(self.stream.readline)) self.stream = cStringIO.StringIO(data) - except Exception: + except Exception, e : self.stream.seek(0) diff --git a/test/lib/tarantool_server.py b/test/lib/tarantool_server.py index 9fb6b9baa0dfa66e40362092d21bf419e079bb70..8f9fa246c00c2d0ba0853b0b069fe3a7367830f4 100644 --- a/test/lib/tarantool_server.py +++ b/test/lib/tarantool_server.py @@ -54,7 +54,7 @@ class TarantoolServer(Server): else: self.config = os.path.abspath(config) shutil.copy(self.config, os.path.join(self.vardir, self.default_config_name)) - self.admin.execute("reload configuration\n", silent=silent) + self.admin.execute("reload configuration", silent=silent) def version(self): p = subprocess.Popen([self.binary, "--version"],