diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cddadc3b0..f82f34900 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -518,6 +518,7 @@ build-wayland-only@x86_64: ./src/tests/meta-dbus-runner.py --launch=pipewire --launch=wireplumber + -- meson test -C build --setup plain @@ -680,6 +681,7 @@ dist-mutter: ./src/tests/meta-dbus-runner.py --launch=pipewire --launch=wireplumber + -- meson dist -C build artifacts: expire_in: 7 day diff --git a/src/tests/kvm/meson.build b/src/tests/kvm/meson.build index 94de0db97..9206dbf69 100644 --- a/src/tests/kvm/meson.build +++ b/src/tests/kvm/meson.build @@ -50,7 +50,7 @@ foreach test_case: privileged_tests args: [ kernel_image_path, meta_dbus_runner.full_path(), - '--kvm', + '--kvm --', meson.current_build_dir(), vm_env, kvm_wrapper, diff --git a/src/tests/kvm/virtme-run.sh b/src/tests/kvm/virtme-run.sh index d712864e0..3ec8099e2 100755 --- a/src/tests/kvm/virtme-run.sh +++ b/src/tests/kvm/virtme-run.sh @@ -40,6 +40,10 @@ SCRIPT="\ $(printf "\"%s\" " "${@:6}")\ " +if [ -v "$MUTTER_TEST_ROOT" ]; then + ISOLATE_DIRS_ARGS="--rwdir=$MUTTER_TEST_ROOT" +fi + echo Running tests in virtual machine ... virtme-run \ --memory=1024M \ @@ -47,6 +51,7 @@ virtme-run \ --pwd \ --kimg "$IMAGE" \ --script-sh "sh -c \"$SCRIPT\"" \ + $ISOLATE_DIRS_ARGS \ --qemu-opts -cpu host,pdcm=off -smp 2 VM_RESULT=$? if [ $VM_RESULT != 0 ]; then diff --git a/src/tests/mutter_dbusrunner.py b/src/tests/mutter_dbusrunner.py index 2954d09e8..8d5893b16 100644 --- a/src/tests/mutter_dbusrunner.py +++ b/src/tests/mutter_dbusrunner.py @@ -8,6 +8,7 @@ import subprocess import getpass import argparse import logind_helpers +import tempfile from collections import OrderedDict from dbusmock import DBusTestCase from dbus.mainloop.glib import DBusGMainLoop @@ -286,12 +287,38 @@ def meta_run(klass): parser = argparse.ArgumentParser() parser.add_argument('--kvm', action='store_true', default=False) parser.add_argument('--launch', action='append', default=[]) + parser.add_argument('--no-isolate-dirs', action='store_true', default=False) (args, rest) = parser.parse_known_args(sys.argv) rest.pop(0) + if not rest: + parser.error('Command or separator `--` not found') if rest[0] == '--': - rest.pop(0) + rest.pop(0) + else: + print('WARNING: Command or separator `--` not found', file=sys.stderr) + if args.no_isolate_dirs: + return meta_run_klass(klass, args, rest) + + test_root = os.getenv('MUTTER_DBUS_RUNNER_TEST_ROOT') + if test_root: + print('Reusing MUTTER_DBUS_RUNNER_TEST_ROOT', test_root, file=sys.stderr) + return meta_run_klass(klass, args, rest) + + with tempfile.TemporaryDirectory(prefix='mutter-testroot-', + ignore_cleanup_errors=True) as test_root: + env_dirs = ['HOME', 'TMPDIR', 'XDG_RUNTIME_DIR', 'XDG_CONFIG_DIR'] + os.environ['MUTTER_DBUS_RUNNER_TEST_ROOT'] = test_root + print('Setup MUTTER_DBUS_RUNNER_TEST_ROOT as', test_root, file=sys.stderr) + for env_dir in env_dirs: + directory = os.path.join(test_root, env_dir.lower()) + os.mkdir(directory, mode=0o700) + os.environ[env_dir] = directory + print('Setup', env_dir, 'as', directory, file=sys.stderr) + return meta_run_klass(klass, args, rest) + +def meta_run_klass(klass, args, rest): result = 1 if os.getenv('META_DBUS_RUNNER_ACTIVE') == None: