public void SetUp() { fakeDependenciesLayerConfiguration = MakeLayerConfiguration( "core/application/dependencies", EXTRACTION_PATH_ROOT.Resolve("libs")); fakeSnapshotDependenciesLayerConfiguration = MakeLayerConfiguration( "core/application/snapshot-dependencies", EXTRACTION_PATH_ROOT.Resolve("libs")); fakeResourcesLayerConfiguration = MakeLayerConfiguration( "core/application/resources", EXTRACTION_PATH_ROOT.Resolve("resources")); fakeClassesLayerConfiguration = MakeLayerConfiguration("core/application/classes", EXTRACTION_PATH_ROOT.Resolve("classes")); fakeExtraFilesLayerConfiguration = LayerConfiguration.CreateBuilder() .AddEntry( Paths.Get(TestResources.GetResource("core/fileA").ToURI()), EXTRA_FILES_LAYER_EXTRACTION_PATH.Resolve("fileA")) .AddEntry( Paths.Get(TestResources.GetResource("core/fileB").ToURI()), EXTRA_FILES_LAYER_EXTRACTION_PATH.Resolve("fileB")) .Build(); emptyLayerConfiguration = LayerConfiguration.CreateBuilder().Build(); cache = LayersCache.WithDirectory(temporaryFolder.NewFolder().ToPath()); Mock.Get(mockBuildConfiguration).Setup(m => m.GetEventHandlers()).Returns(mockEventHandlers); Mock.Get(mockBuildConfiguration).Setup(m => m.GetApplicationLayersCache()).Returns(cache); }
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()); }
/** * Builds a new {@link BuildConfiguration} using the parameters passed into the builder. * * @return the corresponding build configuration * @throws IOException if an I/O exception occurs */ public BuildConfiguration Build() { // Validates the parameters. IList <string> missingFields = new List <string>(); if (baseImageConfiguration == null) { missingFields.Add("base image configuration"); } if (targetImageConfiguration == null) { missingFields.Add("target image configuration"); } if (baseImageLayersCacheDirectory == null) { missingFields.Add("base image layers cache directory"); } if (applicationLayersCacheDirectory == null) { missingFields.Add("application layers cache directory"); } switch (missingFields.Count) { case 0: // No errors if (Preconditions.CheckNotNull(baseImageConfiguration).GetImage().UsesDefaultTag()) { eventHandlers.Dispatch( LogEvent.Warn( "Base image '" + baseImageConfiguration.GetImage() + "' does not use a specific image digest - build may not be reproducible")); } return(new BuildConfiguration( baseImageConfiguration, Preconditions.CheckNotNull(targetImageConfiguration), additionalTargetImageTags, containerConfiguration, LayersCache.WithDirectory(Preconditions.CheckNotNull(baseImageLayersCacheDirectory)), LayersCache.WithDirectory(Preconditions.CheckNotNull(applicationLayersCacheDirectory)), targetFormat, allowInsecureRegistries, offline, layerConfigurations, toolName, toolVersion, eventHandlers)); case 1: throw new InvalidOperationException("Required field is not set: " + missingFields[0]); default: throw new InvalidOperationException("Required fields are not set: " + string.Join(", ", missingFields)); } }
public void TestWithDirectory_existsButNotDirectory() { SystemPath file = temporaryFolder.NewFile().ToPath(); try { LayersCache.WithDirectory(file); Assert.Fail(); } catch (IOException) { // pass } }
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 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()); }