Skip to content

Phase 12.L.1: multi-instance Windows E2E (2 tests)

Placeholder ppxd requested to merge phase12.L-multi-instance into main

Summary

Phase 12.L.1 adds 2 high-fidelity E2E tests covering multi-instance scenarios on Windows: two services installed concurrently in the SCM database, each with unique service name + install dir, asserting independence.

Test plan

  • dotnet test tests/Squid.WindowsUpgradeE2ETests — 68/68 ✅ on macOS (2 L tests skip)
  • tentacle-windows-e2e.yml — 68/68 ✅ on windows-latest (run 25425025298)

Tests added

  • G1.h TwoInstances_ConcurrentInstall_BothReachRunning Installs InstanceA + InstanceB concurrently. Asserts both reach STATE: RUNNING within 30s. Asserts both visible in sc query independently.

  • G2.h UninstallOneInstance_OtherInstanceUnaffected Installs A + B; both running. Uninstalls only B. Asserts:

    • B is gone from SCM within 15s
    • A is STILL in SCM
    • A is STILL RUNNING (not stopped or pending)

    If sc.exe delete somehow affected A — say via a regression in service-name canonicalization or a shared install-dir bug — these assertions catch it.

Coverage delta vs G.2 (WindowsServiceHostE2ETests)

G.2 covers one service at a time, each with a fresh GUID name — proves the lifecycle for a single instance. Phase 12.L adds the concurrent-coexistence dimension: two services in SCM at the same time, asserting independence. A regression in service-naming (collision), install-dir handling (shared files), or SCM record isolation surfaces here, not in G.2.

Why Windows-only

sc.exe is a Windows API. Tests skip cleanly on macOS / Linux via WindowsServiceFixture.IsAvailable guard (Rule 12.1). Linux equivalent (systemd multi-instance) is a separate concern for a future Linux phase.

Phase 12.L scope

L.1 covers G1.h + G2.h. Remaining Phase L scenarios mapped to docs/e2e-scenario-matrix.md:

ID Status Notes
G1.h2 Planned Foo + Bar registered against different stub servers
G3.u1 Already covered G.2's DoubleInstall_ReturnsScExistsErrorCode
G4.u1, G4.u2 Planned Corrupt / missing instances.json
F1.h Blocked Capabilities probe — Halibut cache-key bug (flagged for follow-up)
F4.h Planned /healthz endpoint smoke test

🤖 Generated with Claude Code

Merge request reports

Loading