holy fuking shit

This commit is contained in:
Horldsence
2026-09-12 01:56:34 +08:00
parent 36f354736c
commit d975309a81
83 changed files with 2748 additions and 896 deletions
+25 -23
View File
@@ -1,5 +1,7 @@
"""真实 HTTP 承载测试:接口仅回环、仅窗口期开放、协议边界与官方一致。"""
# pylint: disable=redefined-outer-name # pytest 夹具名必须与测试函数形参同名,非遮蔽缺陷
import http.client
import json
import time
@@ -20,7 +22,7 @@ def wait_until(condition, timeout=5.0, interval=0.02):
@pytest.fixture()
def referee(tmp_path):
def local_referee(tmp_path):
ref = Referee(action_port=0, data_dir=tmp_path / "data")
ActionInterfaceServer(ref)
return ref
@@ -43,20 +45,20 @@ def post(port, path, obj=None, *, headers=None, method="POST", raw=None):
return response.status, parsed
def payload(id="e", **extra):
return dict(arena_id="default", robot_id="2026001", request_id=id, **extra)
def payload(request_id="e", **extra):
return dict(arena_id="default", robot_id="2026001", request_id=request_id, **extra)
def start_open_session(referee, **opts):
def start_open_session(local_referee, **opts):
opts.setdefault("countdown_s", 0.05)
session = referee.start("q3_practice", "2026001", **opts)
session = local_referee.start("q3_practice", "2026001", **opts)
assert wait_until(lambda: session.phase == "open")
return session
def test_binding_is_loopback_only(referee):
session = start_open_session(referee)
server = referee._open_interface.__self__ # ActionInterfaceServer
def test_binding_is_loopback_only(local_referee):
_session = start_open_session(local_referee)
server = local_referee._open_interface.__self__ # ActionInterfaceServer
port = open_port(server)
assert server._httpd.server_address[0] == "127.0.0.1"
status, body = post(port, "/enter", payload("enter"))
@@ -64,17 +66,17 @@ def test_binding_is_loopback_only(referee):
assert body["remaining_real_duration_s"] == 1200
def test_interface_refuses_connections_outside_window(referee):
session = referee.start("q3_practice", "2026001", countdown_s=5)
server = referee._open_interface.__self__
def test_interface_refuses_connections_outside_window(local_referee):
session = local_referee.start("q3_practice", "2026001", countdown_s=5)
server = local_referee._open_interface.__self__
assert server.is_open is False # 倒计时期间未监听
assert wait_until(lambda: session.phase == "open", timeout=6)
assert server.is_open is True # 窗口开启后才绑定端口
def test_full_protocol_round_trip_over_http(referee):
session = start_open_session(referee)
server = referee._open_interface.__self__
def test_full_protocol_round_trip_over_http(local_referee):
session = start_open_session(local_referee)
server = local_referee._open_interface.__self__
port = open_port(server)
status, body = post(port, "/enter", payload("enter-1"))
assert status == 200 and body["accepted"] is True
@@ -94,9 +96,9 @@ def test_full_protocol_round_trip_over_http(referee):
assert session.end_reason == "user_exit"
def test_protocol_error_statuses_over_http(referee):
start_open_session(referee)
server = referee._open_interface.__self__
def test_protocol_error_statuses_over_http(local_referee):
start_open_session(local_referee)
server = local_referee._open_interface.__self__
port = open_port(server)
assert post(port, "/unknown", payload())[0] == 404
assert post(port, "/enter/", payload())[0] == 404
@@ -109,9 +111,9 @@ def test_protocol_error_statuses_over_http(referee):
assert status == 200 and body["accepted"] is True
def test_interface_closes_after_window_timeout(referee):
session = start_open_session(referee, window_s=0.4)
server = referee._open_interface.__self__
def test_interface_closes_after_window_timeout(local_referee):
session = start_open_session(local_referee, window_s=0.4)
server = local_referee._open_interface.__self__
port = open_port(server)
assert wait_until(lambda: session.phase == "finished", timeout=5)
assert session.end_reason == "window_timeout"
@@ -120,9 +122,9 @@ def test_interface_closes_after_window_timeout(referee):
post(port, "/enter", payload("late"))
def test_recorded_feed_contains_every_request(referee):
session = start_open_session(referee)
server = referee._open_interface.__self__
def test_recorded_feed_contains_every_request(local_referee):
session = start_open_session(local_referee)
server = local_referee._open_interface.__self__
port = open_port(server)
post(port, "/enter", payload("enter-1"))
post(port, "/unknown", payload("bad"))