public async Task SelfRefreshingCacheItemsPropertyShouldReturnListOfItemsInCache() { var _cache = new SelfRefreshingCache <int, string>( new SelfRefreshingCacheOptions { RefreshInterval = TimeSpan.FromMilliseconds(50), StandardCacheOptions = new CacheOptions { CacheItemExpiry = TimeSpan.FromMinutes(1), FlushInterval = TimeSpan.FromMilliseconds(50), MaximumCacheSizeIndicator = 99 } }, IntLoaderFunc); Parallel.For(0, 5, (i) => { _cache.GetOrLoadAsync(i).Wait(); Thread.Sleep(1); }); _cache.Count.Should().Be(5); _cache.Items.Should().NotBeNull(); _cache.Items.Count().Should().Be(5); _cache.TryAdd(6, "6"); _cache.Items.Should().NotBeNull(); _cache.Items.Count().Should().Be(6); await Task.Yield(); }
public async Task SelfRefreshingCacheEntriesTryAddToCacheShouldIncreaseItemsInList() { var _cache = new SelfRefreshingCache <int, string>( new SelfRefreshingCacheOptions { RefreshInterval = TimeSpan.FromMilliseconds(5), StandardCacheOptions = new CacheOptions { CacheItemExpiry = TimeSpan.FromMinutes(1), FlushInterval = TimeSpan.FromMilliseconds(50), MaximumCacheSizeIndicator = 99 } }, IntLoaderFunc); for (int i = 0; i < 5; i++) { _cache.GetOrLoadAsync(i).Wait(); } _cache.Count.Should().Be(5); _cache.TryAdd(6, "6"); _cache.Count.Should().Be(6); await Task.Yield(); }
public void WithErrorNotReloadTest() { using var cache = new SelfRefreshingCache <string>(_logger, 5, 10, GetSomeValue2); var data = cache.GetOrCreate(); var data2 = cache.GetOrCreate(); Thread.Sleep(TimeSpan.FromSeconds(60)); Assert.Throws <System.Exception>(() => cache.GetOrCreate()); Assert.Equal(data, data2); Log.Debug("********************************"); }
public async Task Test() { var cache = new SelfRefreshingCache <int>(new ConsoleLogger(), 2, 10, Get); var item = await cache.GetOrCreate(); Thread.Sleep(TimeSpan.FromSeconds(5)); cache.Stop(); Thread.Sleep(TimeSpan.FromSeconds(5)); item = await cache.GetOrCreate(); Thread.Sleep(TimeSpan.FromSeconds(5)); return; }
public void WithErrorReloadSuccessTest() { using var cache = new SelfRefreshingCache <string>(_logger, 5, 10, GetSomeValue); var data = cache.GetOrCreate(); var data2 = cache.GetOrCreate(); Thread.Sleep(TimeSpan.FromSeconds(40)); var data3 = cache.GetOrCreate(); Assert.Equal(data, data2); Assert.NotEqual(data, data3); Log.Debug("********************************"); }
public void SimpleTest() { using var cache = new SelfRefreshingCache <long>(_logger, 5, 10, () => DateTime.Now.Ticks); var data = cache.GetOrCreate(); var data2 = cache.GetOrCreate(); Thread.Sleep(TimeSpan.FromSeconds(40)); var data3 = cache.GetOrCreate(); Assert.Equal(data, data2); Assert.NotEqual(data, data3); Log.Debug("********************************"); }
public async Task SelfrefreshingCacheShouldPurgedMoreRecentlyAccessedEntriesLastWhileRefreshing() { int refreshMs = 50; var _cache = new SelfRefreshingCache <int, string>( new SelfRefreshingCacheOptions { RefreshInterval = TimeSpan.FromMilliseconds(refreshMs), StandardCacheOptions = new CacheOptions { CacheItemExpiry = TimeSpan.FromMinutes(1), FlushInterval = TimeSpan.FromHours(1), MaximumCacheSizeIndicator = 90 } }, IntLoaderFunc); for (int i = 1; i <= 199; i++) { await _cache.GetOrLoadAsync(i); } _cache.Count.Should().Be(199); Thread.Sleep(10); // Refresh the access of key 100 to 190. (these should be the surviving 90 keys) for (int i = 100; i <= 190; i++) { await _cache.GetOrLoadAsync(i); } // Wait for refresh timer to refresh keys to the new generation Thread.Sleep(refreshMs + 20); _cache.Count.Should().Be(90); foreach (var item in _cache.Items.Reverse()) { item.Key.Should().BeGreaterOrEqualTo(100); item.Key.Should().BeLessOrEqualTo(190); } }
public async Task SelfRefreshingCacheEntriesExceedingMaxShouldBeAutoFlushedOnRefreshEvenIfNotStale() { var _cache = new SelfRefreshingCache <int, string>( new SelfRefreshingCacheOptions { RefreshInterval = TimeSpan.FromMilliseconds(600), StandardCacheOptions = new CacheOptions { CacheItemExpiry = TimeSpan.FromMinutes(1), FlushInterval = TimeSpan.FromMilliseconds(50000), MaximumCacheSizeIndicator = 99 } }, IntLoaderFunc); for (int i = 0; i < 200; i++) { await _cache.GetOrLoadAsync(i); } _cache.Count.Should().Be(200); Thread.Sleep(700); _cache.Count.Should().Be(99); }