示例#1
0
        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();
        }
示例#2
0
        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("********************************");
        }
示例#4
0
        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("********************************");
        }
示例#7
0
        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);
            }
        }
示例#8
0
        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);
        }