public void AccessEveryTenthTenTimesMoreMakesItStay() { using (var fileCollection = new InMemoryFileCollection()) { const int cacheCapacity = 50000; using (var cache = new DiskChunkCache(fileCollection, 20, cacheCapacity)) { for (var i = 0; i < 46; i++) { Put(cache, i); for (var j = 0; j < (i % 5 == 0 ? 10 + i : 1); j++) { Get(cache, i); } if (i == 42) { Thread.Sleep(500); } Assert.True(fileCollection.Enumerate().Sum(f => (long)f.GetSize()) <= cacheCapacity); } _output.WriteLine(cache.CalcStats()); Assert.True(Get(cache, 0)); Assert.False(Get(cache, 1)); } } }
public async Task GettingContentMakesItStayLongerDecreasingRate() { using (var fileCollection = new InMemoryFileCollection()) { const int cacheCapacity = 50000; using (var cache = new DiskChunkCache(fileCollection, 20, cacheCapacity)) { for (var i = 0; i < 80; i++) { Put(cache, i); for (var j = 0; j < 79 - i; j++) { Get(cache, i); } if (CalcLength(fileCollection) <= cacheCapacity) { continue; } await FinishCompactTask(cache); Assert.True(CalcLength(fileCollection) <= cacheCapacity); } _output.WriteLine(cache.CalcStats()); Assert.True(Get(cache, 0)); Assert.False(Get(cache, 60)); } } }
public void GetFromEmptyCacheReturnsEmptyByteBuffer() { using (var fileCollection = new InMemoryFileCollection()) using (var cache = new DiskChunkCache(fileCollection, 20, 1000)) { Assert.Equal(0, cache.Get(CalcHash(new byte[] { 0 })).Result.Length); } }
public void WhatIPutICanGet() { using (var fileCollection = new InMemoryFileCollection()) using (var cache = new DiskChunkCache(fileCollection, 20, 1000)) { cache.Put(CalcHash(new byte[] { 0 }), ByteBuffer.NewAsync(new byte[] { 1 })); Assert.Equal(new byte[] { 1 }, cache.Get(CalcHash(new byte[] { 0 })).Result.ToByteArray()); } }
async Task FinishCompactTask(DiskChunkCache cache) { var t = cache.CurrentCompactionTask(); if (t == null) { return; } await t; }
public void ItRemebersContentAfterReopen() { using (var fileCollection = new InMemoryFileCollection()) { using (var cache = new DiskChunkCache(fileCollection, 20, 1000)) { cache.Put(CalcHash(new byte[] { 0 }), ByteBuffer.NewAsync(new byte[] { 1 })); } using (var cache = new DiskChunkCache(fileCollection, 20, 1000)) { Assert.Equal(new byte[] { 1 }, cache.Get(CalcHash(new byte[] { 0 })).Result.ToByteArray()); } } }
public void SizeDoesNotGrowOverLimit() { using (var fileCollection = new InMemoryFileCollection()) { const int cacheCapacity = 50000; using (var cache = new DiskChunkCache(fileCollection, 20, cacheCapacity)) { for (var i = 0; i < 80; i++) { Put(cache, i); Assert.True(fileCollection.Enumerate().Sum(f => (long)f.GetSize()) <= cacheCapacity); } } } }
public async Task SizeDoesNotGrowOverLimit() { using (var fileCollection = new InMemoryFileCollection()) { const int cacheCapacity = 50000; using (var cache = new DiskChunkCache(fileCollection, 20, cacheCapacity)) { for (var i = 0; i < 80; i++) { Put(cache, i); if (CalcLength(fileCollection) <= cacheCapacity) { continue; } await FinishCompactTask(cache); Assert.True(CalcLength(fileCollection) <= cacheCapacity); } } } }
public void GettingContentMakesItStayLongerIncreasingRate() { using (var fileCollection = new InMemoryFileCollection()) { const int cacheCapacity = 50000; using (var cache = new DiskChunkCache(fileCollection, 20, cacheCapacity)) { for (var i = 0; i < 80; i++) { Put(cache, i); for (var j = 0; j < i; j++) { Get(cache, i); } Assert.True(fileCollection.Enumerate().Sum(f => (long)f.GetSize()) <= cacheCapacity); } Assert.True(Get(cache, 79)); Assert.False(Get(cache, 0)); } } }