Exemplo n.º 1
0
        public async Task Should_Request_Again_For_Different_Contexts_Async()
        {
            RedisDatabase.ClearReceivedCalls();

            string cacheKey   = "Test";
            int    cacheValue = 1;

            int counter = 0;

            Task <MyCacheItem> GetCacheValue()
            {
                counter++;
                return(Task.FromResult(new MyCacheItem {
                    Value = cacheValue
                }));
            }

            RedisDatabase.StringSetAsync(Arg.Any <RedisKey>(), Arg.Any <RedisValue>(), Arg.Any <TimeSpan>()).Returns(true);

            var cachedObject = RedisSerializer.Serialize(new MyCacheItem {
                Value = cacheValue
            }, typeof(MyCacheItem));

            ChangeHttpContext();

            var item = await _perRequestRedisCache.GetAsync(cacheKey, GetCacheValue);

            await RedisDatabase.Received(1).StringGetAsync(Arg.Any <RedisKey>());

            await RedisDatabase.Received(1).StringSetAsync(Arg.Any <RedisKey>(), cachedObject, Arg.Any <TimeSpan>(), Arg.Any <When>(), Arg.Any <CommandFlags>());

            RedisDatabase.StringGetAsync(Arg.Any <RedisKey>()).Returns(Task.FromResult(cachedObject));

            ChangeHttpContext();
            var item1 = await _perRequestRedisCache.GetAsync(cacheKey, GetCacheValue);

            await RedisDatabase.Received(2).StringGetAsync(Arg.Any <RedisKey>());

            ChangeHttpContext();
            var item2 = await _perRequestRedisCache.GetAsync(cacheKey, GetCacheValue);

            await RedisDatabase.Received(3).StringGetAsync(Arg.Any <RedisKey>());

            //should still be one received calls
            await RedisDatabase.Received(1).StringSetAsync(Arg.Any <RedisKey>(), cachedObject, Arg.Any <TimeSpan>(), Arg.Any <When>(), Arg.Any <CommandFlags>());

            counter.ShouldBe(1);
            item.ShouldNotBe(null);
            item.Value.ShouldBe(cacheValue);
            item1.ShouldNotBe(null);
            item1.Value.ShouldBe(cacheValue);
            item2.ShouldNotBe(null);
            item2.Value.ShouldBe(cacheValue);
        }
Exemplo n.º 2
0
        public void Should_Not_Change_Normal_Redis_Cache()
        {
            RedisDatabase.ClearReceivedCalls();

            string cacheKey   = "Test";
            int    cacheValue = 1;

            int counter = 0;

            MyCacheItem GetCacheValue()
            {
                counter++;
                return(new MyCacheItem {
                    Value = cacheValue
                });
            }

            RedisDatabase.StringSet(Arg.Any <RedisKey>(), Arg.Any <RedisValue>(), Arg.Any <TimeSpan>()).Returns(true);

            var cachedObject = RedisSerializer.Serialize(new MyCacheItem {
                Value = cacheValue
            }, typeof(MyCacheItem));

            var item = _normalRedisCache.Get(cacheKey, GetCacheValue);

            RedisDatabase.Received(2).StringGet(Arg.Any <RedisKey>()); //redis cache tries to get value two times if value not exists see AbpCacheBase<TKey, TValue>.Get(TKey key, Func<TKey, TValue> factory)
            RedisDatabase.Received(1).StringSet(Arg.Any <RedisKey>(), cachedObject, Arg.Any <TimeSpan>(), Arg.Any <When>(), Arg.Any <CommandFlags>());

            RedisDatabase.StringGet(Arg.Any <RedisKey>()).Returns(cachedObject);

            var item1 = _normalRedisCache.Get(cacheKey, GetCacheValue);

            RedisDatabase.Received(3).StringGet(Arg.Any <RedisKey>());

            var item2 = _normalRedisCache.Get(cacheKey, GetCacheValue);

            RedisDatabase.Received(4).StringGet(Arg.Any <RedisKey>());

            //should still be one received calls
            RedisDatabase.Received(1).StringSet(Arg.Any <RedisKey>(), cachedObject, Arg.Any <TimeSpan>(), Arg.Any <When>(), Arg.Any <CommandFlags>());

            counter.ShouldBe(1);
            item.ShouldNotBe(null);
            item.Value.ShouldBe(cacheValue);
            item1.ShouldNotBe(null);
            item1.Value.ShouldBe(cacheValue);
            item2.ShouldNotBe(null);
            item2.Value.ShouldBe(cacheValue);

            _normalRedisCache.GetOrDefault(cacheKey).Value.ShouldBe(cacheValue);
        }
