예제 #1
0
        public async Task LongRunningCacheTest_NoRefresh_InstantGet()
        {
            MemoryCacheWrapper     memoryCache      = new MemoryCacheWrapper(new MemoryCache(new MemoryCacheOptions()));
            Mock <IDatabaseCache>  databaseCache    = new Mock <IDatabaseCache>();
            LongRunningCache <int> longRunningCache = new LongRunningCache <int>(memoryCache, databaseCache.Object, TimeSpan.FromSeconds(2));

            Debug.WriteLine("Starting...");

            var result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.immediateValueGetter());

            Debug.WriteLine(result.State);
            Assert.IsTrue(result.State == CachedValueState.Updating);

            await Task.Delay(1000);

            result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.immediateValueGetter());

            Debug.WriteLine(result.State);
            Assert.IsTrue(result.State == CachedValueState.FoundAndNotUpdating);

            await Task.Delay(3000);

            result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.immediateValueGetter());

            Debug.WriteLine("#3: " + result.State);
            Assert.IsTrue(result.State == CachedValueState.Updating);

            result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.immediateValueGetter());

            await Task.Delay(500);

            Debug.WriteLine("#4: " + result.State);
            Assert.IsTrue(result.State == CachedValueState.FoundAndNotUpdating);
        }
예제 #2
0
        private void GetUserConnectionIdList_OnTryGetValueSuccess_ReturnsDictionary()
        {
            _memoryCache = MemoryCacheWrapper.GetMemoryCache(_dictionary, true);
            _service     = new MemoryAccess(_memoryCache);

            Dictionary <string, object> result = _service.GetUserConnectionIdList();

            Assert.Equal(_dictionary, result);
        }
예제 #3
0
        protected override void ConfigureTestServices(IServiceCollection services)
        {
            base.ConfigureTestServices(services);
            IMemoryCache memoryCache = new MemoryCache(Options.Create(new MemoryCacheOptions()));

            MemoryCacheWrapperFake = A.Fake <MemoryCacheWrapper>(opt => opt.WithArgumentsForConstructor(new object[] { memoryCache }).CallsBaseMethods());
            services.AddSingleton(_ => memoryCache);
            services.AddSingleton(_ => MemoryCacheWrapperFake);
        }
예제 #4
0
        private void GetUserConnectionIdList_OnTryGetValueFailed_ReturnsNewDictionary()
        {
            _memoryCache = MemoryCacheWrapper.GetMemoryCache(_dictionary, false);
            Dictionary <string, object> expected = new Dictionary <string, object>();

            _service = new MemoryAccess(_memoryCache);

            Dictionary <string, object> result = _service.GetUserConnectionIdList();

            Assert.Equal(expected, result);
        }
        public void CannotRetrieveCacheItemIfPolicyIsNotSet()
        {
            // arrange
            const string key = "test";
            var          sut = new MemoryCacheWrapper <int>();
            var          act = new Action(() => sut.GetAsync(key).Wait());

            // act
            // assert
            act.Should().Throw <InvalidOperationException>("Cache Policy has not been set");
        }
예제 #6
0
        private void GetGameList_OnTryGetValueSuccess_ReturnsDictionary()
        {
            _list = new List <GameStateModel> {
                new GameStateModel(), new GameStateModel()
            };
            _memoryCache = MemoryCacheWrapper.GetMemoryCache(_list, true);
            _service     = new MemoryAccess(_memoryCache);

            List <GameStateModel> result = _service.GetGameList();

            Assert.Equal(_list, result);
        }
