#!/usr/bin/env bash set -eux set -o pipefail rm -f /test.log TESTLOG=/test.log.XXXXXXXX function wait_for() { local service="${1:-wait_for: missing service argument}" local result="${2:-success}" local 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" >>"$TESTLOG" 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 # appropriate 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 "$TESTLOG" ]]; then # no mv cp "$TESTLOG" /test.log exit 1 fi touch /testok exit 0