2022-01-06 14:12:27 +03:00
#!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later
2022-01-09 17:00:25 +03:00
set -e
2023-05-11 21:54:13 +03:00
shopt -s nullglob
shopt -s globstar
2022-01-06 14:12:27 +03:00
if [ [ -n " $1 " ] ] ; then
generator = $1
elif [ [ -x /usr/lib/systemd/system-generators/systemd-fstab-generator ] ] ; then
generator = /usr/lib/systemd/system-generators/systemd-fstab-generator
elif [ [ -x /lib/systemd/system-generators/systemd-fstab-generator ] ] ; then
generator = /lib/systemd/system-generators/systemd-fstab-generator
else
exit 1
fi
src = " $( dirname " $0 " ) /testdata/test-fstab-generator "
test: fstab-generator: adjust PATH for fsck
fsck(8) is located in /usr/sib/ on Debian sid:
stdout:
*** Running /home/christian/Coding/workspaces/systemd/test/testdata/test-fstab-generator/test-01-dev-nfs.input
*** Running /home/christian/Coding/workspaces/systemd/test/testdata/test-fstab-generator/test-02-dhcp.input
*** Running /home/christian/Coding/workspaces/systemd/test/testdata/test-fstab-generator/test-03-dhcp6.input
*** Running /home/christian/Coding/workspaces/systemd/test/testdata/test-fstab-generator/test-04-nfs.input
*** Running /home/christian/Coding/workspaces/systemd/test/testdata/test-fstab-generator/test-05-nfs4.input
*** Running /home/christian/Coding/workspaces/systemd/test/testdata/test-fstab-generator/test-06-ipv4.input
*** Running /home/christian/Coding/workspaces/systemd/test/testdata/test-fstab-generator/test-07-ipv6.input
*** Running /home/christian/Coding/workspaces/systemd/test/testdata/test-fstab-generator/test-08-implicit-nfs.input
*** Running /home/christian/Coding/workspaces/systemd/test/testdata/test-fstab-generator/test-09-cifs.input
*** Running /home/christian/Coding/workspaces/systemd/test/testdata/test-fstab-generator/test-10-iscsi.input
*** Running /home/christian/Coding/workspaces/systemd/test/testdata/test-fstab-generator/test-11-live.input
*** Running /home/christian/Coding/workspaces/systemd/test/testdata/test-fstab-generator/test-12-dev-sdx.input
--- /dev/fd/63 2022-11-04 15:39:13.131532174 +0100
+++ /dev/fd/62 2022-11-04 15:39:13.131532174 +0100
@@ -6,3 +6,4 @@
initrd-usr-fs.target.requires
initrd-usr-fs.target.requires/sysroot.mount
sysroot.mount
+systemd-fsck-root.service
**** Unexpected output for /home/christian/Coding/workspaces/systemd/test/testdata/test-fstab-generator/test-12-dev-sdx.input
stderr:
Skipping root directory handling, as root on NFS was requested.
Skipping root directory handling, as root on NFS was requested.
Skipping root directory handling, as root on NFS was requested.
Skipping root directory handling, as root on NFS was requested.
Skipping root directory handling, as root on NFS was requested.
Skipping root directory handling, as root on NFS was requested.
Skipping root directory handling, as root on NFS was requested.
Skipping root directory handling, as root on NFS was requested.
Skipping root directory handling, as root on CIFS was requested.
Skipping root directory handling, as root on iSCSI was requested.
Skipping root directory handling, as root on live image was requested.
Found entry what=/dev/sdx1 where=/sysroot type=n/a opts=ro
Checking was requested for /dev/sdx1, but the fsck command does not exist.
2022-11-04 17:48:50 +03:00
# fsck(8) is located in /usr/sbin on Debian
PATH = $PATH :/usr/sbin
2023-05-30 23:53:43 +03:00
# systemd-pcrfs@.service could be enabled or not, depending on the host state
# of the host system. Override the measurement to avoid the issue.
export SYSTEMD_FORCE_MEASURE = 0
2022-01-06 14:12:27 +03:00
for f in " $src " /test-*.input; do
echo " *** Running $f "
(
out = $( mktemp --tmpdir --directory "test-fstab-generator.XXXXXXXXXX" )
# shellcheck disable=SC2064
trap " rm -rf ' $out ' " EXIT INT QUIT PIPE
2023-05-11 21:54:13 +03:00
exp = " ${ f %.input } .expected "
2023-05-11 21:55:46 +03:00
if [ [ " ${ f ##*/ } " = ~ swap ] ] && systemd-detect-virt --container >/dev/null; then
exp = " ${ exp } .container "
fi
2023-05-11 21:54:13 +03:00
if [ [ " ${ f ##*/ } " = ~ \. fstab\. input ] ] ; then
2023-01-26 02:52:30 +03:00
SYSTEMD_LOG_LEVEL = debug SYSTEMD_IN_INITRD = yes SYSTEMD_SYSFS_CHECK = no SYSTEMD_PROC_CMDLINE = "fstab=yes root=fstab" SYSTEMD_FSTAB = " $f " SYSTEMD_SYSROOT_FSTAB = "/dev/null" $generator " $out " " $out " " $out "
else
2023-05-11 21:55:46 +03:00
SYSTEMD_LOG_LEVEL = debug SYSTEMD_IN_INITRD = yes SYSTEMD_SYSFS_CHECK = no SYSTEMD_PROC_CMDLINE = " fstab=no $( cat " $f " ) " $generator " $out " " $out " " $out "
2023-01-26 02:52:30 +03:00
fi
2022-01-06 14:12:27 +03:00
2023-05-19 03:31:51 +03:00
# The option x-systemd.growfs creates symlink to system's systemd-growfs@.service in .mount.wants directory.
# The system that the test is currently running on may not have or may have outdated unit file.
# Let's replace the symlink with an empty file.
for i in " $out " /*/systemd-growfs@*.service; do
[ [ -L " $i " ] ] || continue
rm " $i "
touch " $i "
done
2023-05-11 21:54:13 +03:00
# For split-usr system
for i in " $out " /systemd-*.service; do
sed -i -e 's:ExecStart=/lib/systemd/:ExecStart=/usr/lib/systemd/:' " $i "
done
if [ [ " ${ f ##*/ } " = ~ \. fstab\. input ] ] ; then
for i in " $out " /*.{ automount,mount,swap} ; do
sed -i -e 's:SourcePath=.*$:SourcePath=/etc/fstab:' " $i "
done
2022-01-06 14:12:27 +03:00
fi
2023-05-11 21:55:46 +03:00
# .deb packager seems to dislike files named with backslash. So, as a workaround, we store files
# without backslash in .expected.
for i in " $out " /**/*\\ *.{ mount,swap} ; do
k = " ${ i // \\ / } "
if [ [ " $i " != " $k " ] ] ; then
if [ [ -f " $i " ] ] ; then
mv " $i " " $k "
elif [ [ -L " $i " ] ] ; then
dest = $( readlink " $i " )
rm " $i "
ln -s " ${ dest // \\ / } " " $k "
fi
fi
done
2023-05-11 21:54:13 +03:00
# We store empty files rather than dead symlinks, so that they don't get pruned when packaged up, so compare
2022-01-09 17:00:25 +03:00
# the list of filenames rather than their content
2023-05-11 21:54:13 +03:00
if ! diff -u <( find " $out " -printf '%P\n' | sort) <( find " $exp " -printf '%P\n' | sort) ; then
echo " **** Unexpected output for $f "
exit 1
fi
# Check the main units.
if ! diff -u " $out " " $exp " ; then
2022-01-06 14:12:27 +03:00
echo " **** Unexpected output for $f "
exit 1
fi
2023-05-11 21:54:13 +03:00
# Also check drop-ins.
for i in " $out " /*; do
[ [ -d " $i " ] ] || continue
dir = " ${ i ##*/ } "
for j in " $i " /*; do
fname = " ${ j ##*/ } "
expf = " $exp / $dir / $fname "
if [ [ -L " $j " && ! -e " $j " ] ] ; then
# For dead symlink, we store an empty file.
if [ [ ! -e " $expf " || -n " $( cat " $expf " ) " ] ] ; then
echo " **** Unexpected symlink $j created by $f "
exit 1
fi
continue
fi
if ! diff -u " $j " " $expf " ; then
echo " **** Unexpected output in $j for $f "
exit 1
fi
done
done
2022-01-06 14:12:27 +03:00
) || exit 1
done