test: prove package lifecycle isolation and recovery
This commit is contained in:
@@ -2,8 +2,11 @@ using Launcher.Next.Core;
|
||||
|
||||
namespace Launcher.Next.Application;
|
||||
|
||||
public sealed class PackageResolutionUseCase(IPackageCatalogPackageAcquirer catalog, IPackageSynchronizer synchronizer, IPackageRequirementCacheBinder binder, ILastKnownGoodPackageResolver cache, ILauncherTelemetry telemetry)
|
||||
public sealed class PackageResolutionUseCase
|
||||
{
|
||||
private readonly IPackageCatalogPackageAcquirer catalog; private readonly IPackageSynchronizer synchronizer; private readonly IPackageRequirementCacheBinder binder; private readonly ILastKnownGoodPackageResolver cache; private readonly ILauncherTelemetry telemetry; private readonly IPackageMaterializer? materializer;
|
||||
public PackageResolutionUseCase(IPackageCatalogPackageAcquirer c, IPackageSynchronizer s, IPackageRequirementCacheBinder b, ILastKnownGoodPackageResolver l, ILauncherTelemetry t) { catalog=c; synchronizer=s; binder=b; cache=l; telemetry=t; }
|
||||
public PackageResolutionUseCase(IPackageCatalogPackageAcquirer c, IPackageSynchronizer s, IPackageRequirementCacheBinder b, ILastKnownGoodPackageResolver l, IPackageMaterializer m, ILauncherTelemetry t) : this(c,s,b,l,t) { materializer=m; }
|
||||
public async Task<PackageResolutionResult> ResolveAsync(PackageRequirement requirement, CancellationToken cancellationToken)
|
||||
{
|
||||
var evidence = new List<PackageResolutionEvidence> { new("PACKAGE_REQUIREMENT_RECEIVED", requirement.PackageId) };
|
||||
@@ -13,6 +16,13 @@ public sealed class PackageResolutionUseCase(IPackageCatalogPackageAcquirer cata
|
||||
var online = await catalog.AcquireAsync(requirement, cancellationToken);
|
||||
if (online is not null && Matches(requirement, online.Manifest))
|
||||
{
|
||||
if (materializer is not null)
|
||||
{
|
||||
var committed = await materializer.MaterializeAsync(online.Manifest, online.SourceRoot, cancellationToken);
|
||||
await binder.BindAsync(requirement, committed.Version, cancellationToken);
|
||||
evidence.Add(new("ONLINE_PACKAGE_MATERIALIZED_NOT_ACTIVATED", committed.Version));
|
||||
return new(new CachedPackageResolution(committed.PackageId, committed.Version, committed.LocalPackageRoot, false, "MATERIALIZED_NOT_ACTIVATED"), true, evidence);
|
||||
}
|
||||
await synchronizer.SynchronizeAsync(online.Manifest, online.SourceRoot, cancellationToken);
|
||||
await binder.BindAsync(requirement, online.Manifest.Version, cancellationToken);
|
||||
var selected = await cache.ResolveAsync(requirement, cancellationToken);
|
||||
|
||||
Reference in New Issue
Block a user