
mktemp can create a tempfile relative to a directory passed in via -p. It also uses the $TMPDIR variable for the same purpose. When the template is specified via -t, $TMPDIR takes precedence over -p. When the template is specified via a positional argument, -p takes precedence. Since fec38819acc9a95a7ed18b8f103fb5d9a59c3c41 $TMPDIR is set via the dbus runner which took precedence. virtme-ng doesn't seem to share /tmp with the host system which results in the exit status from the test in the VM not propagating back to the test harness. Fix that by making sure we always create the tempfile for the result in the build directory. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3867>
79 lines
1.8 KiB
Bash
Executable File
79 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
DIRNAME="$(dirname "$0")"
|
|
IMAGE="$1"
|
|
WRAPPER="$2"
|
|
WRAPPER_ARGS="$3"
|
|
TEST_BUILD_DIR="$4"
|
|
VM_ENV="$5"
|
|
|
|
TEST_RESULT_FILE=$(mktemp -p "$TEST_BUILD_DIR" test-result-XXXXXX)
|
|
echo 1 > "$TEST_RESULT_FILE"
|
|
|
|
VIRTME_ENV="\
|
|
HOME=$HOME \
|
|
LD_LIBRARY_PATH=$LD_LIBRARY_PATH \
|
|
XDG_DATA_DIRS=$XDG_DATA_DIRS \
|
|
MUTTER_DEBUG=$MUTTER_DEBUG \
|
|
$VM_ENV \
|
|
"
|
|
|
|
cleanup_paths=""
|
|
trap '{ rm -rf $cleanup_paths; }' EXIT
|
|
|
|
if [ ! -v $MUTTER_DEBUG_FORCE_KMS_MODE ]; then
|
|
VIRTME_ENV="$VIRTME_ENV MUTTER_DEBUG_FORCE_KMS_MODE=$MUTTER_DEBUG_FORCE_KMS_MODE"
|
|
fi
|
|
if [ ! -v $MUTTER_DEBUG_KMS_THREAD_TYPE ]; then
|
|
VIRTME_ENV="$VIRTME_ENV MUTTER_DEBUG_KMS_THREAD_TYPE=$MUTTER_DEBUG_KMS_THREAD_TYPE"
|
|
fi
|
|
|
|
if [ ! -v "$XDG_RUNTIME_DIR" ]; then
|
|
tmpdir=$(mktemp -d --tmpdir mutter-runtime-XXXXXX)
|
|
chmod 700 "$tmpdir"
|
|
cleanup_paths="$cleanup_paths $tmpdir"
|
|
export XDG_RUNTIME_DIR="$tmpdir"
|
|
fi
|
|
|
|
if [[ "$(stat -c '%t:%T' -L /proc/$$/fd/0)" == "0:0" ]]; then
|
|
mkfifo $XDG_RUNTIME_DIR/fake-stdin.$$
|
|
exec 0<> $XDG_RUNTIME_DIR/fake-stdin.$$
|
|
rm -f $XDG_RUNTIME_DIR/fake-stdin.$$
|
|
fi
|
|
|
|
SCRIPT="\
|
|
env $VIRTME_ENV $DIRNAME/run-kvm-test.sh \
|
|
\\\"$WRAPPER\\\" \\\"$WRAPPER_ARGS\\\" \
|
|
\\\"$TEST_RESULT_FILE\\\" \
|
|
$(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 \
|
|
--rw \
|
|
--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
|
|
echo Virtual machine exited with a failure: $VM_RESULT
|
|
else
|
|
echo Virtual machine terminated.
|
|
fi
|
|
|
|
TEST_RESULT="$(cat "$TEST_RESULT_FILE")"
|
|
rm "$TEST_RESULT_FILE"
|
|
|
|
echo Test result exit status: $TEST_RESULT
|
|
|
|
exit "$TEST_RESULT"
|