From d72cf09859908b6b472edbdc937061ca8f26221e Mon Sep 17 00:00:00 2001 From: Frantisek Sumsal Date: Fri, 14 Apr 2023 15:15:13 +0200 Subject: [PATCH] test: properly distinguish between generator phases Let's make sure the units generated by generators are generated at the right stage. --- test/units/generator-utils.sh | 3 +- test/units/testsuite-81.debug-generator.sh | 64 +++++++++++----------- test/units/testsuite-81.fstab-generator.sh | 30 +++++----- test/units/testsuite-81.getty-generator.sh | 14 ++--- 4 files changed, 56 insertions(+), 55 deletions(-) diff --git a/test/units/generator-utils.sh b/test/units/generator-utils.sh index 035fd55b0d..42c6a77353 100644 --- a/test/units/generator-utils.sh +++ b/test/units/generator-utils.sh @@ -69,7 +69,8 @@ run_and_list() { fi rm -fr "${out_dir:?}"/* - SYSTEMD_LOG_LEVEL="${SYSTEMD_LOG_LEVEL:-debug}" "$generator" "$out_dir" + mkdir -p "$out_dir"/{normal,early,late} + SYSTEMD_LOG_LEVEL="${SYSTEMD_LOG_LEVEL:-debug}" "$generator" "$out_dir/normal" "$out_dir/early" "$out_dir/late" ls -lR "$out_dir" if [[ -n "${environ:-}" ]]; then diff --git a/test/units/testsuite-81.debug-generator.sh b/test/units/testsuite-81.debug-generator.sh index d2b2bf1111..fddf85a54c 100755 --- a/test/units/testsuite-81.debug-generator.sh +++ b/test/units/testsuite-81.debug-generator.sh @@ -37,69 +37,69 @@ ARGS=( : "debug-shell: regular" CMDLINE="ro root=/ ${ARGS[*]} rd.systemd.debug_shell" SYSTEMD_PROC_CMDLINE="$CMDLINE" run_and_list "$GENERATOR_BIN" "$OUT_DIR" -link_eq "$OUT_DIR/masked-no-suffix.service" /dev/null -link_eq "$OUT_DIR/masked.service" /dev/null -link_eq "$OUT_DIR/masked.socket" /dev/null -link_endswith "$OUT_DIR/default.target.wants/wanted-no-suffix.service" /lib/systemd/system/wanted-no-suffix.service -link_endswith "$OUT_DIR/default.target.wants/wanted.service" /lib/systemd/system/wanted.service -link_endswith "$OUT_DIR/default.target.wants/wanted.mount" /lib/systemd/system/wanted.mount +link_eq "$OUT_DIR/early/masked-no-suffix.service" /dev/null +link_eq "$OUT_DIR/early/masked.service" /dev/null +link_eq "$OUT_DIR/early/masked.socket" /dev/null +link_endswith "$OUT_DIR/early/default.target.wants/wanted-no-suffix.service" /lib/systemd/system/wanted-no-suffix.service +link_endswith "$OUT_DIR/early/default.target.wants/wanted.service" /lib/systemd/system/wanted.service +link_endswith "$OUT_DIR/early/default.target.wants/wanted.mount" /lib/systemd/system/wanted.mount # Following stuff should be ignored, as it's prefixed with rd. -test ! -h "$OUT_DIR/masked-initrd.service" -test ! -h "$OUT_DIR/default.target.wants/wants-initrd.service" -test ! -h "$OUT_DIR/default.target.wants/debug-shell.service" -test ! -d "$OUT_DIR/initrd.target.wants" +test ! -h "$OUT_DIR/early/masked-initrd.service" +test ! -h "$OUT_DIR/early/default.target.wants/wants-initrd.service" +test ! -h "$OUT_DIR/early/default.target.wants/debug-shell.service" +test ! -d "$OUT_DIR/early/initrd.target.wants" # Let's re-run the generator with systemd.debug_shell that should be honored : "debug-shell: regular + systemd.debug_shell" CMDLINE="$CMDLINE systemd.debug_shell" SYSTEMD_PROC_CMDLINE="$CMDLINE" run_and_list "$GENERATOR_BIN" "$OUT_DIR" -link_endswith "$OUT_DIR/default.target.wants/debug-shell.service" /lib/systemd/system/debug-shell.service +link_endswith "$OUT_DIR/early/default.target.wants/debug-shell.service" /lib/systemd/system/debug-shell.service # Same thing, but with custom tty : "debug-shell: regular + systemd.debug_shell=/dev/tty666" CMDLINE="$CMDLINE systemd.debug_shell=/dev/tty666" SYSTEMD_PROC_CMDLINE="$CMDLINE" run_and_list "$GENERATOR_BIN" "$OUT_DIR" -link_endswith "$OUT_DIR/default.target.wants/debug-shell.service" /lib/systemd/system/debug-shell.service -grep -F "/dev/tty666" "$OUT_DIR/debug-shell.service.d/50-tty.conf" +link_endswith "$OUT_DIR/early/default.target.wants/debug-shell.service" /lib/systemd/system/debug-shell.service +grep -F "/dev/tty666" "$OUT_DIR/early/debug-shell.service.d/50-tty.conf" # Now override the default target via systemd.unit= : "debug-shell: regular + systemd.unit=" CMDLINE="$CMDLINE systemd.unit=my-fancy.target" SYSTEMD_PROC_CMDLINE="$CMDLINE" run_and_list "$GENERATOR_BIN" "$OUT_DIR" -link_eq "$OUT_DIR/masked-no-suffix.service" /dev/null -link_eq "$OUT_DIR/masked.service" /dev/null -link_eq "$OUT_DIR/masked.socket" /dev/null -link_endswith "$OUT_DIR/my-fancy.target.wants/wanted-no-suffix.service" /lib/systemd/system/wanted-no-suffix.service -link_endswith "$OUT_DIR/my-fancy.target.wants/wanted.service" /lib/systemd/system/wanted.service -link_endswith "$OUT_DIR/my-fancy.target.wants/wanted.mount" /lib/systemd/system/wanted.mount -link_endswith "$OUT_DIR/my-fancy.target.wants/debug-shell.service" /lib/systemd/system/debug-shell.service -test ! -d "$OUT_DIR/default.target.wants" +link_eq "$OUT_DIR/early/masked-no-suffix.service" /dev/null +link_eq "$OUT_DIR/early/masked.service" /dev/null +link_eq "$OUT_DIR/early/masked.socket" /dev/null +link_endswith "$OUT_DIR/early/my-fancy.target.wants/wanted-no-suffix.service" /lib/systemd/system/wanted-no-suffix.service +link_endswith "$OUT_DIR/early/my-fancy.target.wants/wanted.service" /lib/systemd/system/wanted.service +link_endswith "$OUT_DIR/early/my-fancy.target.wants/wanted.mount" /lib/systemd/system/wanted.mount +link_endswith "$OUT_DIR/early/my-fancy.target.wants/debug-shell.service" /lib/systemd/system/debug-shell.service +test ! -d "$OUT_DIR/early/default.target.wants" # Initrd scenario : "debug-shell: initrd" CMDLINE="ro root=/ ${ARGS[*]} systemd.debug_shell" SYSTEMD_IN_INITRD=1 SYSTEMD_PROC_CMDLINE="$CMDLINE" run_and_list "$GENERATOR_BIN" "$OUT_DIR" -link_eq "$OUT_DIR/masked-initrd.service" /dev/null -link_endswith "$OUT_DIR/initrd.target.wants/wanted-initrd.service" /lib/systemd/system/wanted-initrd.service +link_eq "$OUT_DIR/early/masked-initrd.service" /dev/null +link_endswith "$OUT_DIR/early/initrd.target.wants/wanted-initrd.service" /lib/systemd/system/wanted-initrd.service # The non-initrd stuff (i.e. without the rd. suffix) should be ignored in # this case -test ! -h "$OUT_DIR/masked-no-suffix.service" -test ! -h "$OUT_DIR/masked.service" -test ! -h "$OUT_DIR/masked.socket" -test ! -h "$OUT_DIR/initrd.target.wants/debug-shell.service" -test ! -d "$OUT_DIR/default.target.wants" +test ! -h "$OUT_DIR/early/masked-no-suffix.service" +test ! -h "$OUT_DIR/early/masked.service" +test ! -h "$OUT_DIR/early/masked.socket" +test ! -h "$OUT_DIR/early/initrd.target.wants/debug-shell.service" +test ! -d "$OUT_DIR/early/default.target.wants" # Again, but with rd.systemd.debug_shell : "debug-shell: initrd + rd.systemd.debug_shell" CMDLINE="$CMDLINE rd.systemd.debug_shell" SYSTEMD_IN_INITRD=1 SYSTEMD_PROC_CMDLINE="$CMDLINE" run_and_list "$GENERATOR_BIN" "$OUT_DIR" -link_endswith "$OUT_DIR/initrd.target.wants/debug-shell.service" /lib/systemd/system/debug-shell.service +link_endswith "$OUT_DIR/early/initrd.target.wants/debug-shell.service" /lib/systemd/system/debug-shell.service # Override the default target : "debug-shell: initrd + rd.systemd.unit" CMDLINE="$CMDLINE rd.systemd.unit=my-fancy-initrd.target" SYSTEMD_IN_INITRD=1 SYSTEMD_PROC_CMDLINE="$CMDLINE" run_and_list "$GENERATOR_BIN" "$OUT_DIR" -link_eq "$OUT_DIR/masked-initrd.service" /dev/null -link_endswith "$OUT_DIR/my-fancy-initrd.target.wants/wanted-initrd.service" /lib/systemd/system/wanted-initrd.service -test ! -d "$OUT_DIR/initrd.target.wants" +link_eq "$OUT_DIR/early/masked-initrd.service" /dev/null +link_endswith "$OUT_DIR/early/my-fancy-initrd.target.wants/wanted-initrd.service" /lib/systemd/system/wanted-initrd.service +test ! -d "$OUT_DIR/early/initrd.target.wants" diff --git a/test/units/testsuite-81.fstab-generator.sh b/test/units/testsuite-81.fstab-generator.sh index c57cb9e239..d772f8de0a 100755 --- a/test/units/testsuite-81.fstab-generator.sh +++ b/test/units/testsuite-81.fstab-generator.sh @@ -99,7 +99,7 @@ check_fstab_mount_units() { local what where fstype opts passno unit local item opt split_options filtered_options supp service device arg local array_name="${1:?}" - local out_dir="${2:?}" + local out_dir="${2:?}/normal" # Get a reference to the array from its name local -n fstab_entries="$array_name" @@ -321,10 +321,10 @@ SYSTEMD_IN_INITRD=1 SYSTEMD_FSTAB=/dev/null SYSTEMD_SYSROOT_FSTAB="$FSTAB" check # Check the default stuff that we (almost) always create in initrd : "fstab-generator: initrd default" SYSTEMD_IN_INITRD=1 SYSTEMD_FSTAB=/dev/null SYSTEMD_SYSROOT_FSTAB=/dev/null run_and_list "$GENERATOR_BIN" "$OUT_DIR" -test -e "$OUT_DIR/sysroot.mount" -test -e "$OUT_DIR/systemd-fsck-root.service" -link_eq "$OUT_DIR/initrd-root-fs.target.requires/sysroot.mount" "../sysroot.mount" -link_eq "$OUT_DIR/initrd-root-fs.target.requires/sysroot.mount" "../sysroot.mount" +test -e "$OUT_DIR/normal/sysroot.mount" +test -e "$OUT_DIR/normal/systemd-fsck-root.service" +link_eq "$OUT_DIR/normal/initrd-root-fs.target.requires/sysroot.mount" "../sysroot.mount" +link_eq "$OUT_DIR/normal/initrd-root-fs.target.requires/sysroot.mount" "../sysroot.mount" : "fstab-generator: run as systemd-sysroot-fstab-check in initrd" ln -svf "$GENERATOR_BIN" /tmp/systemd-sysroot-fstab-check @@ -387,15 +387,15 @@ SYSTEMD_IN_INITRD=1 SYSTEMD_SYSROOT_FSTAB=/proc/cmdline check_fstab_mount_units : "fstab-generator: kernel args - mount.usr= + mount.usrfstype= + mount.usrflags=" CMDLINE="mount.usr=UUID=be780f43-8803-4a76-9732-02ceda6e9808 mount.usrfstype=ext4 mount.usrflags=noexec,nodev" SYSTEMD_IN_INITRD=1 SYSTEMD_FSTAB=/dev/null SYSTEMD_SYSROOT_FSTAB=/dev/null SYSTEMD_PROC_CMDLINE="$CMDLINE" run_and_list "$GENERATOR_BIN" "$OUT_DIR" -cat "$OUT_DIR/sysroot-usr.mount" "$OUT_DIR/sysusr-usr.mount" +cat "$OUT_DIR/normal/sysroot-usr.mount" "$OUT_DIR/normal/sysusr-usr.mount" # The general idea here is to mount the device to /sysusr/usr and then # bind-mount /sysusr/usr to /sysroot/usr -grep -qE "^What=/dev/disk/by-uuid/be780f43-8803-4a76-9732-02ceda6e9808$" "$OUT_DIR/sysusr-usr.mount" -grep -qE "^Where=/sysusr/usr$" "$OUT_DIR/sysusr-usr.mount" -grep -qE "^Type=ext4$" "$OUT_DIR/sysusr-usr.mount" -grep -qE "^Options=noexec,nodev,ro$" "$OUT_DIR/sysusr-usr.mount" -link_eq "$OUT_DIR/initrd-usr-fs.target.requires/sysusr-usr.mount" "../sysusr-usr.mount" -grep -qE "^What=/sysusr/usr$" "$OUT_DIR/sysroot-usr.mount" -grep -qE "^Where=/sysroot/usr$" "$OUT_DIR/sysroot-usr.mount" -grep -qE "^Options=bind$" "$OUT_DIR/sysroot-usr.mount" -link_eq "$OUT_DIR/initrd-fs.target.requires/sysroot-usr.mount" "../sysroot-usr.mount" +grep -qE "^What=/dev/disk/by-uuid/be780f43-8803-4a76-9732-02ceda6e9808$" "$OUT_DIR/normal/sysusr-usr.mount" +grep -qE "^Where=/sysusr/usr$" "$OUT_DIR/normal/sysusr-usr.mount" +grep -qE "^Type=ext4$" "$OUT_DIR/normal/sysusr-usr.mount" +grep -qE "^Options=noexec,nodev,ro$" "$OUT_DIR/normal/sysusr-usr.mount" +link_eq "$OUT_DIR/normal/initrd-usr-fs.target.requires/sysusr-usr.mount" "../sysusr-usr.mount" +grep -qE "^What=/sysusr/usr$" "$OUT_DIR/normal/sysroot-usr.mount" +grep -qE "^Where=/sysroot/usr$" "$OUT_DIR/normal/sysroot-usr.mount" +grep -qE "^Options=bind$" "$OUT_DIR/normal/sysroot-usr.mount" +link_eq "$OUT_DIR/normal/initrd-fs.target.requires/sysroot-usr.mount" "../sysroot-usr.mount" diff --git a/test/units/testsuite-81.getty-generator.sh b/test/units/testsuite-81.getty-generator.sh index a53aa4cee1..103e966191 100755 --- a/test/units/testsuite-81.getty-generator.sh +++ b/test/units/testsuite-81.getty-generator.sh @@ -27,10 +27,10 @@ if in_container; then PID1_ENVIRON="container_ttys=tty0 pts/0 /dev/tty0" run_and_list "$GENERATOR_BIN" "$OUT_DIR" # console-getty.service is always pulled in in containers - link_endswith "$OUT_DIR/getty.target.wants/console-getty.service" "/lib/systemd/system/console-getty.service" - link_endswith "$OUT_DIR/getty.target.wants/container-getty@0.service" "/lib/systemd/system/container-getty@.service" - test ! -e "$OUT_DIR/getty.target.wants/container-getty@tty0.service" - test ! -h "$OUT_DIR/getty.target.wants/container-getty@tty0.service" + link_endswith "$OUT_DIR/normal/getty.target.wants/console-getty.service" "/lib/systemd/system/console-getty.service" + link_endswith "$OUT_DIR/normal/getty.target.wants/container-getty@0.service" "/lib/systemd/system/container-getty@.service" + test ! -e "$OUT_DIR/normal/getty.target.wants/container-getty@tty0.service" + test ! -h "$OUT_DIR/normal/getty.target.wants/container-getty@tty0.service" exit 0 fi @@ -68,12 +68,12 @@ mount -v --bind /tmp/dummy-active-consoles /sys/class/tty/console/active PID1_ENVIRON="SYSTEMD_GETTY_AUTO=foo" run_and_list "$GENERATOR_BIN" "$OUT_DIR" for console in "${DUMMY_ACTIVE_CONSOLES[@]}"; do unit="$(systemd-escape --template serial-getty@.service "$console")" - link_endswith "$OUT_DIR/getty.target.wants/$unit" /lib/systemd/system/serial-getty@.service + link_endswith "$OUT_DIR/normal/getty.target.wants/$unit" "/lib/systemd/system/serial-getty@.service" done for console in "${DUMMY_INACTIVE_CONSOLES[@]}" /dev/notatty99; do unit="$(systemd-escape --template serial-getty@.service "$console")" - test ! -e "$OUT_DIR/getty.target.wants/$unit" - test ! -h "$OUT_DIR/getty.target.wants/$unit" + test ! -e "$OUT_DIR/normal/getty.target.wants/$unit" + test ! -h "$OUT_DIR/normal/getty.target.wants/$unit" done : "getty-generator: systemd.getty_auto=0 on kernel cmdline" -- 2.25.1