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); }
/// <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); } }
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); }
/// <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); } }
public void UpdateRegionRule(RegionRule rule) { }
public void AddRegionRule(RegionRule rule) { this.ruleRepository.AddRegionRule(rule); }
public void AddRegionRule(RegionRule rule) { }
public void UpdateRegionRule(RegionRule rule) { this.regionRules[rule.Id] = rule; }
public void AddRegionRule(RegionRule rule) { this.regionRules.Add(this.regionRules.Count + 1, rule); }