async void GetCachedItemAsync_GetItemThatDoesHaveKeyAndIsIsSlidingExpired_SlidedExpirationUpdates(
            [Frozen] Mock <IReliableStateManagerReplica2> stateManager,
            [Frozen] Mock <IReliableDictionary <string, CachedItem> > cacheItemDict,
            [Frozen] Mock <IReliableDictionary <string, CacheStoreMetadata> > metadataDict,
            [Frozen] Mock <ISystemClock> systemClock,
            [Greedy] ServiceFabricDistributedCacheStoreService cacheStore)
        {
            var cacheValue  = Encoding.UTF8.GetBytes("someValue");
            var currentTime = new DateTime(2019, 2, 1, 1, 0, 0);

            systemClock.SetupGet(m => m.UtcNow).Returns(currentTime);

            SetupInMemoryStores(stateManager, cacheItemDict);
            SetupInMemoryStores(stateManager, metadataDict);

            await cacheStore.SetCachedItemAsync("mykey", cacheValue, TimeSpan.FromSeconds(10), null);

            systemClock.SetupGet(m => m.UtcNow).Returns(currentTime.AddSeconds(5));
            var resultAfter5Seconds = await cacheStore.GetCachedItemAsync("mykey");

            Assert.Equal(cacheValue, resultAfter5Seconds);
            systemClock.SetupGet(m => m.UtcNow).Returns(currentTime.AddSeconds(8));
            var resultAfter8Seconds = await cacheStore.GetCachedItemAsync("mykey");

            Assert.Equal(cacheValue, resultAfter8Seconds);
            systemClock.SetupGet(m => m.UtcNow).Returns(currentTime.AddSeconds(9));
            var resultAfter9Seconds = await cacheStore.GetCachedItemAsync("mykey");

            Assert.Equal(cacheValue, resultAfter9Seconds);
            systemClock.SetupGet(m => m.UtcNow).Returns(currentTime.AddSeconds(19));
            var resultAfter19Seconds = await cacheStore.GetCachedItemAsync("mykey");

            Assert.Null(resultAfter19Seconds);
        }
        async void GetCachedItemAsync_GetItemThatExistsWithAbsoluteExpiration_ItemIsMovedToLastItem(
            [Frozen] Mock <IReliableStateManagerReplica2> stateManager,
            [Frozen] Mock <IReliableDictionary <string, CachedItem> > cacheItemDict,
            [Frozen] Mock <IReliableDictionary <string, CacheStoreMetadata> > metadataDict,
            [Frozen] Mock <ISystemClock> systemClock,
            [Greedy] ServiceFabricDistributedCacheStoreService cacheStore)
        {
            var cacheValue  = Encoding.UTF8.GetBytes("someValue");
            var currentTime = new DateTime(2019, 2, 1, 1, 0, 0);
            var expireTime  = currentTime.AddSeconds(30);

            systemClock.SetupGet(m => m.UtcNow).Returns(currentTime);

            SetupInMemoryStores(stateManager, cacheItemDict);
            var metadata = SetupInMemoryStores(stateManager, metadataDict);

            await cacheStore.SetCachedItemAsync("mykey1", cacheValue, null, expireTime);

            await cacheStore.SetCachedItemAsync("mykey2", cacheValue, null, expireTime);

            await cacheStore.SetCachedItemAsync("mykey3", cacheValue, null, expireTime);

            Assert.Equal("mykey3", metadata["CacheStoreMetadata"].LastCacheKey);

            await cacheStore.GetCachedItemAsync("mykey2");

            Assert.Equal("mykey2", metadata["CacheStoreMetadata"].LastCacheKey);
        }
        async void GetCachedItemAsync_GetItemThatDoesNotExist_NullResultReturned(
            [Frozen] Mock <IReliableStateManagerReplica2> stateManager,
            [Frozen] Mock <IReliableDictionary <string, CachedItem> > cacheItemDict,
            [Frozen] Mock <IReliableDictionary <string, CacheStoreMetadata> > metadataDict,
            [Frozen] Mock <ISystemClock> systemClock,
            [Greedy] ServiceFabricDistributedCacheStoreService cacheStore)
        {
            var cacheValue  = Encoding.UTF8.GetBytes("someValue");
            var currentTime = new DateTime(2019, 2, 1, 1, 0, 0);
            var expireTime  = currentTime.AddSeconds(1);

            systemClock.SetupGet(m => m.UtcNow).Returns(currentTime);

            SetupInMemoryStores(stateManager, metadataDict);
            SetupInMemoryStores(stateManager, cacheItemDict);

            var result = await cacheStore.GetCachedItemAsync("keyThatDoesNotExist");

            Assert.Null(result);
        }