diff --git a/test/app-luatest/gh_1700_abort_recording_on_fiber_switch_test.lua b/test/app-luatest/gh_1700_abort_recording_on_fiber_switch_test.lua index 86b7131096ac6b7636cd39eaeb40aed2f897236b..f9d0120e556a65fa30d35eb141352c196f764f06 100644 --- a/test/app-luatest/gh_1700_abort_recording_on_fiber_switch_test.lua +++ b/test/app-luatest/gh_1700_abort_recording_on_fiber_switch_test.lua @@ -1,6 +1,6 @@ local t = require('luatest') local treegen = require('luatest.treegen') -local justrun = require('test.justrun').tarantool +local justrun = require('luatest.justrun').tarantool local pathjoin = require('fio').pathjoin local g = t.group() diff --git a/test/app-luatest/gh_4975_errors_in_init_scripts_are_stripped_test.lua b/test/app-luatest/gh_4975_errors_in_init_scripts_are_stripped_test.lua index 0ef38cba0d9c3b9b238735e48a156dd543d35bce..2f8a434a62ccbe4d4224480da270d985f334394d 100644 --- a/test/app-luatest/gh_4975_errors_in_init_scripts_are_stripped_test.lua +++ b/test/app-luatest/gh_4975_errors_in_init_scripts_are_stripped_test.lua @@ -1,5 +1,5 @@ local t = require('luatest') -local justrun = require('test.justrun') +local justrun = require('luatest.justrun') local g = t.group('gh-4975') diff --git a/test/app-luatest/gh_5983_jit_library_smoke_tests_test.lua b/test/app-luatest/gh_5983_jit_library_smoke_tests_test.lua index fb7d7d957c1a02b52ed2a8c46fd4ab4b98f22733..a53e805850506bc14919c38cd7576ffe7cae3797 100644 --- a/test/app-luatest/gh_5983_jit_library_smoke_tests_test.lua +++ b/test/app-luatest/gh_5983_jit_library_smoke_tests_test.lua @@ -1,6 +1,6 @@ local t = require('luatest') local treegen = require('luatest.treegen') -local justrun = require('test.justrun').tarantool +local justrun = require('luatest.justrun').tarantool local g = t.group() diff --git a/test/app-luatest/module_search_test.lua b/test/app-luatest/module_search_test.lua index 33d2080e15aebf68e76d00225db8c98601edc212..bcc165b872ef687ce31ede4f19c11e021048493b 100644 --- a/test/app-luatest/module_search_test.lua +++ b/test/app-luatest/module_search_test.lua @@ -2,7 +2,7 @@ local fio = require('fio') local t = require('luatest') local treegen = require('luatest.treegen') -local justrun = require('test.justrun') +local justrun = require('luatest.justrun') local g = t.group() diff --git a/test/app-luatest/override_misc_test.lua b/test/app-luatest/override_misc_test.lua index 04a2be63421df248d6d01462f17d75a61e4c87be..2ce3802ce1ffea59c36070dca6e2cef407e03534 100644 --- a/test/app-luatest/override_misc_test.lua +++ b/test/app-luatest/override_misc_test.lua @@ -1,6 +1,6 @@ local t = require('luatest') local treegen = require('luatest.treegen') -local justrun = require('test.justrun') +local justrun = require('luatest.justrun') local g = t.group() diff --git a/test/app-luatest/override_panic_test.lua b/test/app-luatest/override_panic_test.lua index a0d693c96ce179e13e62cc6eda3520f17886b424..c0346e30fcd803d8ce8cef9c8a8175c73f66e57e 100644 --- a/test/app-luatest/override_panic_test.lua +++ b/test/app-luatest/override_panic_test.lua @@ -1,6 +1,6 @@ local t = require('luatest') local treegen = require('luatest.treegen') -local justrun = require('test.justrun') +local justrun = require('luatest.justrun') local g = t.group() diff --git a/test/app-luatest/override_test.lua b/test/app-luatest/override_test.lua index 71cf6257415722b13492096071d374f86d173f09..b1fb0d9d2c59a496853532fd7a4ef1ac83182ce2 100644 --- a/test/app-luatest/override_test.lua +++ b/test/app-luatest/override_test.lua @@ -1,6 +1,6 @@ local t = require('luatest') local treegen = require('luatest.treegen') -local justrun = require('test.justrun') +local justrun = require('luatest.justrun') local g = t.group() diff --git a/test/app-luatest/preload_test.lua b/test/app-luatest/preload_test.lua index 522c979ae36b37823ae82b5b0657bbaad28285b5..d9546bb50ffa7f07297e35f6343042f18e62c602 100644 --- a/test/app-luatest/preload_test.lua +++ b/test/app-luatest/preload_test.lua @@ -1,7 +1,7 @@ local fio = require('fio') local t = require('luatest') local treegen = require('luatest.treegen') -local justrun = require('test.justrun') +local justrun = require('luatest.justrun') local g = t.group() diff --git a/test/box-luatest/box_cfg_env_test.lua b/test/box-luatest/box_cfg_env_test.lua index 4d1ee116c7ee414dbf7d1a4c42c031f8adb16b80..6bd3264b5ec41c435b94e2a938c157c39387eb04 100644 --- a/test/box-luatest/box_cfg_env_test.lua +++ b/test/box-luatest/box_cfg_env_test.lua @@ -2,7 +2,7 @@ local fun = require('fun') local json = require('json') local t = require('luatest') local treegen = require('luatest.treegen') -local justrun = require('test.justrun') +local justrun = require('luatest.justrun') local g = t.group() diff --git a/test/justrun.lua b/test/justrun.lua deleted file mode 100644 index 953b53fefe90a9d96a81a571dee9e26f255c4fe2..0000000000000000000000000000000000000000 --- a/test/justrun.lua +++ /dev/null @@ -1,152 +0,0 @@ -local fun = require('fun') -local log = require('log') -local json = require('json') -local fiber = require('fiber') -local popen = require('popen') - -local justrun = {} - -local function collect_stderr(ph) - local f = fiber.new(function() - local fiber_name = "child's stderr collector" - fiber.name(fiber_name, {truncate = true}) - - local chunks = {} - - while true do - local chunk, err = ph:read({stderr = true}) - if chunk == nil then - log.warn(('%s: got error, exiting: %s'):format( - fiber_name, tostring(err))) - break - end - if chunk == '' then - log.info(('%s: got EOF, exiting'):format(fiber_name)) - break - end - table.insert(chunks, chunk) - end - - -- Glue all chunks, strip trailing newline. - return table.concat(chunks):rstrip() - end) - f:set_joinable(true) - return f -end - -local function cancel_stderr_fiber(stderr_fiber) - if stderr_fiber == nil then - return - end - stderr_fiber:cancel() -end - -local function join_stderr_fiber(stderr_fiber) - if stderr_fiber == nil then - return - end - return select(2, assert(stderr_fiber:join())) -end - --- Run tarantool in given directory with given environment and --- command line arguments and catch its output. --- --- Expects JSON lines as the output and parses it into an array --- (it can be disabled using `nojson` option). --- --- Options: --- --- - nojson (boolean, default: false) --- --- Don't attempt to decode stdout as a stream of JSON lines, --- return as is. --- --- - stderr (boolean, default: false) --- --- Collect stderr and place it into the `stderr` field of the --- return value --- --- - quote_args (boolean, default: false) --- --- Quote CLI arguments before concatenating them into a shell --- command. -function justrun.tarantool(dir, env, args, opts) - assert(type(dir) == 'string') - assert(type(env) == 'table') - assert(type(args) == 'table') - local opts = opts or {} - assert(type(opts) == 'table') - - -- Prevent system/user inputrc configuration file from - -- influencing testing code. - env['INPUTRC'] = '/dev/null' - - local tarantool_exe = arg[-1] - -- Use popen.shell() instead of popen.new() due to lack of - -- cwd option in popen (gh-5633). - local env_str = table.concat(fun.iter(env):map(function(k, v) - return ('%s=%q'):format(k, v) - end):totable(), ' ') - local args_str = table.concat(fun.iter(args):map(function(v) - return opts.quote_args and ('%q'):format(v) or v - end):totable(), ' ') - local command = ('cd %s && %s %s %s'):format(dir, env_str, tarantool_exe, - args_str) - log.info(('Running a command: %s'):format(command)) - local mode = opts.stderr and 'rR' or 'r' - local ph = popen.shell(command, mode) - - local stderr_fiber - if opts.stderr then - stderr_fiber = collect_stderr(ph) - end - - -- Read everything until EOF. - local chunks = {} - while true do - local chunk, err = ph:read() - if chunk == nil then - cancel_stderr_fiber(stderr_fiber) - ph:close() - error(err) - end - if chunk == '' then -- EOF - break - end - table.insert(chunks, chunk) - end - - local exit_code = ph:wait().exit_code - local stderr = join_stderr_fiber(stderr_fiber) - ph:close() - - -- If an error occurs, discard the output and return only the - -- exit code. However, return stderr. - if exit_code ~= 0 then - return { - exit_code = exit_code, - stderr = stderr, - } - end - - -- Glue all chunks, strip trailing newline. - local res = table.concat(chunks):rstrip() - log.info(('Command output:\n%s'):format(res)) - - -- Decode JSON object per line into array of tables (if - -- `nojson` option is not passed). - local decoded - if opts.nojson then - decoded = res - else - decoded = fun.iter(res:split('\n')):map(json.decode):totable() - end - - return { - exit_code = exit_code, - stdout = decoded, - stderr = stderr, - } -end - -return justrun