From f720b8e48e8e38535acb55041c8dab3be612a7e3 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Fri, 29 Sep 2023 12:24:22 +0000 Subject: [PATCH] test suite: prune `sys.path`, set `PYTHONPATH` to overlay root - when running scripts under the exec wrapper, ensure that directories in `sys.path` contain no potentially importable names not present in the production environment --- mmgen/data/version | 2 +- scripts/exec_wrapper.py | 12 ++++++++---- test/include/test_init.py | 4 ++-- test/test.py | 8 ++++++-- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/mmgen/data/version b/mmgen/data/version index e989801d..9999b6af 100644 --- a/mmgen/data/version +++ b/mmgen/data/version @@ -1 +1 @@ -14.0.dev3 +14.0.dev4 diff --git a/scripts/exec_wrapper.py b/scripts/exec_wrapper.py index b8e06b41..531c2113 100755 --- a/scripts/exec_wrapper.py +++ b/scripts/exec_wrapper.py @@ -13,8 +13,12 @@ def exec_wrapper_get_colors(): def exec_wrapper_init(): - if exec_wrapper_os.path.dirname(exec_wrapper_sys.argv[1]) == 'test': # scripts in ./test do overlay setup themselves - exec_wrapper_sys.path[0] = 'test' + if exec_wrapper_os.path.dirname(exec_wrapper_sys.argv[1]) == 'test': + 'support running of test scripts under wrapper' + cwd = exec_wrapper_os.getcwd() # assume we’re in repo root + exec_wrapper_sys.path[1] = cwd + from test.overlay import get_overlay_tree_dir + exec_wrapper_sys.path[0] = get_overlay_tree_dir(cwd) else: exec_wrapper_sys.path.pop(0) @@ -111,12 +115,12 @@ import sys as exec_wrapper_sys import os as exec_wrapper_os import time as exec_wrapper_time -exec_wrapper_init() # sets sys.path[0], runs overlay_setup() +exec_wrapper_init() # sets sys.path[0] to overlay root if exec_wrapper_os.getenv('MMGEN_TRACEMALLOC'): exec_wrapper_tracemalloc_setup() -# import mmgen mods only after overlay setup! +# import mmgen mods only after sys.path[0] is set to overlay root! from mmgen.devinit import init_dev as exec_wrapper_init_dev exec_wrapper_init_dev() diff --git a/test/include/test_init.py b/test/include/test_init.py index 7fcefc51..2f421a94 100755 --- a/test/include/test_init.py +++ b/test/include/test_init.py @@ -19,8 +19,8 @@ os.chdir(repo_root) sys.path[0] = repo_root from test.overlay import overlay_setup -overlay_setup(repo_root) -os.environ['PYTHONPATH'] = repo_root +overlay_root = overlay_setup(repo_root) +os.environ['PYTHONPATH'] = overlay_root if 'TMUX' in os.environ: del os.environ['TMUX'] diff --git a/test/test.py b/test/test.py index 65ca8ef2..f779c43a 100755 --- a/test/test.py +++ b/test/test.py @@ -85,8 +85,12 @@ if sys.argv[-1] == 'clean': print(f'Removed {os.path.relpath(overlay_tree_dir)!r}') else: # overlay must be set up before importing mmgen mods! - import include.test_init - repo_root = include.test_init.repo_root + try: + import include.test_init + repo_root = include.test_init.repo_root + except ModuleNotFoundError: # allow running under exec_wrapper + import test.include.test_init + repo_root = test.include.test_init.repo_root from mmgen.common import *