testserver: make run.bash variables less likely to collide with scripts

This commit is contained in:
Nick Craig-Wood
2025-11-05 10:50:53 +00:00
parent 7ce67347fb
commit 1821d86911

View File

@@ -1,25 +1,25 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -euo pipefail
BASE="${STATE_DIR:-${XDG_RUNTIME_DIR:-/tmp}/rclone-test-server}" RUN_BASE="${STATE_DIR:-${XDG_RUNTIME_DIR:-/tmp}/rclone-test-server}"
: "${NAME:=$(basename "$0")}" : "${NAME:=$(basename "$0")}"
ROOT="${BASE}/${NAME}" RUN_ROOT="${RUN_BASE}/${NAME}"
STATE="${ROOT}/state" RUN_STATE="${RUN_ROOT}/state"
LOCKF="${ROOT}/lock" RUN_LOCK_FILE="${RUN_ROOT}/lock"
REFC="${STATE}/refcount" RUN_REF_COUNT="${RUN_STATE}/refcount"
ENVF="${STATE}/env" RUN_OUTPUT="${RUN_STATE}/env"
mkdir -p "${STATE}" mkdir -p "${RUN_STATE}"
[[ -f "${REFC}" ]] || echo 0 >"${REFC}" [[ -f "${RUN_REF_COUNT}" ]] || echo 0 >"${RUN_REF_COUNT}"
[[ -f "${ENVF}" ]] || : >"${ENVF}" [[ -f "${RUN_OUTPUT}" ]] || : >"${RUN_OUTPUT}"
: > "${LOCKF}" # ensure file exists : > "${RUN_LOCK_FILE}" # ensure file exists
# status helper that won't trip set -e # status helper that won't trip set -e
_is_running() { set +e; status >/dev/null 2>&1; local rc=$?; set -e; return $rc; } _is_running() { set +e; status >/dev/null 2>&1; local rc=$?; set -e; return $rc; }
_acquire_lock() { _acquire_lock() {
# open fd 9 on lock file and take exclusive lock # open fd 9 on lock file and take exclusive lock
exec 9>"${LOCKF}" exec 9>"${RUN_LOCK_FILE}"
flock -x 9 flock -x 9
} }
@@ -33,7 +33,7 @@ case "${1:-}" in
_acquire_lock _acquire_lock
trap '_release_lock' EXIT trap '_release_lock' EXIT
rc=$(cat "${REFC}" 2>/dev/null || echo 0) rc=$(cat "${RUN_REF_COUNT}" 2>/dev/null || echo 0)
if (( rc == 0 )); then if (( rc == 0 )); then
# First client: ensure a clean instance, then start and cache env # First client: ensure a clean instance, then start and cache env
@@ -44,7 +44,7 @@ case "${1:-}" in
echo "failed to start" >&2 echo "failed to start" >&2
exit 1 exit 1
fi fi
printf "%s\n" "$out" > "${ENVF}" printf "%s\n" "$out" > "${RUN_OUTPUT}"
else else
# Already owned: make sure its still up; if not, restart and refresh env # Already owned: make sure its still up; if not, restart and refresh env
if ! _is_running; then if ! _is_running; then
@@ -52,12 +52,12 @@ case "${1:-}" in
echo "failed to restart" >&2 echo "failed to restart" >&2
exit 1 exit 1
fi fi
printf "%s\n" "$out" > "${ENVF}" printf "%s\n" "$out" > "${RUN_OUTPUT}"
fi fi
fi fi
rc=$((rc+1)); echo "${rc}" > "${REFC}" rc=$((rc+1)); echo "${rc}" > "${RUN_REF_COUNT}"
cat "${ENVF}" cat "${RUN_OUTPUT}"
trap - EXIT trap - EXIT
_release_lock _release_lock
@@ -67,9 +67,9 @@ case "${1:-}" in
_acquire_lock _acquire_lock
trap '_release_lock' EXIT trap '_release_lock' EXIT
rc=$(cat "${REFC}" 2>/dev/null || echo 0) rc=$(cat "${RUN_REF_COUNT}" 2>/dev/null || echo 0)
if (( rc > 0 )); then rc=$((rc-1)); fi if (( rc > 0 )); then rc=$((rc-1)); fi
echo "${rc}" > "${REFC}" echo "${rc}" > "${RUN_REF_COUNT}"
if (( rc == 0 )) && _is_running; then if (( rc == 0 )) && _is_running; then
stop || true stop || true
fi fi
@@ -83,7 +83,7 @@ case "${1:-}" in
trap '_release_lock' EXIT trap '_release_lock' EXIT
stop || true stop || true
rm -rf "${BASE}" rm -rf "${RUN_BASE}"
trap - EXIT trap - EXIT
_release_lock _release_lock