Add recovery preflight and ACC restart runbook

This commit is contained in:
2026-08-19 18:13:03 +02:00
parent 9ce7e8d45a
commit 1228f71765
16 changed files with 296 additions and 24 deletions
@@ -24,6 +24,7 @@ namespace BizTalkPlatformManagementTool.Tests
Run("JsonRoundTripIsBomTolerantAndAtomic", JsonRoundTripIsBomTolerantAndAtomic);
Run("DiffUsesApplicationAndNameIdentity", DiffUsesApplicationAndNameIdentity);
Run("RestoreRejectsDifferentServer", RestoreRejectsDifferentServer);
Run("Legacy213SnapshotIsAcceptedForRecovery", Legacy213SnapshotIsAcceptedForRecovery);
Run("RestorePlanUsesSafeOrder", RestorePlanUsesSafeOrder);
Run("ShutdownPlanUsesGlobalSafeOrder", ShutdownPlanUsesGlobalSafeOrder);
Run("EmergencyRestorePlanStartsSsoFirst", EmergencyRestorePlanStartsSsoFirst);
@@ -98,6 +99,25 @@ namespace BizTalkPlatformManagementTool.Tests
Expect<InvalidOperationException>(() => SnapshotValidator.EnsureServerMatches(snapshot, "BIZTALK-B"));
}
/// <summary>Prüft, dass ein erhaltener 2.1.3-Snapshot ohne Versionssperre als Recovery-Quelle dient.</summary>
private static void Legacy213SnapshotIsAcceptedForRecovery()
{
InTemp(directory =>
{
var original = Snapshot("APP", "PORT", ArtifactStates.SendPortStarted);
original.ToolVersion = "2.1.3-net461";
original.Server = "BIZTALK-A.example.local";
var path = Path.Combine(directory, "before.json");
JsonFileStore.Save(path, original);
var loaded = JsonFileStore.Load<BizTalkSnapshot>(path);
SnapshotValidator.EnsureServerMatches(loaded, "BIZTALK-A");
var plan = new BizTalkOperationService(null).CreateEmergencyRestorePlan(loaded, "BIZTALK-A");
Assert(plan.Steps.First().Kind == "WindowsService", "legacy snapshot did not create an emergency plan");
Assert(loaded.ToolVersion == "2.1.3-net461", "legacy tool version was not preserved");
});
}
/// <summary>Prüft die sichere Restore-Reihenfolge und den Schutz gebundener Orchestrierungen.</summary>
private static void RestorePlanUsesSafeOrder()
{