Blob: scripts/check-c3.sh
Raw · Blame
#!/bin/sh
set -eu
script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
repo_dir=$(dirname "$script_dir")
build_dir=${MOUSE_BUILD_DIR:-"$repo_dir/build"}
image="$build_dir/mouse-initramfs.cpio.gz"
for command in expect cpio gzip; do
if ! command -v "$command" >/dev/null 2>&1; then
printf '%s\n' "$command is required for the C3 integration check" >&2
exit 1
fi
done
if [ ! -f "$image" ]; then
printf '%s\n' "run 'make image' before checking MOUSE" >&2
exit 1
fi
temporary=$(mktemp -d "${TMPDIR:-/tmp}/mouse-c3-check.XXXXXX")
trap 'rm -rf "$temporary"' EXIT HUP INT TERM
base_root="$temporary/base"
mkdir "$base_root"
gzip -dc "$image" | (cd "$base_root" && cpio -id 2>/dev/null)
pack_variant() {
name=$1
root=$2
output="$temporary/mouse-initramfs-$name.cpio.gz"
(
cd "$root"
find . -print |
LC_ALL=C sort |
cpio -o --format newc -R 0:0 2>/dev/null |
gzip -9
) >"$output"
printf '%s\n' "$output"
}
run_variant() {
name=$1
root=$2
mode=$3
variant=$(pack_variant "$name" "$root")
MOUSE_INITRAMFS="$variant" \
"$script_dir/check-c3.exp" "$script_dir/run-qemu.sh" "$mode"
}
"$script_dir/check-c3.exp" "$script_dir/run-qemu.sh" enabled
disabled_root="$temporary/disabled"
cp -R "$base_root" "$disabled_root"
printf '%s\n' \
'# Persistent MOUSE service policy belongs in this file.' \
'enable_mouse_echo=NO' >"$disabled_root/etc/rc.conf"
run_variant disabled "$disabled_root" disabled
recovery_root="$temporary/recovery"
cp -R "$base_root" "$recovery_root"
install -m 0755 \
"$repo_dir/tests/fixtures/console_login_broken" \
"$recovery_root/etc/init.d/console_login"
run_variant recovery "$recovery_root" recovery
missing_root="$temporary/missing"
cp -R "$base_root" "$missing_root"
install -m 0755 \
"$repo_dir/tests/fixtures/mouse_echo_missing" \
"$missing_root/etc/init.d/mouse_echo"
run_variant missing "$missing_root" missing
cycle_root="$temporary/cycle"
cp -R "$base_root" "$cycle_root"
install -m 0755 \
"$repo_dir/tests/fixtures/mouse_echo_cycle" \
"$cycle_root/etc/init.d/mouse_echo"
install -m 0755 \
"$repo_dir/tests/fixtures/cycle_peer" \
"$cycle_root/etc/init.d/cycle_peer"
run_variant cycle "$cycle_root" cycle