Example #1
0
        private static CacheItemPolicy GetCacheItemPolicy(
            CacherItemPolicy cacherItemPolicy
            )
        {
            if (cacherItemPolicy == null)
            {
                throw new ArgumentNullException("cacherItemPolicy");
            }

            CacheItemPolicy policy;

            if (cacherItemPolicy.PolicyType == CacherItemPolicyType.Absolute)
            {
                policy = new CacheItemPolicy
                {
                    AbsoluteExpiration = DateTimeOffset.UtcNow.AddSeconds(cacherItemPolicy.KeepAlive)
                };
            }
            else if (cacherItemPolicy.PolicyType == CacherItemPolicyType.Sliding)
            {
                policy = new CacheItemPolicy
                {
                    SlidingExpiration = TimeSpan.FromSeconds(cacherItemPolicy.KeepAlive)
                };
            }
            else
            {
                throw new NotImplementedException("Given CacherItemPolicyType is not implemented.");
            }

            return(policy);
        }
        public void ClearWhenCacheNotEmptyByRegionExpectResult()
        {
            //
            //  arrange
            //

            var mockJsonConverter = new Mock <IJsonConverter>(MockBehavior.Strict);

            mockJsonConverter.Setup(m => m.Serialize("bar1")).Returns("bar1").Verifiable();
            mockJsonConverter.Setup(m => m.Serialize("bar2")).Returns("bar2").Verifiable();
            mockJsonConverter.Setup(m => m.Serialize("bar3")).Returns("bar3").Verifiable();

            var mockCacheItemPolicy = new CacherItemPolicy(keepAlive: 30, policyType: CacherItemPolicyType.Sliding);

            ICacher cacher = new DotNetMemoryCacher(
                jsonConverter: mockJsonConverter.Object,
                regionName: "ClearWhenCacheNotEmptyByRegionExpectResult"
                );

            //
            // assert pre-conditions
            //

            cacher.Set(
                cacheItemKey: "foo1",
                cacheItem: "bar1",
                cacheItemPolicy: mockCacheItemPolicy
                );
            cacher.Set(
                cacheItemKey: "foo2",
                cacheItem: "bar2",
                cacheItemPolicy: mockCacheItemPolicy
                );
            cacher.Set(
                cacheItemKey: "foo3",
                cacheItem: "bar3",
                cacheItemPolicy: mockCacheItemPolicy
                );

            Assert.IsNotNull(cacher.GetKeys());
            Assert.AreEqual(expected: 3, actual: cacher.GetKeys().Length);

            //
            //  assert expected conditions
            //

            cacher.Clear();

            Assert.IsNotNull(cacher.GetKeys());
            Assert.AreEqual(expected: 0, actual: cacher.GetKeys().Length);

            //
            //  verify dependents
            //

            mockJsonConverter.Verify();
        }
        public void SetWhenCacheUpdateByRegionExpectResult()
        {
            //
            //  arrange
            //

            var mockJsonConverter = new Mock <IJsonConverter>(MockBehavior.Strict);

            mockJsonConverter.Setup(m => m.Serialize("bar")).Returns("bar").Verifiable();
            mockJsonConverter.Setup(m => m.Serialize("baz")).Returns("baz").Verifiable();
            mockJsonConverter.Setup(m => m.Deserialize <string>("baz")).Returns("baz").Verifiable();

            var mockCacheItemPolicy = new CacherItemPolicy(keepAlive: 30, policyType: CacherItemPolicyType.Sliding);

            ICacher cacher = new DotNetMemoryCacher(
                jsonConverter: mockJsonConverter.Object,
                regionName: "SetWhenCacheUpdateByRegionExpectResult"
                );

            //
            // assert pre-conditions
            //

            cacher.GetOrSet(
                cacheItemKey: "foo",
                getCacheItemFunc: () => { return("bar"); },
                cacheItemPolicy: mockCacheItemPolicy
                );

            Assert.IsNotNull(cacher.GetKeys());
            Assert.AreEqual(expected: 1, actual: cacher.GetKeys().Length);

            //
            //  assert
            //

            cacher.Set(
                cacheItemKey: "foo",
                cacheItem: "baz",
                cacheItemPolicy: mockCacheItemPolicy
                );

            string actual = cacher.Get <string>(
                cacheItemKey: "foo"
                );

            Assert.IsNotNull(actual);
            Assert.AreEqual(expected: "baz", actual: actual);

            //
            //  verify dependents
            //

            mockJsonConverter.Verify();
        }
        public void GetWhenCacheExpiredByRegionExpectResult()
        {
            const int mockCacheTimeSpanIntervalOverride = 3;

            //
            //  arrange
            //

            var mockJsonConverter = new Mock <IJsonConverter>(MockBehavior.Strict);

            mockJsonConverter.Setup(m => m.Serialize("bar")).Returns("bar").Verifiable();
            mockJsonConverter.Setup(m => m.Deserialize <string>("bar")).Returns("bar").Verifiable();

            var mockCacheItemPolicy = new CacherItemPolicy(keepAlive: mockCacheTimeSpanIntervalOverride, policyType: CacherItemPolicyType.Sliding);

            ICacher cacher = new DotNetMemoryCacher(
                jsonConverter: mockJsonConverter.Object,
                regionName: "GetWhenCacheExpiredByRegionExpectResult"
                );

            //
            // assert pre-conditions
            //

            cacher.GetOrSet(
                cacheItemKey: "foo",
                cacheItemPolicy: mockCacheItemPolicy,
                getCacheItemFunc: () => { return("bar"); }
                );
            var lookup = cacher.Get <string>("foo");

            Assert.IsNotNull(lookup);
            Assert.AreEqual(expected: "bar", actual: lookup);

            // wait for the cache item to expire
            System.Threading.Thread.Sleep(mockCacheTimeSpanIntervalOverride * 1000);

            //
            //  assert
            //

            var actual = cacher.ContainsKey("foo");

            Assert.IsNotNull(actual);
            Assert.IsFalse(actual);

            //
            //  verify dependents
            //

            mockJsonConverter.Verify();
        }
