58 lines
1.5 KiB
Bash
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 "通过"
|