Ejemplo n.º 1
0
        public void TestListDigests()
        {
            CacheStorageFiles cacheStorageFiles =
                new CacheStorageFiles(temporaryFolder.NewFolder().ToPath());

            CacheStorageReader cacheStorageReader = new CacheStorageReader(cacheStorageFiles);

            // Creates test layer directories.
            Files.CreateDirectories(cacheStorageFiles.GetLayersDirectory().Resolve(layerDigest1.GetHash()));
            Files.CreateDirectories(cacheStorageFiles.GetLayersDirectory().Resolve(layerDigest2.GetHash()));

            // Checks that layer directories created are all listed.
            Assert.AreEqual(
                new HashSet <DescriptorDigest>(new[] { layerDigest1, layerDigest2 }),
                cacheStorageReader.FetchDigests());

            // Checks that non-digest directories means the cache is corrupted.
            Files.CreateDirectory(cacheStorageFiles.GetLayersDirectory().Resolve("not a hash"));
            try
            {
                cacheStorageReader.FetchDigests();
                Assert.Fail("Listing digests should have failed");
            }
            catch (CacheCorruptedException ex)
            {
                Assert.That(
                    ex.Message, Does.StartWith("Found non-digest file in layers directory"));
                Assert.IsInstanceOf <DigestException>(ex.InnerException);
            }
        }
Ejemplo n.º 2
0
        public void TestSelect_invalidLayerDigest()
        {
            CacheStorageFiles cacheStorageFiles =
                new CacheStorageFiles(temporaryFolder.NewFolder().ToPath());

            CacheStorageReader cacheStorageReader = new CacheStorageReader(cacheStorageFiles);

            DescriptorDigest selector     = layerDigest1;
            SystemPath       selectorFile = cacheStorageFiles.GetSelectorFile(selector);

            Files.CreateDirectories(selectorFile.GetParent());
            Files.Write(selectorFile, Encoding.UTF8.GetBytes("not a valid layer digest"));

            try
            {
                cacheStorageReader.Select(selector);
                Assert.Fail("Should have thrown CacheCorruptedException");
            }
            catch (CacheCorruptedException ex)
            {
                Assert.That(
                    ex.Message,
                    Does.StartWith(
                        "Expected valid layer digest as contents of selector file `"
                        + selectorFile
                        + "` for selector `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`, but got: not a valid layer digest"));
            }
        }
Ejemplo n.º 3
0
        public async Task TestRetrieveAsync()
        {
            CacheStorageFiles cacheStorageFiles =
                new CacheStorageFiles(temporaryFolder.NewFolder().ToPath());

            CacheStorageReader cacheStorageReader = new CacheStorageReader(cacheStorageFiles);

            // Creates the test layer directory.
            DescriptorDigest layerDigest = layerDigest1;
            DescriptorDigest layerDiffId = layerDigest2;

            Files.CreateDirectories(cacheStorageFiles.GetLayerDirectory(layerDigest));
            using (Stream @out =
                       Files.NewOutputStream(cacheStorageFiles.GetLayerFile(layerDigest, layerDiffId)))
            {
                byte[] bytes = Encoding.UTF8.GetBytes("layerBlob");
                await @out.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false);
            }

            // Checks that the CachedLayer is retrieved correctly.
            Maybe <CachedLayer> optionalCachedLayer = cacheStorageReader.Retrieve(layerDigest);

            Assert.IsTrue(optionalCachedLayer.IsPresent());
            Assert.AreEqual(layerDigest, optionalCachedLayer.Get().GetDigest());
            Assert.AreEqual(layerDiffId, optionalCachedLayer.Get().GetDiffId());
            Assert.AreEqual("layerBlob".Length, optionalCachedLayer.Get().GetSize());
            Assert.AreEqual("layerBlob", await Blobs.WriteToStringAsync(optionalCachedLayer.Get().GetBlob()).ConfigureAwait(false));

            // Checks that multiple .layer files means the cache is corrupted.
            Files.CreateFile(cacheStorageFiles.GetLayerFile(layerDigest, layerDigest));
            try
            {
                cacheStorageReader.Retrieve(layerDigest);
                Assert.Fail("Should have thrown CacheCorruptedException");
            }
            catch (CacheCorruptedException ex)
            {
                Assert.That(
                    ex.Message, Does.StartWith(
                        "Multiple layer files found for layer with digest "
                        + layerDigest.GetHash()
                        + " in directory: "
                        + cacheStorageFiles.GetLayerDirectory(layerDigest)));
            }
        }
Ejemplo n.º 4
0
        public void TestSelect()
        {
            CacheStorageFiles cacheStorageFiles =
                new CacheStorageFiles(temporaryFolder.NewFolder().ToPath());

            CacheStorageReader cacheStorageReader = new CacheStorageReader(cacheStorageFiles);

            DescriptorDigest selector     = layerDigest1;
            SystemPath       selectorFile = cacheStorageFiles.GetSelectorFile(selector);

            Files.CreateDirectories(selectorFile.GetParent());
            Files.Write(selectorFile, Encoding.UTF8.GetBytes(layerDigest2.GetHash()));

            Maybe <DescriptorDigest> selectedLayerDigest = cacheStorageReader.Select(selector);

            Assert.IsTrue(selectedLayerDigest.IsPresent());
            Assert.AreEqual(layerDigest2, selectedLayerDigest.Get());
        }
Ejemplo n.º 5
0
        public void TestRetrieveManifest_v22()
        {
            SystemPath cacheDirectory = temporaryFolder.NewFolder().ToPath();

            SetupCachedMetadataV22(cacheDirectory);

            CacheStorageFiles  cacheStorageFiles  = new CacheStorageFiles(cacheDirectory);
            CacheStorageReader cacheStorageReader = new CacheStorageReader(cacheStorageFiles);

            V22ManifestTemplate manifestTemplate =
                (V22ManifestTemplate)
                cacheStorageReader
                .RetrieveMetadata(ImageReference.Of("test", "image", "tag"))
                .Get()
                .GetManifest();

            Assert.AreEqual(2, manifestTemplate.SchemaVersion);
        }
Ejemplo n.º 6
0
        public void TestRetrieveContainerConfiguration()
        {
            SystemPath cacheDirectory = temporaryFolder.NewFolder().ToPath();

            SetupCachedMetadataV22(cacheDirectory);

            CacheStorageFiles  cacheStorageFiles  = new CacheStorageFiles(cacheDirectory);
            CacheStorageReader cacheStorageReader = new CacheStorageReader(cacheStorageFiles);

            ContainerConfigurationTemplate configurationTemplate =
                cacheStorageReader
                .RetrieveMetadata(ImageReference.Of("test", "image", "tag"))
                .Get()
                .GetConfig()
                .Get();

            Assert.AreEqual("wasm", configurationTemplate.Architecture);
            Assert.AreEqual("js", configurationTemplate.Os);
        }