Skip to content

Add critical-tier E2E coverage for IIS HTTPS, SCM restart, and circuit breaker

Placeholder ppxd requested to merge add-critical-tier-e2e-coverage into main

Summary

  • 6 new test files, +1893 LOC, closing the production-safety gaps the deep audit (2026-05-20) identified. Every single feature already has component coverage, but cross-feature composition, real-OS process crashes, and cross-step output-variable resolution had no end-to-end pin. These six tests pin the operator-facing invariants the existing suite leaves implicit.
  • Pure additions — no production code touched, no shared test infrastructure modified, no existing test renamed / deleted / changed. Zero regression risk to the existing suite.
  • All Rule 12-compliant: skip-on-non-OS guards, GUID-suffixed resource names, IDisposable contexts with best-effort cleanup, real production classes (no mocks), [Trait(\"Category\", ...)] on every E2E, loopback ports via TcpListener(0), descriptive failure messages with manual-diagnose instructions.

Tests added

File LOC Tier What it pins
IISDeployRealWorldHttpsE2ETests.cs 519 🟢 High Runtime PFX + cert-import + AppPool ACL + live HTTPS GET 200
IISDeployRealWorldFailureRecoveryE2ETests.cs 401 🟢 High Unresolved-token failure → journal Status=Failed → recovery deploy flips Status=Success + PostDeploy fires
HalibutCircuitBreakerE2ETests.cs 244 🟢 High Breaker Open → dispatch < 5s + stub never receives script
WindowsServiceHostAutoRestartE2ETests.cs 272 🟢 High Real Process.Kill → SCM auto-restart within 30s + NEW PID
OutputVariableCrossStepE2ETests.cs 268 🟢 High 5-link emit→parse→merge→expand→agent chain on real Kind
StickyFailureBatchPropagationTests.cs 189 unit OR-merge + sticky fail propagates to all targets (9 cases)

Test plan

  • dotnet build all four affected projects (Squid.E2ETests, Squid.UnitTests, Squid.WindowsTentacleE2ETests) — 0 errors
  • xUnit discovery confirms all 6 test classes + theory cases registered
  • Runtime execution: StickyFailureBatchPropagationTests — 9/9 passed locally on macOS in 12ms
  • CI: Squid.UnitTests full suite stays green (unit tier, runs on every push)
  • CI (Windows + IIS feature): IISDeployRealWorldHttpsE2ETests, IISDeployRealWorldFailureRecoveryE2ETests, WindowsServiceHostAutoRestartE2ETests
  • CI (Postgres + Kind): HalibutCircuitBreakerE2ETests, OutputVariableCrossStepE2ETests
  • First Windows CI execution confirms cert-import + ACL + HTTPS request chain works end-to-end
  • First Kind CI execution confirms ##squid[setVariable] round-trip and circuit breaker fail-fast

Out of scope (Phase 2/3 backlog)

  • Real-failure path for circuit breaker (kill stub → record real HalibutClientException) — needs Halibut's 30-min poll timeout override outside current fixture surface.
  • Network blip / agent reconnect mid-GetStatus.
  • Multi-instance concurrent crash + restart on Windows.

Merge request reports

Loading