Skip to content

Add end-to-end ProcessAsync test for transient-pause (required + non-required)

Placeholder ppxd requested to merge test/p1b-transient-pause-e2e into main

Summary

  • The P1b transient-pause fix (#434) was covered only compositionally: unit tests mock the phase to throw the transient directly, and HalibutResumeReattachTests calls the strategy directly — neither runs the real ExecuteSingleActionAsync per-action catch through the runner to the pause outcome. The non-required path (which has no per-target catch) was the exact gap the adversarial review flagged.
  • New IntegrationTransientPause drives the real pipeline: a full IDeploymentTaskExecutor.ProcessAsync over a seeded deployment (KubernetesAgent target → the real HalibutMachineExecutionStrategy records the in-flight pointer), with only the Halibut RPC transport faked (GetStatus throws a transient HalibutClientException). For both required and non-required steps it asserts: task Paused (not Failed), checkpoint preserved, in-flight pointer preserved.
  • Test only — the fix already shipped in #434; this closes the end-to-end coverage gap.

Test plan

  • Both [InlineData(true)] (required) and [InlineData(false)] (non-required) green against the real pipeline
  • Red-green verified: neutering the ExecuteSingleActionAsync transient catch makes the NON-required case fail (Paused → Failed, checkpoint deleted — the swallow bug) while the required case still passes (covered by the per-target catch) — proving the test specifically guards the non-required propagation the fix added
  • Pure test addition; Execute.cs unchanged

Merge request reports

Loading