]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: add a couple of tests for run-generator 27273/head
authorFrantisek Sumsal <frantisek@sumsal.cz>
Fri, 14 Apr 2023 15:05:55 +0000 (17:05 +0200)
committerFrantisek Sumsal <frantisek@sumsal.cz>
Fri, 14 Apr 2023 15:05:55 +0000 (17:05 +0200)
test/units/testsuite-81.run-generator.sh [new file with mode: 0755]

diff --git a/test/units/testsuite-81.run-generator.sh b/test/units/testsuite-81.run-generator.sh
new file mode 100755 (executable)
index 0000000..9bd74ef
--- /dev/null
@@ -0,0 +1,76 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+# shellcheck disable=SC2235
+set -eux
+set -o pipefail
+
+# shellcheck source=test/units/generator-utils.sh
+. "$(dirname "$0")/generator-utils.sh"
+
+GENERATOR_BIN="/usr/lib/systemd/system-generators/systemd-run-generator"
+OUT_DIR="$(mktemp -d /tmp/run-generator.XXX)"
+
+at_exit() {
+    rm -frv "${OUT_DIR:?}"
+}
+
+trap at_exit EXIT
+
+test -x "${GENERATOR_BIN:?}"
+
+check_kernel_cmdline_target() {
+    local out_dir="${1:?}/normal"
+
+    cat "$out_dir/kernel-command-line.target"
+    grep -qE "^Requires=kernel-command-line.service$" "$out_dir/kernel-command-line.target"
+    grep -qE "^After=kernel-command-line.service$" "$out_dir/kernel-command-line.target"
+
+    link_eq "$out_dir/default.target" "kernel-command-line.target"
+}
+
+: "run-generator: empty cmdline"
+SYSTEMD_PROC_CMDLINE="" run_and_list "$GENERATOR_BIN" "$OUT_DIR"
+[[ "$(find "$OUT_DIR" ! -type d | wc -l)" -eq 0 ]]
+
+: "run-generator: single command"
+CMDLINE="systemd.run='echo hello world'"
+SYSTEMD_PROC_CMDLINE="$CMDLINE" run_and_list "$GENERATOR_BIN" "$OUT_DIR"
+check_kernel_cmdline_target "$OUT_DIR"
+UNIT="$OUT_DIR/normal/kernel-command-line.service"
+cat "$UNIT"
+systemd-analyze verify --man=no --recursive-errors=no "$UNIT"
+grep -qE "^SuccessAction=exit$" "$UNIT"
+grep -qE "^FailureAction=exit$" "$UNIT"
+grep -qE "^ExecStart=echo hello world$" "$UNIT"
+
+: "run-generator: multiple commands + success/failure actions"
+ARGS=(
+    # These should be ignored
+    "systemd.run"
+    "systemd.run_success_action"
+    "systemd.run_failure_action"
+
+    # Set actions which we will overwrite later
+    "systemd.run_success_action="
+    "systemd.run_failure_action="
+
+    "systemd.run=/bin/false"
+    "systemd.run="
+    "systemd.run=/bin/true"
+    "systemd.run='echo this is a long string'"
+
+    "systemd.run_success_action=reboot"
+    "systemd.run_failure_action=poweroff-force"
+)
+CMDLINE="${ARGS[*]}"
+SYSTEMD_PROC_CMDLINE="$CMDLINE" run_and_list "$GENERATOR_BIN" "$OUT_DIR"
+check_kernel_cmdline_target "$OUT_DIR"
+UNIT="$OUT_DIR/normal/kernel-command-line.service"
+cat "$UNIT"
+systemd-analyze verify --man=no --recursive-errors=no "$UNIT"
+grep -qE "^SuccessAction=reboot$" "$UNIT"
+grep -qE "^FailureAction=poweroff-force$" "$UNIT"
+grep -qE "^ExecStart=/bin/false$" "$UNIT"
+grep -qE "^ExecStart=$" "$UNIT"
+grep -qE "^ExecStart=/bin/true$" "$UNIT"
+grep -qE "^ExecStart=echo this is a long string$" "$UNIT"