public void Set_ExcessiveMemDurationCappedAtHalf_OK() { // arrange const string encoded = "\"blob\""; var expectedBytes = Encoding.UTF8.GetBytes(encoded); var cache = new Mock <IDistributedCache>(); var memory = new Mock <IMemoryCache>(); var entry = new Mock <ICacheEntry>(); memory.Setup(m => m.CreateEntry(It.IsAny <object>())).Returns(entry.Object); var svc = new DualLayerCacheService(cache.Object, memory.Object, new NullLogger <DualLayerCacheService>(), new OptionsWrapper <CacheSettings>(new CacheSettings { DefaultMemoryExpirySeconds = 60 * 60 * 24 })); // act var obj = "blob"; var _ = svc.Set("test", opts => { opts.AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(12); return(obj); }); // assert cache.Verify(m => m.Set("test", It.Is <byte[]>(x => x.SequenceEqual(expectedBytes)), It.IsAny <DistributedCacheEntryOptions>())); cache.VerifyNoOtherCalls(); entry.VerifySet(m => m.Value = obj); entry.VerifySet(m => m.AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(6)); entry.Verify(m => m.Dispose()); entry.VerifyNoOtherCalls(); memory.Verify(m => m.CreateEntry("test")); memory.VerifyNoOtherCalls(); }
public void Set_OK() { // arrange const string encoded = "\"blob\""; var expectedBytes = Encoding.UTF8.GetBytes(encoded); var cache = new Mock <IDistributedCache>(); var memory = new Mock <IMemoryCache>(); var entry = new Mock <ICacheEntry>(); memory.Setup(m => m.CreateEntry(It.IsAny <object>())).Returns(entry.Object); var svc = new DualLayerCacheService(cache.Object, memory.Object, new NullLogger <DualLayerCacheService>(), _opts); // act const string obj = "blob"; var _ = svc.Set("test", _ => obj); // assert cache.Verify(m => m.Set("test", It.Is <byte[]>(x => x.SequenceEqual(expectedBytes)), It.IsAny <DistributedCacheEntryOptions>())); cache.VerifyNoOtherCalls(); entry.VerifySet(m => m.Value = obj); entry.VerifySet(m => m.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(_opts.Value.DefaultMemoryExpirySeconds)); entry.Verify(m => m.Dispose()); entry.VerifyNoOtherCalls(); memory.Verify(m => m.CreateEntry("test")); memory.VerifyNoOtherCalls(); }