From f0bcd78b6791a41fa49d41ac494e53a0c1dc0949 Mon Sep 17 00:00:00 2001
From: Yaroslav Lobankov <y.lobankov@tarantool.org>
Date: Mon, 26 Aug 2024 20:54:32 +0400
Subject: [PATCH] test: use `justrun` module from luatest

NO_DOC=test
NO_TEST=test
NO_CHANGELOG=test

(cherry picked from commit 90d197ded13d49dfc405ff80bbd183b2e260dc56)
---
 ...0_abort_recording_on_fiber_switch_test.lua |   2 +-
 ...rors_in_init_scripts_are_stripped_test.lua |   2 +-
 .../gh_5983_jit_library_smoke_tests_test.lua  |   2 +-
 test/app-luatest/module_search_test.lua       |   2 +-
 test/app-luatest/override_misc_test.lua       |   2 +-
 test/app-luatest/override_panic_test.lua      |   2 +-
 test/app-luatest/override_test.lua            |   2 +-
 test/app-luatest/preload_test.lua             |   2 +-
 test/box-luatest/box_cfg_env_test.lua         |   2 +-
 test/justrun.lua                              | 152 ------------------
 10 files changed, 9 insertions(+), 161 deletions(-)
 delete mode 100644 test/justrun.lua

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 86b7131096..f9d0120e55 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 0ef38cba0d..2f8a434a62 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 fb7d7d957c..a53e805850 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 33d2080e15..bcc165b872 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 04a2be6342..2ce3802ce1 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 a0d693c96c..c0346e30fc 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 71cf625741..b1fb0d9d2c 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 522c979ae3..d9546bb50f 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 4d1ee116c7..6bd3264b5e 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 953b53fefe..0000000000
--- 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
-- 
GitLab