#!/usr/bin/env bash

set -euo pipefail

provider_log=$(mktemp /tmp/test-04-provider.XXXXXX)
php -S 127.0.0.1:8080 provider/router.php >"${provider_log}" 2>&1 &
provider_pid=$!

# Invoked indirectly by the EXIT trap.
# shellcheck disable=SC2329
cleanup() {
  kill "${provider_pid}" 2>/dev/null || true
  wait "${provider_pid}" 2>/dev/null || true
  rm -f "${provider_log}"
}

trap cleanup EXIT

for _ in $(seq 1 50); do
  # The single-quoted program is PHP, not a shell expression.
  # shellcheck disable=SC2016
  if php -r '$socket = @fsockopen("127.0.0.1", 8080); if ($socket === false) { exit(1); } fclose($socket);'; then
    set +e
    "$@"
    command_exit=$?
    set -e
    exit "${command_exit}"
  fi
  sleep 0.02
done

echo "provider did not become ready" >&2
sed -n '1,80p' "${provider_log}" >&2
exit 70
