mirror of
https://github.com/openSUSE/snapper.git
synced 2026-02-05 06:46:08 +01:00
83 lines
2.0 KiB
Bash
Executable File
83 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e # exit on failure.
|
|
# ^
|
|
# This also ensures that a failed test does not run the teardown step
|
|
# and we can inspect the artifacts.
|
|
set -u # unset variables are an error
|
|
set -x # echo what's being done
|
|
|
|
if [ "$(id -u)" != "0" ]; then
|
|
set +x
|
|
echo "These tests only work when run as root." >&2
|
|
echo "Yes. See also the CAUTION file." >&2
|
|
exit 1
|
|
fi
|
|
|
|
CFG=testsuite
|
|
MNT=/"$CFG"
|
|
# $CFG and $MNT are hardcoded in the tests
|
|
# but $IMG is not so we can use it to hint at its purpose
|
|
IMG="$MNT"-of-snapper.img
|
|
|
|
forget_config() {
|
|
sed -i -e "/^SNAPPER_CONFIGS=/s/\b${CFG}\b//" /etc/sysconfig/snapper
|
|
}
|
|
|
|
setup() {
|
|
if [ -f "$IMG" ]; then
|
|
set +x
|
|
echo >&2 "The image '$IMG' already exists, aborting setup."
|
|
echo >&2 "Probably a previous test run failed."
|
|
echo >&2 "After you inspect the artifacts, run '$0 teardown' to clean up."
|
|
exit 1
|
|
fi
|
|
# BTRFS requires at least 109MiB; a 150MiB sparse image should be enough
|
|
truncate --size=150M "$IMG"
|
|
LOOP=$(losetup --find)
|
|
losetup "$LOOP" "$IMG"
|
|
mkfs.btrfs "$LOOP"
|
|
mkdir -p "$MNT"
|
|
mount "$IMG" "$MNT"
|
|
forget_config
|
|
snapper --no-dbus --config="$CFG" create-config "$MNT"
|
|
|
|
# several tests assume nobody:nobody, but docker omits them
|
|
if ! getent group nobody; then
|
|
groupadd nobody
|
|
fi
|
|
if ! id -u nobody; then
|
|
useradd --no-log-init --group nobody nobody
|
|
fi
|
|
}
|
|
|
|
main() {
|
|
# read -p "Enter to CONTINUE, Ctrl-C to exit:"
|
|
./run-all
|
|
}
|
|
|
|
teardown() {
|
|
snapper --no-dbus --config="$CFG" delete-config || forget_config
|
|
if grep "$MNT" /proc/mounts >/dev/null; then
|
|
umount "$MNT"
|
|
fi
|
|
if [ -d "$MNT" ]; then
|
|
rmdir "$MNT"
|
|
fi
|
|
# mapfile is better than VAR=($(cmd))
|
|
# https://github.com/koalaman/shellcheck/wiki/SC2207
|
|
mapfile -t LOOPS < <(losetup --associated "$IMG" | cut -f1 -d:)
|
|
if [ ${#LOOPS[@]} != 0 ]; then
|
|
losetup --detach "${LOOPS[@]}"
|
|
fi
|
|
rm -f "$IMG"
|
|
}
|
|
|
|
all() {
|
|
setup
|
|
main
|
|
teardown
|
|
}
|
|
|
|
ACTION=${1-all}
|
|
$ACTION
|