Skip to content

[CCOR-13193] Run Integration(e2e) tests on PR-to-main (phase 1: test with sdkdev v5 server)#422

Open
chrishagglund-ship-it wants to merge 25 commits into
mainfrom
integ-test-on-pr
Open

[CCOR-13193] Run Integration(e2e) tests on PR-to-main (phase 1: test with sdkdev v5 server)#422
chrishagglund-ship-it wants to merge 25 commits into
mainfrom
integ-test-on-pr

Conversation

@chrishagglund-ship-it

@chrishagglund-ship-it chrishagglund-ship-it commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Summary

Enables the integration test suite to run in CI on pull requests and hardens the
suite to run reliably against the shared sdkdev dev server. Introduces a shared
retry/poll helper module, splits the slowest tests into parallel CI buckets, and
fixes a number of latent test bugs surfaced by actually running these tests in CI.

Production code impact is limited to two small, backward-compatible model additions.

Changes

CI

  • Add an integration-test job to pull_request.yml running four parallel buckets
    (test-all, long-sync, long-async, core) via a matrix, with a 30-min timeout.
  • Trigger CI on pull_request/push to main (plus workflow_dispatch); scope the
    concurrency group by head_ref so PR runs cancel their own in-progress runs.
  • Force HTTP/1.1 for integration tests (CONDUCTOR_HTTP2_ENABLED=false) to avoid
    intermittent mid-stream HTTP/2 stalls through the shared server's proxy/LB.
  • Move integration credentials to the integration job only; unit/bc/serdeser steps
    no longer request server secrets (they run offline).

Test infrastructure

  • Add tests/integration/retry_helpers.py: the single home for transient-blip
    detection (is_transient), per-request retry (retry_on_transient,
    retry_on_status), scenario-level retry with a shared wall-clock deadline
    (retry_scenario), and a shared poll-to-terminal primitive
    (wait_for_workflow_terminal).
  • Add scripts/run_integration_tests.sh to run the suite locally, mirroring the CI
    buckets (AI/agentic and perf tests excluded by default; --bucket= / --with-perf).
  • Add pytest markers (slow_sync, slow_async, slow_test_all,
    server_timeout_unreliable) in pyproject.toml to drive bucket selection.

Reliability fixes in tests

  • Suffix task/workflow names with a per-run id so concurrent runs on the shared
    server don't steal or strand each other's tasks.
  • Start workers once per class via a TaskHandler stopped in tearDownClass
    (replacing a daemon thread + fixed sleep(90) that could hang the interpreter
    at exit), and assert each expected worker is discovered and alive.
  • Retry idempotent reads on read-after-write 404s and workflow terminate on 423 Locked;
    add server-side diagnostics (queue sizes, pollers, worker liveness) on give-up.
  • Fix genuine test bugs: access WorkflowSchedule as an object not a dict; drain the
    shared task queue by each polled task's own workflow id/ref; add a missing assert
    on task logs; correct an access-key-lookup assertion.
  • Rename test_* scenario helpers that take a workflow_executor arg to scenario_*
    so pytest stops mis-collecting them as standalone tests.

Models (backward-compatible)

  • UpsertUserRequest: add optional contact_information: Dict[str, str] field.
  • ServiceMethod.example_input: dict -> object.

Risk

  • Production surface is limited to two additive model changes; verified against the
    existing backward-compatibility and serde tests.
  • Remaining changes are test/CI only.

Notes for reviewers

  • CI now only runs for PRs targeting main (previously all PRs). Confirm this matches
    the branching model.
  • The server_timeout_unreliable no-heartbeat timeout cases are excluded from CI
    buckets (the dev server doesn't fire the timeout on a CI-bounded timeline); the
    SDK heartbeat-keeps-alive path is still covered.

@codecov

codecov Bot commented Jul 13, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 75.00000% with 4 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...onductor/client/http/models/upsert_user_request.py 75.00% 4 Missing ⚠️
Files with missing lines Coverage Δ
src/conductor/client/http/models/service_method.py 58.13% <ø> (ø)
...onductor/client/http/models/upsert_user_request.py 85.41% <75.00%> (-2.54%) ⬇️

... and 3 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@chrishagglund-ship-it chrishagglund-ship-it marked this pull request as ready for review July 15, 2026 18:54
@chrishagglund-ship-it chrishagglund-ship-it changed the title Integ test on pr [CCOR-13193] Run Integration(e2e) tests on PR-to-main (phase 1: test with sdkdev v5 server) Jul 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant