]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: properly distinguish between generator phases
authorFrantisek Sumsal <frantisek@sumsal.cz>
Fri, 14 Apr 2023 13:15:13 +0000 (15:15 +0200)
committerFrantisek Sumsal <frantisek@sumsal.cz>
Fri, 14 Apr 2023 13:44:01 +0000 (15:44 +0200)
Let's make sure the units generated by generators are generated at the
right stage.

test/units/generator-utils.sh
test/units/testsuite-81.debug-generator.sh
test/units/testsuite-81.fstab-generator.sh
test/units/testsuite-81.getty-generator.sh

index 035fd55b0d0f05446e65142c97cf189b54f10de3..42c6a773533460f7846fa9e48a470334e1468953 100644 (file)
@@ -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
index d2b2bf1111d65bd2aec2e131f60894e4c46ca5ff..fddf85a54c661510eb1587f765d491571a9d99e3 100755 (executable)
@@ -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"
index c57cb9e239f13ce71b5e3c09340f3fd95dc028bf..d772f8de0a400503b600bf256d7d346dd1ed2003 100755 (executable)
@@ -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"
index a53aa4cee1eeea4a0a934bcd599cbf50cc5eb4b2..103e9661913911205e93bf7e9cf715a77f789d0b 100755 (executable)
@@ -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"