public void TestMerge() // Test statefule attributes of already present rule in cache is carried to new rules. { RuleCache ruleCache = new RuleCache(); List <SamplingRule> newRules = new List <SamplingRule>(); SamplingRule rule1 = GetSamplingRule("a", 2); Statistics expectedStatistic = new Statistics(2, 1, 1); rule1.Statistics = expectedStatistic; SamplingRule rule2 = GetSamplingRule("b", 1); newRules.Add(rule1); newRules.Add(rule2); ruleCache.LoadRules(newRules); IList <SamplingRule> rulesInCache = ruleCache.GetRules(); Assert.AreEqual(2, rulesInCache.Count); Assert.AreEqual(rule2.RuleName, rulesInCache[0].RuleName); Assert.AreEqual(rule1.RuleName, rulesInCache[1].RuleName); // Load Targets DateTime dateTime = TimeStamp.CurrentDateTime(); TimeStamp currentTime = new TimeStamp(dateTime); Target t1 = new Target("a", 0.9, 10, dateTime, 10); Target t2 = new Target("b", 0.5, 10, dateTime, 10); List <Target> newTargets = new List <Target>(); newTargets.Add(t1); newTargets.Add(t2); ruleCache.LoadTargets(newTargets); rulesInCache = ruleCache.GetRules(); rule1 = GetSamplingRule("a", 1); newRules = new List <SamplingRule>(); newRules.Add(rule1); ruleCache.LoadRules(newRules); // In the next iteration, rule a with update prioirty and rule b is deleted. rulesInCache = ruleCache.GetRules(); Assert.AreEqual(1, rulesInCache.Count); // only one rule should be present and statefule info should be carried from old rule Assert.AreEqual(1, rulesInCache[0].Priority); // implies new rule is added to cache Reservoir actualReservoir1 = rulesInCache[0].Reservoir; Assert.AreEqual(currentTime.Time, actualReservoir1.TTL.Time); Assert.AreEqual(t1.Interval, actualReservoir1.Interval); Assert.AreEqual(t1.ReservoirQuota, actualReservoir1.Quota); Statistics statistics = rulesInCache[0].Statistics; Assert.AreEqual(expectedStatistic.RequestCount, statistics.RequestCount); Assert.AreEqual(expectedStatistic.BorrowCount, statistics.BorrowCount); Assert.AreEqual(expectedStatistic.SampledCount, statistics.SampledCount); }
public void TestLoadTargets() // Test statefule attributes of already present rule in cache is carried to new rules. { RuleCache ruleCache = new RuleCache(); List <SamplingRule> newRules = new List <SamplingRule>(); SamplingRule rule1 = GetSamplingRule("a", 2); SamplingRule rule2 = GetSamplingRule("b", 1); newRules.Add(rule1); newRules.Add(rule2); ruleCache.LoadRules(newRules); IList <SamplingRule> rulesInCache = ruleCache.GetRules(); Assert.AreEqual(2, rulesInCache.Count); Assert.AreEqual(rule2.RuleName, rulesInCache[0].RuleName); Assert.AreEqual(rule1.RuleName, rulesInCache[1].RuleName); // Load Targets DateTime dateTime = TimeStamp.CurrentDateTime(); TimeStamp currentTime = new TimeStamp(dateTime); Target t1 = new Target("a", 0.9, 10, dateTime, 10); Target t2 = new Target("b", 0.5, 10, dateTime, 10); List <Target> newTargets = new List <Target>(); newTargets.Add(t1); newTargets.Add(t2); ruleCache.LoadTargets(newTargets); rulesInCache = ruleCache.GetRules(); // check targets value is copied Reservoir actualReservoir2 = rulesInCache[0].Reservoir; Assert.AreEqual(currentTime.Time, actualReservoir2.TTL.Time); Assert.AreEqual(t2.Interval, actualReservoir2.Interval); Assert.AreEqual(t2.ReservoirQuota, actualReservoir2.Quota); Reservoir actualReservoir1 = rulesInCache[1].Reservoir; Assert.AreEqual(currentTime.Time, actualReservoir1.TTL.Time); Assert.AreEqual(t1.Interval, actualReservoir1.Interval); Assert.AreEqual(t1.ReservoirQuota, actualReservoir1.Quota); }