现象
test_scenario_bc.py 启动子进程 relay 后仅 time.sleep(5) 就读取 /status 的 link 字段,沙箱中公网 IP 探测需 >5s,link 为 None,后续 POST /peers/connect {"link": None} 失败,导致所有 P2P 连接相关测试(B1B3, B5B7, C1~C3 等共 20 个)失败。
根因
run_bc_tests() 第 112 行:time.sleep(5) 硬编码等待,不轮询 link 非 None。无类似 wait_peer_ready() 的重试等待逻辑。
修复方案
def wait_link_ready(http_port, retries=30, interval=0.5):
for _ in range(retries):
try:
r, _ = get(http_port, '/status')
if r.get('link'):
return r['link']
except Exception:
pass
time.sleep(interval)
return None
替换各处 time.sleep(5) + r['link'] 为 wait_link_ready(port)。
发现轮次
测试轮 AB(2026-03-27)
优先级
P2 — 沙箱 CI 环境必现,本地快速网络可能不触发
现象
test_scenario_bc.py启动子进程 relay 后仅time.sleep(5)就读取/status的link字段,沙箱中公网 IP 探测需 >5s,link为None,后续POST /peers/connect {"link": None}失败,导致所有 P2P 连接相关测试(B1B3, B5B7, C1~C3 等共 20 个)失败。根因
run_bc_tests()第 112 行:time.sleep(5)硬编码等待,不轮询link非 None。无类似wait_peer_ready()的重试等待逻辑。修复方案
替换各处
time.sleep(5)+r['link']为wait_link_ready(port)。发现轮次
测试轮 AB(2026-03-27)
优先级
P2 — 沙箱 CI 环境必现,本地快速网络可能不触发