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); } }
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")); } }
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))); } }
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()); }
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); }
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); }