Example #5
0
        public T GetOrSet <T>(string cacheItemKey, CacherItemPolicy cacheItemPolicy, Func <T> getCacheItemFunc)
        {
            if (ContainsKey(cacheItemKey: cacheItemKey))
            {
                return(Get <T>(cacheItemKey: cacheItemKey));
            }

            var cacheItem = getCacheItemFunc.Invoke();

            return(Set(
                       cacheItemKey: cacheItemKey,
                       cacheItemPolicy: cacheItemPolicy,
                       cacheItem: cacheItem
                       ));
        }
        public void SetWhenCacheNonEmptyRemoveByBoundKeyExpectResult()
        {
            //
            //  arrange
            //

            var mockJsonConverter = new Mock <IJsonConverter>(MockBehavior.Strict);

            mockJsonConverter.Setup(m => m.Serialize("bar")).Returns("bar").Verifiable();

            var mockCacheItemPolicy = new CacherItemPolicy(keepAlive: 30, policyType: CacherItemPolicyType.Sliding);

            ICacher cacher = new DotNetMemoryCacher(
                jsonConverter: mockJsonConverter.Object,
                regionName: "SetWhenCacheNonEmptyRemoveByBoundKeyExpectResult"
                );

            //
            // assert pre-conditions
            //

            cacher.Set(
                cacheItemKey: "foo",
                cacheItem: "bar",
                cacheItemPolicy: mockCacheItemPolicy
                );

            Assert.IsNotNull(cacher.GetKeys());
            Assert.AreEqual(expected: 1, actual: cacher.GetKeys().Length);

            //
            //  assert
            //

            bool actual = cacher.Remove(
                cacheItemKey: "foo"
                );

            Assert.IsNotNull(actual);
            Assert.IsTrue(actual);

            //
            //  verify dependents
            //

            mockJsonConverter.Verify();
        }
        public void ContainsKeyWhenCacheItemNotExistsByRegionExpectFalse()
        {
            //
            //  arrange
            //

            var mockJsonConverter = new Mock <IJsonConverter>(MockBehavior.Strict);

            mockJsonConverter.Setup(m => m.Serialize("bar")).Returns("bar").Verifiable();

            var mockCacheItemPolicy = new CacherItemPolicy(keepAlive: 30, policyType: CacherItemPolicyType.Sliding);

            ICacher cacher = new DotNetMemoryCacher(
                jsonConverter: mockJsonConverter.Object,
                regionName: "ContainsKeyWhenCacheItemNotExistsByRegionExpectFalse"
                );

            //
            // assert pre-conditions
            //

            cacher.Set(
                cacheItemKey: "foo",
                cacheItem: "bar",
                cacheItemPolicy: mockCacheItemPolicy
                );

            Assert.IsNotNull(cacher.GetKeys());
            Assert.AreEqual(expected: 1, actual: cacher.GetKeys().Length);

            //
            //  assert
            //

            var actual = cacher.ContainsKey("f00");

            Assert.IsNotNull(actual);
            Assert.IsFalse(actual);

            //
            //  verify dependents
            //

            mockJsonConverter.Verify();
        }
Example #8
0
        public T Set <T>(string cacheItemKey, CacherItemPolicy cacheItemPolicy, T cacheItem)
        {
            var regionKey = GetRegionKeyCore(
                cacheItemKey: cacheItemKey,
                regionName: _regionName
                );
            var putCacheItem = _jsonConverter.Serialize(
                value: cacheItem
                );
            var putCacheItemPolicy = GetCacheItemPolicy(cacheItemPolicy);

            lock (this)
            {
                SetCore(
                    regionKey: regionKey,
                    cacheItem: putCacheItem,
                    cacheItemPolicy: putCacheItemPolicy
                    );
            }

            return(cacheItem);
        }