diff --git a/test/integration-tests/README.md b/test/integration-tests/README.md index 229e802632..e5f7c76713 100644 --- a/test/integration-tests/README.md +++ b/test/integration-tests/README.md @@ -120,6 +120,15 @@ rerun the test. `TEST_NO_KVM=1`: Disable qemu KVM auto-detection (may be necessary when you're trying to run the *vanilla* qemu and have both qemu and qemu-kvm installed) +`TEST_MKOSI_ARGS=options`: Extra options (split like a shell command line) +passed to the `mkosi` invocation that launches the test image, without +affecting the image build. Only the `--option=value` syntax is accepted. For example, +`TEST_MKOSI_ARGS="--format=directory --output-dir=build/mkosi.output.dir"` +boots the test container from a directory format output (which has to be built +beforehand, into a separate output directory), allowing boot mode tests to run +in environments that can't dissect disk images, such as unprivileged +containers, where loop devices and udev are not available. + `TEST_MATCH_SUBTEST=subtest`: If the test makes use of `run_subtests` use this variable to provide a POSIX extended regex to run only subtests matching the expression. diff --git a/test/integration-tests/integration-test-wrapper.py b/test/integration-tests/integration-test-wrapper.py index 19dcf2bc28..1324b6ccd3 100755 --- a/test/integration-tests/integration-test-wrapper.py +++ b/test/integration-tests/integration-test-wrapper.py @@ -670,6 +670,12 @@ def main() -> None: ''' ) + # Extra mkosi options for this invocation only. Each has to use the '--option=value' syntax. + test_mkosi_args = shlex.split(os.getenv('TEST_MKOSI_ARGS', '')) + for arg in test_mkosi_args: + if not re.fullmatch('--[^=]+=.*', arg): + sys.exit(f"TEST_MKOSI_ARGS must contain only '--option=value' mkosi options, got: {arg}") + cmd = [ args.mkosi, '--directory', os.fspath(args.mkosi_dir), @@ -713,6 +719,7 @@ def main() -> None: ), '--credential', f"journal.storage={'persistent' if sys.stdin.isatty() else args.storage}", *(['--runtime-build-sources=no', '--register=no'] if not sys.stdin.isatty() else []), + *test_mkosi_args, 'vm' if vm else 'boot', *( [