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 TestGetLayerDirectory() { DescriptorDigest layerDigest = DescriptorDigest.FromHash( "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Assert.AreEqual( Paths.Get( "cache", "directory", "layers", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), TEST_CACHE_STORAGE_FILES.GetLayerDirectory(layerDigest)); }