public async Task Cache_Should_Invalidator_WhenFeatureChanged()
        {
            // Arrange cache feature.
            (await _featureManagementStore.GetOrNullAsync(
                 TestFeatureDefinitionProvider.SocialLogins,
                 EditionFeatureValueProvider.ProviderName,
                 TestEditionIds.Regular.ToString()
                 ).ConfigureAwait(false)
            ).ShouldNotBeNull();

            var feature = await _featureValueRepository.FindAsync(
                TestFeatureDefinitionProvider.SocialLogins,
                EditionFeatureValueProvider.ProviderName,
                TestEditionIds.Regular.ToString()
                ).ConfigureAwait(false);

            // Act
            await _featureValueRepository.DeleteAsync(feature).ConfigureAwait(false);

            // Assert
            (await _cache.GetAsync(
                 FeatureValueCacheItem.CalculateCacheKey(
                     TestFeatureDefinitionProvider.SocialLogins,
                     EditionFeatureValueProvider.ProviderName,
                     TestEditionIds.Regular.ToString()
                     )
                 ).ConfigureAwait(false)
            ).ShouldBeNull();
        }
示例#2
0
        private async Task SetCacheItemsAsync(
            string providerName,
            string providerKey,
            string currentName,
            FeatureValueCacheItem currentCacheItem)
        {
            var featureDefinitions = FeatureDefinitionManager.GetAll();
            var featuresDictionary = (await FeatureValueRepository.GetListAsync(providerName, providerKey))
                                     .ToDictionary(s => s.Name, s => s.Value);

            var cacheItems = new List <KeyValuePair <string, FeatureValueCacheItem> >();

            foreach (var featureDefinition in featureDefinitions)
            {
                var featureValue = featuresDictionary.GetOrDefault(featureDefinition.Name);

                cacheItems.Add(
                    new KeyValuePair <string, FeatureValueCacheItem>(
                        CalculateCacheKey(featureDefinition.Name, providerName, providerKey),
                        new FeatureValueCacheItem(featureValue)
                        )
                    );

                if (featureDefinition.Name == currentName)
                {
                    currentCacheItem.Value = featureValue;
                }
            }

            await Cache.SetManyAsync(cacheItems);
        }
示例#3
0
        protected virtual async Task <FeatureValueCacheItem> GetCacheItemAsync(string name, string providerName, string providerKey)
        {
            var cacheKey  = CalculateCacheKey(name, providerName, providerKey);
            var cacheItem = await Cache.GetAsync(cacheKey);

            if (cacheItem != null)
            {
                return(cacheItem);
            }

            cacheItem = new FeatureValueCacheItem(null);

            await SetCacheItemsAsync(providerName, providerKey, name, cacheItem);

            return(cacheItem);
        }
        protected virtual async Task <FeatureValueCacheItem> GetCacheItemAsync(string name, string providerName, string providerKey)
        {
            var cacheKey  = CalculateCacheKey(name, providerName, providerKey);
            var cacheItem = await Cache.GetAsync(cacheKey);

            if (cacheItem != null)
            {
                return(cacheItem);
            }

            var featureValue = await FeatureValueRepository.FindAsync(name, providerName, providerKey);

            cacheItem = new FeatureValueCacheItem(featureValue?.Value);

            await Cache.SetAsync(
                cacheKey,
                cacheItem
                );

            return(cacheItem);
        }
示例#5
0
        public async Task Cache_Should_Invalidator_WhenSettingChanged_Between_Tenant_And_Host()
        {
            var tenantId = Guid.NewGuid();

            using (_currentTenant.Change(tenantId))
            {
                // Arrange cache feature.
                (await _featureManagementStore.GetOrNullAsync(
                     TestFeatureDefinitionProvider.SocialLogins,
                     EditionFeatureValueProvider.ProviderName,
                     TestEditionIds.Regular.ToString()
                     )
                ).ShouldNotBeNull();
            }

            using (_currentTenant.Change(null))
            {
                await _featureManagementStore.SetAsync(TestFeatureDefinitionProvider.SocialLogins,
                                                       false.ToString(),
                                                       EditionFeatureValueProvider.ProviderName,
                                                       TestEditionIds.Regular.ToString());
            }

            using (_currentTenant.Change(tenantId))
            {
                // Arrange cache feature.
                (await _cache.GetAsync(
                     FeatureValueCacheItem.CalculateCacheKey(
                         TestFeatureDefinitionProvider.SocialLogins,
                         EditionFeatureValueProvider.ProviderName,
                         TestEditionIds.Regular.ToString()
                         )
                     )
                ).ShouldBeNull();
            }
        }
 protected virtual string CalculateCacheKey(string name, string providerName, string providerKey)
 {
     return(FeatureValueCacheItem.CalculateCacheKey(name, providerName, providerKey));
 }