--- /dev/null
+[Unit]
+Description=Stop Propagation Receiver
+Wants=testsuite-57-prop-stop-two.service
+After=testsuite-57-prop-stop-two.service
+StopPropagatedFrom=testsuite-57-prop-stop-two.service
+
+[Service]
+ExecStart=/bin/sleep infinity
+ExecStopPost=systemctl kill --kill-who=main -sUSR2 testsuite-57.service
--- /dev/null
+#!/usr/bin/env bash
+
+set -ex
+
+if [ -f /tmp/testsuite-57.counter ] ; then
+ read -r counter < /tmp/testsuite-57.counter
+ counter=$(("$counter" + 1))
+else
+ counter=0
+fi
+
+echo "$counter" > /tmp/testsuite-57.counter
+
+if [ "$counter" -eq 5 ] ; then
+ systemctl kill --kill-who=main -sUSR1 testsuite-57.service
+fi
+
+exec sleep 1.5
--- /dev/null
+#!/usr/bin/env bash
+
+set -eux
+set -o pipefail
+
+systemd-analyze log-level debug
+systemd-analyze log-target journal
+
+# Idea is this:
+# 1. we start testsuite-57-success.service
+# 2. which through OnSuccess= starts testsuite-57-fail.service,
+# 3. which through OnFailure= starts testsuite-57-uphold.service,
+# 4. which through Uphold= starts/keeps testsuite-57-short-lived.service running,
+# 5. which will sleep 1s when invoked, and on the 5th invocation send us a SIGUSR1
+# 6. once we got that we finish cleanly
+
+sigusr1=0
+trap sigusr1=1 SIGUSR1
+
+systemctl start testsuite-57-success.service
+
+while [ "$sigusr1" -eq 0 ] ; do
+ sleep .5
+done
+
+systemctl stop testsuite-57-uphold.service
+
+# Idea is this:
+# 1. we start testsuite-57-prop-stop-one.service
+# 2. which through Wants=/After= pulls in testsuite-57-prop-stop-two.service as well
+# 3. testsuite-57-prop-stop-one.service then sleeps indefinitely
+# 4. testsuite-57-prop-stop-two.service sleeps a short time and exits
+# 5. the StopPropagatedFrom= dependency between the two should ensure *both* will exit as result
+# 6. an ExecStopPost= line on testsuite-57-prop-stop-one.service will send us a SIGUSR2
+# 7. once we got that we finish cleanly
+
+sigusr2=0
+trap sigusr2=1 SIGUSR2
+
+systemctl start testsuite-57-prop-stop-one.service
+
+while [ "$sigusr2" -eq 0 ] ; do
+ sleep .5
+done
+
+
+# Idea is this:
+# 1. we start testsuite-57-binds-to.service
+# 2. which through BindsTo=/After= pulls in testsuite-57-bound-by.service as well
+# 3. testsuite-57-bound-by.service suddenly dies
+# 4. testsuite-57-binds-to.service should then also be pulled down (it otherwise just hangs)
+# 6. an ExecStopPost= line on testsuite-57-binds-to.service will send us a SIGRTMIN1+1
+# 7. once we got that we finish cleanly
+
+sigrtmin1=0
+trap sigrtmin1=1 SIGRTMIN+1
+
+systemctl start testsuite-57-binds-to.service
+
+while [ "$sigrtmin1" -eq 0 ] ; do
+ sleep .5
+done
+
+systemd-analyze log-level info
+
+echo OK >/testok
+
+exit 0