Skip to content

Commit 612763c

Browse files
repeated empirical evidence suggests that the server will time out the task when it feels like it, not on our timeline
1 parent 2eeee4f commit 612763c

4 files changed

Lines changed: 30 additions & 5 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,17 +192,15 @@ line-ending = "auto"
192192
[tool.pytest.ini_options]
193193
pythonpath = ["src"]
194194
markers = [
195-
<<<<<<< HEAD
196195
"integration: requires a live Agentspan-compatible server",
197196
"e2e: requires a live server and AGENTSPAN_SERVER_URL",
198197
"sse: requires SSE streaming (AGENTSPAN_STREAMING_ENABLED=true)",
199198
"agent_correctness: marks tests as agent correctness tests",
200199
"semantic: marks tests that use an LLM judge for semantic assertions",
201-
=======
202200
"slow_sync: long-running sync lease-extension tests (~90s)",
203201
"slow_async: long-running async lease-extension tests (~90s)",
204202
"slow_test_all: long-running aggregate workflow-client test_all (~83s)",
205-
>>>>>>> 973c79cf (wip, testing/fixes)
203+
"server_timeout_unreliable: depends on server-side task timeout firing in a bounded window; excluded from CI",
206204
]
207205

208206
[tool.coverage.run]

scripts/run_integration_tests.sh

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@
3333
# test-all aggregate workflow-client test_all (test_workflow_client_intg.py, ~83s)
3434
# all the full suite (no bucket filtering) — for a complete local run
3535
#
36+
# The long-* buckets deselect the no-heartbeat test_02 cases (marker
37+
# server_timeout_unreliable): those assert a server-side task timeout that the
38+
# sdkdev server doesn't reliably fire on a CI-bounded timeline. Use --bucket=all
39+
# (or target the test directly) to run them anyway.
40+
#
3641
# ./scripts/run_integration_tests.sh # fast: skips slow buckets
3742
# ./scripts/run_integration_tests.sh --bucket=long-sync
3843
# ./scripts/run_integration_tests.sh --bucket=all # run everything
@@ -113,13 +118,17 @@ case "$bucket" in
113118
# never in scope and perf_ignore is unnecessary here. This also means
114119
# --with-perf has no effect on these buckets; the perf test is only reachable
115120
# via the core/all buckets.
121+
# The no-heartbeat "server should time the task out" cases (test_02) are
122+
# deselected here: the sdkdev server does not reliably time a task out on a
123+
# CI-bounded timeline, so they flake for reasons unrelated to the SDK. They
124+
# carry the server_timeout_unreliable marker and still run under --bucket=all.
116125
long-sync)
117126
targets=("$LEASE_SYNC")
118-
select=(-m slow_sync)
127+
select=(-m "slow_sync and not server_timeout_unreliable")
119128
;;
120129
long-async)
121130
targets=("$LEASE_ASYNC")
122-
select=(-m slow_async)
131+
select=(-m "slow_async and not server_timeout_unreliable")
123132
;;
124133
test-all)
125134
targets=("$TEST_ALL_FILE")

tests/integration/test_async_lease_extension.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,15 @@ def test_01_async_with_heartbeat_completes(self):
377377
self.assertEqual(task.output_data.get('slept'), TASK_SLEEP_SECONDS)
378378
print("\n PASS: Async task completed with heartbeat keeping lease alive")
379379

380+
# NOTE: excluded from the long-* CI buckets. This scenario asserts a purely
381+
# server-side mechanic — the server timing out the task's expired lease on
382+
# its own. The sdkdev server does not seem to consistently/reliably time out
383+
# the task by itself on a timeline that works with integration testing, so
384+
# gating CI on it produces flakes unrelated to the SDK. The SDK behaviour
385+
# (heartbeats keeping a task alive) is still covered by test_01.
386+
# Deselected via `-m "... and not server_timeout_unreliable"`; still runs
387+
# under --bucket=all or when targeted directly.
388+
@pytest.mark.server_timeout_unreliable
380389
def test_02_async_without_heartbeat_times_out(self):
381390
"""Async task WITHOUT lease_extend_enabled times out when sleep > responseTimeout."""
382391
print("\n" + "=" * 80)

tests/integration/test_lease_extension.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,15 @@ def test_01_with_heartbeat_completes(self):
318318
finally:
319319
stop_workers()
320320

321+
# NOTE: excluded from the long-* CI buckets. This scenario asserts a purely
322+
# server-side mechanic — the server timing out the task's expired lease on
323+
# its own. The sdkdev server does not seem to consistently/reliably time out
324+
# the task by itself on a timeline that works with integration testing, so
325+
# gating CI on it produces flakes unrelated to the SDK. The SDK behaviour
326+
# (heartbeats keeping a task alive) is still covered by test_01.
327+
# Deselected via `-m "... and not server_timeout_unreliable"`; still runs
328+
# under --bucket=all or when targeted directly.
329+
@pytest.mark.server_timeout_unreliable
321330
def test_02_without_heartbeat_times_out(self):
322331
"""Task WITHOUT lease_extend_enabled times out when sleep > responseTimeout."""
323332
print("\n" + "=" * 80)

0 commit comments

Comments
 (0)