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