예제 #7
0
        public async Task LongRunningCacheTest_WithRefresh_WaitingGet()
        {
            MemoryCacheWrapper     memoryCache      = new MemoryCacheWrapper(new MemoryCache(new MemoryCacheOptions()));
            Mock <IDatabaseCache>  databaseCache    = new Mock <IDatabaseCache>();
            LongRunningCache <int> longRunningCache = new LongRunningCache <int>(memoryCache, databaseCache.Object, TimeSpan.FromSeconds(6), TimeSpan.FromSeconds(3));

            DateTime startTime = DateTime.Now;

            Debug.WriteLine("Starting...");

            var result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.waitingValueGetter(500));

            Debug.WriteLine("0.00: " + result.State);
            Assert.IsTrue(result.State == CachedValueState.Updating);

            await Task.Delay(250);

            result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.waitingValueGetter(500));

            Debug.WriteLine((DateTime.Now - startTime).TotalMilliseconds + ": " + result.State);
            Assert.IsTrue(result.State == CachedValueState.Updating);

            await Task.Delay(1000);

            result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.waitingValueGetter(500));

            Debug.WriteLine((DateTime.Now - startTime).TotalMilliseconds + ": " + result.State);
            Assert.IsTrue(result.State == CachedValueState.FoundAndNotUpdating);

            await Task.Delay(3000);

            result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.waitingValueGetter(500));

            Debug.WriteLine((DateTime.Now - startTime).TotalMilliseconds + ": " + result.State);
            Assert.IsTrue(result.State == CachedValueState.FoundButUpdating);

            await Task.Delay(1000);

            result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.waitingValueGetter(500));

            Debug.WriteLine((DateTime.Now - startTime).TotalMilliseconds + ": " + result.State);
            Assert.IsTrue(result.State == CachedValueState.FoundAndNotUpdating);


            await Task.Delay(10000);

            result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.waitingValueGetter(500));

            Debug.WriteLine((DateTime.Now - startTime).TotalMilliseconds + ": " + result.State);
            Assert.IsTrue(result.State == CachedValueState.Updating);
        }
        public void CachePolicyCanOnlyBeSetOnce()
        {
            // arrange
            var sut = new MemoryCacheWrapper <int>
            {
                CachePolicy = new CacheItemPolicy()
            };

            var act = new Action(() => sut.CachePolicy = new CacheItemPolicy());

            // act
            // assert
            act.Should().Throw <InvalidOperationException>();
        }
