mirror of
https://github.com/nolen777/eagle0.git
synced 2026-07-28 20:55:44 +00:00
86 lines
2.4 KiB
Bash
Executable File
86 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
TEST_DIR=$(mktemp -d)
|
|
trap 'rm -rf "$TEST_DIR"' EXIT
|
|
|
|
FAKE_BIN="${TEST_DIR}/bin"
|
|
APP_DIR="${TEST_DIR}/app"
|
|
STATE_FILE="${TEST_DIR}/state"
|
|
CALLS_FILE="${TEST_DIR}/calls"
|
|
OUTPUT_FILE="${TEST_DIR}/output"
|
|
mkdir -p "$FAKE_BIN" "$APP_DIR"
|
|
|
|
cat > "${FAKE_BIN}/docker" <<'EOF'
|
|
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
case "$1" in
|
|
inspect)
|
|
container=${@: -1}
|
|
state=$(cat "$EAGLE_LOGS_TEST_STATE_FILE")
|
|
if { [ "$state" = "blue" ] && [ "$container" = "eagle-blue" ]; } ||
|
|
{ [ "$state" = "green" ] && [ "$container" = "eagle-green" ]; }; then
|
|
echo true
|
|
else
|
|
echo false
|
|
fi
|
|
;;
|
|
logs)
|
|
container=${@: -1}
|
|
printf '%s\n' "$*" >> "$EAGLE_LOGS_TEST_CALLS_FILE"
|
|
if [ "$container" = "eagle-blue" ]; then
|
|
echo "last blue log"
|
|
echo "eagle-green" > "$EAGLE_LOGS_TEST_ACTIVE_FILE"
|
|
echo "green" > "$EAGLE_LOGS_TEST_STATE_FILE"
|
|
else
|
|
echo "first green log"
|
|
fi
|
|
;;
|
|
*)
|
|
echo "Unexpected docker command: $*" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
EOF
|
|
chmod +x "${FAKE_BIN}/docker"
|
|
|
|
export EAGLE_LOGS_TEST_STATE_FILE="$STATE_FILE"
|
|
export EAGLE_LOGS_TEST_CALLS_FILE="$CALLS_FILE"
|
|
export EAGLE_LOGS_TEST_ACTIVE_FILE="${APP_DIR}/.active-instance"
|
|
|
|
echo "blue" > "$STATE_FILE"
|
|
echo "eagle-blue" > "${APP_DIR}/.active-instance"
|
|
|
|
PATH="${FAKE_BIN}:$PATH" APP_DIR="$APP_DIR" "${SCRIPT_DIR}/eagle-logs.sh" --no-follow -n 25
|
|
grep -q '^logs -n 25 eagle-blue$' "$CALLS_FILE"
|
|
|
|
: > "$CALLS_FILE"
|
|
echo "blue" > "$STATE_FILE"
|
|
echo "eagle-blue" > "${APP_DIR}/.active-instance"
|
|
PATH="${FAKE_BIN}:$PATH" APP_DIR="$APP_DIR" EAGLE_LOGS_RETRY_INTERVAL_SECONDS=0.01 \
|
|
"${SCRIPT_DIR}/eagle-logs.sh" -n 10 > "$OUTPUT_FILE" 2>&1 &
|
|
FOLLOW_PID=$!
|
|
|
|
for _ in $(seq 1 100); do
|
|
if grep -q 'first green log' "$OUTPUT_FILE"; then
|
|
break
|
|
fi
|
|
sleep 0.01
|
|
done
|
|
|
|
kill "$FOLLOW_PID" 2>/dev/null || true
|
|
wait "$FOLLOW_PID" 2>/dev/null || true
|
|
|
|
grep -q 'EAGLE LOG STREAM DISCONNECTED' "$OUTPUT_FILE"
|
|
grep -q 'EAGLE LOG STREAM RESUMED' "$OUTPUT_FILE"
|
|
grep -q 'last blue log' "$OUTPUT_FILE"
|
|
grep -q 'first green log' "$OUTPUT_FILE"
|
|
grep -q '^logs --follow -n 10 eagle-blue$' "$CALLS_FILE"
|
|
grep -Eq '^logs --follow -n 10 --since [0-9]+ eagle-green$' "$CALLS_FILE"
|
|
|
|
echo "eagle-logs tests passed"
|