224 lines
8.0 KiB
Diff
224 lines
8.0 KiB
Diff
|
From 6933334a0d98b65f502abea4183f74275f11a50c Mon Sep 17 00:00:00 2001
|
||
|
From: Yu Watanabe <watanabe.yu+github@gmail.com>
|
||
|
Date: Wed, 26 Jul 2023 06:30:37 +0900
|
||
|
Subject: [PATCH] test-fstab-generator: extract core part as a function
|
||
|
|
||
|
No functional change, preparation for later commits.
|
||
|
|
||
|
(cherry picked from commit 7f8c67c9965a5f70a6c1592db4f5339f4851a5de)
|
||
|
|
||
|
Related: #2190226
|
||
|
---
|
||
|
test/test-fstab-generator.sh | 184 ++++++++++++++++++-----------------
|
||
|
1 file changed, 96 insertions(+), 88 deletions(-)
|
||
|
|
||
|
diff --git a/test/test-fstab-generator.sh b/test/test-fstab-generator.sh
|
||
|
index 68c9d0631e..d5844b8c3f 100755
|
||
|
--- a/test/test-fstab-generator.sh
|
||
|
+++ b/test/test-fstab-generator.sh
|
||
|
@@ -1,10 +1,10 @@
|
||
|
#!/usr/bin/env bash
|
||
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||
|
-set -e
|
||
|
+set -eux
|
||
|
shopt -s nullglob
|
||
|
shopt -s globstar
|
||
|
|
||
|
-if [[ -n "$1" ]]; then
|
||
|
+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
|
||
|
@@ -19,97 +19,105 @@ src="$(dirname "$0")/testdata/test-fstab-generator"
|
||
|
# fsck(8) is located in /usr/sbin on Debian
|
||
|
PATH=$PATH:/usr/sbin
|
||
|
|
||
|
-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
|
||
|
-
|
||
|
- exp="${f%.input}.expected"
|
||
|
- if [[ "${f##*/}" =~ swap ]] && systemd-detect-virt --container >/dev/null; then
|
||
|
- exp="${exp}.container"
|
||
|
- fi
|
||
|
-
|
||
|
- if [[ "${f##*/}" =~ \.fstab\.input ]]; then
|
||
|
- 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
|
||
|
- SYSTEMD_LOG_LEVEL=debug SYSTEMD_IN_INITRD=yes SYSTEMD_SYSFS_CHECK=no SYSTEMD_PROC_CMDLINE="fstab=no $(cat "$f")" $generator "$out" "$out" "$out"
|
||
|
- fi
|
||
|
-
|
||
|
- # 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"
|
||
|
+test_one() (
|
||
|
+ local input out exp i j k dir fname expf
|
||
|
+
|
||
|
+ input=${1?}
|
||
|
+
|
||
|
+ : "*** Running $input"
|
||
|
+
|
||
|
+ out=$(mktemp --tmpdir --directory "test-fstab-generator.XXXXXXXXXX")
|
||
|
+ # shellcheck disable=SC2064
|
||
|
+ trap "rm -rf '$out'" EXIT INT QUIT PIPE
|
||
|
+
|
||
|
+ exp="${input%.input}.expected"
|
||
|
+ if [[ "${input##*/}" =~ swap ]] && systemd-detect-virt --container >/dev/null; then
|
||
|
+ exp="${exp}.container"
|
||
|
+ fi
|
||
|
+
|
||
|
+ if [[ "${input##*/}" =~ \.fstab\.input ]]; then
|
||
|
+ SYSTEMD_LOG_LEVEL=debug SYSTEMD_IN_INITRD=yes SYSTEMD_SYSFS_CHECK=no SYSTEMD_PROC_CMDLINE="fstab=yes root=fstab" SYSTEMD_FSTAB="$input" SYSTEMD_SYSROOT_FSTAB="/dev/null" $generator "$out" "$out" "$out"
|
||
|
+ else
|
||
|
+ SYSTEMD_LOG_LEVEL=debug SYSTEMD_IN_INITRD=yes SYSTEMD_SYSFS_CHECK=no SYSTEMD_PROC_CMDLINE="fstab=no $(cat "$input")" $generator "$out" "$out" "$out"
|
||
|
+ fi
|
||
|
+
|
||
|
+ # 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
|
||
|
+
|
||
|
+ # 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 [[ "${input##*/}" =~ \.fstab\.input ]]; then
|
||
|
+ for i in "$out"/*.{automount,mount,swap}; do
|
||
|
+ sed -i -e 's:SourcePath=.*$:SourcePath=/etc/fstab:' "$i"
|
||
|
done
|
||
|
-
|
||
|
- # 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
|
||
|
+ fi
|
||
|
+
|
||
|
+ # .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
|
||
|
-
|
||
|
- # .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"
|
||
|
+ done
|
||
|
+
|
||
|
+ # We store empty files rather than dead symlinks, so that they don't get pruned when packaged up, so compare
|
||
|
+ # the list of filenames rather than their content
|
||
|
+ if ! diff -u <(find "$out" -printf '%P\n' | sort) <(find "$exp" -printf '%P\n' | sort); then
|
||
|
+ : "**** Unexpected output for $input"
|
||
|
+ return 1
|
||
|
+ fi
|
||
|
+
|
||
|
+ # Check the main units.
|
||
|
+ if ! diff -u "$out" "$exp"; then
|
||
|
+ : "**** Unexpected output for $input"
|
||
|
+ return 1
|
||
|
+ fi
|
||
|
+
|
||
|
+ # 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
|
||
|
+ : "**** Unexpected symlink $j created by $input"
|
||
|
+ return 1
|
||
|
fi
|
||
|
+ continue
|
||
|
fi
|
||
|
- done
|
||
|
|
||
|
- # We store empty files rather than dead symlinks, so that they don't get pruned when packaged up, so compare
|
||
|
- # the list of filenames rather than their content
|
||
|
- 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
|
||
|
- echo "**** Unexpected output for $f"
|
||
|
- exit 1
|
||
|
- fi
|
||
|
-
|
||
|
- # 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 ! diff -u "$j" "$expf"; then
|
||
|
+ : "**** Unexpected output in $j for $input"
|
||
|
+ return 1
|
||
|
+ fi
|
||
|
+ done
|
||
|
+ done
|
||
|
|
||
|
- 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
|
||
|
+ return 0
|
||
|
+)
|
||
|
|
||
|
- if ! diff -u "$j" "$expf"; then
|
||
|
- echo "**** Unexpected output in $j for $f"
|
||
|
- exit 1
|
||
|
- fi
|
||
|
- done
|
||
|
- done
|
||
|
- ) || exit 1
|
||
|
+for f in "$src"/test-*.input; do
|
||
|
+ test_one "$f"
|
||
|
done
|