Exemplo n.º 3
0
        public void Should_Work_With_Null_Contexts()
        {
            CurrentHttpContext = null;
            RedisDatabase.ClearReceivedCalls();

            string cacheKey   = "Test";
            int    cacheValue = 1;

            int counter = 0;

            MyCacheItem GetCacheValue()
            {
                counter++;
                return(new MyCacheItem {
                    Value = cacheValue
                });
            }

            RedisDatabase.StringSet(Arg.Any <RedisKey>(), Arg.Any <RedisValue>(), Arg.Any <TimeSpan>()).Returns(true);

            var cachedObject = RedisSerializer.Serialize(new MyCacheItem {
                Value = cacheValue
            }, typeof(MyCacheItem));

            var item = _perRequestRedisCache.Get(cacheKey, GetCacheValue);

            RedisDatabase.Received(2).StringGet(Arg.Any <RedisKey>());
            RedisDatabase.Received(1).StringSet(Arg.Any <RedisKey>(), cachedObject, Arg.Any <TimeSpan>(), Arg.Any <When>(), Arg.Any <CommandFlags>());

            RedisDatabase.StringGet(Arg.Any <RedisKey>()).Returns(cachedObject);

            var item1 = _perRequestRedisCache.Get(cacheKey, GetCacheValue);

            RedisDatabase.Received(3).StringGet(Arg.Any <RedisKey>());      //since _currentHttpContext is null it should go to the redisdb again

            var item2 = _perRequestRedisCache.Get(cacheKey, GetCacheValue); //since _currentHttpContext is null it should go to the redisdb again

            RedisDatabase.Received(4).StringGet(Arg.Any <RedisKey>());

            //should still be one received calls
            RedisDatabase.Received(1).StringSet(Arg.Any <RedisKey>(), cachedObject, Arg.Any <TimeSpan>(), Arg.Any <When>(), Arg.Any <CommandFlags>());

            counter.ShouldBe(1);
            item.ShouldNotBe(null);
            item.Value.ShouldBe(cacheValue);
            item1.ShouldNotBe(null);
            item1.Value.ShouldBe(cacheValue);
            item2.ShouldNotBe(null);
            item2.Value.ShouldBe(cacheValue);
        }
Exemplo n.º 4
0
        public async Task Should_Request_Once_For_Same_Context_Async()
        {
            RedisDatabase.ClearReceivedCalls();

            string cacheKey   = "Test";
            int    cacheValue = 1;

            int counter = 0;

            Task <MyCacheItem> GetCacheValue()
            {
                counter++;
                return(Task.FromResult(new MyCacheItem {
                    Value = cacheValue
                }));
            }

            var item = await _perRequestRedisCache.GetAsync(cacheKey, GetCacheValue);

            var item1 = await _perRequestRedisCache.GetAsync(cacheKey, GetCacheValue);

            var item2 = await _perRequestRedisCache.GetAsync(cacheKey, GetCacheValue);

            counter.ShouldBe(1);
            item.ShouldNotBe(null);
            item.Value.ShouldBe(cacheValue);
            item1.ShouldNotBe(null);
            item1.Value.ShouldBe(cacheValue);
            item2.ShouldNotBe(null);
            item2.Value.ShouldBe(cacheValue);

            await RedisDatabase.Received(1).StringGetAsync(Arg.Any <RedisKey>());

            var cachedObject = RedisSerializer.Serialize(new MyCacheItem {
                Value = cacheValue
            }, typeof(MyCacheItem));
            await RedisDatabase.Received(1).StringSetAsync(Arg.Any <RedisKey>(), cachedObject, Arg.Any <TimeSpan>(), Arg.Any <When>(), Arg.Any <CommandFlags>());

            (await _perRequestRedisCache.GetOrDefaultAsync(cacheKey)).Value.ShouldBe(cacheValue);
        }
Exemplo n.º 5
0
        public void Should_Request_Once_For_Same_Context()
        {
            RedisDatabase.ClearReceivedCalls();

            string cacheKey   = "Test";
            int    cacheValue = 1;

            int counter = 0;

            MyCacheItem GetCacheValue()
            {
                counter++;
                return(new MyCacheItem {
                    Value = cacheValue
                });
            }

            var item  = _perRequestRedisCache.Get(cacheKey, GetCacheValue);
            var item1 = _perRequestRedisCache.Get(cacheKey, GetCacheValue);
            var item2 = _perRequestRedisCache.Get(cacheKey, GetCacheValue);

            counter.ShouldBe(1);
            item.ShouldNotBe(null);
            item.Value.ShouldBe(cacheValue);
            item1.ShouldNotBe(null);
            item1.Value.ShouldBe(cacheValue);
            item2.ShouldNotBe(null);
            item2.Value.ShouldBe(cacheValue);

            RedisDatabase.Received(1).StringGet(Arg.Any <RedisKey>());

            var cachedObject = RedisSerializer.Serialize(new MyCacheItem {
                Value = cacheValue
            }, typeof(MyCacheItem));

            RedisDatabase.Received(1).StringSet(Arg.Any <RedisKey>(), cachedObject, Arg.Any <TimeSpan>(), Arg.Any <When>(), Arg.Any <CommandFlags>());

            _perRequestRedisCache.GetOrDefault(cacheKey).Value.ShouldBe(cacheValue);
        }