From 09a56d290f280fb01425a74e4b81d0ba40102d90 Mon Sep 17 00:00:00 2001 From: Vlada Dusek Date: Fri, 5 Jun 2026 17:29:58 +0200 Subject: [PATCH 1/2] test: accept platform auto-abort in test_actor_charge_limit Hitting max_total_charge_usd makes the platform auto-abort the run, which races with the Actor's clean exit, so the terminal status is non-deterministically SUCCEEDED or ABORTED; accept both. --- tests/e2e/test_actor_charge.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tests/e2e/test_actor_charge.py b/tests/e2e/test_actor_charge.py index 664c32ae..53c08ed2 100644 --- a/tests/e2e/test_actor_charge.py +++ b/tests/e2e/test_actor_charge.py @@ -142,15 +142,20 @@ async def test_actor_charge_limit( ) -> None: run = await run_actor(ppe_actor, max_total_charge_usd=Decimal('0.2')) + # Reaching `max_total_charge_usd` makes the platform abort the run automatically, and that abort races with the + # Actor's own clean exit — so the terminal status is either SUCCEEDED or ABORTED. Both are valid here; the + # behavior under test is that the charge limit capped the run at exactly 2 of the 4 attempted events. + terminal_statuses = {ActorJobStatus.SUCCEEDED, ActorJobStatus.ABORTED} + # Refetch until the charged event counts propagate on the platform. run = await poll_until_condition( partial(_get_run, apify_client_async, run.id), - lambda r: r.status == ActorJobStatus.SUCCEEDED and r.charged_event_counts == {'foobar': 2}, + lambda r: r.status in terminal_statuses and r.charged_event_counts == {'foobar': 2}, timeout=30, poll_interval=1, ) - assert run.status == ActorJobStatus.SUCCEEDED + assert run.status in terminal_statuses assert run.charged_event_counts == {'foobar': 2} From e2e50c5949767b2ee5e441a48cbb2b41bab4c5f9 Mon Sep 17 00:00:00 2001 From: Vlada Dusek Date: Fri, 5 Jun 2026 17:32:20 +0200 Subject: [PATCH 2/2] test: tighten flake comment in test_actor_charge_limit --- tests/e2e/test_actor_charge.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/e2e/test_actor_charge.py b/tests/e2e/test_actor_charge.py index 53c08ed2..1cd818b6 100644 --- a/tests/e2e/test_actor_charge.py +++ b/tests/e2e/test_actor_charge.py @@ -142,9 +142,8 @@ async def test_actor_charge_limit( ) -> None: run = await run_actor(ppe_actor, max_total_charge_usd=Decimal('0.2')) - # Reaching `max_total_charge_usd` makes the platform abort the run automatically, and that abort races with the - # Actor's own clean exit — so the terminal status is either SUCCEEDED or ABORTED. Both are valid here; the - # behavior under test is that the charge limit capped the run at exactly 2 of the 4 attempted events. + # Reaching `max_total_charge_usd` makes the platform auto-abort the run, racing with the Actor's clean exit, so + # the terminal status is either SUCCEEDED or ABORTED. What matters is that the limit capped it at 2 events. terminal_statuses = {ActorJobStatus.SUCCEEDED, ActorJobStatus.ABORTED} # Refetch until the charged event counts propagate on the platform.