54 lines
2.1 KiB
Python
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
|