]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Merge pull request #26781 from mrc0mmand/tests-again
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 13 Mar 2023 18:27:45 +0000 (03:27 +0900)
committerGitHub <noreply@github.com>
Mon, 13 Mar 2023 18:27:45 +0000 (03:27 +0900)
test: add a couple of tests for systemd-path

test/units/testsuite-74.busctl.sh
test/units/testsuite-74.path.sh [new file with mode: 0755]

index 6e905a025a260f06b439a30598ef95cb9d30bbea..aaf96d08c1230ae90bbf72d33c472e22090c6ad7 100755 (executable)
@@ -38,6 +38,11 @@ busctl call --json=pretty \
 busctl call --json=short \
             org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager \
             ListUnitsByNames as 2 "systemd-journald.service" "systemd-logind.service" | jq
+# Get all properties on the org.freedesktop.systemd1.Manager interface and dump
+# them as JSON to exercise the internal JSON transformations
+busctl call -j \
+            org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.DBus.Properties \
+            GetAll s "org.freedesktop.systemd1.Manager" | jq -c
 busctl call --verbose --timeout=60 --expect-reply=yes \
             org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager \
             ListUnitsByPatterns asas 1 "active" 2 "systemd-*.socket" "*.mount"
diff --git a/test/units/testsuite-74.path.sh b/test/units/testsuite-74.path.sh
new file mode 100755 (executable)
index 0000000..08ac9ca
--- /dev/null
@@ -0,0 +1,89 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+set -eux
+set -o pipefail
+
+# shellcheck source=test/units/assert.sh
+. "$(dirname "$0")"/assert.sh
+
+USER_DIRS_CONF="/root/.config/user-dirs.dirs"
+
+at_exit() {
+    set +e
+
+    rm -fv "${USER_DIRS_CONF:?}"
+}
+
+trap at_exit EXIT
+
+# Check that we indeed run under root to make the rest of the test work
+[[ "$(id -u)" -eq 0 ]]
+
+# Create a custom user-dirs.dir file to exercise the xdg-user-dirs part
+# of sd-path/from_user_dir()
+mkdir -p "/root/.config"
+cat >"${USER_DIRS_CONF:?}" <<\EOF
+XDG_DESKTOP_DIR="$HOME/my-fancy-desktop"
+XDG_INVALID
+
+XDG_DOWNLOAD_DIR   = "$HOME"
+XDG_TEMPLATES_DIR="/templates"
+# Invalid records
+XDG_TEMPLATES_DIR=/not-templates"
+XDG_TEMPLATES_DIR="/also-not-teplates
+XDG_TEMPLATES_DIR=""
+XDG_TEMPLATES_DIR="../"
+
+XDG_PUBLICSHARE_DIR="$HOME/cat-pictures"
+XDG_DOCUMENTS_DIR="$HOME/top/secret/documents"
+XDG_MUSIC_DIR="/tmp/vaporwave"
+XDG_PICTURES_DIR="$HOME/Pictures"
+XDG_VIDEOS_DIR="$HOME/🤔"
+EOF
+
+systemd-path --help
+systemd-path --version
+systemd-path
+systemd-path temporary system-binaries user binfmt
+
+assert_eq "$(systemd-path system-runtime)" "/run"
+assert_eq "$(systemd-path --suffix='' system-runtime)" "/run"
+assert_eq "$(systemd-path --suffix='🤔' system-runtime)" "/run/🤔"
+assert_eq "$(systemd-path --suffix=hello system-runtime)" "/run/hello"
+
+# Note for the stuff below: everything defaults to $HOME, only the desktop
+# directory defaults to $HOME/Desktop.
+#
+# Check the user-dirs.dir stuff from above
+assert_eq "$(systemd-path user)" "/root"
+assert_eq "$(systemd-path user-desktop)" "/root/my-fancy-desktop"
+assert_eq "$(systemd-path user-documents)" "/root/top/secret/documents"
+assert_eq "$(systemd-path user-download)" "/root"
+assert_eq "$(systemd-path user-music)" "/tmp/vaporwave"
+assert_eq "$(systemd-path user-pictures)" "/root/Pictures"
+assert_eq "$(systemd-path user-public)" "/root/cat-pictures"
+assert_eq "$(systemd-path user-templates)" "/templates"
+assert_eq "$(systemd-path user-videos)" "/root/🤔"
+
+# Remove the user-dirs.dir file and check the defaults
+rm -fv "$USER_DIRS_CONF"
+[[ ! -e "$USER_DIRS_CONF" ]]
+assert_eq "$(systemd-path user-desktop)" "/root/Desktop"
+for dir in "" documents download music pictures public templates videos; do
+    assert_eq "$(systemd-path "user${dir:+-$dir}")" "/root"
+done
+
+# sd-path should consider only absolute $HOME
+assert_eq "$(HOME=/hello-world systemd-path user)" "/hello-world"
+assert_eq "$(HOME=hello-world systemd-path user)" "/root"
+assert_eq "$(HOME=/hello systemd-path --suffix=world user)" "/hello/world"
+assert_eq "$(HOME=hello systemd-path --suffix=world user)" "/root/world"
+# Same with some other env variables
+assert_in "/my-config" "$(HOME='' XDG_CONFIG_HOME=/my-config systemd-path search-configuration)"
+assert_in "/my-config/foo" "$(HOME='' XDG_CONFIG_HOME=/my-config systemd-path --suffix=foo search-configuration)"
+assert_in "/my-home/.config/foo" "$(HOME=/my-home XDG_CONFIG_HOME=my-config systemd-path --suffix=foo search-configuration)"
+assert_not_in "my-config" "$(HOME=my-config XDG_CONFIG_HOME=my-config systemd-path search-configuration)"
+
+(! systemd-path '')
+(! systemd-path system-binaries ðŸ¤” user)
+(! systemd-path --xyz)