def module_init(): """ Called at import """ args = Options().args # Change the current working directory to where all test # collections are supposed to reside # If script executed with (python test-run.py) dirname is '' # so we need to make it . path = os.path.dirname(sys.argv[0]) if not path: path = '.' os.chdir(path) setenv() warn_unix_sockets_at_start(args.vardir) # always run with clean (non-existent) 'var' directory try: shutil.rmtree(args.vardir) except OSError: pass args.builddir = os.path.abspath(os.path.expanduser(args.builddir)) SOURCEDIR = os.path.dirname(os.getcwd()) BUILDDIR = args.builddir os.environ["SOURCEDIR"] = SOURCEDIR os.environ["BUILDDIR"] = BUILDDIR soext = sys.platform == 'darwin' and 'dylib' or 'so' os.environ["LUA_PATH"] = SOURCEDIR+"/?.lua;"+SOURCEDIR+"/?/init.lua;;" os.environ["LUA_CPATH"] = BUILDDIR+"/?."+soext+";;" TarantoolServer.find_exe(args.builddir) UnittestServer.find_exe(args.builddir)
def main(): path = os.path.dirname(sys.argv[0]) if not path: path = '.' os.chdir(path) if '--prepare' in sys.argv: prepare_env() exit(0) srv = None srv = TarantoolServer() srv.script = 'test/shared/box.lua' srv.start() test_dir_path = os.path.abspath(os.path.join(os.getcwd(), 'test')) test_cwd = os.path.dirname(srv.vardir) test_lib_path = "" try: shutil.copy('test/shared/phpunit.xml', test_cwd) cmd = '' test_lib_path = os.path.join(test_dir_path, 'phpunit.phar') shutil.copy('test/shared/tarantool.ini', test_cwd) shutil.copy('modules/tarantool.so', test_cwd) if '--flags' in sys.argv: os.environ['ZEND_DONT_UNLOAD_MODULES'] = '1' os.environ['USE_ZEND_ALLOC'] = '0' os.environ['MALLOC_CHECK_'] = '1' if '--valgrind' in sys.argv: cmd = cmd + 'valgrind --leak-check=full --log-file=php.out ' cmd = cmd + '--suppressions=test/shared/valgrind.sup ' cmd = cmd + '--keep-stacktraces=alloc-and-free --freelist-vol=2000000000 ' cmd = cmd + '--malloc-fill=0 --free-fill=0 ' cmd = cmd + '--num-callers=50 ' + find_php_bin() cmd = cmd + ' -c tarantool.ini {0}'.format(test_lib_path) elif '--gdb' in sys.argv: cmd = cmd + 'gdb {0} --ex '.format(find_php_bin()) cmd = cmd + '"set args -c tarantool.ini {0}"'.format(test_lib_path) elif '--strace' in sys.argv: cmd = cmd + 'strace ' + find_php_bin() cmd = cmd + ' -c tarantool.ini {0}'.format(test_lib_path) else: print find_php_bin() cmd = '{0} -c tarantool.ini {1}'.format(find_php_bin(), test_lib_path) print cmd print('Running ' + repr(cmd)) version = read_popen('php-config --version').strip(' \n\t') + '.' version1 = read_popen('php-config --extension-dir').strip(' \n\t') version += '\n' + ('With' if version1.find('non-zts') == -1 else 'Without') + ' ZTS' version += '\n' + ('With' if version1.find('no-debug') == -1 else 'Without') + ' Debug' print('Running against ' + version) proc = subprocess.Popen(cmd, shell=True, cwd=test_cwd) proc.wait() finally: a = [ os.path.join(test_cwd, 'tarantool.ini'), os.path.join(test_cwd, 'phpunit.xml'), os.path.join(test_cwd, 'tarantool.so'), ] for elem in a: if os.path.exists(elem): os.remove(elem)
def find_tests(self): if self.ini['core'] == 'tarantool': TarantoolServer.find_tests(self, self.suite_path) elif self.ini['core'] == 'app': AppServer.find_tests(self, self.suite_path) elif self.ini['core'] == 'unittest': UnittestServer.find_tests(self, self.suite_path) elif self.ini['core'] == 'stress': # parallel tests are not supported and disabled for now return [] else: raise ValueError('Cannot collect tests of unknown type') if not lib.Options().args.reproduce: color_stdout("Collecting tests in ", schema='ts_text') color_stdout( '%s (Found %s tests)' % ( repr(self.suite_path).ljust(16), str(len(self.tests)).ljust(3) ), schema='path' ) color_stdout(": ", self.ini["description"], ".\n", schema='ts_text') return self.tests
def module_init(): """ Called at import """ args = Options().args # Change the current working directory to where all test # collections are supposed to reside # If script executed with (python test-run.py) dirname is '' # so we need to make it . path = os.path.dirname(sys.argv[0]) if not path: path = '.' os.chdir(path) setenv() warn_unix_sockets_at_start(args.vardir) # always run with clean (non-existent) 'var' directory try: shutil.rmtree(args.vardir) except OSError: pass args.builddir = os.path.abspath(os.path.expanduser(args.builddir)) SOURCEDIR = os.path.dirname(os.getcwd()) BUILDDIR = args.builddir os.environ["SOURCEDIR"] = SOURCEDIR os.environ["BUILDDIR"] = BUILDDIR soext = sys.platform == 'darwin' and 'dylib' or 'so' os.environ[ "LUA_PATH"] = SOURCEDIR + "/?.lua;" + SOURCEDIR + "/?/init.lua;;" os.environ["LUA_CPATH"] = BUILDDIR + "/?." + soext + ";;" TarantoolServer.find_exe(args.builddir) UnittestServer.find_exe(args.builddir)
def collect_tests(self): if self.tests_are_collected: return self.tests if self.ini['core'] == 'tarantool': TarantoolServer.find_tests(self, self.suite_path) elif self.ini['core'] == 'app': AppServer.find_tests(self, self.suite_path) elif self.ini['core'] == 'unittest': UnittestServer.find_tests(self, self.suite_path) elif self.ini['core'] == 'stress': # parallel tests are not supported and disabled for now self.tests = [] self.tests_are_collected = True return self.tests else: raise ValueError('Cannot collect tests of unknown type') if not Options().args.reproduce: color_stdout("Collecting tests in ", schema='ts_text') color_stdout( '%s (Found %s tests)' % ( repr(self.suite_path).ljust(16), str(len(self.tests)).ljust(3) ), schema='path' ) color_stdout(": ", self.ini["description"], ".\n", schema='ts_text') self.tests_are_collected = True return self.tests
def setUpClass(self): print ' SCHEMA '.center(70, '=') print '-' * 70 self.srv = TarantoolServer() self.srv.script = 'tests/suites/box.lua' self.srv.start() self.con = tarantool.Connection('localhost', self.srv.args['primary']) self.sch = self.con.schema
def setUpClass(self): print ' DML '.center(70, '=') print '-' * 70 self.srv = TarantoolServer() self.srv.script = 'tests/suites/box.lua' self.srv.start() self.con = tarantool.Connection('localhost', self.srv.args['primary']) self.adm = self.srv.admin self.space_created = self.adm("box.schema.create_space('space_1')") self.adm("box.space['space_1']:create_index('primary', {type = 'tree', parts = {1, 'num'}, unique = true})") self.adm("box.space['space_1']:create_index('secondary', {type = 'tree', parts = {2, 'num', 3, 'str'}, unique = true})") self.adm("json = require('json')") self.adm("fiber = require('fiber')") self.adm("uuid = require('uuid')")
def main(): options = Options() oldcwd = os.getcwd() # Change the current working directory to where all test # collections are supposed to reside # If script executed with (python test-run.py) dirname is '' # so we need to make it . path = os.path.dirname(sys.argv[0]) if not path: path = '.' os.chdir(path) setenv() failed_tests = [] try: TarantoolServer.find_exe(options.args.builddir) UnittestServer.find_exe(options.args.builddir) color_stdout("Started {0}\n".format(" ".join(sys.argv)), schema='tr_text') suite_names = options.args.suites if suite_names == []: for root, dirs, names in os.walk(os.getcwd()): if "suite.ini" in names: suite_names.append(os.path.basename(root)) if options.args.stress is None: suites = [TestSuite(suite_name, options.args) for suite_name in sorted(suite_names)] for suite in suites: failed_tests.extend(suite.run_all()) else: suite_names = [suite_name for suite_name in suite_names if suite_name.find(options.args.stress) != -1] suites = [Supervisor(suite_name, options.args) for suite_name in sorted(suite_names)] for suite in suites: suite.run_all() except RuntimeError as e: color_stdout("\nFatal error: %s. Execution aborted.\n" % e, schema='error') if options.args.gdb: time.sleep(100) return (-1) finally: os.chdir(oldcwd) if failed_tests and options.args.is_force: color_stdout("\n===== %d tests failed:\n" % len(failed_tests), schema='error') for test in failed_tests: color_stdout("----- %s\n" % test, schema='info') return (-1 if failed_tests else 0)
def main(): options = Options() oldcwd = os.getcwd() # Change the current working directory to where all test # collections are supposed to reside # If script executed with (python test-run.py) dirname is '' # so we need to make it . path = os.path.dirname(sys.argv[0]) if not path: path = '.' os.chdir(path) setenv() failed_tests = [] try: color_stdout("Started {}\n".format(" ".join(sys.argv)), schema='tr_text') suite_names = [] if options.args.suites != []: suite_names = options.args.suites else: for root, dirs, names in os.walk(os.getcwd()): if "suite.ini" in names: suite_names.append(os.path.basename(root)) suites = [TestSuite(suite_name, options.args) for suite_name in sorted(suite_names)] TarantoolServer.find_exe(options.args.builddir) UnittestServer.find_exe(options.args.builddir) for suite in suites: failed_tests.extend(suite.run_all()) except RuntimeError as e: color_stdout("\nFatal error: {0}. Execution aborted.\n".format(e), schema='error') if options.args.gdb: time.sleep(100) return (-1) finally: os.chdir(oldcwd) if failed_tests and options.args.is_force: color_stdout("\n===== {0} tests failed:".format(len(failed_tests))+"\n", schema='error') for test in failed_tests: color_stdout("----- "+test+"\n", schema='info') return (-1 if failed_tests else 0)
def setUpClass(self): print " SCHEMA ".center(70, "=") print "-" * 70 self.srv = TarantoolServer() self.srv.script = "tests/suites/box.lua" self.srv.start() self.con = tarantool.Connection("localhost", self.srv.args["primary"]) self.sch = self.con.schema
def setUpClass(self): print(' SCHEMA '.center(70, '=')) print('-' * 70) self.srv = TarantoolServer() self.srv.script = 'tests/suites/box.lua' self.srv.start() self.con = tarantool.Connection('localhost', self.srv.args['primary']) self.sch = self.con.schema
def module_init(): """ Called at import """ args = Options().args # Change the current working directory to where all test # collections are supposed to reside # If script executed with (python test-run.py) dirname is '' # so we need to make it . path = os.path.dirname(sys.argv[0]) if not path: path = '.' os.chdir(path) setenv() # Keep the PWD environment variable in sync with a current # working directory. It does not strictly necessary, just to # avoid any confusion. os.environ['PWD'] = os.getcwd() warn_unix_sockets_at_start(args.vardir) # always run with clean (non-existent) 'var' directory try: shutil.rmtree(args.vardir) except OSError: pass args.builddir = os.path.abspath(os.path.expanduser(args.builddir)) SOURCEDIR = os.path.dirname(os.getcwd()) BUILDDIR = args.builddir os.environ["SOURCEDIR"] = SOURCEDIR os.environ["BUILDDIR"] = BUILDDIR soext = sys.platform == 'darwin' and 'dylib' or 'so' os.environ[ "LUA_PATH"] = SOURCEDIR + "/?.lua;" + SOURCEDIR + "/?/init.lua;;" os.environ["LUA_CPATH"] = BUILDDIR + "/?." + soext + ";;" os.environ["REPLICATION_SYNC_TIMEOUT"] = str(args.replication_sync_timeout) os.environ['MEMTX_ALLOCATOR'] = args.memtx_allocator TarantoolServer.find_exe(args.builddir) UnittestServer.find_exe(args.builddir) AppServer.find_exe(args.builddir) Options().check_schema_upgrade_option(TarantoolServer.debug)
def main(): path = os.path.dirname(sys.argv[0]) if not path: path = '.' os.chdir(path) srv = None srv = TarantoolServer() srv.script = 'tests/shared/box.lua' srv.start() test_dir_path = os.path.abspath(os.path.join(os.getcwd(), 'tests')) test_cwd = os.path.dirname(srv.vardir) test_lib_path = "" try: shutil.copy('tests/shared/phpunit.xml', test_cwd) if 'global' in sys.argv: cmd = 'phpunit -v' else: test_lib_path = os.path.join(test_dir_path, 'phpunit.phar') shutil.copy('tests/shared/php.ini', test_cwd) shutil.copy('modules/tarantool.so', test_cwd) os.environ['PATH'] += os.pathsep + test_dir_path cmd = 'php -c php.ini {0}'.format(test_lib_path) print('Running ' + repr(cmd)) version = read_popen('php-config --version').strip(' \n\t') + '.' version1 = read_popen('php-config --extension-dir').strip(' \n\t') version += ' ' + ('With' if version1.find('non-zts') == -1 else 'Without') + ' ZTS' version += ' ' + ('With' if version1.find('no-debug') == -1 else 'Without') + ' Debug' print('Running against ' + version) proc = subprocess.Popen(cmd, shell=True, cwd=test_cwd) cmd_stat = proc.wait() if (cmd_stat in [245, 139] and 'global' not in sys.argv): proc = subprocess.Popen(build_gdb_cmd(test_lib_path), shell=True, cwd=test_cwd) finally: del srv a = [ os.path.join(test_cwd, 'php.ini'), os.path.join(test_cwd, 'phpunit.xml'), os.path.join(test_cwd, 'tarantool.so'), ] for elem in a: if os.path.exists(elem): os.remove(elem)
def run_test(name, unix = False): retval = True try: srv = TarantoolServer(unix = unix) srv.script = 'shared/box.lua' srv.start() test_cwd = os.path.dirname(srv.vardir) cmd = compile_cmd(name) print('Running ' + repr(cmd)) proc = subprocess.Popen(cmd, shell=True, cwd=test_cwd) if (proc.wait() != 0): retval = False except Exception as e: print e pass finally: pass return retval
def __init__(self, suite_path, args): """Initialize a test suite: check that it exists and contains a syntactically correct configuration file. Then create a test instance for each found test.""" self.args = args self.tests = [] self.ini = {} self.suite_path = suite_path self.ini["core"] = "tarantool" if os.access(suite_path, os.F_OK) == False: raise RuntimeError("Suite %s doesn't exist" % repr(suite_path)) # read the suite config config = ConfigParser.ConfigParser() config.read(os.path.join(suite_path, "suite.ini")) self.ini.update(dict(config.items("default"))) self.ini.update(self.args.__dict__) self.multi_run = self.get_multirun_conf(suite_path) if self.args.stress is None and self.ini['core'] == 'stress': return for i in ["script"]: self.ini[i] = os.path.join(suite_path, self.ini[i]) if i in self.ini else None for i in ["disabled", "valgrind_disabled", "release_disabled"]: self.ini[i] = dict.fromkeys( self.ini[i].split()) if i in self.ini else dict() for i in ["lua_libs"]: self.ini[i] = map( lambda x: os.path.join(suite_path, x), dict.fromkeys(self.ini[i].split()) if i in self.ini else dict()) try: if self.ini['core'] in ['tarantool', 'stress']: self.server = TarantoolServer(self.ini) else: self.server = Server(self.ini) self.ini["server"] = self.server except Exception as e: print e raise RuntimeError("Unknown server: core = {0}".format( self.ini["core"])) color_stdout("Collecting tests in ", schema='ts_text') color_stdout(repr(suite_path), schema='path') color_stdout(": ", self.ini["description"], ".\n", schema='ts_text') self.server.find_tests(self, suite_path) color_stdout("Found ", str(len(self.tests)), " tests.\n", schema='path')
def __init__(self, suite_path, args): self.args = args self.tests = [] self.suite_path = suite_path self.ini = { 'core': 'tarantool', 'script': os.path.join(suite_path, 'parallel.lua'), } # read suite config config = ConfigParser.ConfigParser() config.read(os.path.join(suite_path, "suite.ini")) self.ini.update(dict(config.items("default"))) self.ini.update(self.args.__dict__) self.jobs = int(self.ini.get('jobs', 1)) self.count = int(self.ini.get('count', 0)) for i in ["script"]: self.ini[i] = os.path.join(suite_path, self.ini[i]) if i in self.ini else None self.server = TarantoolServer(self.ini) self.pool = None self.iterator = None
def main(): path = os.path.dirname(sys.argv[0]) if not path: path = '.' os.chdir(path) retval = True try: srv = TarantoolServer() srv.script = 'shared/box.lua' srv.start() test_cwd = os.path.dirname(srv.vardir) cmd = compile_cmd('tarantool-tcp') print('Running ' + repr(cmd)) proc = subprocess.Popen(cmd, shell=True, cwd=test_cwd) if (proc.wait() != 0): retval = False except Exception as e: print e pass finally: pass try: srv = TarantoolServer(unix = True) srv.script = 'shared/box.lua' srv.start() test_cwd = os.path.dirname(srv.vardir) cmd = compile_cmd('tarantool-unix') print('Running ' + repr(cmd)) proc = subprocess.Popen(cmd, shell=True, cwd=test_cwd) proc.wait() if (proc.wait() != 0): retval = False except Exception as e: print e pass finally: pass if (retval): print "Everything is OK" else: print "FAILED" return (-1 if not retval else 0)
server.admin("box.info.vclock[5] == nil") # Cleanup server.stop() server.deploy() print '-------------------------------------------------------------' print 'Start a new replica and check box.info on the start' print '-------------------------------------------------------------' # master server master = server master_id = master.get_param('id') master.admin("box.schema.user.grant('guest', 'replication')") replica = TarantoolServer(server.ini) replica.script = 'replication-py/replica.lua' replica.vardir = server.vardir replica.rpl_master = master replica.deploy() replica_id = replica.get_param('id') replica_uuid = replica.get_param('uuid') sys.stdout.push_filter(replica_uuid, '<replica uuid>') replica.admin('box.info.id == %d' % replica_id) 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'
# encoding: utf-8 import os import time from lib.tarantool_server import TarantoolServer # master server master = server master_sql = master.sql # hot standby server hot_standby = TarantoolServer() hot_standby.deploy("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 = TarantoolServer() replica.deploy("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 print """ # Insert 10 tuples to master """ for i in range(id, id + 10):
# Cleanup server.stop() server.script = script server.deploy() print '-------------------------------------------------------------' print 'gh-527: update vclock on delete from box.space._cluster' print '-------------------------------------------------------------' # master server master = server master_id = master.get_param('server')['id'] master.admin("box.schema.user.grant('guest', 'replication')") replica = TarantoolServer(server.ini) replica.script = 'replication/replica.lua' replica.vardir = server.vardir replica.rpl_master = master replica.deploy() replica.wait_lsn(master_id, master.get_lsn(master_id)) replica_id = replica.get_param('server')['id'] replica_uuid = replica.get_param('server')['uuid'] sys.stdout.push_filter(replica_uuid, '<replica uuid>') replica.admin('box.space._schema:insert{"test", 48}') replica.admin('box.info.server.id') replica.admin('box.info.server.ro') replica.admin('box.info.server.lsn') # 1 replica.admin('box.info.vclock[%d]' % replica_id)
master = server master.admin('space = box.schema.create_space(\'test\', {id = 42})') master.admin( 'space:create_index(\'primary\', \'hash\', {parts = { 0, \'num\' } })') master.admin('for k = 1, 9 do space:insert(k, k*k) end') for k in glob.glob(os.path.join(master.vardir, '*.xlog')): os.unlink(k) print '-------------------------------------------------------------' print 'replica test 1 (must be failed)' print '-------------------------------------------------------------' replica = TarantoolServer() replica.deploy("replication/cfg/replica.cfg", replica.find_exe(self.args.builddir), os.path.join(self.args.vardir, "replica"), need_init=False) for i in range(1, 10): replica.admin('box.select(42, 0, %d)' % i) replica.stop() replica.cleanup(True) master.admin('box.snapshot()') master.restart() master.admin('for k = 10, 19 do box.insert(42, k, k*k*k) end')
# master server master = server 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 '----------------------------------------------------------------------' # Start replicas master.id = master.get_param('server')['id'] master_lsn = master.get_lsn(master.id) cluster = [ master ] for i in range(REPLICA_N - 1): server = TarantoolServer(server.ini) server.script = 'replication/replica.lua' server.vardir = os.path.join(server.vardir, 'replica', str(master.id + i)) server.rpl_master = master server.deploy() # Wait replica to fully bootstrap. # Otherwise can get ACCESS_DENIED error. server.wait_lsn(master.id, master_lsn) cluster.append(server) # Make a list of servers sources = [] for server in cluster: sources.append(yaml.load(server.admin('box.cfg.listen', silent = True))[0]) server.id = server.get_param('server')['id']
class TestSuite_Schema(unittest.TestCase): @classmethod def setUpClass(self): print(' SCHEMA '.center(70, '=')) print('-' * 70) self.srv = TarantoolServer() self.srv.script = 'tests/suites/box.lua' self.srv.start() self.con = tarantool.Connection('localhost', self.srv.args['primary']) self.sch = self.con.schema def test_00_authenticate(self): self.assertIsNone(self.srv.admin("box.schema.user.create('test', { password = '******' })")) self.assertIsNone(self.srv.admin("box.schema.user.grant('test', 'read,write', 'space', '_space')")) self.assertIsNone(self.srv.admin("box.schema.user.grant('test', 'read,write', 'space', '_index')")) self.assertEqual(self.con.authenticate('test', 'test')._data, None) def test_01_space_bad(self): with self.assertRaisesRegexp(tarantool.SchemaError, 'There\'s no space.*'): self.sch.get_space(0) with self.assertRaisesRegexp(tarantool.SchemaError, 'There\'s no space.*'): self.sch.get_space(0) with self.assertRaisesRegexp(tarantool.SchemaError, 'There\'s no space.*'): self.sch.get_space('bad_name') def test_02_index_bad(self): with self.assertRaisesRegexp(tarantool.SchemaError, 'There\'s no space.*'): self.sch.get_index(0, 'primary') with self.assertRaisesRegexp(tarantool.SchemaError, 'There\'s no space.*'): self.sch.get_index('bad_space', 'primary') with self.assertRaisesRegexp(tarantool.SchemaError, 'There\'s no index.*'): self.sch.get_index(280, 'bad_index') with self.assertRaisesRegexp(tarantool.SchemaError, 'There\'s no index.*'): self.sch.get_index(280, 'bad_index') with self.assertRaisesRegexp(tarantool.SchemaError, 'There\'s no index.*'): self.sch.get_index(280, 3) def test_03_01_space_name__(self): self.con.flush_schema() space = self.sch.get_space('_schema') self.assertEqual(space.sid, 272) self.assertEqual(space.name, '_schema') self.assertEqual(space.arity, 1) space = self.sch.get_space('_space') self.assertEqual(space.sid, 280) self.assertEqual(space.name, '_space') self.assertEqual(space.arity, 1) space = self.sch.get_space('_index') self.assertEqual(space.sid, 288) self.assertEqual(space.name, '_index') self.assertEqual(space.arity, 1) def test_03_02_space_number(self): self.con.flush_schema() space = self.sch.get_space(272) self.assertEqual(space.sid, 272) self.assertEqual(space.name, '_schema') self.assertEqual(space.arity, 1) space = self.sch.get_space(280) self.assertEqual(space.sid, 280) self.assertEqual(space.name, '_space') self.assertEqual(space.arity, 1) space = self.sch.get_space(288) self.assertEqual(space.sid, 288) self.assertEqual(space.name, '_index') self.assertEqual(space.arity, 1) def test_04_space_cached(self): space = self.sch.get_space('_schema') self.assertEqual(space.sid, 272) self.assertEqual(space.name, '_schema') self.assertEqual(space.arity, 1) space = self.sch.get_space('_space') self.assertEqual(space.sid, 280) self.assertEqual(space.name, '_space') self.assertEqual(space.arity, 1) space = self.sch.get_space('_index') self.assertEqual(space.sid, 288) self.assertEqual(space.name, '_index') self.assertEqual(space.arity, 1) def test_05_01_index_name___name__(self): self.con.flush_schema() index = self.sch.get_index('_index', 'primary') self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 2) index = self.sch.get_index('_index', 'name') self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 2) index = self.sch.get_index('_space', 'primary') self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 1) index = self.sch.get_index('_space', 'name') self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 1) def test_05_02_index_name___number(self): self.con.flush_schema() index = self.sch.get_index('_index', 0) self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 2) index = self.sch.get_index('_index', 2) self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 2) index = self.sch.get_index('_space', 0) self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 1) index = self.sch.get_index('_space', 2) self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 1) def test_05_03_index_number_name__(self): self.con.flush_schema() index = self.sch.get_index(288, 'primary') self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 2) index = self.sch.get_index(288, 'name') self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 2) index = self.sch.get_index(280, 'primary') self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 1) index = self.sch.get_index(280, 'name') self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 1) def test_05_04_index_number_number(self): self.con.flush_schema() index = self.sch.get_index(288, 0) self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 2) index = self.sch.get_index(288, 2) self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 2) index = self.sch.get_index(280, 0) self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 1) index = self.sch.get_index(280, 2) self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 1) def test_06_index_cached(self): index = self.sch.get_index('_index', 'primary') self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 2) index = self.sch.get_index('_index', 2) self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 2) index = self.sch.get_index(280, 'primary') self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 1) index = self.sch.get_index(280, 2) self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 1) @classmethod def tearDownClass(self): self.srv.stop() self.srv.clean()
server.admin("box.info.vclock[5] == nil") # Cleanup server.stop() server.deploy() print("-------------------------------------------------------------") print("Start a new replica and check box.info on the start") print("-------------------------------------------------------------") # master server master = server master_id = master.get_param("id") master.admin("box.schema.user.grant('guest', 'replication')") replica = TarantoolServer(server.ini) replica.script = "replication-py/replica.lua" replica.vardir = server.vardir replica.rpl_master = master replica.deploy() replica_id = replica.get_param("id") replica_uuid = replica.get_param("uuid") sys.stdout.push_filter(replica_uuid, "<replica uuid>") replica.admin("box.info.id == {}".format(replica_id)) replica.admin("not box.info.ro") replica.admin("box.info.lsn == 0") replica.admin("box.info.vclock[{}] == nil".format(replica_id)) print("-------------------------------------------------------------") print("Modify data to bump LSN and check box.info")
class TestSuite_Schema(unittest.TestCase): @classmethod def setUpClass(self): print " SCHEMA ".center(70, "=") print "-" * 70 self.srv = TarantoolServer() self.srv.script = "tests/suites/box.lua" self.srv.start() self.con = tarantool.Connection("localhost", self.srv.args["primary"]) self.sch = self.con.schema def test_00_authenticate(self): self.assertIsNone(self.srv.admin("box.schema.user.create('test', { password = '******' })")) self.assertIsNone(self.srv.admin("box.schema.user.grant('test', 'read,write', 'space', '_space')")) self.assertIsNone(self.srv.admin("box.schema.user.grant('test', 'read,write', 'space', '_index')")) self.assertEqual(self.con.authenticate("test", "test")._data, None) def test_01_space_bad(self): with self.assertRaisesRegexp(tarantool.SchemaError, "There's no space.*"): self.sch.get_space(0) with self.assertRaisesRegexp(tarantool.SchemaError, "There's no space.*"): self.sch.get_space(0) with self.assertRaisesRegexp(tarantool.SchemaError, "There's no space.*"): self.sch.get_space("bad_name") def test_02_index_bad(self): with self.assertRaisesRegexp(tarantool.SchemaError, "There's no space.*"): self.sch.get_index(0, "primary") with self.assertRaisesRegexp(tarantool.SchemaError, "There's no space.*"): self.sch.get_index("bad_space", "primary") with self.assertRaisesRegexp(tarantool.SchemaError, "There's no index.*"): self.sch.get_index(280, "bad_index") with self.assertRaisesRegexp(tarantool.SchemaError, "There's no index.*"): self.sch.get_index(280, "bad_index") with self.assertRaisesRegexp(tarantool.SchemaError, "There's no index.*"): self.sch.get_index(280, 3) def test_03_01_space_name__(self): self.con.flush_schema() space = self.sch.get_space("_schema") self.assertEqual(space.sid, 272) self.assertEqual(space.name, "_schema") self.assertEqual(space.arity, 1) space = self.sch.get_space("_space") self.assertEqual(space.sid, 280) self.assertEqual(space.name, "_space") self.assertEqual(space.arity, 1) space = self.sch.get_space("_index") self.assertEqual(space.sid, 288) self.assertEqual(space.name, "_index") self.assertEqual(space.arity, 1) def test_03_02_space_number(self): self.con.flush_schema() space = self.sch.get_space(272) self.assertEqual(space.sid, 272) self.assertEqual(space.name, "_schema") self.assertEqual(space.arity, 1) space = self.sch.get_space(280) self.assertEqual(space.sid, 280) self.assertEqual(space.name, "_space") self.assertEqual(space.arity, 1) space = self.sch.get_space(288) self.assertEqual(space.sid, 288) self.assertEqual(space.name, "_index") self.assertEqual(space.arity, 1) def test_04_space_cached(self): space = self.sch.get_space("_schema") self.assertEqual(space.sid, 272) self.assertEqual(space.name, "_schema") self.assertEqual(space.arity, 1) space = self.sch.get_space("_space") self.assertEqual(space.sid, 280) self.assertEqual(space.name, "_space") self.assertEqual(space.arity, 1) space = self.sch.get_space("_index") self.assertEqual(space.sid, 288) self.assertEqual(space.name, "_index") self.assertEqual(space.arity, 1) def test_05_01_index_name___name__(self): self.con.flush_schema() index = self.sch.get_index("_index", "primary") self.assertEqual(index.space.name, "_index") self.assertEqual(index.iid, 0) self.assertEqual(index.name, "primary") self.assertEqual(len(index.parts), 2) index = self.sch.get_index("_index", "name") self.assertEqual(index.space.name, "_index") self.assertEqual(index.iid, 2) self.assertEqual(index.name, "name") self.assertEqual(len(index.parts), 2) index = self.sch.get_index("_space", "primary") self.assertEqual(index.space.name, "_space") self.assertEqual(index.iid, 0) self.assertEqual(index.name, "primary") self.assertEqual(len(index.parts), 1) index = self.sch.get_index("_space", "name") self.assertEqual(index.space.name, "_space") self.assertEqual(index.iid, 2) self.assertEqual(index.name, "name") self.assertEqual(len(index.parts), 1) def test_05_02_index_name___number(self): self.con.flush_schema() index = self.sch.get_index("_index", 0) self.assertEqual(index.space.name, "_index") self.assertEqual(index.iid, 0) self.assertEqual(index.name, "primary") self.assertEqual(len(index.parts), 2) index = self.sch.get_index("_index", 2) self.assertEqual(index.space.name, "_index") self.assertEqual(index.iid, 2) self.assertEqual(index.name, "name") self.assertEqual(len(index.parts), 2) index = self.sch.get_index("_space", 0) self.assertEqual(index.space.name, "_space") self.assertEqual(index.iid, 0) self.assertEqual(index.name, "primary") self.assertEqual(len(index.parts), 1) index = self.sch.get_index("_space", 2) self.assertEqual(index.space.name, "_space") self.assertEqual(index.iid, 2) self.assertEqual(index.name, "name") self.assertEqual(len(index.parts), 1) def test_05_03_index_number_name__(self): self.con.flush_schema() index = self.sch.get_index(288, "primary") self.assertEqual(index.space.name, "_index") self.assertEqual(index.iid, 0) self.assertEqual(index.name, "primary") self.assertEqual(len(index.parts), 2) index = self.sch.get_index(288, "name") self.assertEqual(index.space.name, "_index") self.assertEqual(index.iid, 2) self.assertEqual(index.name, "name") self.assertEqual(len(index.parts), 2) index = self.sch.get_index(280, "primary") self.assertEqual(index.space.name, "_space") self.assertEqual(index.iid, 0) self.assertEqual(index.name, "primary") self.assertEqual(len(index.parts), 1) index = self.sch.get_index(280, "name") self.assertEqual(index.space.name, "_space") self.assertEqual(index.iid, 2) self.assertEqual(index.name, "name") self.assertEqual(len(index.parts), 1) def test_05_04_index_number_number(self): self.con.flush_schema() index = self.sch.get_index(288, 0) self.assertEqual(index.space.name, "_index") self.assertEqual(index.iid, 0) self.assertEqual(index.name, "primary") self.assertEqual(len(index.parts), 2) index = self.sch.get_index(288, 2) self.assertEqual(index.space.name, "_index") self.assertEqual(index.iid, 2) self.assertEqual(index.name, "name") self.assertEqual(len(index.parts), 2) index = self.sch.get_index(280, 0) self.assertEqual(index.space.name, "_space") self.assertEqual(index.iid, 0) self.assertEqual(index.name, "primary") self.assertEqual(len(index.parts), 1) index = self.sch.get_index(280, 2) self.assertEqual(index.space.name, "_space") self.assertEqual(index.iid, 2) self.assertEqual(index.name, "name") self.assertEqual(len(index.parts), 1) def test_06_index_cached(self): index = self.sch.get_index("_index", "primary") self.assertEqual(index.space.name, "_index") self.assertEqual(index.iid, 0) self.assertEqual(index.name, "primary") self.assertEqual(len(index.parts), 2) index = self.sch.get_index("_index", 2) self.assertEqual(index.space.name, "_index") self.assertEqual(index.iid, 2) self.assertEqual(index.name, "name") self.assertEqual(len(index.parts), 2) index = self.sch.get_index(280, "primary") self.assertEqual(index.space.name, "_space") self.assertEqual(index.iid, 0) self.assertEqual(index.name, "primary") self.assertEqual(len(index.parts), 1) index = self.sch.get_index(280, 2) self.assertEqual(index.space.name, "_space") self.assertEqual(index.iid, 2) self.assertEqual(index.name, "name") self.assertEqual(len(index.parts), 1) @classmethod def tearDownClass(self): self.srv.stop() self.srv.clean()
# master server master = server master.admin('space = box.schema.create_space(\'test\', {id = 42})') master.admin('space:create_index(\'primary\', \'hash\', {parts = { 0, \'num\' } })') master.admin('for k = 1, 9 do space:insert(k, k*k) end') for k in glob.glob(os.path.join(master.vardir, '*.xlog')): os.unlink(k) print '-------------------------------------------------------------' print 'replica test 1 (must be failed)' print '-------------------------------------------------------------' replica = TarantoolServer() replica.deploy("replication/cfg/replica.cfg", replica.find_exe(self.args.builddir), os.path.join(self.args.vardir, "replica"), need_init=False) for i in range(1, 10): replica.admin('box.select(42, 0, %d)' % i) replica.stop() replica.cleanup(True) master.admin('box.snapshot()') master.restart() master.admin('for k = 10, 19 do box.insert(42, k, k*k*k) end')
import os import re import time from lib.tarantool_server import TarantoolServer # master server master = server master.admin( "box.schema.user.grant('guest', 'read,write,execute', 'universe')") # replica server replica = TarantoolServer() replica.script = "replication/replica.lua" replica.rpl_master = master replica.vardir = os.path.join(master.vardir, 'replica') replica.deploy() replica.get_param('node') cycles = 0 status = replica.admin.execute_no_reconnect("box.info.status", True) while (re.search(r'replica/.*/(connecting|connected)\n', status) == None and cycles < 500): time.sleep(0.01) status = replica.admin.execute_no_reconnect("box.info.status", True) cycles += 1 print(re.search(r'replica/.*/(connecting|connected)\n', status) != None) master.stop() cycles = 0
_server.sql("insert into t0 values (%d, '%s %d')" % (i, msg, i)) def select_tuples(_server, begin, end): for i in range(begin, end): _server.sql("select * from t0 where k0 = %d" % i) # master server master = server master.admin("box.schema.user.create('%s', { password = '******'})" % (LOGIN, PASSWORD)) master.admin("box.schema.user.grant('%s', 'read,write,execute', 'universe')" % LOGIN) master.sql.py_con.authenticate(LOGIN, PASSWORD) master.uri = '%s:%s@%s:%s' % (LOGIN, PASSWORD, HOST, master.sql.port) os.putenv('MASTER_PORT', master.uri) # replica server replica = TarantoolServer() replica.script = "replication/replica.lua" replica.vardir = os.path.join(server.vardir, 'replica') replica.deploy() replica.uri = '%s:%s@%s:%s' % (LOGIN, PASSWORD, HOST, replica.sql.port) replica.admin("while box.space['_priv']:len() < 1 do require('fiber').sleep(0.01) end") replica.sql.py_con.authenticate(LOGIN, PASSWORD) master.admin("s = box.schema.create_space('tweedledum', {id = 0})") master.admin("s:create_index('primary', {type = 'hash'})") ## gh-343: replica.cc must not add login and password to proc title status = replica.get_param("status") host_port = "%s:%s" % (HOST, master.sql.port) m = re.search(r'replica/(.*)/.*', status) if not m or m.group(1) != host_port:
def print_greetings(): # print information about tarantool color_stdout('\n') TarantoolServer.print_exe()
master_id = master.get_param('server')['id'] master.admin("box.schema.user.grant('guest', 'replication')") master.admin("space = box.schema.space.create('test', {id = 42})") master.admin("index = space:create_index('primary', { type = 'tree'})") master.admin('for k = 1, 9 do space:insert{k, k*k} end') data_dir = os.path.join(master.vardir, master.name) for k in glob.glob(os.path.join(data_dir, '*.xlog')): os.unlink(k) print '-------------------------------------------------------------' print 'replica test 1 (no such space)' print '-------------------------------------------------------------' replica = TarantoolServer(server.ini) replica.script = 'replication-py/replica.lua' replica.vardir = server.vardir #os.path.join(server.vardir, 'replica') replica.rpl_master = master # #1075: Box.once should wait before the server enters RW mode # # We expect the replica to get blocked in box.cfg{}, hence wait = False. # Since xlog files on master were deleted, they aren't delivered, # and replica waits indefinitely. # # Note: replica waits for a log entry indicating that this very replica # joined the cluster. Once the entry is fetched we assume that the # replica is relatively up to date and enter RW mode. Never happens in # this particular test case. replica.deploy(wait = False)
# Cleanup server.stop() server.script = script server.deploy() print '-------------------------------------------------------------' print 'Start a new replica and check box.info on the start' print '-------------------------------------------------------------' # master server master = server master_id = master.get_param('server')['id'] master.admin("box.schema.user.grant('guest', 'replication')") replica = TarantoolServer(server.ini) replica.script = 'replication/replica.lua' replica.vardir = server.vardir replica.rpl_master = master replica.deploy() replica.wait_lsn(master_id, master.get_lsn(master_id)) replica_id = replica.get_param('server')['id'] replica_uuid = replica.get_param('server')['uuid'] sys.stdout.push_filter(replica_uuid, '<replica uuid>') replica.admin('box.info.server.id == %d' % replica_id) replica.admin('not box.info.server.ro') replica.admin('box.info.server.lsn == 0') replica.admin('box.info.vclock[%d] == 0' % replica_id) print '-------------------------------------------------------------'
import os import sys import re import yaml from lib.tarantool_server import TarantoolServer server = TarantoolServer(server.ini) server.script = 'long_run/lua/finalizers.lua' server.vardir = os.path.join(server.vardir, 'finalizers') try: server.deploy() except: print "Expected error:", sys.exc_info()[0] else: print "Error! exception did not occur"
# master server master = server 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 '----------------------------------------------------------------------' # Start replicas master.id = master.get_param('id') cluster = [master] for i in range(REPLICA_N - 1): server = TarantoolServer(server.ini) server.script = 'replication-py/replica.lua' server.vardir = os.path.join(server.vardir, 'replica', str(master.id + i)) server.rpl_master = master server.deploy() # Wait replica to fully bootstrap. # Otherwise can get ACCESS_DENIED error. cluster.append(server) # Make 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')
# master server master = server 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("----------------------------------------------------------------------") # Start replicas master.id = master.get_param("id") cluster = [ master ] for i in range(REPLICA_N - 1): server = TarantoolServer(server.ini) server.script = "replication-py/replica.lua" server.vardir = os.path.join(server.vardir, "replica", str(master.id + i)) server.rpl_master = master server.deploy() # Wait replica to fully bootstrap. # Otherwise can get ACCESS_DENIED error. cluster.append(server) # Make 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")
master.admin("box.schema.user.grant('guest', 'replication')") master.admin( "space = box.schema.space.create('test', { id = 99999, engine = \"sophia\" })" ) master.admin("index = space:create_index('primary', { type = 'tree'})") master.admin('for k = 1, 123 do space:insert{k, k*k} end') master.admin('box.snapshot()') lsn = master.get_lsn(master_id) print '-------------------------------------------------------------' print 'replica JOIN' print '-------------------------------------------------------------' # replica server replica = TarantoolServer(server.ini) replica.script = 'replication/replica.lua' replica.vardir = server.vardir #os.path.join(server.vardir,'replica') replica.rpl_master = master replica.deploy() replica.wait_lsn(master_id, lsn) replica.admin('box.space.test:select()') replica.stop() replica.cleanup(True) # remove space master.admin("space:drop()") master.admin('box.snapshot()') master.admin("ffi = require('ffi')") master.admin("ffi.cdef(\"int sophia_schedule(void);\")")
import sys import time import yaml from lib.memcached_connection import MemcachedConnection from lib.tarantool_server import TarantoolServer sonet = """The expense of spirit in a waste of shame Is lust in action; and till action, lust""".split('\n') master = server master_memcached = master.memcached replica = TarantoolServer() replica.deploy("replication/cfg/replica.cfg", replica.find_exe(self.args.builddir), os.path.join(self.args.vardir, "replica")) replica_memcached = replica.memcached ################################### def get_lsn(serv): serv_admin = serv.admin resp = serv_admin("box.info.lsn", silent=True) return yaml.load(resp)[0] def wait(serv_master = master, serv_replica = replica): lsn = get_lsn(serv_master) serv_replica.wait_lsn(lsn) return lsn
from __future__ import print_function import os import sys import re import yaml from lib.tarantool_server import TarantoolServer server = TarantoolServer(server.ini) server.script = "long_run-py/lua/finalizers.lua" server.vardir = os.path.join(server.vardir, "finalizers") server.crash_expected = True try: server.deploy() except: print("Expected error:", sys.exc_info()[0]) else: print("Error! exception did not occur")
master = server master_id = master.get_param('server')['id'] master.admin("box.schema.user.grant('guest', 'replication')") master.admin("space = box.schema.space.create('test', { id = 99999, engine = \"sophia\" })") master.admin("index = space:create_index('primary', { type = 'tree'})") master.admin('for k = 1, 123 do space:insert{k, k*k} end') master.admin('box.snapshot()') lsn = master.get_lsn(master_id) print '-------------------------------------------------------------' print 'replica JOIN' print '-------------------------------------------------------------' # replica server replica = TarantoolServer(server.ini) replica.script = 'replication/replica.lua' replica.vardir = os.path.join(server.vardir, 'replica') replica.rpl_master = master replica.deploy() replica.wait_lsn(master_id, lsn) replica.admin('box.space.test:select()') replica.stop() replica.cleanup(True) # remove space master.admin("space:drop()") master.admin('box.snapshot()') master.admin("ffi = require('ffi')") master.admin("ffi.cdef(\"int sophia_schedule(void);\")")
server_sql = server.sql for i in range(begin, end): 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("select * from t0 where k0 = %d" % i) # master server master = server # replica server replica = TarantoolServer() replica.deploy("replication/cfg/replica.cfg", replica.find_exe(self.args.builddir), os.path.join(self.args.vardir, "replica")) # Id counter id = 0 print "insert to master [%d, %d) entries" % (id, id + ID_STEP) insert_tuples(master, id, id + ID_STEP, "mater") print "select from replica [%d, %d) entries" % (id, id + ID_STEP) select_tuples(replica, id, id + ID_STEP) id += ID_STEP
# master server 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("-------------------------------------------------------------") master.admin("space = box.schema.space.create('test', {id = 42})") master.admin("index = space:create_index('primary', { type = 'tree'})") master.admin("for k = 1, 9 do space:insert{k, k*k} end") replica = TarantoolServer(server.ini) replica.script = "replication-py/replica.lua" replica.vardir = server.vardir replica.rpl_master = master replica.deploy() replica.admin("box.space.test:select()") replica.restart() replica.admin("box.space.test:select()") replica.stop() replica.cleanup() print("-------------------------------------------------------------") print("replica test 2 (must be ok)") print("-------------------------------------------------------------")
class TestSuite_Schema(unittest.TestCase): @classmethod def setUpClass(self): print ' SCHEMA '.center(70, '=') print '-' * 70 self.srv = TarantoolServer() self.srv.script = 'tests/suites/box.lua' self.srv.start() self.con = tarantool.Connection('localhost', self.srv.args['primary']) self.sch = self.con.schema def test_00_authenticate(self): self.assertIsNone( self.srv.admin( "box.schema.user.create('test', { password = '******' })")) self.assertIsNone( self.srv.admin( "box.schema.user.grant('test', 'read,write', 'space', '_space')" )) self.assertIsNone( self.srv.admin( "box.schema.user.grant('test', 'read,write', 'space', '_index')" )) self.assertEqual(self.con.authenticate('test', 'test')._data, None) def test_01_space_bad(self): with self.assertRaisesRegexp(tarantool.SchemaError, 'There\'s no space.*'): self.sch.get_space(0) with self.assertRaisesRegexp(tarantool.SchemaError, 'There\'s no space.*'): self.sch.get_space(0) with self.assertRaisesRegexp(tarantool.SchemaError, 'There\'s no space.*'): self.sch.get_space('bad_name') def test_02_index_bad(self): with self.assertRaisesRegexp(tarantool.SchemaError, 'There\'s no space.*'): self.sch.get_index(0, 'primary') with self.assertRaisesRegexp(tarantool.SchemaError, 'There\'s no space.*'): self.sch.get_index('bad_space', 'primary') with self.assertRaisesRegexp(tarantool.SchemaError, 'There\'s no index.*'): self.sch.get_index(280, 'bad_index') with self.assertRaisesRegexp(tarantool.SchemaError, 'There\'s no index.*'): self.sch.get_index(280, 'bad_index') with self.assertRaisesRegexp(tarantool.SchemaError, 'There\'s no index.*'): self.sch.get_index(280, 3) def test_03_01_space_name__(self): self.con.flush_schema() space = self.sch.get_space('_schema') self.assertEqual(space.sid, 272) self.assertEqual(space.name, '_schema') self.assertEqual(space.arity, 1) space = self.sch.get_space('_space') self.assertEqual(space.sid, 280) self.assertEqual(space.name, '_space') self.assertEqual(space.arity, 1) space = self.sch.get_space('_index') self.assertEqual(space.sid, 288) self.assertEqual(space.name, '_index') self.assertEqual(space.arity, 1) def test_03_02_space_number(self): self.con.flush_schema() space = self.sch.get_space(272) self.assertEqual(space.sid, 272) self.assertEqual(space.name, '_schema') self.assertEqual(space.arity, 1) space = self.sch.get_space(280) self.assertEqual(space.sid, 280) self.assertEqual(space.name, '_space') self.assertEqual(space.arity, 1) space = self.sch.get_space(288) self.assertEqual(space.sid, 288) self.assertEqual(space.name, '_index') self.assertEqual(space.arity, 1) def test_04_space_cached(self): space = self.sch.get_space('_schema') self.assertEqual(space.sid, 272) self.assertEqual(space.name, '_schema') self.assertEqual(space.arity, 1) space = self.sch.get_space('_space') self.assertEqual(space.sid, 280) self.assertEqual(space.name, '_space') self.assertEqual(space.arity, 1) space = self.sch.get_space('_index') self.assertEqual(space.sid, 288) self.assertEqual(space.name, '_index') self.assertEqual(space.arity, 1) def test_05_01_index_name___name__(self): self.con.flush_schema() index = self.sch.get_index('_index', 'primary') self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 2) index = self.sch.get_index('_index', 'name') self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 2) index = self.sch.get_index('_space', 'primary') self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 1) index = self.sch.get_index('_space', 'name') self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 1) def test_05_02_index_name___number(self): self.con.flush_schema() index = self.sch.get_index('_index', 0) self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 2) index = self.sch.get_index('_index', 2) self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 2) index = self.sch.get_index('_space', 0) self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 1) index = self.sch.get_index('_space', 2) self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 1) def test_05_03_index_number_name__(self): self.con.flush_schema() index = self.sch.get_index(288, 'primary') self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 2) index = self.sch.get_index(288, 'name') self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 2) index = self.sch.get_index(280, 'primary') self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 1) index = self.sch.get_index(280, 'name') self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 1) def test_05_04_index_number_number(self): self.con.flush_schema() index = self.sch.get_index(288, 0) self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 2) index = self.sch.get_index(288, 2) self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 2) index = self.sch.get_index(280, 0) self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 1) index = self.sch.get_index(280, 2) self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 1) def test_06_index_cached(self): index = self.sch.get_index('_index', 'primary') self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 2) index = self.sch.get_index('_index', 2) self.assertEqual(index.space.name, '_index') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 2) index = self.sch.get_index(280, 'primary') self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 0) self.assertEqual(index.name, 'primary') self.assertEqual(len(index.parts), 1) index = self.sch.get_index(280, 2) self.assertEqual(index.space.name, '_space') self.assertEqual(index.iid, 2) self.assertEqual(index.name, 'name') self.assertEqual(len(index.parts), 1) @classmethod def tearDownClass(self): self.srv.stop() self.srv.clean()
cfgfile_backup = server.cfgfile_source master = server master.admin("space = box.schema.create_space('test', {id = 42})") master.admin("space:create_index('primary', { type = 'hash'})") master.admin('for k = 1, 9 do space:insert{k, k*k} end') for k in glob.glob(os.path.join(master.vardir, '*.xlog')): os.unlink(k) print '-------------------------------------------------------------' print 'replica test 1 (no such space)' print '-------------------------------------------------------------' replica = TarantoolServer(server.ini) replica.cfgfile_source = 'replication/cfg/replica.cfg' replica.vardir = os.path.join(server.vardir, 'replica') replica.rpl_master = master replica.deploy() replica.admin('box.space.test') replica.stop() replica.cleanup(True) master.admin('box.snapshot()') master.restart() master.admin('for k = 10, 19 do box.space[42]:insert{k, k*k*k} end') lsn = master.get_param('lsn') print '-------------------------------------------------------------'
from lib.tarantool_server import TarantoolServer from time import sleep import yaml def check_replication(nodes, select_args=''): for node in nodes: node.admin('box.space.test:select{%s}' % select_args) master = server master.admin("box.schema.user.grant('guest', 'replication')") replica = TarantoolServer(server.ini) replica.script = 'replication-py/replica.lua' replica.vardir = server.vardir replica.rpl_master = master replica.deploy() def parallel_run(cmd1, cmd2, compare): print 'parallel send: %s' % cmd1 print 'parallel send: %s' % cmd2 master.admin.socket.sendall('%s\n' % cmd1) replica.admin.socket.sendall('%s\n' % cmd2) master.admin.socket.recv(2048) replica.admin.socket.recv(2048) # wait for status changing in tarantool master_status = yaml.load(
class Request(unittest.TestCase): @classmethod def setUpClass(self): print ' DML '.center(70, '=') print '-' * 70 self.srv = TarantoolServer() self.srv.script = 'tests/suites/box.lua' self.srv.start() self.con = tarantool.Connection('localhost', self.srv.args['primary']) self.adm = self.srv.admin self.space_created = self.adm("box.schema.create_space('space_1')") self.adm("box.space['space_1']:create_index('primary', {type = 'tree', parts = {1, 'num'}, unique = true})") self.adm("box.space['space_1']:create_index('secondary', {type = 'tree', parts = {2, 'num', 3, 'str'}, unique = true})") self.adm("json = require('json')") self.adm("fiber = require('fiber')") self.adm("uuid = require('uuid')") def test_00_00_authenticate(self): self.assertIsNone(self.srv.admin("box.schema.user.create('test', { password = '******' })")) self.assertIsNone(self.srv.admin("box.schema.user.grant('test', 'execute,read,write', 'universe')")) self.assertEqual(self.con.authenticate('test', 'test')._data, None) def test_00_01_space_created(self): # Check that space is created in setUpClass self.assertEqual(self.space_created[1], 'created') def test_00_02_fill_space(self): # Fill space with values for i in xrange(1, 500): self.assertEqual( self.con.insert('space_1', [i, i%5, 'tuple_'+str(i)])[0], [i, i%5, 'tuple_'+str(i)] ) def test_00_03_answer_repr(self): repr_str = \ '''- [1, 1, tuple_1] ''' self.assertEqual(repr(self.con.select('space_1', 1)), repr_str) def test_02_select(self): # Check that select with different keys are Ok. (With and without index names) self.assertEqual(self.con.select('space_1', 20), [[20, 0, 'tuple_20']]) self.assertEqual(self.con.select('space_1', [21]), [[21, 1, 'tuple_21']]) self.assertEqual(self.con.select('space_1', [22], index='primary'), [[22, 2, 'tuple_22']]) self.assertEqual(self.con.select('space_1', [23], index='primary'), [[23, 3, 'tuple_23']]) # Check that Offset and Limit args are working fine. self.assertEqual(self.con.select('space_1', [20], index='primary', limit=1), [[20, 0, 'tuple_20']]) # With other indexes too self.assertEqual( sorted( self.con.select('space_1', [0], index='secondary', offset=3, limit=0), key = lambda x: x[0]), [] ) self.assertEqual( sorted( self.con.select('space_1', [0], index='secondary', offset=3, limit=1), key = lambda x: x[0]), [[110, 0, 'tuple_110']] ) self.assertEqual( sorted( self.con.select('space_1', [0], index='secondary', offset=3, limit=2), key = lambda x: x[0]), [[110, 0, 'tuple_110'],\ [115, 0, 'tuple_115']] ) select_req = self.con.select('space_1', [0], index='secondary') self.assertEqual(len(select_req), 99) for i in select_req: self.assertTrue(not (i[0] % 5)) self.assertTrue(not i[1]) self.assertTrue(i[2] == 'tuple_' + str(i[0])) # Check limit again. self.assertEqual(len(self.con.select('space_1', [0, 'tuple_20'], index='secondary', limit=0)), 0) self.assertEqual(len(self.con.select('space_1', [0], index='secondary', limit=0)), 0) self.assertEqual(len(self.con.select('space_1', [0], index='secondary', limit=100)), 99) self.assertEqual(len(self.con.select('space_1', [0], index='secondary', limit=50)), 50) # TODO: Check iterator_types def test_03_delete(self): # Check that delete works fine self.assertEqual(self.con.delete('space_1', 20), [[20, 0, 'tuple_20']]) self.assertEqual(self.con.delete('space_1', [20]), []) self.assertEqual(self.con.select('space_1', [20], index='primary'), []) # Check that <index_id> field has no meaning, yet. with self.assertRaisesRegexp(tarantool.DatabaseError, '(19, .*)'): self.con.delete('space_1', [1, 'tuple_21']) self.assertEqual(self.con.select('space_1', [21], index='primary'), [[21, 1, 'tuple_21']]) def test_04_replace(self): # Check replace that is Ok. self.assertEqual(self.con.replace('space_1', [2, 2, 'tuple_3']), [[2, 2, 'tuple_3']]) self.assertEqual(self.con.select('space_1', 2), [[2, 2, 'tuple_3']]) # Check replace that isn't Ok. with self.assertRaisesRegexp(tarantool.DatabaseError, '(39, .*)'): self.assertEqual(self.con.replace('space_1', [2, 2]), [[2, 2, 'tuple_2']]) def test_05_ping(self): # Simple ping test # * No exceptions are raised # * Ping time > 0 self.assertTrue(self.con.ping() > 0) self.assertEqual(self.con.ping(notime=True), "Success") def test_06_update(self): self.assertEqual(self.con.update('space_1', (2,), [('+', 1, 3)]), [[2, 5, 'tuple_3']]) self.assertEqual(self.con.update('space_1', (2,), [('-', 1, 3)]), [[2, 2, 'tuple_3']]) self.assertEqual(self.con.update('space_1', (2,), [(':', 2, 3, 2, 'lalal')]), [[2, 2, 'tuplalal_3']]) self.assertEqual(self.con.update('space_1', (2,), [('!', 2, '1')]), [[2, 2, '1', 'tuplalal_3']]) self.assertEqual(self.con.update('space_1', (2,), [('!', 2, 'oingo, boingo')]), [[2, 2, 'oingo, boingo', '1', 'tuplalal_3']]) self.assertEqual(self.con.update('space_1', (2,), [('#', 2, 2)]), [[2, 2, 'tuplalal_3']]) def test_07_call(self): self.assertEqual(self.con.call('json.decode', '[123, 234, 345]'), [[123, 234, 345]]) self.assertEqual(self.con.call('json.decode', ['[123, 234, 345]']), [[123, 234, 345]]) self.assertEqual(self.con.call('json.decode', ('[123, 234, 345]',)), [[123, 234, 345]]) with self.assertRaisesRegexp(tarantool.DatabaseError, '(32, .*)'): self.con.call('json.decode') with self.assertRaisesRegexp(tarantool.DatabaseError, '(22, .*)'): self.con.call('json.decode', '{"hello": "world"}') ans = self.con.call('fiber.time') self.assertEqual(len(ans), 1) self.assertEqual(len(ans[0]), 1) self.assertIsInstance(ans[0][0], float) ans = self.con.call('fiber.time64') self.assertEqual(len(ans), 1) self.assertEqual(len(ans[0]), 1) self.assertIsInstance(ans[0][0], (int, long)) ans = self.con.call('uuid.str') self.assertEqual(len(ans), 1) self.assertEqual(len(ans[0]), 1) self.assertIsInstance(ans[0][0], str) # ans = self.con.call('uuid.hex') # self.assertEqual(len(ans), 1) # self.assertEqual(len(ans[0]), 1) # self.assertIsInstance(ans[0][0], str) # with self.assertRaisesRegexp(tarantool.DatabaseError, # '(12345, \'lol, error\')'): # self.con.call('box.error', [12345, 'lol, error']) self.assertEqual(self.con.call('box.tuple.new', [1, 2, 3, 'fld_1']), [[1, 2, 3, 'fld_1']]) self.assertEqual(self.con.call('box.tuple.new', 'fld_1'), [['fld_1']]) @classmethod def tearDownClass(self): self.srv.stop() self.srv.clean()
import os from glob import iglob as glob from lib.tarantool_server import TarantoolServer # master server master = server master_id = master.get_param('server')['id'] master.admin("box.schema.user.grant('guest', 'replication')") replica = TarantoolServer(server.ini) replica.script = 'replication/replica.lua' replica.vardir = server.vardir #os.path.join(server.vardir, 'replica') replica.rpl_master = master replica.deploy() replica.wait_lsn(master_id, master.get_lsn(master_id)) replica_id = replica.get_param('server')['id'] replica.admin('box.info.server.id') replica.admin('box.info.server.ro') replica.admin('box.info.server.lsn') replica.stop() print '-------------------------------------------------------------' print 'replica is read-only until receive self server_id in _cluster' print '-------------------------------------------------------------' # Remove xlog retrived by SUBSCRIBE filename = str(0).zfill(20) + ".xlog" wal = os.path.join(os.path.join(replica.vardir, replica.name), filename) os.remove(wal)
import os import re import time from lib.tarantool_server import TarantoolServer # master server master = server master.admin("box.schema.user.grant('guest', 'read,write,execute', 'universe')") # replica server replica = TarantoolServer() replica.script = "replication/replica.lua" replica.rpl_master = master replica.vardir = os.path.join(master.vardir, 'replica') replica.deploy() replica.get_param('node') cycles = 0 status = replica.admin.execute_no_reconnect("box.info.status", True) while (re.search(r'replica/.*/(connecting|connected)\n', status) == None and cycles < 500): time.sleep(0.01) status = replica.admin.execute_no_reconnect("box.info.status", True) cycles += 1 print(re.search(r'replica/.*/(connecting|connected)\n', status) != None) master.stop() cycles = 0 while (re.search(r'replica/.*/(connecting|failed)\n', status) == None and cycles < 500):
def check_connection(con): try: s = con.space('test') print(s.select()) except NetworkError: print('NetworkError !') except Exception as e: print(e) # Start instances master = server cluster = [master] for i in range(INSTANCE_N): server = TarantoolServer(server.ini) server.script = 'cluster-py/instance%d.lua' % (i+1) server.vardir = os.path.join(server.vardir, 'instance', str(i)) server.deploy() server.admin("box.schema.user.grant('guest', 'read,write,execute', 'universe')") server.admin("_ = box.schema.space.create('test')") server.admin("_ = box.space.test:create_index('primary')") server.admin("box.space.test:insert{%d, %s}" % (1, i), silent = True) cluster.append(server) # Make a list of servers sources = [] for server in cluster[1:]: sources.append(yaml.safe_load(server.admin('box.cfg.listen', silent=True))[0]) addrs = []
# Cleanup server.stop() server.script = script server.deploy() print '-------------------------------------------------------------' print 'Start a new replica and check box.info on the start' print '-------------------------------------------------------------' # master server master = server master_id = master.get_param('server')['id'] master.admin("box.schema.user.grant('guest', 'replication')") replica = TarantoolServer(server.ini) replica.script = 'replication-py/replica.lua' replica.vardir = server.vardir replica.rpl_master = master replica.deploy() replica.wait_lsn(master_id, master.get_lsn(master_id)) replica_id = replica.get_param('server')['id'] replica_uuid = replica.get_param('server')['uuid'] sys.stdout.push_filter(replica_uuid, '<replica uuid>') replica.admin('box.info.server.id == %d' % replica_id) replica.admin('not box.info.server.ro') replica.admin('box.info.server.lsn == 0') replica.admin('box.info.vclock[%d] == 0' % replica_id) print '-------------------------------------------------------------'
# master server 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 '-------------------------------------------------------------' master.admin("space = box.schema.space.create('test', {id = 42})") master.admin("index = space:create_index('primary', { type = 'tree'})") master.admin('for k = 1, 9 do space:insert{k, k*k} end') replica = TarantoolServer(server.ini) replica.script = 'replication-py/replica.lua' replica.vardir = server.vardir #os.path.join(server.vardir, 'replica') replica.rpl_master = master replica.deploy() replica.admin('box.space.test:select()') replica.restart() replica.admin('box.space.test:select()') replica.stop() replica.cleanup() print '-------------------------------------------------------------' print 'replica test 2 (must be ok)' print '-------------------------------------------------------------'
ID_STEP = 5 def insert_tuples(_server, begin, end, msg = "tuple"): for i in range(begin, end): _server.sql("insert into t0 values (%d, '%s %d')" % (i, msg, i)) def select_tuples(_server, begin, end, lsn): _server.wait_lsn(lsn) for i in range(begin, end): _server.sql("select * from t0 where k0 = %d" % i) # master server master = server # replica server replica = TarantoolServer() replica.deploy("replication/cfg/replica.cfg", replica.find_exe(self.args.builddir), os.path.join(self.args.vardir, "replica")) schema = { 0 : { 'default_type': tarantool.STR, 'fields' : { 0 : tarantool.NUM, 1 : tarantool.STR }, 'indexes': { 0 : [0] # HASH } }