Exemplo n.º 1
0
        private void InitializeFakeRepository()
        {
            // create rules
            var ruleUS = new RegionRule("US", RateLimitType.RequestsPerTimespan, RateLimitLevel.Default);
            var ruleEU = new RegionRule("EU", RateLimitType.TimespanPassedSinceLastCall, RateLimitLevel.Default);

            this.AddRegionRule(ruleUS);
            this.AddRegionRule(ruleEU);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Удаляет из цели правило выбора географического региона
        /// </summary>
        /// <param name="target">Цель геолокации</param>
        /// <param name="region">Географический регион</param>
        public void RemoveRegionFromTarget(Target target, Region region)
        {
            RegionRule rule = RegionRuleRepository.FindByTargetAndRegion(target, region);

            if (rule != null)
            {
                RegionRuleRepository.Delete(rule);
            }
        }
Exemplo n.º 3
0
        public void Evaluate_GetsExpectedConfigSettings_ForGlobalResourceRule()
        {
            // arrange
            var resource = "/api/resource1";
            var serverIP = "172.39.67.32";

            var resourceRule = new ResourceRule("/api/resource1 : all regions : requests per timespan : default settings",
                                                resource,
                                                Region.All,
                                                RateLimitType.RequestsPerTimespan,
                                                RateLimitLevel.Default);

            var regionRule = new RegionRule("US",
                                            RateLimitType.TimespanPassedSinceLastCall,
                                            RateLimitLevel.Low);

            var expected = new RateLimitSettingsConfig();

            expected[RateLimitType.RequestsPerTimespan] = new TokenBucketSettings()
            {
                MaxAmount    = 5,
                RefillAmount = 5,
                RefillTime   = 60
            };

            var expectedSettings = (TokenBucketSettings)expected[RateLimitType.RequestsPerTimespan];

            var fakeRepository = Substitute.For <IRuleRepository>();
            var fakeCache      = Substitute.For <IRuleCache>();

            fakeCache["/api/resource1All"].Returns(resourceRule);
            fakeCache["US"].Returns(regionRule);

            var rulesEngine = new RulesEngine(fakeRepository, fakeCache);

            // act
            var result         = rulesEngine.Evaluate(resource, serverIP);
            var resultSettings = (TokenBucketSettings)result[RateLimitType.RequestsPerTimespan];

            // assert
            Assert.AreEqual(resultSettings.MaxAmount, expectedSettings.MaxAmount);
            Assert.AreEqual(resultSettings.RefillAmount, expectedSettings.RefillAmount);
            Assert.AreEqual(resultSettings.RefillTime, expectedSettings.RefillTime);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Добавляет к цели правило выбора географического региона
        /// </summary>
        /// <param name="target">Цель геолокации</param>
        /// <param name="region">Географический регион</param>
        /// <param name="kind">Вид правила включения</param>
        public void AddRegionToTarget(Target target, Region region, RuleKind kind)
        {
            RegionRule rule = RegionRuleRepository.FindByTargetAndRegion(target, region);

            if (rule == null)
            {
                rule = new RegionRule()
                {
                    TargetId = target.Id,
                    RegionId = region.Id,
                    Kind     = kind
                };

                RegionRuleRepository.Create(rule);
            }
            else if (rule.Kind != kind)
            {
                rule.Kind = kind;
                RegionRuleRepository.Save(rule);
            }
        }
Exemplo n.º 5
0
 public void UpdateRegionRule(RegionRule rule)
 {
 }
Exemplo n.º 6
0
 public void AddRegionRule(RegionRule rule)
 {
     this.ruleRepository.AddRegionRule(rule);
 }
Exemplo n.º 7
0
 public void AddRegionRule(RegionRule rule)
 {
 }
Exemplo n.º 8
0
 public void UpdateRegionRule(RegionRule rule)
 {
     this.regionRules[rule.Id] = rule;
 }
Exemplo n.º 9
0
 public void AddRegionRule(RegionRule rule)
 {
     this.regionRules.Add(this.regionRules.Count + 1, rule);
 }