From 51552fa004e5b389e8f95ebce70adf0c689e8b53 Mon Sep 17 00:00:00 2001 From: Stephen Toub Date: Sun, 20 Sep 2026 21:27:13 -0400 Subject: [PATCH] Fix session start subscription tests Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../ScenarioTestingSessionSetupE2ETests.cs | 13 ++++++----- python/e2e/test_scenario_cloud_e2e.py | 22 +++++++++---------- python/e2e/test_scenario_session_setup_e2e.py | 20 ++++++++--------- 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/dotnet/test/E2E/ScenarioTestingSessionSetupE2ETests.cs b/dotnet/test/E2E/ScenarioTestingSessionSetupE2ETests.cs index df0431055e..e240cbf709 100644 --- a/dotnet/test/E2E/ScenarioTestingSessionSetupE2ETests.cs +++ b/dotnet/test/E2E/ScenarioTestingSessionSetupE2ETests.cs @@ -290,19 +290,22 @@ public async Task Should_Preserve_Omitted_Versus_Disabled_Scenario_Semantics() } [Fact] - public async Task Should_Use_Preallocated_Id_For_First_Subscribed_Event() + public async Task Should_Use_Preallocated_Id_For_Subscribed_Session_Start_Event() { var requestedSessionId = Guid.NewGuid().ToString(); - var firstEvent = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + var sessionStarted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); await using var session = await CreateSessionAsync(new SessionConfig { SessionId = requestedSessionId, - OnEvent = evt => firstEvent.TrySetResult(evt), + OnEvent = evt => + { + if (evt is SessionStartEvent start) + sessionStarted.TrySetResult(start); + }, }); - var observed = await firstEvent.Task.WaitAsync(TestTimeout); - var start = Assert.IsType(observed); + var start = await sessionStarted.Task.WaitAsync(TestTimeout); Assert.Equal(requestedSessionId, session.SessionId); Assert.Equal(requestedSessionId, start.Data.SessionId); } diff --git a/python/e2e/test_scenario_cloud_e2e.py b/python/e2e/test_scenario_cloud_e2e.py index d02e2d8ea6..642f45c46f 100644 --- a/python/e2e/test_scenario_cloud_e2e.py +++ b/python/e2e/test_scenario_cloud_e2e.py @@ -70,17 +70,18 @@ def on_event(event) -> None: finally: await client.stop() - async def test_should_route_first_cloud_event_for_server_assigned_session_id( + async def test_should_route_cloud_session_start_for_server_assigned_session_id( self, ctx: E2ETestContext, ): client, _capture_path = create_scenario_client(ctx, "cloud") - events = [] - first_event_received = asyncio.Event() + start_events = [] + session_start_received = asyncio.Event() def on_event(event) -> None: - events.append(event) - first_event_received.set() + if isinstance(event.data, SessionStartData): + start_events.append(event) + session_start_received.set() try: session = await client.create_session( @@ -95,13 +96,12 @@ def on_event(event) -> None: on_permission_request=PermissionHandler.approve_all, ) try: - await asyncio.wait_for(first_event_received.wait(), timeout=5) + await asyncio.wait_for(session_start_received.wait(), timeout=5) assert session.session_id == "cloud-runtime-session" - assert len(events) == 1 - assert isinstance(events[0].data, SessionStartData) - assert events[0].data.session_id == session.session_id - assert events[0].data.producer == "scenario-fake-cli" - assert events[0].data.remote_steerable is False + assert len(start_events) == 1 + assert start_events[0].data.session_id == session.session_id + assert start_events[0].data.producer == "scenario-fake-cli" + assert start_events[0].data.remote_steerable is False finally: await session.disconnect() finally: diff --git a/python/e2e/test_scenario_session_setup_e2e.py b/python/e2e/test_scenario_session_setup_e2e.py index 4c6df76cf4..c52d43ade1 100644 --- a/python/e2e/test_scenario_session_setup_e2e.py +++ b/python/e2e/test_scenario_session_setup_e2e.py @@ -16,17 +16,18 @@ class TestScenarioSessionSetup: - async def test_should_route_first_subscribed_event_for_preallocated_session_id( + async def test_should_route_subscribed_session_start_for_preallocated_session_id( self, ctx: E2ETestContext, ): client, _capture_path = create_scenario_client(ctx, "preallocated-event") - events = [] - event_received = asyncio.Event() + start_events = [] + session_start_received = asyncio.Event() def on_event(event) -> None: - events.append(event) - event_received.set() + if isinstance(event.data, SessionStartData): + start_events.append(event) + session_start_received.set() try: session = await client.create_session( @@ -35,12 +36,11 @@ def on_event(event) -> None: on_permission_request=PermissionHandler.approve_all, ) try: - await asyncio.wait_for(event_received.wait(), timeout=5) + await asyncio.wait_for(session_start_received.wait(), timeout=5) assert session.session_id == "scenario-session" - assert len(events) == 1 - assert isinstance(events[0].data, SessionStartData) - assert events[0].data.session_id == "scenario-session" - assert events[0].data.producer == "scenario-fake-cli" + assert len(start_events) == 1 + assert start_events[0].data.session_id == "scenario-session" + assert start_events[0].data.producer == "scenario-fake-cli" finally: await session.disconnect() finally: