diff --git a/smartsim/_core/launcher/step/localStep.py b/smartsim/_core/launcher/step/localStep.py index 2628a0e8d..0c5337d54 100644 --- a/smartsim/_core/launcher/step/localStep.py +++ b/smartsim/_core/launcher/step/localStep.py @@ -53,6 +53,9 @@ def get_launch_cmd(self): launch_script_path = self.get_colocated_launch_script() cmd.extend([bash, launch_script_path]) + if self.run_settings.container: + cmd += self.run_settings.container._container_cmds() + # build executable cmd.extend(self.run_settings.exe) if self.run_settings.exe_args: diff --git a/tests/test_configs/check_dirs.py b/tests/test_configs/check_dirs.py new file mode 100644 index 000000000..535330646 --- /dev/null +++ b/tests/test_configs/check_dirs.py @@ -0,0 +1,13 @@ +import os +from pathlib import Path + +''' +Verify home directory only contains a single directory. +This script is intended to be run by a container test with a test directory +mounted into the $HOME directory. +''' + +directories=os.listdir(str(Path.home())) +print(directories) +assert len(directories) == 1 + diff --git a/tests/test_containers.py b/tests/test_containers.py index d09454ae2..4d6c5cd31 100644 --- a/tests/test_containers.py +++ b/tests/test_containers.py @@ -1,5 +1,7 @@ import pytest from shutil import which +from pathlib import Path +import os from smartsim import Experiment, status from smartsim._core.utils import installed_redisai_backends @@ -49,6 +51,7 @@ def test_singularity_commands(fileutils): @pytest.mark.skipif(not singularity_exists, reason="Test needs singularity to run") def test_singularity_basic(fileutils): + '''Basic argument-less Singularity test''' test_dir = fileutils.make_test_dir() container = Singularity(containerURI) @@ -65,9 +68,34 @@ def test_singularity_basic(fileutils): exp.start(model, summary=False) # get and confirm status - statuses = exp.get_status(model) - if not all([stat == status.STATUS_COMPLETED for stat in statuses]): - assert False # client ensemble failed + stat = exp.get_status(model)[0] + assert stat == status.STATUS_COMPLETED + + print(exp.summary()) + + +@pytest.mark.skipif(not singularity_exists, reason="Test needs singularity to run") +def test_singularity_args(fileutils): + '''Test combinations of args and mount arguments for Singularity''' + test_dir = fileutils.make_test_dir() + hometest_dir = os.path.join(str(Path.home()), 'test') # $HOME/test + mount_paths = {test_dir + '/singularity_args': hometest_dir} + container = Singularity(containerURI, args='--contain', mount=mount_paths) + + exp = Experiment("singularity_args", launcher="local", exp_path=test_dir) + + run_settings = exp.create_run_settings('python3', 'test/check_dirs.py', + container=container) + model = exp.create_model("singularity_args", run_settings) + script = fileutils.get_test_conf_path("check_dirs.py") + model.attach_generator_files(to_copy=[script]) + exp.generate(model) + + exp.start(model, summary=False) + + # get and confirm status + stat = exp.get_status(model)[0] + assert stat == status.STATUS_COMPLETED print(exp.summary())