Phase 12.L.1: multi-instance Windows E2E (2 tests)
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✅ onwindows-latest(run 25425025298)
Tests added
-
G1.h
TwoInstances_ConcurrentInstall_BothReachRunningInstalls InstanceA + InstanceB concurrently. Asserts both reach STATE: RUNNING within 30s. Asserts both visible insc queryindependently. -
G2.h
UninstallOneInstance_OtherInstanceUnaffectedInstalls 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 deletesomehow 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 |