Files
opensquilla--opensquilla/tests/test_session_streams_meta_events.py
2026-07-13 13:12:33 +08:00

54 lines
2.1 KiB
Python

"""新增 meta 事件被 replay buffer 完整保留,断线重连可补齐。"""
from opensquilla.gateway.session_streams import SessionStreamRegistry
def _record_and_replay(events_to_record, since=0):
reg = SessionStreamRegistry(max_events_per_session=500)
for name, payload in events_to_record:
reg.record("sess1", name, payload)
return reg.replay("sess1", since)
def test_meta_run_announced_preserved_through_replay():
result = _record_and_replay([
("session.event.meta_run_announced",
{"run_id": "r1", "meta_skill_name": "x", "total": 2}),
])
assert result.replay_complete is True
assert len(result.events) == 1
assert result.events[0].event_name == "session.event.meta_run_announced"
assert result.events[0].payload["run_id"] == "r1"
def test_meta_step_state_preserved_through_replay():
result = _record_and_replay([
("session.event.meta_run_announced", {"run_id": "r1", "total": 1}),
("session.event.meta_step_state",
{"run_id": "r1", "step_id": "s1", "state": "running"}),
("session.event.meta_step_state",
{"run_id": "r1", "step_id": "s1", "state": "succeeded"}),
])
assert len(result.events) == 3
states = [
e.payload["state"]
for e in result.events
if e.event_name == "session.event.meta_step_state"
]
assert states == ["running", "succeeded"]
def test_meta_events_survive_buffer_trim_pressure():
reg = SessionStreamRegistry(max_events_per_session=5)
# Fill with lossy events (text_delta) first; should be evictable.
for i in range(10):
reg.record("s", "session.event.text_delta", {"i": i})
# Now record meta events; lossy evictions should make room.
reg.record("s", "session.event.meta_run_announced", {"run_id": "r1"})
reg.record("s", "session.event.meta_step_state",
{"run_id": "r1", "step_id": "a", "state": "running"})
result = reg.replay("s", 10)
kept = [e.event_name for e in result.events]
assert "session.event.meta_run_announced" in kept
assert "session.event.meta_step_state" in kept