public void TestGetMatchedRuleForExpiredCache1() // Cache not loaded, hould return null
        {
            RuleCache     ruleCache     = new RuleCache();
            SamplingInput samplingInput = new SamplingInput("elasticbeanstalk", "/api/1", "GET", "dynamo", "*");
            TimeStamp     current       = TimeStamp.CurrentTime();

            var actualRule = ruleCache.GetMatchedRule(samplingInput, current); // cache is expired since never loaded

            Assert.IsNull(actualRule);
        }
        public void TestGetMatchedRuleNotMatching() // Rule not matched
        {
            RuleCache           ruleCache     = new RuleCache();
            List <SamplingRule> newRules      = new List <SamplingRule>();
            SamplingInput       samplingInput = new SamplingInput("elasticbeanstalk", "/api/1", "GET", "dynamo", "*");
            SamplingRule        rule          = GetSamplingRule("a", 1, 0.5, 10, "j", samplingInput.ServiceName, samplingInput.Method, samplingInput.Url);

            newRules.Add(rule);
            ruleCache.LoadRules(newRules);
            TimeStamp current = TimeStamp.CurrentTime();

            ruleCache.LastUpdated = current;

            var actualRule = ruleCache.GetMatchedRule(samplingInput, current);

            Assert.IsNull(actualRule);
        }
        public void TestGetMatchedRule3() // sampling input ServiceName and ServiceType is null - it should be ignored for rule matching
        {
            RuleCache           ruleCache     = new RuleCache();
            List <SamplingRule> newRules      = new List <SamplingRule>();
            SamplingInput       samplingInput = new SamplingInput("elasticbeanstalk", "/api/1", "GET", "", "");
            SamplingRule        expectedRule  = GetSamplingRule("a", 1, 0.5, 10, samplingInput.Host, "test", samplingInput.Method, samplingInput.Url, serviceType: "XYZ");

            newRules.Add(expectedRule);
            ruleCache.LoadRules(newRules);
            TimeStamp current = TimeStamp.CurrentTime();

            ruleCache.LastUpdated = current;

            var actualRule = ruleCache.GetMatchedRule(samplingInput, current);

            Assert.IsTrue(actualRule.Equals(expectedRule));
        }
        public void TestGetMatchedRule2() // ServiceType is different
        {
            RuleCache           ruleCache     = new RuleCache();
            List <SamplingRule> newRules      = new List <SamplingRule>();
            SamplingInput       samplingInput = new SamplingInput("elasticbeanstalk", "/api/1", "GET", "dynamo", "AWS::ECS::Container");
            SamplingRule        expectedRule  = GetSamplingRule("a", 1, 0.5, 10, samplingInput.Host, samplingInput.ServiceName, samplingInput.Method, samplingInput.Url, serviceType: "XYZ");

            newRules.Add(expectedRule);
            ruleCache.LoadRules(newRules);
            TimeStamp current = TimeStamp.CurrentTime();

            ruleCache.LastUpdated = current;

            var actualRule = ruleCache.GetMatchedRule(samplingInput, current);

            Assert.IsNull(actualRule);
        }
        public void TestGetMatchedRuleNotMatching2() // SamplingInput with only ServiceName - Rule not matched
        {
            RuleCache           ruleCache     = new RuleCache();
            List <SamplingRule> newRules      = new List <SamplingRule>();
            SamplingInput       samplingInput = new SamplingInput("elasticbeanstalk");
            SamplingRule        rule          = GetSamplingRule("a", 1, 0.5, 10, serviceName: "XYZ");

            newRules.Add(rule);
            ruleCache.LoadRules(newRules);
            TimeStamp current = TimeStamp.CurrentTime();

            ruleCache.LastUpdated = current;

            var actualRule = ruleCache.GetMatchedRule(samplingInput, current);

            Assert.IsNull(actualRule);
        }
        public void TestGetMatchedRule4() // sampling input has only ServiceName - the rule should be matched
        {
            RuleCache           ruleCache     = new RuleCache();
            List <SamplingRule> newRules      = new List <SamplingRule>();
            SamplingInput       samplingInput = new SamplingInput("elasticbeanstalk");
            SamplingRule        expectedRule  = GetSamplingRule("a", 1, 0.5, 10, serviceName: samplingInput.ServiceName);

            newRules.Add(expectedRule);
            ruleCache.LoadRules(newRules);
            TimeStamp current = TimeStamp.CurrentTime();

            ruleCache.LastUpdated = current;

            var actualRule = ruleCache.GetMatchedRule(samplingInput, current);

            Assert.IsTrue(actualRule.Equals(expectedRule));
        }
        public void TestGetMatchedRuleForExpiredCache2() // Expired cache should not match rule.
        {
            RuleCache           ruleCache     = new RuleCache();
            List <SamplingRule> newRules      = new List <SamplingRule>();
            SamplingInput       samplingInput = new SamplingInput("elasticbeanstalk", "/api/1", "GET", "dynamo", "*");
            SamplingRule        expectedRule  = GetSamplingRule("a", 1, 0.5, 10, samplingInput.Host, samplingInput.ServiceName, samplingInput.Method, samplingInput.Url);

            newRules.Add(expectedRule);
            ruleCache.LoadRules(newRules);
            TimeStamp current = TimeStamp.CurrentTime();

            ruleCache.LastUpdated.Time = current.Time;
            current.Time += RuleCache.TTL + 1;

            var actualRule = ruleCache.GetMatchedRule(samplingInput, current); // cache is expired, though matching rule is present

            Assert.IsNull(actualRule);
        }
        public void TestGetMatchedRuleWithDefaultRule() // Matching with default Rule;
        {
            RuleCache           ruleCache     = new RuleCache();
            List <SamplingRule> newRules      = new List <SamplingRule>();
            SamplingInput       samplingInput = new SamplingInput("elasticbeanstalk", "/api/1", "GET", "dynamo", "*");
            SamplingRule        rule          = GetSamplingRule("a", 1, 0.5, 10, "j", "test", samplingInput.Method, samplingInput.Url);

            newRules.Add(rule);
            SamplingRule expectedRule = GetSamplingRule(SamplingRule.Default, 10000, 0.5, 1, "j", "*", "*", "*"); // should match to default rule

            newRules.Add(expectedRule);
            ruleCache.LoadRules(newRules);
            TimeStamp current = TimeStamp.CurrentTime();

            ruleCache.LastUpdated = current;

            var actualRule = ruleCache.GetMatchedRule(samplingInput, current);

            Assert.IsTrue(actualRule.Equals(expectedRule));
        }
        public void TestGetMatchedRuleWithDefaultRule2() // SamplingInput with only ServiceName - Matching with default Rule;
        {
            RuleCache           ruleCache     = new RuleCache();
            List <SamplingRule> newRules      = new List <SamplingRule>();
            SamplingInput       samplingInput = new SamplingInput("elasticbeanstalk");
            SamplingRule        rule          = GetSamplingRule("a", 1, 0.5, 10, serviceName: "XYZ");

            newRules.Add(rule);
            SamplingRule expectedRule = GetSamplingRule(SamplingRule.Default, 10000, 0.5, 1, "j", "*", "*", "*"); // should match to default rule

            newRules.Add(expectedRule);
            ruleCache.LoadRules(newRules);
            TimeStamp current = TimeStamp.CurrentTime();

            ruleCache.LastUpdated = current;

            var actualRule = ruleCache.GetMatchedRule(samplingInput, current);

            Assert.IsTrue(actualRule.Equals(expectedRule));
        }