예제 #9
0
        private void GetGameList_OnTryGetValueFailed_ReturnsNewDictionary()
        {
            _list = new List <GameStateModel> {
                new GameStateModel(), new GameStateModel()
            };
            _memoryCache = MemoryCacheWrapper.GetMemoryCache(_list, false);
            List <GameStateModel> expected = new List <GameStateModel>();

            _service = new MemoryAccess(_memoryCache);

            List <GameStateModel> result = _service.GetGameList();

            Assert.Equal(expected, result);
        }
        public void DataRetrievalFuncCanOnlyBeSetOnce()
        {
            // arrange
            var sut = new MemoryCacheWrapper <int>
            {
                DataRetrievalFunc = DataRetrievalFunc
            };

            var act = new Action(() => sut.DataRetrievalFunc = SecondRetrievalFunc);

            // act
            // assert
            act.Should().Throw <InvalidOperationException>();
        }
        public async Task CheckingIfCacheContainsKeyWhenTheCacheDoesNotContainTheItemReturnsFalse()
        {
            // arrange
            const string key              = "test";
            var          cacheItemDummy   = new CacheItemFixture();
            var          retrievalFixture = new RetrievalFixture <CacheItemFixture>(cacheItemDummy);
            var          sut              = new MemoryCacheWrapper <CacheItemFixture>
            {
                CachePolicy       = new CacheItemPolicy(),
                DataRetrievalFunc = retrievalFixture.DataRetrievalFunc
            };

            // act
            var result = await sut.ContainsKeyAsync(key);

            // assert
            result.Should().BeFalse();
        }
        public void AttemptToRemoveItemThatIsNotInTheCache()
        {
            // arrange
            const string key              = "test";
            const int    returnValue      = 12;
            var          retrievalFixture = new RetrievalFixture <int>(returnValue);
            var          sut              = new MemoryCacheWrapper <int>
            {
                CachePolicy       = new CacheItemPolicy(),
                DataRetrievalFunc = retrievalFixture.DataRetrievalFunc
            };

            // act
            var removed = sut.RemoveFromCacheAsync(key).Result;

            // assert
            removed.Should().BeFalse();
        }
        public void RetrievingItemFromTheCacheReturnsTheCorrectItem()
        {
            // arrange
            const string key              = "test";
            var          cacheItemDummy   = new CacheItemFixture();
            var          retrievalFixture = new RetrievalFixture <CacheItemFixture>(cacheItemDummy);
            var          sut              = new MemoryCacheWrapper <CacheItemFixture>
            {
                CachePolicy       = new CacheItemPolicy(),
                DataRetrievalFunc = retrievalFixture.DataRetrievalFunc
            };
            var firstRetrieval = sut.GetAsync(key).Result;

            // act
            var secondRetrieval = sut.GetAsync(key).Result;

            // assert
            firstRetrieval.Should().Be(secondRetrieval);
        }
        public void AddItemToTheCache()
        {
            // arrange
            const string key              = "test";
            const int    returnValue      = 12;
            var          retrievalFixture = new RetrievalFixture <int>(returnValue);
            var          sut              = new MemoryCacheWrapper <int>
            {
                CachePolicy       = new CacheItemPolicy(),
                DataRetrievalFunc = retrievalFixture.DataRetrievalFunc
            };

            // act
            var result = sut.GetAsync(key).Result;

            // assert
            sut.ItemsInCache.Should().Be(1);
            retrievalFixture.WasCalled.Should().BeTrue();
            result.Should().Be(returnValue);
        }
        public void MultipleRetrievalsOnlyHitTheRetrievalFuncitonOnce()
        {
            // arrange
            const string key              = "test";
            const int    returnValue      = 12;
            var          retrievalFixture = new RetrievalFixture <int>(returnValue);
            var          sut              = new MemoryCacheWrapper <int>
            {
                CachePolicy       = new CacheItemPolicy(),
                DataRetrievalFunc = retrievalFixture.DataRetrievalFunc
            };

            // act
            Parallel.For(0, 10, t =>
            {
                sut.GetAsync(key).Wait();
            });

            // assert
            retrievalFixture.CallCount.Should().Be(1);
        }
        public void RemoveItemFromCache()
        {
            // arrange
            const string key              = "test";
            const int    returnValue      = 12;
            var          retrievalFixture = new RetrievalFixture <int>(returnValue);
            var          sut              = new MemoryCacheWrapper <int>
            {
                CachePolicy       = new CacheItemPolicy(),
                DataRetrievalFunc = retrievalFixture.DataRetrievalFunc
            };

            sut.GetAsync(key).Wait();

            // act
            var removed = sut.RemoveFromCacheAsync(key).Result;

            // assert
            removed.Should().BeTrue();
            sut.ItemsInCache.Should().Be(0);
        }
예제 #17
0
        private void UpdateGame_OnDifferentGameIds_AddsOneGameToTheListAndReturnsGame()
        {
            _list = new List <GameStateModel> {
                new GameStateModel()
                {
                    GameId = 3
                }, new GameStateModel()
                {
                    GameId = 4
                }
            };
            _memoryCache = MemoryCacheWrapper.GetMemoryCache(_list, true);
            _service     = new MemoryAccess(_memoryCache);
            GameStateModel game = new GameStateModel()
            {
                GameId = 1,
                IsDeploymentAllowed = false,
                IsStartAllowed      = false,
                Players             = new Player[]
                {
                    new Player()
                    {
                        UserName = "******"
                    },
                    new Player()
                    {
                        UserName = "******"
                    }
                }
            };

            GameStateModel result = _service.UpdateGame(game);

            Assert.NotNull(result);
            Assert.Equal(3, _list.Count);
        }
예제 #18
0
 public FilmeController(MemoryCacheWrapper memoryCache, IOptions <SystemSettings> systemSettings, IFilmeServico filmeDominio)
 {
     _memoryCache    = memoryCache;
     _systemSettings = systemSettings.Value;
     _filmeServico   = filmeDominio;
 }
        public MemoryCacheWrapperTests()
        {
            _memoryCache = Substitute.For <IMemoryCache>();

            _sut = new MemoryCacheWrapper(_memoryCache);
        }