#!/bin/sh

# Use system-installed nginx
export TEST_NGINX_BINARY=/usr/sbin/nginx

# The Test::Nginx defaults are too aggressive for slower CI architectures.
export TEST_NGINX_SLEEP="${TEST_NGINX_SLEEP:-0.1}"
export TEST_NGINX_TIMEOUT="${TEST_NGINX_TIMEOUT:-30}"
export TEST_NGINX_FAST_SHUTDOWN="${TEST_NGINX_FAST_SHUTDOWN=:-1}"

cleanup()
{
	rm -rf t/servroot
}

trap cleanup EXIT HUP INT TERM

lines=$(
	for file in /etc/nginx/modules-enabled/*.conf; do
		sed 's|load_module modules/\(.*\);|/usr/lib/nginx/modules/\1|' "$file"
	done
)

export TEST_NGINX_LOAD_MODULES="$lines"

rm -rf t/servroot

PREPARE_SCRIPT="$(dirname "$0")/test-nginx-prepare"

if [ -e "$PREPARE_SCRIPT" ]; then
	if [ ! -x "$PREPARE_SCRIPT" ]; then
		echo "$PREPARE_SCRIPT exists but is not executable" >&2
		exit 1
	fi

	"$PREPARE_SCRIPT"
fi

if [ "$#" -gt 0 ]; then
	exec prove -I "$PWD" "$@"
fi

FAILURES_FILE="$(dirname "$0")/test-nginx-failures"
FAILING_TESTS=""

if [ -f "$FAILURES_FILE" ]; then
  FAILING_TESTS=$(tr '\n' ' ' < "$FAILURES_FILE")
fi

set -- -name '*.t'
for test in $FAILING_TESTS; do
	set -- "$@" ! -wholename "t/$test"
done

echo "--- TESTS SHOULD PASS ---"

find t "$@" -print0 | sort -z | xargs -0 prove -I "$PWD"

test_status=$?

if [ "$test_status" -ne 0 ]; then
  echo
  echo "--- TESTS FAILED ---"
  echo "--- debian/tests/test-nginx-failures can list tests that are expected to fail ---"
fi

if [ -n "$FAILING_TESTS" ]; then
  echo "--- TESTS MIGHT FAIL ---"
  unexpected_passes=0
  for test in $FAILING_TESTS; do
    if prove -I "$PWD" "t/$test"; then
      echo "UNEXPECTED PASS: $test"
      unexpected_passes=$((unexpected_passes + 1))
    fi
    rm -rf t/servroot
    sleep 5
  done

  if [ "$unexpected_passes" -gt 0 ]; then
    echo
    echo "$unexpected_passes expected failure(s) now pass."
    echo "Please remove them from debian/tests/test-nginx-failures."
  fi
fi

if [ "$test_status" -ne 0 ]; then
	exit 1
fi
