Files
ccdi/docs/tests/scripts/test-restart-java-backend-stop-scope.sh

58 lines
1.5 KiB
Bash

#!/bin/sh
set -eu
ROOT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")/../../.." && pwd)
SOURCE_SCRIPT="$ROOT_DIR/bin/restart_java_backend.sh"
TMP_DIR=$(mktemp -d)
TEST_ROOT="$TMP_DIR/app"
TEST_BIN_DIR="$TEST_ROOT/bin"
TEST_LOG_DIR="$TEST_ROOT/logs"
TEST_PORT=62481
EXTERNAL_PID=""
cleanup() {
if [ -n "${EXTERNAL_PID:-}" ] && kill -0 "$EXTERNAL_PID" 2>/dev/null; then
kill "$EXTERNAL_PID" 2>/dev/null || true
wait "$EXTERNAL_PID" 2>/dev/null || true
fi
rm -rf "$TMP_DIR"
}
trap cleanup EXIT INT TERM
mkdir -p "$TEST_BIN_DIR" "$TEST_LOG_DIR"
cp "$SOURCE_SCRIPT" "$TEST_BIN_DIR/restart_java_backend.sh"
chmod +x "$TEST_BIN_DIR/restart_java_backend.sh"
python3 -m http.server "$TEST_PORT" --bind 127.0.0.1 > "$TMP_DIR/external.log" 2>&1 &
EXTERNAL_PID=$!
sleep 1
if ! kill -0 "$EXTERNAL_PID" 2>/dev/null; then
echo "失败: 未能启动外部占口进程"
exit 1
fi
python3 - "$TEST_BIN_DIR/restart_java_backend.sh" "$TEST_PORT" <<'PY'
from pathlib import Path
import sys
script_path = Path(sys.argv[1])
port = sys.argv[2]
content = script_path.read_text(encoding="utf-8")
content = content.replace("SERVER_PORT=62318", f"SERVER_PORT={port}")
script_path.write_text(content, encoding="utf-8")
PY
echo "[检查] stop 不能误杀未由脚本托管的占口进程"
sh "$TEST_BIN_DIR/restart_java_backend.sh" stop >/dev/null 2>&1 || true
if ! kill -0 "$EXTERNAL_PID" 2>/dev/null; then
echo "失败: stop 误杀了未托管的外部进程"
exit 1
fi
echo "通过"