Browse Source
dracut-cpio already carries a bunch of unit tests covering compression and GNU cpio extraction. The purpose of these tests is to exercise the dracut.sh --enhanced-cpio code-paths as well as kernel cpio archive extraction. Signed-off-by: David Disseldorp <ddiss@suse.de>master
David Disseldorp
3 years ago
committed by
Harald Hoyer
2 changed files with 86 additions and 0 deletions
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
-include ../Makefile.testdir |
@ -0,0 +1,85 @@
@@ -0,0 +1,85 @@
|
||||
#!/bin/bash |
||||
# This file is part of dracut. |
||||
# SPDX-License-Identifier: GPL-2.0-or-later |
||||
|
||||
# shellcheck disable=SC2034 |
||||
TEST_DESCRIPTION="kernel cpio extraction tests for dracut-cpio" |
||||
# see dracut-cpio source for unit tests |
||||
|
||||
test_check() { |
||||
if ! [[ -x $basedir/dracut-cpio ]]; then |
||||
echo "Test needs dracut-cpio... Skipping" |
||||
return 1 |
||||
fi |
||||
} |
||||
|
||||
test_dracut_cpio() { |
||||
local tdir="${CPIO_TESTDIR}/${1}" |
||||
shift |
||||
# --enhanced-cpio tells dracut to use dracut-cpio instead of GNU cpio |
||||
local dracut_cpio_params=("--enhanced-cpio" "$@") |
||||
|
||||
mkdir -p "$tdir" |
||||
|
||||
# VM script to print sentinel on boot |
||||
# write to kmsg so that sysrq messages don't race with console output |
||||
cat > "$tdir/init.sh" << EOF |
||||
echo "Image with ${dracut_cpio_params[*]} booted successfully" > /dev/kmsg |
||||
echo 1 > /proc/sys/kernel/sysrq |
||||
echo o > /proc/sysrq-trigger |
||||
sleep 20 |
||||
EOF |
||||
|
||||
"$basedir"/dracut.sh -l --drivers "" \ |
||||
"${dracut_cpio_params[@]}" \ |
||||
--modules "bash base" \ |
||||
--include "$tdir/init.sh" /lib/dracut/hooks/emergency/00-init.sh \ |
||||
--no-hostonly --no-hostonly-cmdline \ |
||||
"$tdir/initramfs" \ |
||||
|| return 1 |
||||
|
||||
"$testdir"/run-qemu \ |
||||
-watchdog i6300esb -watchdog-action poweroff \ |
||||
-daemonize -pidfile "$tdir/vm.pid" \ |
||||
-serial "file:$tdir/console.out" \ |
||||
-append "panic=1 oops=panic softlockup_panic=1 loglevel=7 console=ttyS0 rd.shell=1" \ |
||||
-initrd "$tdir/initramfs" || return 1 |
||||
|
||||
timeout=120 |
||||
while [[ -f $tdir/vm.pid ]] \ |
||||
&& ps -p "$(head -n1 "$tdir/vm.pid")" > /dev/null; do |
||||
echo "$timeout - awaiting VM shutdown" |
||||
sleep 1 |
||||
[[ $((timeout--)) -le 0 ]] && return 1 |
||||
done |
||||
|
||||
cat "$tdir/console.out" |
||||
grep -q "Image with ${dracut_cpio_params[*]} booted successfully" \ |
||||
"$tdir/console.out" |
||||
} |
||||
|
||||
test_run() { |
||||
set -x |
||||
|
||||
# dracut-cpio is typically used with compression and strip disabled, to |
||||
# increase the chance of (reflink) extent sharing. |
||||
test_dracut_cpio "simple" "--no-compress" "--nostrip" || return 1 |
||||
# dracut-cpio should still work fine with compression and stripping enabled |
||||
test_dracut_cpio "compress" "--gzip" "--nostrip" || return 1 |
||||
test_dracut_cpio "strip" "--gzip" "--strip" || return 1 |
||||
} |
||||
|
||||
test_setup() { |
||||
CPIO_TESTDIR=$(mktemp --directory -p "$TESTDIR" cpio-test.XXXXXXXXXX) \ |
||||
|| return 1 |
||||
export CPIO_TESTDIR |
||||
return 0 |
||||
} |
||||
|
||||
test_cleanup() { |
||||
[ -d "$CPIO_TESTDIR" ] && rm -rf "$CPIO_TESTDIR" |
||||
return 0 |
||||
} |
||||
|
||||
# shellcheck disable=SC1090 |
||||
. "$testdir"/test-functions |
Loading…
Reference in new issue