public async Task TestWriteUncompressedWithLayerEntries_retrieveByLayerDigestAsync() { LayersCache cache = LayersCache.WithDirectory(temporaryFolder.NewFolder().ToPath()); await VerifyIsLayer1Async(await cache.WriteUncompressedLayerAsync(layerBlob1, layerEntries1).ConfigureAwait(false)).ConfigureAwait(false); await VerifyIsLayer1Async(cache.Retrieve(layerDigest1).OrElseThrow(() => new AssertionException(""))).ConfigureAwait(false); Assert.IsFalse(cache.Retrieve(layerDigest2).IsPresent()); }
public async Task TestRetrieveWithTwoEntriesInCacheAsync() { LayersCache cache = LayersCache.WithDirectory(temporaryFolder.NewFolder().ToPath()); await VerifyIsLayer1Async(await cache.WriteUncompressedLayerAsync(layerBlob1, layerEntries1).ConfigureAwait(false)).ConfigureAwait(false); await VerifyIsLayer2Async(await cache.WriteUncompressedLayerAsync(layerBlob2, layerEntries2).ConfigureAwait(false)).ConfigureAwait(false); await VerifyIsLayer1Async(cache.Retrieve(layerDigest1).OrElseThrow(() => new AssertionException(""))).ConfigureAwait(false); await VerifyIsLayer2Async(cache.Retrieve(layerDigest2).OrElseThrow(() => new AssertionException(""))).ConfigureAwait(false); Maybe <CachedLayer> cachedLayer1 = await cache.RetrieveAsync(layerEntries1).ConfigureAwait(false); await VerifyIsLayer1Async(cachedLayer1.OrElseThrow(() => new AssertionException(""))).ConfigureAwait(false); Maybe <CachedLayer> cachedLayer2 = await cache.RetrieveAsync(layerEntries2).ConfigureAwait(false); await VerifyIsLayer2Async(cachedLayer2.OrElseThrow(() => new AssertionException(""))).ConfigureAwait(false); }
public async Task <ICachedLayer> CallAsync() { using (ProgressEventDispatcher progressEventDispatcher = progressEventDispatcherFactory.Create("checking base image layer " + layerDigest, 1)) using (TimerEventDispatcher ignored = new TimerEventDispatcher( buildConfiguration.GetEventHandlers(), string.Format(CultureInfo.CurrentCulture, Description, layerDigest))) { LayersCache cache = buildConfiguration.GetBaseImageLayersCache(); // Checks if the layer already exists in the cache. Maybe <CachedLayer> optionalCachedLayer = cache.Retrieve(layerDigest); if (optionalCachedLayer.IsPresent()) { return(optionalCachedLayer.Get()); } else if (buildConfiguration.IsOffline()) { throw new IOException( "Cannot run Fib in offline mode; local Fib cache for base image is missing image layer " + layerDigest + ". You may need to rerun Fib in online mode to re-download the base image layers."); } RegistryClient registryClient = buildConfiguration .NewBaseImageRegistryClientFactory() .SetAuthorization(pullAuthorization) .NewRegistryClient(); using (ThrottledProgressEventDispatcherWrapper progressEventDispatcherWrapper = new ThrottledProgressEventDispatcherWrapper( progressEventDispatcher.NewChildProducer(), "pulling base image layer " + layerDigest)) { return(await cache.WriteCompressedLayerAsync( registryClient.PullBlob( layerDigest, progressEventDispatcherWrapper.SetProgressTarget, progressEventDispatcherWrapper.DispatchProgress)).ConfigureAwait(false)); } } }
public async Task TestWriteUncompressedWithLayerEntries_retrieveByLayerEntriesAsync() { LayersCache cache = LayersCache.WithDirectory(temporaryFolder.NewFolder().ToPath()); await VerifyIsLayer1Async(await cache.WriteUncompressedLayerAsync(layerBlob1, layerEntries1).ConfigureAwait(false)).ConfigureAwait(false); Maybe <CachedLayer> layer = await cache.RetrieveAsync(layerEntries1).ConfigureAwait(false); await VerifyIsLayer1Async(layer.OrElseThrow(() => new AssertionException(""))).ConfigureAwait(false); Assert.IsFalse(cache.Retrieve(layerDigest2).IsPresent()); // A source file modification results in the cached layer to be out-of-date and not retrieved. Files.SetLastModifiedTime( layerEntries1[0].SourceFile, FileTime.From(SystemClock.Instance.GetCurrentInstant() + Duration.FromSeconds(1))); Maybe <CachedLayer> outOfDateLayer = await cache.RetrieveAsync(layerEntries1).ConfigureAwait(false); Assert.IsFalse(outOfDateLayer.IsPresent()); }