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(); }
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(); }
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); }