Files
2026-07-13 13:12:33 +08:00

86 lines
2.4 KiB
Python

"""Spawn-group wake aggregator pages by spawned_by so >100 children are seen."""
from __future__ import annotations
import pytest
from opensquilla.gateway.subagent_announce import _list_spawn_group_sessions
class _Row:
def __init__(self, session_key: str, spawned_by: str, origin: dict) -> None:
self.session_key = session_key
self.spawned_by = spawned_by
self.origin = origin
self.status = "running"
class _PaginatingManager:
"""list_sessions(spawned_by=...) returns all children paginated at 100/page."""
def __init__(self, rows: list[_Row]) -> None:
self._rows = rows
async def list_sessions(
self,
agent_id=None,
status=None,
limit=100,
offset=0,
spawned_by=None,
):
rows = self._rows
if spawned_by is not None:
rows = [r for r in rows if r.spawned_by == spawned_by]
return rows[offset : offset + limit]
@pytest.mark.asyncio
async def test_group_aggregator_walks_past_first_page() -> None:
"""A parent with 250 children all in one parent_task_id group must be
counted in full, not truncated at 200.
"""
parent = "agent:main:main"
task_id = "task-fanout"
rows = [
_Row(
session_key=f"agent:main:subagent:{i:04d}",
spawned_by=parent,
origin={"parent_task_id": task_id},
)
for i in range(250)
]
# Add a few rows in the same parent but a *different* task_id; they
# must be filtered out at the app layer.
rows.extend(
_Row(
session_key=f"agent:main:subagent:other-{i}",
spawned_by=parent,
origin={"parent_task_id": "other-task"},
)
for i in range(5)
)
mgr = _PaginatingManager(rows)
group = await _list_spawn_group_sessions(
parent_session_key=parent,
parent_task_id=task_id,
session_manager=mgr,
)
assert len(group) == 250
assert all(r.spawned_by == parent for r in group)
assert all(r.origin["parent_task_id"] == task_id for r in group)
@pytest.mark.asyncio
async def test_group_aggregator_returns_empty_when_no_match() -> None:
mgr = _PaginatingManager([])
group = await _list_spawn_group_sessions(
parent_session_key="agent:main:main",
parent_task_id="task-X",
session_manager=mgr,
)
assert group == []