#!/bin/bash echo "=== 开始自动化测试 ===" cd /home/limingjie/LMJ_Work/OmniSocketGo rm -rf logs mkdir -p logs inbox/a # 1. 清理残留 & 启动 Server D echo ">>> 1. 启动 Server D " ssh bj-txy bash -s <<'EOF' export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin" pkill -f kcpserver 2>/dev/null || true pkill -f 'cmd/kcpserver' 2>/dev/null || true sleep 1 cd /home/ubuntu/OmniSocketGo setsid go run ./cmd/kcpserver/ -listen 0.0.0.0:10909 > server_console.log 2>&1 /dev/null; then echo " Server D 就绪 (${i}s)" break fi if [ "$i" -eq 60 ]; then echo " ERROR: Server D 60s 内未就绪,退出" exit 1 fi sleep 1 done # 2. 启动本地 Peer-A echo ">>> 2. 启动本地 Peer-A..." nohup go run ./cmd/kcppeer/ \ -id peer-a \ -server 81.70.156.140:10909 \ -inbox-dir inbox/a \ -latency-log logs/a-latency.jsonl \ -interactive=false > logs/peera_console.log 2>&1 & PEER_A_PID=$! # 等待 peer-a 注册成功 echo " 等待 Peer-A 注册..." for i in $(seq 1 30); do if grep -q "opened KCP session as peer-a" logs/peera_console.log 2>/dev/null; then echo " Peer-A 就绪 (${i}s)" break fi if [ "$i" -eq 30 ]; then echo " WARNING: Peer-A 30s 内未就绪" fi sleep 1 done # 3. 在远端后台启动 peer-b 整个发送流程,不依赖长 SSH 连接 echo ">>> 3. 启动远端 Peer-B 并执行 50 轮打流测试..." ssh omni-peer "cd /home/boll/LMJWork/OmniSocketGo && rm -rf logs && mkdir -p logs inbox/b" PEERB_DONE_FLAG="/tmp/peerb_batch_done" PEERB_BATCH_SCRIPT="/tmp/peerb_batch.sh" # 把整个发送脚本写到远端,setsid 后台执行 ssh omni-peer bash -s <<'DEPLOY_SCRIPT' export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin" DONE_FLAG="/tmp/peerb_batch_done" BATCH_SCRIPT="/tmp/peerb_batch.sh" rm -f "$DONE_FLAG" cat > "$BATCH_SCRIPT" <<'INNER_EOF' #!/bin/bash export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin" cd /home/boll/LMJWork/OmniSocketGo CMD_FIFO=/tmp/peerb_commands DONE_FLAG="/tmp/peerb_batch_done" rm -f "$CMD_FIFO" "$DONE_FLAG" mkfifo "$CMD_FIFO" # 启动 peer-b go run ./cmd/kcppeer/ \ -id peer-b \ -server 81.70.156.140:10909 \ -inbox-dir inbox/b \ -latency-log logs/b-latency.jsonl \ < "$CMD_FIFO" > logs/peerb_console.log 2>&1 & PEER_B_PID=$! exec 3>"$CMD_FIFO" # 等 peer-b 就绪 for i in $(seq 1 60); do if grep -q "opened KCP session as peer-b" logs/peerb_console.log 2>/dev/null; then break fi sleep 1 done # 50 轮发送 for i in $(seq 1 50); do echo "file peer-a /tmp/test30k.bin" >&3 sleep 1 echo "file peer-a /tmp/test5.bin" >&3 sleep 1 done sleep 5 echo "quit" >&3 exec 3>&- rm -f "$CMD_FIFO" wait $PEER_B_PID 2>/dev/null || true # 写完成标记 echo "done" > "$DONE_FLAG" INNER_EOF chmod +x "$BATCH_SCRIPT" setsid bash "$BATCH_SCRIPT" /dev/null 2>&1 & echo "peer-b batch launched in background" DEPLOY_SCRIPT # 本地轮询等待远端完成(短 SSH 连接,不怕断开) echo " 等待 peer-b 发送完成(预计 ~110 秒)..." for i in $(seq 1 180); do if ssh omni-peer "test -f /tmp/peerb_batch_done" 2>/dev/null; then echo " peer-b 发送完成 (${i}s)" break fi if [ "$i" -eq 180 ]; then echo " ERROR: peer-b 180s 内未完成" fi # 每 5 秒查一次,减少 SSH 连接频率 sleep 5 done # 4. 清理 echo ">>> 4. 清理所有进程..." kill $PEER_A_PID 2>/dev/null || true ssh bj-txy "pkill -f kcpserver || true; pkill -f 'cmd/kcpserver' || true" ssh sz-txy "pkill -f kcpserver || true; pkill -f 'cmd/kcpserver' || true" # 获取当前时间戳,格式为 YYYYMMDD_HHMMSS TIMESTAMP=$(date +"%Y%m%d_%H%M%S") # 5. 拉取数据 & 生成报告 echo ">>> 5. 拉取数据并生成汇总报告..." mkdir -p ./BCAlogs/$TIMESTAMP scp -o ServerAliveInterval=15 -P 10022 boll@175.178.116.187:/home/boll/LMJWork/OmniSocketGo/logs/b-latency.jsonl ./logs/b-latency.jsonl mv ./logs/a-latency.jsonl ./BCAlogs/$TIMESTAMP/a-latency.jsonl mv ./logs/b-latency.jsonl ./BCAlogs/$TIMESTAMP/b-latency.jsonl go run ./cmd/latencysummary \ -input ./BCAlogs/$TIMESTAMP/a-latency.jsonl \ -input ./BCAlogs/$TIMESTAMP/b-latency.jsonl \ -output ./BCAlogs/$TIMESTAMP/latency-summary.jsonl echo "=== 测试完成!==="