feat(mcfold): 最小客户端 + 跨实现互操作测试(Python 客户端握手 Node 服务端成功)

This commit is contained in:
pi
2026-09-25 14:12:06 +08:00
parent fc5a1aae91
commit a4914b932e
6 changed files with 246 additions and 0 deletions

45
tests/test_e2e_interop.py Normal file
View File

@ -0,0 +1,45 @@
"""端到端互操作:Python 客户端 ←→ Node 服务端(跨实现)。
价值:这是**唯一能证明协议层真通**的测试 ——
两边是完全独立的实现,若我的 protodef 有偏差,握手不可能成功。
用法:
1) cd /home/newqqagent/plugin_data/mc/runtime && node testserver.js &
2) python3 tests/test_e2e_interop.py
"""
import sys, os, socket
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from mcfold.client import Client
HOST, PORT = "127.0.0.1", 25599
def reachable():
try:
socket.create_connection((HOST, PORT), timeout=2).close(); return True
except OSError:
return False
def test_interop():
if not reachable():
print(f" - 服务端 {HOST}:{PORT} 未运行,跳过(见本文件顶部用法)"); return
c = Client(HOST, PORT, "PyProbe", "1.20.1")
try:
r = c.run_smoke()
assert r["protocol"] == 763, r
assert r["login_ok"], r
assert "success" in r["packets"], r
print(f" ✓ 跨实现互操作: 协议={r['protocol']} 包={r['packets']} 登录成功")
finally:
c.close()
def test_protocol_version_from_folder():
"""协议版本必须由「实例文件夹」决定,而不是硬编码。"""
c = Client(HOST, PORT, "x", "1.20.1")
c.load_protocol()
assert c.proto_num == 763, c.proto_num
print(f" ✓ 版本来自 version.json: 1.20.1 -> 协议 {c.proto_num}")
if __name__ == "__main__":
test_protocol_version_from_folder()
test_interop()
print("\n端到端互操作:通过")