]>
Commit | Line | Data |
---|---|---|
9948a169 FS |
1 | #!/usr/bin/env bash |
2 | # SPDX-License-Identifier: LGPL-2.1-or-later | |
3 | set -eux | |
4 | set -o pipefail | |
5 | ||
6 | MODULES_LOAD_BIN="/usr/lib/systemd/systemd-modules-load" | |
7 | CONFIG_FILE="/run/modules-load.d/99-test.conf" | |
8 | ||
9 | at_exit() { | |
10 | rm -rfv "${CONFIG_FILE:?}" | |
11 | } | |
12 | ||
13 | trap at_exit EXIT | |
14 | ||
15 | if systemd-detect-virt -cq; then | |
16 | echo "Running in a container, skipping the systemd-modules-load test..." | |
17 | exit 0 | |
18 | fi | |
19 | ||
fe8d7d25 RM |
20 | ORIG_MODULES_LOAD_CONFIG="$(systemd-analyze cat-config modules-load.d)" |
21 | ||
9948a169 | 22 | # Check if we have required kernel modules |
3d5c6ece | 23 | modprobe --all --resolve-alias dummy |
9948a169 FS |
24 | |
25 | mkdir -p /run/modules-load.d/ | |
26 | ||
27 | "$MODULES_LOAD_BIN" | |
28 | "$MODULES_LOAD_BIN" --help | |
29 | "$MODULES_LOAD_BIN" --version | |
30 | ||
31 | # Explicit config file | |
3d5c6ece DDM |
32 | modprobe -v --all --remove dummy |
33 | printf "dummy" >"$CONFIG_FILE" | |
9948a169 | 34 | "$MODULES_LOAD_BIN" "$CONFIG_FILE" |& tee /tmp/out.log |
9948a169 FS |
35 | grep -E "Inserted module .*dummy" /tmp/out.log |
36 | ||
37 | # Implicit config file | |
3d5c6ece DDM |
38 | modprobe -v --all --remove dummy |
39 | printf "dummy" >"$CONFIG_FILE" | |
9948a169 | 40 | "$MODULES_LOAD_BIN" |& tee /tmp/out.log |
9948a169 FS |
41 | grep -E "Inserted module .*dummy" /tmp/out.log |
42 | ||
43 | # Valid & invalid data mixed together | |
3d5c6ece | 44 | modprobe -v --all --remove dummy |
9948a169 FS |
45 | cat >"$CONFIG_FILE" <<EOF |
46 | ||
3d5c6ece DDM |
47 | dummy |
48 | dummy | |
49 | dummy | |
50 | dummy | |
9948a169 FS |
51 | dummy |
52 | \\n\n\n\\\\\\ | |
3d5c6ece DDM |
53 | |
54 | dumm!@@123##2455 | |
9948a169 FS |
55 | # This is a comment |
56 | $(printf "%.0sx" {0..4096}) | |
57 | dummy | |
3d5c6ece | 58 | dummy |
9948a169 FS |
59 | foo-bar-baz |
60 | 1 | |
61 | " | |
62 | ' | |
63 | EOF | |
64 | "$MODULES_LOAD_BIN" |& tee /tmp/out.log | |
9948a169 FS |
65 | grep -E "^Inserted module .*dummy" /tmp/out.log |
66 | grep -E "^Failed to find module .*foo-bar-baz" /tmp/out.log | |
67 | (! grep -E "This is a comment" /tmp/out.log) | |
68 | # Each module should be loaded only once, even if specified multiple times | |
3d5c6ece | 69 | [[ "$(grep -Ec "^Inserted module" /tmp/out.log)" -eq 1 ]] |
9948a169 FS |
70 | [[ "$(grep -Ec "^Failed to find module" /tmp/out.log)" -eq 7 ]] |
71 | ||
72 | # Command line arguments | |
3d5c6ece | 73 | modprobe -v --all --remove dummy |
9948a169 FS |
74 | # Make sure we have no config files left over that might interfere with |
75 | # following tests | |
76 | rm -fv "$CONFIG_FILE" | |
fe8d7d25 | 77 | [[ "$ORIG_MODULES_LOAD_CONFIG" == "$(systemd-analyze cat-config modules-load.d)" ]] |
3d5c6ece | 78 | CMDLINE="ro root= modules_load= modules_load=, / = modules_load=foo-bar-baz,dummy modules_load=dummy,dummy,dummy" |
9948a169 | 79 | SYSTEMD_PROC_CMDLINE="$CMDLINE" "$MODULES_LOAD_BIN" |& tee /tmp/out.log |
9948a169 FS |
80 | grep -E "^Inserted module .*dummy" /tmp/out.log |
81 | grep -E "^Failed to find module .*foo-bar-baz" /tmp/out.log | |
82 | # Each module should be loaded only once, even if specified multiple times | |
3d5c6ece | 83 | [[ "$(grep -Ec "^Inserted module" /tmp/out.log)" -eq 1 ]] |
9948a169 FS |
84 | |
85 | (! "$MODULES_LOAD_BIN" --nope) | |
86 | (! "$MODULES_LOAD_BIN" /foo/bar/baz) |