public static void GetExpiredEntries_WhenCacheTimesExpired_ReturnsEarliestValue() { var policy = new FixedTimespanCachePolicy <string>(TimeSpan.FromSeconds(30)); var cacheEntry1 = new Mock <ICacheEntry <string> >(); cacheEntry1.Setup(k => k.CreationTime).Returns(DateTime.Now - TimeSpan.FromMinutes(2)); cacheEntry1.Setup(k => k.Size).Returns(5); cacheEntry1.Setup(k => k.Key).Returns("test1"); var cacheEntry2 = new Mock <ICacheEntry <string> >(); cacheEntry2.Setup(k => k.CreationTime).Returns(DateTime.Now); cacheEntry2.Setup(k => k.Size).Returns(5); cacheEntry2.Setup(k => k.Key).Returns("test2"); var cacheEntry3 = new Mock <ICacheEntry <string> >(); cacheEntry3.Setup(k => k.CreationTime).Returns(DateTime.Now - TimeSpan.FromMinutes(2)); cacheEntry3.Setup(k => k.Size).Returns(5); cacheEntry3.Setup(k => k.Key).Returns("test3"); var expired = policy.GetExpiredEntries(new[] { cacheEntry1.Object, cacheEntry2.Object, cacheEntry3.Object }, 20).ToList(); Assert.AreEqual(2, expired.Count); var firstExpiredKey = expired[0].Key; var lastExpiredKey = expired.Last().Key; Assert.Multiple(() => { Assert.AreEqual(cacheEntry1.Object.Key, firstExpiredKey); Assert.AreEqual(cacheEntry3.Object.Key, lastExpiredKey); }); }
public static async Task TryGetValueAsync_WhenValueExpired_ReturnsFalseAndNullStream() { var testDirPath = Path.Combine(Environment.CurrentDirectory, "trygetvalueexpired_test"); var testDir = new DirectoryInfo(testDirPath); if (!testDir.Exists) { testDir.Create(); } var cachePolicy = new FixedTimespanCachePolicy <string>(TimeSpan.FromMilliseconds(1)); var input = new byte[] { 1, 2, 3, 4 }; const ulong size = 20; using (var cache = new DiskCache <string>(testDir, cachePolicy, size, TimeSpan.FromMilliseconds(5))) { await cache.SetValueAsync("asd", new MemoryStream(input)).ConfigureAwait(false); await Task.Delay(100).ConfigureAwait(false); var(hasValue, stream) = await cache.TryGetValueAsync("asd").ConfigureAwait(false); Assert.IsFalse(hasValue); Assert.IsNull(stream); } testDir.Delete(true); }
public static void GetExpiredEntries_WhenCacheTimesExpired_ReturnsNonEmptyCollection() { var policy = new FixedTimespanCachePolicy <string>(TimeSpan.FromSeconds(30)); var cacheEntry1 = new Mock <ICacheEntry <string> >(); cacheEntry1.Setup(k => k.CreationTime).Returns(DateTime.Now - TimeSpan.FromMinutes(2)); cacheEntry1.Setup(k => k.Size).Returns(5); cacheEntry1.Setup(k => k.Key).Returns("test1"); var cacheEntry2 = new Mock <ICacheEntry <string> >(); cacheEntry2.Setup(k => k.CreationTime).Returns(DateTime.Now); cacheEntry2.Setup(k => k.Size).Returns(5); cacheEntry2.Setup(k => k.Key).Returns("test2"); var cacheEntry3 = new Mock <ICacheEntry <string> >(); cacheEntry3.Setup(k => k.CreationTime).Returns(DateTime.Now - TimeSpan.FromMinutes(2)); cacheEntry3.Setup(k => k.Size).Returns(5); cacheEntry3.Setup(k => k.Key).Returns("test3"); var expired = policy.GetExpiredEntries(new[] { cacheEntry1.Object, cacheEntry2.Object, cacheEntry3.Object }, 20).ToList(); Assert.AreEqual(2, expired.Count); }
public static void GetExpiredEntries_WhenOnlyValueExceedsTimePeriod_ReturnsValue() { var policy = new FixedTimespanCachePolicy <string>(TimeSpan.FromMilliseconds(1)); var cacheEntry = new Mock <ICacheEntry <string> >(); cacheEntry.Setup(k => k.CreationTime).Returns(DateTime.Now - TimeSpan.FromSeconds(1)); cacheEntry.Setup(k => k.Size).Returns(1); cacheEntry.Setup(k => k.Key).Returns("test"); var expired = policy.GetExpiredEntries(new[] { cacheEntry.Object }, 100).ToList(); Assert.AreEqual(1, expired.Count); }
public static void GetExpiredEntries_WhenCacheNotExhausted_ReturnsEmptySet() { var policy = new FixedTimespanCachePolicy <string>(TimeSpan.FromSeconds(100)); var cacheEntry = new Mock <ICacheEntry <string> >(); cacheEntry.Setup(k => k.CreationTime).Returns(DateTime.Now); cacheEntry.Setup(k => k.Size).Returns(1); cacheEntry.Setup(k => k.Key).Returns("test"); var expired = policy.GetExpiredEntries(new[] { cacheEntry.Object }, 100).ToList(); Assert.AreEqual(0, expired.Count); }
public static void GetValueAsync_WhenValueExpired_ThrowsKeyNotFoundException() { var testDirPath = Path.Combine(Environment.CurrentDirectory, "getvalueexpired_test"); var testDir = new DirectoryInfo(testDirPath); if (!testDir.Exists) { testDir.Create(); } var cachePolicy = new FixedTimespanCachePolicy <string>(TimeSpan.FromMilliseconds(1)); var input = new byte[] { 1, 2, 3, 4 }; const ulong size = 20; using (var cache = new DiskCache <string>(testDir, cachePolicy, size, TimeSpan.FromMilliseconds(5))) { cache.SetValue("asd", new MemoryStream(input)); Task.Delay(100).Wait(); Assert.ThrowsAsync <KeyNotFoundException>(async() => await cache.GetValueAsync("asd").ConfigureAwait(false)); } testDir.Delete(true); }
public static void ContainsKey_WhenValueExpired_ReturnsFalse() { var testDirPath = Path.Combine(Environment.CurrentDirectory, "containskey_test"); var testDir = new DirectoryInfo(testDirPath); if (!testDir.Exists) { testDir.Create(); } var cachePolicy = new FixedTimespanCachePolicy <string>(TimeSpan.FromMilliseconds(1)); var input = new byte[] { 1, 2, 3, 4 }; const ulong size = 20; using (var cache = new DiskCache <string>(testDir, cachePolicy, size, TimeSpan.FromMilliseconds(20))) { cache.SetValue("asd", new MemoryStream(input)); Task.Delay(100).Wait(); Assert.IsFalse(cache.ContainsKey("asd")); } testDir.Delete(true); }
public static void GetExpiredEntries_GivenZeroSize_ThrowsArgOutOfRangeException() { var policy = new FixedTimespanCachePolicy <string>(TimeSpan.FromMilliseconds(1)); Assert.Throws <ArgumentOutOfRangeException>(() => policy.GetExpiredEntries(Enumerable.Empty <ICacheEntry <string> >(), 0)); }
public static void GetExpiredEntries_GivenNullEntries_ThrowsArgNullException() { var policy = new FixedTimespanCachePolicy <string>(TimeSpan.FromMilliseconds(1)); Assert.Throws <ArgumentNullException>(() => policy.GetExpiredEntries(null, 1)); }