8d419f
From 8bd34d04ce8ca0ec4a501973771634083180ecc0 Mon Sep 17 00:00:00 2001
8d419f
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
8d419f
Date: Tue, 15 Mar 2022 10:13:18 +0100
8d419f
Subject: [PATCH] test-systemctl-enable: extend the test for repeated
8d419f
 WantedBy/RequiredBy
8d419f
8d419f
I was considering deduplicating the list of target units in
8d419f
WantedBy/RequiredBy. But to do this meaningfully, we'd need to do alias
8d419f
expansion first, i.e. after the initial parsing is done. This seems to be
8d419f
more trouble than it would be worth.
8d419f
8d419f
Instead, I added tests that we're doing the right thing and creating symlinks
8d419f
as expected. For duplicate links, we create the link, and on the second time we
8d419f
see that the link is already there, so the output is correct.
8d419f
8d419f
(cherry picked from commit 0c003e8305188f25429938c7c4d09c0a5dfc961b)
8d419f
8d419f
Related: #2082131
8d419f
---
8d419f
 test/test-systemctl-enable.sh | 22 ++++++++++++++++++----
8d419f
 1 file changed, 18 insertions(+), 4 deletions(-)
8d419f
8d419f
diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
8d419f
index 0ed08a9da3..0a0123b9d7 100644
8d419f
--- a/test/test-systemctl-enable.sh
8d419f
+++ b/test/test-systemctl-enable.sh
8d419f
@@ -285,39 +285,53 @@ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
8d419f
 test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service"
8d419f
 
8d419f
 : -------template enablement w/ default instance--------------
8d419f
-cat >>"$root/etc/systemd/system/templ1@.service" <
8d419f
+cat >"$root/etc/systemd/system/templ1@.service" <
8d419f
+[Install]
8d419f
+# check enablement with
8d419f
+WantedBy=services.target services.target
8d419f
+RequiredBy=other@templ1.target other@%p.target
8d419f
 DefaultInstance=333
8d419f
 EOF
8d419f
-# FIXME: should we deduplicate the target? Right now we warn twice if WantedBy= is repeated.
8d419f
-# WantedBy=services.target services.target
8d419f
 
8d419f
 "$systemctl" --root="$root" enable 'templ1@.service'
8d419f
 test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
8d419f
 islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
8d419f
+islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "/etc/systemd/system/templ1@.service"
8d419f
 
8d419f
 "$systemctl" --root="$root" enable 'templ1@one.service'
8d419f
 test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
8d419f
 islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
8d419f
+islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "/etc/systemd/system/templ1@.service"
8d419f
 islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
8d419f
+islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service" "/etc/systemd/system/templ1@.service"
8d419f
 
8d419f
 "$systemctl" --root="$root" enable 'templ1@two.service'
8d419f
 test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
8d419f
 islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
8d419f
+islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "/etc/systemd/system/templ1@.service"
8d419f
 islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
8d419f
+islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service" "/etc/systemd/system/templ1@.service"
8d419f
 islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
8d419f
+islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service" "/etc/systemd/system/templ1@.service"
8d419f
 
8d419f
 "$systemctl" --root="$root" disable 'templ1@one.service'
8d419f
 test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
8d419f
 islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
8d419f
+islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "/etc/systemd/system/templ1@.service"
8d419f
 test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
8d419f
+test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service"
8d419f
 islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
8d419f
+islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service" "/etc/systemd/system/templ1@.service"
8d419f
 
8d419f
-# disable both remaining links here
8d419f
+# disable remaining links here
8d419f
 "$systemctl" --root="$root" disable 'templ1@.service'
8d419f
 test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
8d419f
 test ! -h "$root/etc/systemd/system/services.target.wants/templ1@333.service"
8d419f
+test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service"
8d419f
 test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
8d419f
+test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service"
8d419f
 test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service"
8d419f
+test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service"
8d419f
 
8d419f
 : -------template enablement for another template-------------
8d419f
 cat >"$root/etc/systemd/system/templ2@.service" <