summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Yuan <me@yhndnzj.com>2023-05-15 14:41:29 +0800
committerMike Yuan <me@yhndnzj.com>2023-05-15 15:04:38 +0800
commitb5b1351317db64de1f2c944ec153208ba8174079 (patch)
tree58829cff86441ad5ce0978ed591f1fd5e85b7795
parent38f901791f3c4b1cbd04b71323bbef2fdab65f83 (diff)
downloadsystemd-b5b1351317db64de1f2c944ec153208ba8174079.tar.gz
test: add tests for UpheldBy= in [Install] section
-rw-r--r--src/test/test-install-root.c12
-rw-r--r--test/fuzz/fuzz-unit-file/directives-all.service2
-rw-r--r--test/testsuite-23.units/testsuite-23-upheldby-install.service9
-rwxr-xr-xtest/units/testsuite-23.Upholds.sh5
4 files changed, 25 insertions, 3 deletions
diff --git a/src/test/test-install-root.c b/src/test/test-install-root.c
index 55b8894ecc..80166b17c6 100644
--- a/src/test/test-install-root.c
+++ b/src/test/test-install-root.c
@@ -1135,6 +1135,9 @@ TEST(verify_alias) {
verify_one(&plain_service, "alias.socket", -EXDEV, NULL);
verify_one(&plain_service, "alias@.service", -EXDEV, NULL);
verify_one(&plain_service, "alias@inst.service", -EXDEV, NULL);
+
+ /* Setting WantedBy= and RequiredBy= through Alias= is supported for the sake of backwards
+ * compatibility. */
verify_one(&plain_service, "foo.target.wants/plain.service", 0, NULL);
verify_one(&plain_service, "foo.target.wants/plain.socket", -EXDEV, NULL);
verify_one(&plain_service, "foo.target.wants/plain@.service", -EXDEV, NULL);
@@ -1143,9 +1146,14 @@ TEST(verify_alias) {
verify_one(&plain_service, "foo.target.requires/plain.socket", -EXDEV, NULL);
verify_one(&plain_service, "foo.target.requires/plain@.service", -EXDEV, NULL);
verify_one(&plain_service, "foo.target.requires/service", -EXDEV, NULL);
- verify_one(&plain_service, "foo.target.conf/plain.service", -EXDEV, NULL);
- verify_one(&plain_service, "foo.service/plain.service", -EXDEV, NULL); /* missing dir suffix */
verify_one(&plain_service, "asdf.requires/plain.service", -EXDEV, NULL); /* invalid unit name component */
+ /* The newly-added UpheldBy= (.upholds/) and other suffixes should be rejected */
+ verify_one(&plain_service, "foo.target.upholds/plain.service", -EXDEV, NULL);
+ verify_one(&plain_service, "foo.target.upholds/plain.socket", -EXDEV, NULL);
+ verify_one(&plain_service, "foo.target.upholds/plain@.service", -EXDEV, NULL);
+ verify_one(&plain_service, "foo.target.upholds/service", -EXDEV, NULL);
+ verify_one(&plain_service, "foo.service/plain.service", -EXDEV, NULL); /* missing dir suffix */
+ verify_one(&plain_service, "foo.target.conf/plain.service", -EXDEV, NULL);
verify_one(&bare_template, "alias.service", -EXDEV, NULL);
verify_one(&bare_template, "alias.socket", -EXDEV, NULL);
diff --git a/test/fuzz/fuzz-unit-file/directives-all.service b/test/fuzz/fuzz-unit-file/directives-all.service
index 8450d024e6..818fb28dbf 100644
--- a/test/fuzz/fuzz-unit-file/directives-all.service
+++ b/test/fuzz/fuzz-unit-file/directives-all.service
@@ -269,6 +269,8 @@ Type=
USBFunctionDescriptors=
USBFunctionStrings=
Unit=
+UpheldBy=
+Upholds=
User=
WakeSystem=
WantedBy=
diff --git a/test/testsuite-23.units/testsuite-23-upheldby-install.service b/test/testsuite-23.units/testsuite-23-upheldby-install.service
new file mode 100644
index 0000000000..a4562077db
--- /dev/null
+++ b/test/testsuite-23.units/testsuite-23-upheldby-install.service
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[Unit]
+Description=Unit that sets UpheldBy= through [Install]
+
+[Service]
+ExecStart=/bin/sleep infinity
+
+[Install]
+UpheldBy=testsuite-23-retry-uphold.service
diff --git a/test/units/testsuite-23.Upholds.sh b/test/units/testsuite-23.Upholds.sh
index 21db258e1d..bce4d7205b 100755
--- a/test/units/testsuite-23.Upholds.sh
+++ b/test/units/testsuite-23.Upholds.sh
@@ -30,6 +30,8 @@ done
systemctl stop testsuite-23-uphold.service
+systemctl enable testsuite-23-upheldby-install.service
+
# Idea is this:
# 1. we start testsuite-23-retry-uphold.service
# 2. which through Uphold= starts testsuite-23-retry-upheld.service
@@ -42,12 +44,13 @@ systemctl stop testsuite-23-uphold.service
rm -f /tmp/testsuite-23-retry-fail
systemctl start testsuite-23-retry-uphold.service
+systemctl is-active testsuite-23-upheldby-install.service
while ! systemctl is-failed testsuite-23-retry-fail.service ; do
sleep .5
done
-systemctl is-active testsuite-23-retry-upheld.service && { echo 'unexpected success'; exit 1; }
+(! systemctl is-active testsuite-23-retry-upheld.service)
touch /tmp/testsuite-23-retry-fail