#!/usr/bin/env bash set -euo pipefail cd "$(dirname "$0")/.." if [[ "${1:-}" != "--inside" ]]; then exec timeout --signal=TERM --kill-after=5s 90s unshare --mount --fork --kill-child=TERM "$0" --inside fi root="/tmp/uce-compiler-lock-directory-$$" site="$root/site" work="$root/missing/parents/work" settings="$root/settings.cfg" log="$root/service.log" server_pid="" cleanup() { if [[ -n "$server_pid" ]] && kill -0 "$server_pid" 2>/dev/null; then kill -TERM "$server_pid" 2>/dev/null || true wait "$server_pid" 2>/dev/null || true fi rm -rf "$root" } trap cleanup EXIT mkdir -p "$site" "$root/run" "$root/session" "$root/upload" printf '%s\n' 'CLI(Request& context) { print("recursive-lock-directory-ok"); }' >"$site/test.uce" cp /etc/uce/settings.cfg "$settings" cat >>"$settings" <"$log" 2>&1 & server_pid=$! deadline=$((SECONDS + 20)) while [[ ! -S "$root/run/cli.sock" ]] && (( SECONDS < deadline )); do sleep 0.05; done [[ -S "$root/run/cli.sock" ]] || { cat "$log" >&2; exit 1; } rm -rf "$work" response=$(curl -sS --max-time 45 --fail-with-body --unix-socket "$root/run/cli.sock" http://localhost/test.uce) || { cat "$log" >&2; exit 1; } [[ "$response" == *"recursive-lock-directory-ok"* ]] || { printf '%s\n' "$response" >&2; cat "$log" >&2; exit 1; } find "$work" -type f -name '*.lock' -print -quit | grep -q . || { echo "compiler did not recreate a nested lock path" >&2; cat "$log" >&2; exit 1; } echo "compiler recursive lock directory passed"