diff --git a/cli/running/base_instance.go b/cli/running/base_instance.go index 44868ad27..fb0fbb16f 100644 --- a/cli/running/base_instance.go +++ b/cli/running/base_instance.go @@ -1,6 +1,7 @@ package running import ( + "errors" "fmt" "io" "os" @@ -150,6 +151,9 @@ func (inst *baseInstance) StopWithSignal(waitTimeout time.Duration, usedSignal o func (inst *baseInstance) Run(opts RunOpts) error { f, err := inst.integrityCtx.Repository.Read(inst.tarantoolPath) if err != nil { + if os.IsNotExist(err) { + return errors.New("tarantool executable is not found") + } return err } f.Close() diff --git a/test/integration/run/test_run.py b/test/integration/run/test_run.py index fa9c3bc62..c11bf7906 100644 --- a/test/integration/run/test_run.py +++ b/test/integration/run/test_run.py @@ -3,6 +3,10 @@ import shutil import subprocess +import pytest + +from utils import config_name + def test_run_base_functionality(tt_cmd, tmpdir_with_cfg): # Copy the test application to the "run" directory. @@ -128,3 +132,23 @@ def test_run_from_input(tt_cmd, tmpdir_with_cfg): run_output = process.stdout.readlines() assert re.search(r"a\s+b\s+c", run_output[0]) assert re.search(r"a\s+b\s+c", run_output[0]) + + +@pytest.mark.notarantool +@pytest.mark.skipif(shutil.which("tarantool") is not None, reason="tarantool found in PATH") +def test_run_without_tarantool(tt_cmd, tmp_path): + with open(tmp_path / config_name, "w") as f: + f.write('env:') + + run_cmd = [tt_cmd, "run", "--version"] + tt_process = subprocess.Popen( + run_cmd, + cwd=tmp_path, + stderr=subprocess.STDOUT, + stdout=subprocess.PIPE, + text=True + ) + + tt_process.wait(3) + assert tt_process.returncode != 0 + assert "tarantool executable is not found" in tt_process.stdout.read()