示例#1
0
        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);
            });
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        public static void GetExpiredEntries_GivenZeroSize_ThrowsArgOutOfRangeException()
        {
            var policy = new FixedTimespanCachePolicy <string>(TimeSpan.FromMilliseconds(1));

            Assert.Throws <ArgumentOutOfRangeException>(() => policy.GetExpiredEntries(Enumerable.Empty <ICacheEntry <string> >(), 0));
        }
示例#9
0
        public static void GetExpiredEntries_GivenNullEntries_ThrowsArgNullException()
        {
            var policy = new FixedTimespanCachePolicy <string>(TimeSpan.FromMilliseconds(1));

            Assert.Throws <ArgumentNullException>(() => policy.GetExpiredEntries(null, 1));
        }