Now TEST 21 is a subtest of this test and can be removed.
- "11"
- "12"
- "20"
- - "21"
- "22"
- "23"
- "25"
- "11"
- "12"
- "20"
- - "21"
- "22"
- "23"
- "25"
. /env
if [ "$TEST_FSTYPE" = "zfs" ]; then
- zpool create dracut /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_raid[12]
+ zpool create dracut /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_disk[12]
zfs create dracut/root
elif [ "$TEST_FSTYPE" = "btrfs" ]; then
- mkfs.btrfs -q -draid0 -mraid0 -L root /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_raid[12]
+ mkfs.btrfs -q -draid0 -mraid0 -L root /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_disk[12]
udevadm settle
btrfs device scan
else
- mdadm --create /dev/md0 --run --auto=yes --level=0 --raid-devices=2 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_raid[12]
- # wait for the array to finish initializing, otherwise this sometimes fails randomly.
- mdadm -W /dev/md0 || :
+ # storage layers (if available)
+ # mdadm (optional) --> crypt (optional) --> lvm --> TEST_FSTYPE (e.g. ext4)
+ if ! grep -qF 'rd.md=0' /proc/cmdline && command -v mdadm > /dev/null; then
+ mdadm --create /dev/md0 --run --auto=yes --level=0 --raid-devices=2 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_disk[12]
+ # wait for the array to finish initializing, otherwise this sometimes fails randomly.
+ mdadm -W /dev/md0 || :
+ fi
- if command -v cryptsetup > /dev/null; then
+ if ! grep -qF 'rd.luks=0' /proc/cmdline && command -v cryptsetup > /dev/null; then
printf test > keyfile
cryptsetup -q luksFormat /dev/md0 /keyfile
echo "The passphrase is test"
lvm pvcreate -ff -y /dev/mapper/dracut_crypt_test
lvm vgcreate dracut /dev/mapper/dracut_crypt_test
else
- lvm pvcreate -ff -y /dev/md0
- lvm vgcreate dracut /dev/md0
+ if [ -e /dev/md0 ]; then
+ lvm pvcreate -ff -y /dev/md0
+ lvm vgcreate dracut /dev/md0
+ else
+ for dev in /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_disk[12]; do
+ lvm pvcreate -ff -y "$dev"
+ done
+ lvm vgcreate dracut /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_disk[12]
+ fi
fi
lvm lvcreate --yes -l 100%FREE -n root dracut
zfs set mountpoint=/sysroot dracut/root
zfs get mounted dracut/root
elif [ "$TEST_FSTYPE" = "btrfs" ]; then
- mount -t "$TEST_FSTYPE" /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_raid1 /sysroot
+ mount -t "$TEST_FSTYPE" /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_disk1 /sysroot
else
mount -t "$TEST_FSTYPE" /dev/dracut/root /sysroot
fi
[ -z "$TEST_FSTYPE" ] && TEST_FSTYPE="ext4"
# shellcheck disable=SC2034
-TEST_DESCRIPTION="root filesystem on multiple device $TEST_FSTYPE"
+TEST_DESCRIPTION="root filesystem on multiple device $TEST_FSTYPE (on top of RAID and LUKS)"
test_check() {
- (command -v zfs || (command -v mdadm && command -v "mkfs.$TEST_FSTYPE")) &> /dev/null
+ (command -v zfs || (command -v lvm && command -v "mkfs.$TEST_FSTYPE")) &> /dev/null
}
+if [ "$TEST_FSTYPE" = "zfs" ]; then
+ TEST_KERNEL_CMDLINE+=" root=ZFS=dracut/root "
+elif [ "$TEST_FSTYPE" = "btrfs" ]; then
+ TEST_KERNEL_CMDLINE+=" root=LABEL=root "
+else
+ TEST_KERNEL_CMDLINE+=" root=/dev/dracut/root rd.auto=1"
+ command -v mdadm > /dev/null && export HAVE_RAID=1
+ command -v cryptsetup > /dev/null && export HAVE_CRYPT=1
+fi
+
# Uncomment this to debug failures
#DEBUGFAIL="rd.shell"
-test_run() {
+client_run() {
+ local test_name="$1"
+ shift
+ local disk="$1"
+ shift
+ local client_opts="$*"
+
+ echo "CLIENT TEST START: $test_name"
+
declare -a disk_args=()
declare -i disk_index=0
qemu_add_drive disk_index disk_args "$TESTDIR"/marker.img marker
- qemu_add_drive disk_index disk_args "$TESTDIR"/raid-1.img raid1
- qemu_add_drive disk_index disk_args "$TESTDIR"/raid-2.img raid2
-
- if [ "$TEST_FSTYPE" = "zfs" ]; then
- TEST_KERNEL_CMDLINE+=" root=ZFS=dracut/root "
- elif [ "$TEST_FSTYPE" = "btrfs" ]; then
- TEST_KERNEL_CMDLINE+=" root=LABEL=root "
- else
- TEST_KERNEL_CMDLINE+=" root=/dev/dracut/root rd.auto"
- fi
+ qemu_add_drive disk_index disk_args "$TESTDIR/${disk}-1.img" disk1
+ qemu_add_drive disk_index disk_args "$TESTDIR/${disk}-2.img" disk2
test_marker_reset
"$testdir"/run-qemu \
"${disk_args[@]}" \
- -append "$TEST_KERNEL_CMDLINE ro" \
+ -append "$TEST_KERNEL_CMDLINE ro $client_opts " \
-initrd "$TESTDIR"/initramfs.testing || return 1
test_marker_check || return 1
+
+ echo "CLIENT TEST END: $test_name [OK]"
+}
+
+test_run() {
+ # ignore crypttab with rd.luks.crypttab=0 and RAID with rd.md=0
+ client_run "$TEST_FSTYPE" "disk" "rd.luks.crypttab=0 rd.md=0" || return 1
+
+ # ignore crypttab with rd.luks.crypttab=0
+ if [ -n "$HAVE_RAID" ]; then
+ client_run "raid" "raid" "rd.luks.crypttab=0" || return 1
+ fi
+
+ # for encrypted test run - use raid-crypt.img drives instead of raid.img drives
+ if [ -n "$HAVE_CRYPT" ]; then
+ client_run "raid-crypt" "raid-crypt" " " || return 1
+ fi
+}
+
+test_makeroot() {
+ local test_name="$1"
+ shift
+ local disk="$1"
+ shift
+ local client_opts="$*"
+
+ echo "MAKEROOT START: $test_name"
+
+ # Create the blank files to use as a root filesystem
+ declare -a disk_args=()
+ # shellcheck disable=SC2034
+ declare -i disk_index=0
+ qemu_add_drive disk_index disk_args "$TESTDIR"/marker.img marker 1
+ qemu_add_drive disk_index disk_args "$TESTDIR/${disk}-1.img" disk1 1
+ qemu_add_drive disk_index disk_args "$TESTDIR/${disk}-2.img" disk2 1
+
+ "$testdir"/run-qemu \
+ "${disk_args[@]}" \
+ -append "root=/dev/fakeroot quiet console=ttyS0,115200n81 $client_opts " \
+ -initrd "$TESTDIR"/initramfs.makeroot || return 1
+ test_marker_check dracut-root-block-created || return 1
+
+ echo "MAKEROOT END: $test_name [OK]"
}
test_setup() {
# shellcheck disable=SC2046
"$DRACUT" -N -i "$TESTDIR"/overlay / \
--add-confdir test-makeroot \
- -a "lvm mdraid" \
+ -a "lvm" \
-I "grep" \
+ $(if command -v mdadm > /dev/null; then echo "-a mdraid"; fi) \
$(if command -v cryptsetup > /dev/null; then echo "-a crypt -I cryptsetup"; fi) \
$(if [ "$TEST_FSTYPE" = "zfs" ]; then echo "-a zfs"; else echo "-I mkfs.${TEST_FSTYPE}"; fi) \
-i ./create-root.sh /lib/dracut/hooks/initqueue/01-create-root.sh \
-f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
- # Create the blank files to use as a root filesystem
- declare -a disk_args=()
- # shellcheck disable=SC2034
- declare -i disk_index=0
- qemu_add_drive disk_index disk_args "$TESTDIR"/marker.img marker 1
- qemu_add_drive disk_index disk_args "$TESTDIR"/raid-1.img raid1 1
- qemu_add_drive disk_index disk_args "$TESTDIR"/raid-2.img raid2 1
+ test_makeroot "$TEST_FSTYPE" "disk" "rd.md=0 rd.luks=0" || return 1
- "$testdir"/run-qemu \
- "${disk_args[@]}" \
- -append "root=/dev/fakeroot quiet console=ttyS0,115200n81" \
- -initrd "$TESTDIR"/initramfs.makeroot || return 1
+ if [ -n "$HAVE_RAID" ]; then
+ test_makeroot "raid" "raid" "rd.luks=0" || return 1
+ fi
- test_marker_check dracut-root-block-created || return 1
+ # for encrypted test run - use raid-crypt.img drives instead of raid.img drives
+ if [ -n "$HAVE_CRYPT" ]; then
+ test_makeroot "raid-crypt" "raid-crypt" " " || return 1
- if command -v cryptsetup > /dev/null; then
eval "$(grep -F -a -m 1 ID_FS_UUID "$TESTDIR"/marker.img)"
echo "testluks UUID=$ID_FS_UUID /etc/key" > /tmp/crypttab
echo -n "test" > /tmp/key
# shellcheck disable=SC2046
test_dracut \
- -a "lvm mdraid" \
+ -a "lvm" \
+ $(if command -v mdadm > /dev/null; then echo "-a mdraid"; fi) \
$(if command -v cryptsetup > /dev/null; then echo "-a crypt"; fi) \
$(if [ "$TEST_FSTYPE" = "zfs" ]; then echo "-a zfs"; fi) \
-i "./cryptroot-ask.sh" "/sbin/cryptroot-ask" \
+++ /dev/null
--include ../Makefile.testdir
+++ /dev/null
-#!/bin/sh
-
-trap 'poweroff -f' EXIT
-set -ex
-for dev in /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_disk[123]; do
- lvm pvcreate -ff -y "$dev"
-done
-
-lvm vgcreate dracut /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_disk[123]
-lvm lvcreate --yes -l 100%FREE -n root dracut
-lvm vgchange -ay
-mkfs.ext4 -q /dev/dracut/root
-mkdir -p /sysroot
-mount -t ext4 /dev/dracut/root /sysroot
-cp -a -t /sysroot /source/*
-umount /sysroot
-lvm lvchange -a n /dev/dracut/root
-echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_marker status=none
-poweroff -f
+++ /dev/null
-#!/usr/bin/env bash
-
-# shellcheck disable=SC2034
-TEST_DESCRIPTION="root filesystem on LVM PV"
-
-# Uncomment this to debug failures
-#DEBUGFAIL="rd.break rd.shell"
-
-test_check() {
- if ! type -p lvm &> /dev/null; then
- echo "Test needs lvm for lvm module... Skipping"
- return 1
- fi
-
- if ! type -p mdadm &> /dev/null; then
- echo "Test needs mdadm for mdraid module ... Skipping"
- return 1
- fi
-}
-
-test_run() {
- declare -a disk_args=()
- declare -i disk_index=0
- qemu_add_drive disk_index disk_args "$TESTDIR"/marker.img marker
- qemu_add_drive disk_index disk_args "$TESTDIR"/disk-1.img disk1
- qemu_add_drive disk_index disk_args "$TESTDIR"/disk-2.img disk2
- qemu_add_drive disk_index disk_args "$TESTDIR"/disk-3.img disk3
-
- test_marker_reset
- "$testdir"/run-qemu \
- "${disk_args[@]}" \
- -append "$TEST_KERNEL_CMDLINE root=/dev/dracut/root rd.auto=1" \
- -initrd "$TESTDIR"/initramfs.testing || return 1
-
- test_marker_check || return 1
-}
-
-test_setup() {
- # Create what will eventually be our root filesystem onto an overlay
- "$DRACUT" -N --keep --tmpdir "$TESTDIR" \
- --add-confdir test-root \
- -f "$TESTDIR"/initramfs.root "$KVERSION" || return 1
- mkdir -p "$TESTDIR"/overlay/source && mv "$TESTDIR"/dracut.*/initramfs/* "$TESTDIR"/overlay/source && rm -rf "$TESTDIR"/dracut.*
-
- # second, install the files needed to make the root filesystem
- # create an initramfs that will create the target root filesystem.
- # We do it this way so that we do not risk trashing the host mdraid
- # devices, volume groups, encrypted partitions, etc.
- "$DRACUT" -N -i "$TESTDIR"/overlay / \
- --add-confdir test-makeroot \
- -a "bash lvm mdraid" \
- -i ./create-root.sh /lib/dracut/hooks/initqueue/01-create-root.sh \
- -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
-
- # Create the blank files to use as a root filesystem
- declare -a disk_args=()
- # shellcheck disable=SC2034
- declare -i disk_index=0
- qemu_add_drive disk_index disk_args "$TESTDIR"/marker.img marker 1
- qemu_add_drive disk_index disk_args "$TESTDIR"/disk-1.img disk1 1
- qemu_add_drive disk_index disk_args "$TESTDIR"/disk-2.img disk2 1
- qemu_add_drive disk_index disk_args "$TESTDIR"/disk-3.img disk3 1
-
- "$testdir"/run-qemu \
- "${disk_args[@]}" \
- -append "root=/dev/fakeroot quiet console=ttyS0,115200n81" \
- -initrd "$TESTDIR"/initramfs.makeroot || return 1
- test_marker_check dracut-root-block-created || return 1
-
- test_dracut \
- -a "lvm" \
- "$TESTDIR"/initramfs.testing
-}
-
-# shellcheck disable=SC1090
-. "$testdir"/test-functions