using FluentAssertions;
using Microsoft.Extensions.DependencyInjection;
using Nostos.Backend.Services.Portability;
using Nostos.Backend.Services.Portability.Activation;
using Xunit;
namespace Nostos.Backend.Tests.Portability;
///
/// The central Slice 7 proof: crashing at every durable phase write and every
/// rename boundary in Phase B, then starting a fresh host and reconciler over
/// the same files, always converges on exactly one complete generation. A
/// pre-commit crash returns the original library and a retry succeeds; a crash
/// at or after the durable commit keeps the verified import and completes the
/// job. Assertions compare content, never flags.
///
[Collection(ActivationCoordinatorCollection.Name)]
public sealed class ActivationCoordinatorCrashMatrixTests
{
private static readonly string[] PhaseABoundaries =
[
SelfHostedActivationSteps.PhaseCandidatePrepared,
SelfHostedActivationSteps.AfterCapture,
SelfHostedActivationSteps.AfterAdmission,
SelfHostedActivationSteps.AfterBuildMedia,
SelfHostedActivationSteps.AfterBuildDatabase,
SelfHostedActivationSteps.AfterVerifyCandidate,
];
private static readonly string[] SharedBoundaries =
[
SelfHostedActivationSteps.PhaseExclusiveEntered,
SelfHostedActivationSteps.AfterFinalize,
SelfHostedActivationSteps.AfterQuiesce,
SelfHostedActivationSteps.PhaseDatabaseCheckpointed,
SelfHostedActivationSteps.PhaseCutoverPrepared,
SelfHostedActivationSteps.AfterRetainMedia,
SelfHostedActivationSteps.PhasePreviousMediaRetained,
SelfHostedActivationSteps.AfterRetainDatabase,
SelfHostedActivationSteps.PhasePreviousDatabaseRetained,
SelfHostedActivationSteps.AfterActivateMedia,
SelfHostedActivationSteps.PhaseCandidateMediaActivated,
SelfHostedActivationSteps.AfterActivateDatabase,
SelfHostedActivationSteps.PhaseCandidateDatabaseActivated,
SelfHostedActivationSteps.AfterReopen,
SelfHostedActivationSteps.AfterPostVerify,
SelfHostedActivationSteps.PhasePostActivationVerified,
SelfHostedActivationSteps.PhaseCommitted,
SelfHostedActivationSteps.AfterJournalResolved,
];
private static readonly string[] PopulatedOnlyBoundaries =
[
SelfHostedActivationSteps.AfterPrepareRetention,
];
public static IEnumerable