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
This commit is contained in:
The MMGen Project 2023-09-29 12:24:22 +00:00
commit f720b8e48e
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
4 changed files with 17 additions and 9 deletions

View file

@ -1 +1 @@
14.0.dev3
14.0.dev4

View file

@ -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()

View file

@ -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']

View file

@ -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 *