test: move TEST-16-EXTEND-TIMEOUT setup to static files
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 10 Dec 2019 07:16:40 +0000 (08:16 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 28 Mar 2020 10:46:47 +0000 (11:46 +0100)
22 files changed:
test/TEST-16-EXTEND-TIMEOUT/assess.sh [deleted file]
test/TEST-16-EXTEND-TIMEOUT/extend_timeout_test_service.sh [deleted file]
test/TEST-16-EXTEND-TIMEOUT/test.sh
test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-runtime.service [deleted file]
test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-start.service [deleted file]
test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-stop.service [deleted file]
test/TEST-16-EXTEND-TIMEOUT/testsuite-success-all.service [deleted file]
test/TEST-16-EXTEND-TIMEOUT/testsuite-success-runtime.service [deleted file]
test/TEST-16-EXTEND-TIMEOUT/testsuite-success-start.service [deleted file]
test/TEST-16-EXTEND-TIMEOUT/testsuite-success-stop.service [deleted file]
test/TEST-16-EXTEND-TIMEOUT/testsuite.service [deleted file]
test/meson.build
test/testsuite-16.units/extend-timeout.sh [new file with mode: 0755]
test/testsuite-16.units/fail-runtime.service [new file with mode: 0644]
test/testsuite-16.units/fail-start.service [new file with mode: 0644]
test/testsuite-16.units/fail-stop.service [new file with mode: 0644]
test/testsuite-16.units/success-all.service [new file with mode: 0644]
test/testsuite-16.units/success-runtime.service [new file with mode: 0644]
test/testsuite-16.units/success-start.service [new file with mode: 0644]
test/testsuite-16.units/success-stop.service [new file with mode: 0644]
test/units/testsuite-16.service [new file with mode: 0644]
test/units/testsuite-16.sh [new file with mode: 0755]

diff --git a/test/TEST-16-EXTEND-TIMEOUT/assess.sh b/test/TEST-16-EXTEND-TIMEOUT/assess.sh
deleted file mode 100755 (executable)
index 6f98810..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env bash
-set -v -x
-
-rm -f /test.log
-
-TL=/test.log.XXXXXXXX
-
-function wait_for()
-{
-    service=${1}
-    result=${2:-success}
-    time=${3:-45}
-
-    while [[ ! -f /${service}.terminated && ! -f /${service}.success && $time -gt 0  ]]
-    do
-        sleep 1
-        time=$(( $time - 1 ))
-    done
-
-    if [[ ! -f /${service}.${result} ]]
-    then
-        journalctl -u testsuite-${service/_/-}.service >> "${TL}"
-    fi
-}
-
-# This checks all stages, start, runtime and stop, can be extended by
-# EXTEND_TIMEOUT_USEC
-
-wait_for success_all
-
-# These check that EXTEND_TIMEOUT_USEC that occurs at greater than the
-# extend timeout interval but less then the stage limit (TimeoutStartSec,
-# RuntimeMaxSec, TimeoutStopSec) still succeed.
-
-wait_for success_start
-wait_for success_runtime
-wait_for success_stop
-
-# These ensure that EXTEND_TIMEOUT_USEC will still timeout in the
-# approprate stage, after the stage limit, when the EXTEND_TIMEOUT_USEC
-# message isn't sent within the extend timeout interval.
-
-wait_for fail_start startfail
-wait_for fail_stop stopfail
-wait_for fail_runtime runtimefail
-
-if [[ -f "${TL}" ]]
-then
-    # no mv
-    cp "${TL}" /test.log
-    exit 1
-else
-    touch /testok
-    exit 0
-fi
diff --git a/test/TEST-16-EXTEND-TIMEOUT/extend_timeout_test_service.sh b/test/TEST-16-EXTEND-TIMEOUT/extend_timeout_test_service.sh
deleted file mode 100755 (executable)
index 40bf046..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env bash
-set -x
-set -e
-set -o pipefail
-
-# sleep interval (seconds)
-sleep_interval=1
-# extend_timeout_interval second(s)
-extend_timeout_interval=1
-# number of sleep_intervals before READY=1
-start_intervals=10
-# number of sleep_intervals before exiting
-stop_intervals=10
-# run intervals, number of sleep_intervals to run
-run_intervals=7
-# service name
-SERVICE=unknown
-
-while [ $# -gt 0 ];
-do
-    eval ${1%=*}=${1#*=}
-    shift
-done
-
-# We convert to usec
-extend_timeout_interval=$(( $extend_timeout_interval * 1000000 ))
-
-trap "{ touch /${SERVICE}.terminated; exit 1; }"  SIGTERM SIGABRT
-
-rm -f /${SERVICE}.*
-touch /${SERVICE}.startfail
-
-systemd-notify EXTEND_TIMEOUT_USEC=$extend_timeout_interval
-while [ $start_intervals -gt 0 ]
-do
-    sleep $sleep_interval
-    start_intervals=$(( $start_intervals - 1 ))
-    systemd-notify EXTEND_TIMEOUT_USEC=$extend_timeout_interval
-done
-
-systemd-notify --ready --status="Waiting for your request"
-
-touch /${SERVICE}.runtimefail
-rm /${SERVICE}.startfail
-
-systemd-notify EXTEND_TIMEOUT_USEC=$extend_timeout_interval
-while [ $run_intervals -gt 0 ]
-do
-    sleep $sleep_interval
-    run_intervals=$(( $run_intervals - 1 ))
-    systemd-notify EXTEND_TIMEOUT_USEC=$extend_timeout_interval
-done
-
-systemd-notify STOPPING=1
-
-touch /${SERVICE}.stopfail
-rm /${SERVICE}.runtimefail
-
-systemd-notify EXTEND_TIMEOUT_USEC=$extend_timeout_interval
-while [ $stop_intervals -gt 0 ]
-do
-    sleep $sleep_interval
-    stop_intervals=$(( $stop_intervals - 1 ))
-    systemd-notify EXTEND_TIMEOUT_USEC=$extend_timeout_interval
-done
-
-touch /${SERVICE}.success
-rm /${SERVICE}.stopfail
-
-exit 0
index 43d9f1278b3c8658b3f5ce5c4aae08ab9ab4340a..474b9db2fcc03341f9b2876ff8b0e9348d0a8ecb 100755 (executable)
@@ -15,21 +15,9 @@ test_setup() {
 
         setup_basic_environment
         mask_supporting_services
-
-        for s in success-all success-start success-stop success-runtime \
-                 fail-start fail-stop fail-runtime
-        do
-            cp testsuite-${s}.service ${initdir}/etc/systemd/system
-        done
-        cp testsuite.service ${initdir}/etc/systemd/system
-
-        cp extend_timeout_test_service.sh ${initdir}/
-        cp assess.sh ${initdir}/
-
-        setup_testsuite
     )
 
     setup_nspawn_root
 }
 
-do_test "$@"
+do_test "$@" 16
diff --git a/test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-runtime.service b/test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-runtime.service
deleted file mode 100644 (file)
index e0b9f6a..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-[Unit]
-Description=Testsuite: Fail Runtime (EXTEND_TIMEOUT_USEC Didn't occur in sufficient time after RuntimeSecMax.)
-
-[Service]
-
-# EXTEND_TIMEOUT_USEC on runtime start (0) and 7 seconds after. Systemd will expect one at 7+5 (extend_timeout_interval)
-# seconds this won't happen until 7 + 7 (sleep interval) seconds. Therefore timeout at 12 seconds.
-Type=notify
-TimeoutStartSec=4
-TimeoutStopSec=4
-RuntimeMaxSec=10
-ExecStart=/extend_timeout_test_service.sh SERVICE=fail_runtime extend_timeout_interval=5 sleep_interval=7 start_intervals=0 run_intervals=2 stop_intervals=0
diff --git a/test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-start.service b/test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-start.service
deleted file mode 100644 (file)
index c3fcf23..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-[Unit]
-Description=Testsuite: Fail Start (EXTEND_TIMEOUT_USEC Didn't occur in sufficient time after TimeoutStartSec.)
-
-[Service]
-
-# EXTEND_TIMEOUT_USEC on startup and 7 seconds from start. Systemd will expect one at 7+5 (extend_timeout_interval)
-# seconds  this won't happen until 7 + 7 (sleep interval) seconds. Therefore timeout at 12 seconds.
-Type=notify
-TimeoutStartSec=10
-TimeoutStopSec=4
-RuntimeMaxSec=4
-ExecStart=/extend_timeout_test_service.sh SERVICE=fail_start extend_timeout_interval=5 sleep_interval=7 start_intervals=2 run_intervals=0 stop_intervals=0
diff --git a/test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-stop.service b/test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-stop.service
deleted file mode 100644 (file)
index ce76d10..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-[Unit]
-Description=Testsuite: Fail Stop (EXTEND_TIMEOUT_USEC Didn't occur in sufficient time after TimeoutStopSec.)
-
-[Service]
-
-# EXTEND_TIMEOUT_USEC on stop (0) and 7 seconds after. Systemd will expect one at 7+5 (extend_timeout_interval)
-# seconds this won't happen until 7 + 7 (sleep interval) seconds. Therefore timeout at 12 seconds.
-Type=notify
-TimeoutStartSec=4
-TimeoutStopSec=10
-RuntimeMaxSec=4
-ExecStart=/extend_timeout_test_service.sh SERVICE=fail_stop extend_timeout_interval=5 sleep_interval=7 start_intervals=0 run_intervals=0 stop_intervals=2
-# Due to 6041a7ee2c1bbff6301082f192fc1b0882400d42 SIGTERM isn't sent as the service shuts down with STOPPING=1
-# This file makes the test assess.sh quicker by notifing it that this test has finished.
-ExecStopPost=/bin/bash -c '[[ $SERVICE_RESULT == timeout && $EXIT_CODE == killed ]] && touch /fail_runtime.terminated'
diff --git a/test/TEST-16-EXTEND-TIMEOUT/testsuite-success-all.service b/test/TEST-16-EXTEND-TIMEOUT/testsuite-success-all.service
deleted file mode 100644 (file)
index 666f422..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-
-[Unit]
-Description=Testsuite: EXTEND_TIMEOUT_USEC Success - extend timeout on all services
-
-[Service]
-
-# Normal success - startup / runtime / shutdown all take 8 seconds which is within the EXTEND_TIMEOUT_USEC=4 seconds interval
-# runtime is 8+8+8 seconds. so we are relying on the EXTEND_TIMEOUT_USEC to exceed all stages, Start, Runtime and Stop.
-# success occurs after 24 seconds
-Type=notify
-TimeoutStartSec=4
-TimeoutStopSec=4
-RuntimeMaxSec=4
-ExecStart=/extend_timeout_test_service.sh SERVICE=success_all extend_timeout_interval=4 sleep_interval=2 start_intervals=3 run_intervals=3 stop_intervals=3
diff --git a/test/TEST-16-EXTEND-TIMEOUT/testsuite-success-runtime.service b/test/TEST-16-EXTEND-TIMEOUT/testsuite-success-runtime.service
deleted file mode 100644 (file)
index dc226f5..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-[Unit]
-Description=Testsuite: Success Runtime (EXTEND_TIMEOUT_USEC > WATCHDOG_USEC however < RuntimeMaxSec)
-
-[Service]
-
-# EXTEND_TIMEOUT_USEC=4 second once during runtime, but sleep for 6 seconds.
-# Runtime is 6 seconds and < RuntimeMaxSec so still successful.
-Type=notify
-TimeoutStartSec=4
-TimeoutStopSec=4
-RuntimeMaxSec=8
-ExecStart=/extend_timeout_test_service.sh SERVICE=success_runtime extend_timeout_interval=4 sleep_interval=6 start_intervals=0 run_intervals=1 stop_intervals=0
diff --git a/test/TEST-16-EXTEND-TIMEOUT/testsuite-success-start.service b/test/TEST-16-EXTEND-TIMEOUT/testsuite-success-start.service
deleted file mode 100644 (file)
index 228eece..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-[Unit]
-Description=Testsuite: Success Start (EXTEND_TIMEOUT_USEC > WATCHDOG_USEC however < TimeoutStartSec)
-
-[Service]
-
-# EXTEND_TIMEOUT_USEC=4 second interval once at startup, but sleep 6 seconds.
-# Therefore startup is 6 seconds and < TimeoutStartSec so still successful.
-Type=notify
-TimeoutStartSec=8
-TimeoutStopSec=4
-RuntimeMaxSec=4
-ExecStart=/extend_timeout_test_service.sh SERVICE=success_start extend_timeout_interval=4 sleep_interval=6 start_intervals=1 run_intervals=0 stop_intervals=0
diff --git a/test/TEST-16-EXTEND-TIMEOUT/testsuite-success-stop.service b/test/TEST-16-EXTEND-TIMEOUT/testsuite-success-stop.service
deleted file mode 100644 (file)
index b809397..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-[Unit]
-Description=Testsuite: Success Stop (EXTEND_TIMEOUT_USEC > WATCHDOG_USEC however < TimeoutStopSec)
-
-[Service]
-
-# EXTEND_TIMEOUT_USEC=4 seconds once during shutdown, but sleep for 6 seconds.
-# Therefore stop time is 6 seconds and < TimeoutStopSec so still successful.
-Type=notify
-TimeoutStartSec=4
-TimeoutStopSec=8
-RuntimeMaxSec=4
-ExecStart=/extend_timeout_test_service.sh SERVICE=success_stop extend_timeout_interval=4 sleep_interval=6 start_intervals=0 run_intervals=0 stop_intervals=1
diff --git a/test/TEST-16-EXTEND-TIMEOUT/testsuite.service b/test/TEST-16-EXTEND-TIMEOUT/testsuite.service
deleted file mode 100644 (file)
index 7512ba9..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-[Unit]
-Description=Testsuite: Assess all other testsuite-*.services worked as expected
-
-Wants=testsuite-success-all.service
-Wants=testsuite-success-start.service
-Wants=testsuite-success-runtime.service
-Wants=testsuite-success-stop.service
-Wants=testsuite-fail-start.service
-Wants=testsuite-fail-stop.service
-Wants=testsuite-fail-runtime.service
-StopWhenUnneeded=yes
-
-[Service]
-Type=simple
-TimeoutStartSec=infinity
-ExecStartPre=/assess.sh
-ExecStart=/bin/true
index 61e0aee13f2c9b828d9d31cc1520835f268662aa..6fea0fc93d2e1b13d1fdb96f6d932dca5ff83287 100644 (file)
@@ -20,6 +20,8 @@ install_subdir('testsuite-10.units',
                install_dir : testdata_dir)
 install_subdir('testsuite-11.units',
                install_dir : testdata_dir)
+install_subdir('testsuite-16.units',
+               install_dir : testdata_dir)
 
 testsuite08_dir = testdata_dir + '/testsuite-08.units'
 install_data('testsuite-08.units/-.mount',
diff --git a/test/testsuite-16.units/extend-timeout.sh b/test/testsuite-16.units/extend-timeout.sh
new file mode 100755 (executable)
index 0000000..40bf046
--- /dev/null
@@ -0,0 +1,70 @@
+#!/usr/bin/env bash
+set -x
+set -e
+set -o pipefail
+
+# sleep interval (seconds)
+sleep_interval=1
+# extend_timeout_interval second(s)
+extend_timeout_interval=1
+# number of sleep_intervals before READY=1
+start_intervals=10
+# number of sleep_intervals before exiting
+stop_intervals=10
+# run intervals, number of sleep_intervals to run
+run_intervals=7
+# service name
+SERVICE=unknown
+
+while [ $# -gt 0 ];
+do
+    eval ${1%=*}=${1#*=}
+    shift
+done
+
+# We convert to usec
+extend_timeout_interval=$(( $extend_timeout_interval * 1000000 ))
+
+trap "{ touch /${SERVICE}.terminated; exit 1; }"  SIGTERM SIGABRT
+
+rm -f /${SERVICE}.*
+touch /${SERVICE}.startfail
+
+systemd-notify EXTEND_TIMEOUT_USEC=$extend_timeout_interval
+while [ $start_intervals -gt 0 ]
+do
+    sleep $sleep_interval
+    start_intervals=$(( $start_intervals - 1 ))
+    systemd-notify EXTEND_TIMEOUT_USEC=$extend_timeout_interval
+done
+
+systemd-notify --ready --status="Waiting for your request"
+
+touch /${SERVICE}.runtimefail
+rm /${SERVICE}.startfail
+
+systemd-notify EXTEND_TIMEOUT_USEC=$extend_timeout_interval
+while [ $run_intervals -gt 0 ]
+do
+    sleep $sleep_interval
+    run_intervals=$(( $run_intervals - 1 ))
+    systemd-notify EXTEND_TIMEOUT_USEC=$extend_timeout_interval
+done
+
+systemd-notify STOPPING=1
+
+touch /${SERVICE}.stopfail
+rm /${SERVICE}.runtimefail
+
+systemd-notify EXTEND_TIMEOUT_USEC=$extend_timeout_interval
+while [ $stop_intervals -gt 0 ]
+do
+    sleep $sleep_interval
+    stop_intervals=$(( $stop_intervals - 1 ))
+    systemd-notify EXTEND_TIMEOUT_USEC=$extend_timeout_interval
+done
+
+touch /${SERVICE}.success
+rm /${SERVICE}.stopfail
+
+exit 0
diff --git a/test/testsuite-16.units/fail-runtime.service b/test/testsuite-16.units/fail-runtime.service
new file mode 100644 (file)
index 0000000..06417f7
--- /dev/null
@@ -0,0 +1,11 @@
+[Unit]
+Description=Testsuite: Fail Runtime (EXTEND_TIMEOUT_USEC Didn't occur in sufficient time after RuntimeSecMax.)
+
+[Service]
+# EXTEND_TIMEOUT_USEC on runtime start (0) and 7 seconds after. Systemd will expect one at 7+5 (extend_timeout_interval)
+# seconds this won't happen until 7 + 7 (sleep interval) seconds. Therefore timeout at 12 seconds.
+Type=notify
+TimeoutStartSec=4
+TimeoutStopSec=4
+RuntimeMaxSec=10
+ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=fail_runtime extend_timeout_interval=5 sleep_interval=7 start_intervals=0 run_intervals=2 stop_intervals=0
diff --git a/test/testsuite-16.units/fail-start.service b/test/testsuite-16.units/fail-start.service
new file mode 100644 (file)
index 0000000..95e9b01
--- /dev/null
@@ -0,0 +1,12 @@
+[Unit]
+Description=Testsuite: Fail Start (EXTEND_TIMEOUT_USEC Didn't occur in sufficient time after TimeoutStartSec.)
+
+[Service]
+
+# EXTEND_TIMEOUT_USEC on startup and 7 seconds from start. Systemd will expect one at 7+5 (extend_timeout_interval)
+# seconds  this won't happen until 7 + 7 (sleep interval) seconds. Therefore timeout at 12 seconds.
+Type=notify
+TimeoutStartSec=10
+TimeoutStopSec=4
+RuntimeMaxSec=4
+ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=fail_start extend_timeout_interval=5 sleep_interval=7 start_intervals=2 run_intervals=0 stop_intervals=0
diff --git a/test/testsuite-16.units/fail-stop.service b/test/testsuite-16.units/fail-stop.service
new file mode 100644 (file)
index 0000000..7fc6600
--- /dev/null
@@ -0,0 +1,14 @@
+[Unit]
+Description=Testsuite: Fail Stop (EXTEND_TIMEOUT_USEC Didn't occur in sufficient time after TimeoutStopSec.)
+
+[Service]
+# EXTEND_TIMEOUT_USEC on stop (0) and 7 seconds after. Systemd will expect one at 7+5 (extend_timeout_interval)
+# seconds this won't happen until 7 + 7 (sleep interval) seconds. Therefore timeout at 12 seconds.
+Type=notify
+TimeoutStartSec=4
+TimeoutStopSec=10
+RuntimeMaxSec=4
+ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=fail_stop extend_timeout_interval=5 sleep_interval=7 start_intervals=0 run_intervals=0 stop_intervals=2
+# Due to 6041a7ee2c1bbff6301082f192fc1b0882400d42 SIGTERM isn't sent as the service shuts down with STOPPING=1
+# This file makes the test assess.sh quicker by notifing it that this test has finished.
+ExecStopPost=/bin/bash -c '[[ $SERVICE_RESULT == timeout && $EXIT_CODE == killed ]] && touch /fail_runtime.terminated'
diff --git a/test/testsuite-16.units/success-all.service b/test/testsuite-16.units/success-all.service
new file mode 100644 (file)
index 0000000..c30ee78
--- /dev/null
@@ -0,0 +1,13 @@
+[Unit]
+Description=Testsuite: EXTEND_TIMEOUT_USEC Success - extend timeout on all services
+
+[Service]
+
+# Normal success - startup / runtime / shutdown all take 8 seconds which is within the EXTEND_TIMEOUT_USEC=4 seconds interval
+# runtime is 8+8+8 seconds. so we are relying on the EXTEND_TIMEOUT_USEC to exceed all stages, Start, Runtime and Stop.
+# success occurs after 24 seconds
+Type=notify
+TimeoutStartSec=4
+TimeoutStopSec=4
+RuntimeMaxSec=4
+ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=success_all extend_timeout_interval=4 sleep_interval=2 start_intervals=3 run_intervals=3 stop_intervals=3
diff --git a/test/testsuite-16.units/success-runtime.service b/test/testsuite-16.units/success-runtime.service
new file mode 100644 (file)
index 0000000..8f83cdb
--- /dev/null
@@ -0,0 +1,12 @@
+[Unit]
+Description=Testsuite: Success Runtime (EXTEND_TIMEOUT_USEC > WATCHDOG_USEC however < RuntimeMaxSec)
+
+[Service]
+
+# EXTEND_TIMEOUT_USEC=4 second once during runtime, but sleep for 6 seconds.
+# Runtime is 6 seconds and < RuntimeMaxSec so still successful.
+Type=notify
+TimeoutStartSec=4
+TimeoutStopSec=4
+RuntimeMaxSec=8
+ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=success_runtime extend_timeout_interval=4 sleep_interval=6 start_intervals=0 run_intervals=1 stop_intervals=0
diff --git a/test/testsuite-16.units/success-start.service b/test/testsuite-16.units/success-start.service
new file mode 100644 (file)
index 0000000..26c7439
--- /dev/null
@@ -0,0 +1,11 @@
+[Unit]
+Description=Testsuite: Success Start (EXTEND_TIMEOUT_USEC > WATCHDOG_USEC however < TimeoutStartSec)
+
+[Service]
+# EXTEND_TIMEOUT_USEC=4 second interval once at startup, but sleep 6 seconds.
+# Therefore startup is 6 seconds and < TimeoutStartSec so still successful.
+Type=notify
+TimeoutStartSec=8
+TimeoutStopSec=4
+RuntimeMaxSec=4
+ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=success_start extend_timeout_interval=4 sleep_interval=6 start_intervals=1 run_intervals=0 stop_intervals=0
diff --git a/test/testsuite-16.units/success-stop.service b/test/testsuite-16.units/success-stop.service
new file mode 100644 (file)
index 0000000..b20908a
--- /dev/null
@@ -0,0 +1,11 @@
+[Unit]
+Description=Testsuite: Success Stop (EXTEND_TIMEOUT_USEC > WATCHDOG_USEC however < TimeoutStopSec)
+
+[Service]
+# EXTEND_TIMEOUT_USEC=4 seconds once during shutdown, but sleep for 6 seconds.
+# Therefore stop time is 6 seconds and < TimeoutStopSec so still successful.
+Type=notify
+TimeoutStartSec=4
+TimeoutStopSec=8
+RuntimeMaxSec=4
+ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=success_stop extend_timeout_interval=4 sleep_interval=6 start_intervals=0 run_intervals=0 stop_intervals=1
diff --git a/test/units/testsuite-16.service b/test/units/testsuite-16.service
new file mode 100644 (file)
index 0000000..1ebf3d3
--- /dev/null
@@ -0,0 +1,18 @@
+[Unit]
+Description=TEST-16-EXTEND-TIMEOUT
+# Testsuite: Assess all other testsuite-*.services worked as expected
+
+Wants=success-all.service
+Wants=success-start.service
+Wants=success-runtime.service
+Wants=success-stop.service
+Wants=fail-start.service
+Wants=fail-stop.service
+Wants=fail-runtime.service
+StopWhenUnneeded=yes
+
+[Service]
+Type=simple
+TimeoutStartSec=infinity
+ExecStartPre=/usr/lib/systemd/tests/testdata/units/%N.sh
+ExecStart=true
diff --git a/test/units/testsuite-16.sh b/test/units/testsuite-16.sh
new file mode 100755 (executable)
index 0000000..68e5561
--- /dev/null
@@ -0,0 +1,55 @@
+#!/usr/bin/env bash
+set -v -x
+
+rm -f /test.log
+
+TL=/test.log.XXXXXXXX
+
+function wait_for()
+{
+    service=${1}
+    result=${2:-success}
+    time=${3:-45}
+
+    while [[ ! -f /${service}.terminated && ! -f /${service}.success && $time -gt 0  ]]
+    do
+        sleep 1
+        time=$(( $time - 1 ))
+    done
+
+    if [[ ! -f /${service}.${result} ]]
+    then
+        journalctl -u ${service/_/-}.service >> "${TL}"
+    fi
+}
+
+# This checks all stages, start, runtime and stop, can be extended by
+# EXTEND_TIMEOUT_USEC
+
+wait_for success_all
+
+# These check that EXTEND_TIMEOUT_USEC that occurs at greater than the
+# extend timeout interval but less then the stage limit (TimeoutStartSec,
+# RuntimeMaxSec, TimeoutStopSec) still succeed.
+
+wait_for success_start
+wait_for success_runtime
+wait_for success_stop
+
+# These ensure that EXTEND_TIMEOUT_USEC will still timeout in the
+# approprate stage, after the stage limit, when the EXTEND_TIMEOUT_USEC
+# message isn't sent within the extend timeout interval.
+
+wait_for fail_start startfail
+wait_for fail_stop stopfail
+wait_for fail_runtime runtimefail
+
+if [[ -f "${TL}" ]]
+then
+    # no mv
+    cp "${TL}" /test.log
+    exit 1
+else
+    touch /testok
+    exit 0
+fi