private Segment BuildSegment()
        {
            var clause = new Clause("name", "in", new List <JValue> {
                new JValue("x")
            }, true);
            var rule = new SegmentRule(new List <Clause> {
                clause
            }, 50, "key");

            return(new Segment(
                       "segkey",
                       100,
                       new List <string> {
                "includeme"
            },
                       new List <string> {
                "excludeme"
            },
                       "NaCl",
                       new List <SegmentRule> {
                rule
            },
                       true
                       ));
        }
        public void MatchingRuleWithZeroRollout()
        {
            var clause = new ClauseBuilder().Attribute("email").Op("in").Values(LdValue.Of("*****@*****.**")).Build();
            var rule   = new SegmentRule(new List <Clause> {
                clause
            }, 0, null);
            var s = new SegmentBuilder("test").Version(1).Rules(rule).Build();
            var u = User.Builder("foo").Email("*****@*****.**").Build();

            Assert.False(SegmentMatchesUser(s, u));
        }
        public void NonMatchingRuleWithMultipleClauses()
        {
            var clause1 = new ClauseBuilder().Attribute("email").Op("in").Values(LdValue.Of("*****@*****.**")).Build();
            var clause2 = new ClauseBuilder().Attribute("name").Op("in").Values(LdValue.Of("bill")).Build();
            var rule    = new SegmentRule(new List <Clause> {
                clause1, clause2
            }, null, null);
            var s = new SegmentBuilder("test").Version(1).Rules(rule).Build();
            var u = User.Builder("foo").Email("*****@*****.**").Name("bob").Build();

            Assert.False(SegmentMatchesUser(s, u));
        }
Ejemplo n.º 4
0
        public void MatchingRuleWithZeroRollout()
        {
            var clause = new ClauseBuilder().Attribute("email").Op("in").Values(JValue.CreateString("*****@*****.**")).Build();
            var rule   = new SegmentRule(new List <Clause> {
                clause
            }, 0, null);
            var s = new Segment("test", 1, null, null, null, new List <SegmentRule> {
                rule
            }, false);
            var u = User.Builder("foo").Email("*****@*****.**").Build();

            Assert.False(s.MatchesUser(u));
        }
Ejemplo n.º 5
0
        public void NonMatchingRuleWithMultipleClauses()
        {
            var clause1 = new ClauseBuilder().Attribute("email").Op("in").Values(JValue.CreateString("*****@*****.**")).Build();
            var clause2 = new ClauseBuilder().Attribute("name").Op("in").Values(JValue.CreateString("bill")).Build();
            var rule    = new SegmentRule(new List <Clause> {
                clause1, clause2
            }, null, null);
            var s = new Segment("test", 1, null, null, null, new List <SegmentRule> {
                rule
            }, false);
            var u = User.Builder("foo").Email("*****@*****.**").Name("bob").Build();

            Assert.False(s.MatchesUser(u));
        }
Ejemplo n.º 6
0
        public void MatchingRuleWithZeroRollout()
        {
            var clause = new Clause("email", "in", new List <JValue> {
                JValue.CreateString("*****@*****.**")
            }, false);
            var rule = new SegmentRule(new List <Clause> {
                clause
            }, 0, null);
            var s = new Segment("test", 1, null, null, null, new List <SegmentRule> {
                rule
            }, false);
            var u = new User("foo").AndEmail("*****@*****.**");

            Assert.False(s.MatchesUser(u));
        }
Ejemplo n.º 7
0
        public void MatchingRuleWithMultipleClauses()
        {
            var clause1 = new Clause("email", "in", new List <JValue> {
                JValue.CreateString("*****@*****.**")
            }, false);
            var clause2 = new Clause("name", "in", new List <JValue> {
                JValue.CreateString("bob")
            }, false);
            var rule = new SegmentRule(new List <Clause> {
                clause1, clause2
            }, null, null);
            var s = new Segment("test", 1, null, null, null, new List <SegmentRule> {
                rule
            }, false);
            var u = new User("foo").AndEmail("*****@*****.**").AndName("bob");

            Assert.True(s.MatchesUser(u));
        }
        public void UnmatchedByExcludeRegardlessOfRule()
        {
            var clause = ClauseBuilder.ShouldMatchUser(baseUser);
            var rule   = new SegmentRule(new List <Clause> {
                clause
            }, 0, null);
            var segment = new SegmentBuilder("segmentkey").Unbounded(true).Generation(2)
                          .Rules(rule)
                          .Build();
            var bigSegments = new MockBigSegmentProvider();

            bigSegments.Membership[baseUser.Key] = MockMembership.New().Exclude(segment);
            var flag      = new FeatureFlagBuilder("key").BooleanMatchingSegment(segment.Key).Build();
            var evaluator = BasicEvaluator.WithStoredSegments(segment).WithBigSegments(bigSegments);

            var result = evaluator.Evaluate(flag, baseUser, EventFactory.Default);

            Assert.Equal(LdValue.Of(false), result.Result.Value);
            Assert.Equal(BigSegmentsStatus.Healthy, result.Result.Reason.BigSegmentsStatus);
        }
        private Segment BuildSegment()
        {
            var clause = new ClauseBuilder().Attribute("name").Op("in").Values(new JValue("x")).Negate(true).Build();
            var rule   = new SegmentRule(new List <Clause> {
                clause
            }, 50, "key");

            return(new Segment(
                       "segkey",
                       100,
                       new List <string> {
                "includeme"
            },
                       new List <string> {
                "excludeme"
            },
                       "NaCl",
                       new List <SegmentRule> {
                rule
            },
                       true
                       ));
        }
Ejemplo n.º 10
0
            private bool MatchSegmentRule(Segment segment, SegmentRule segmentRule)
            {
                foreach (var c in segmentRule.Clauses)
                {
                    if (!MatchClauseNoSegments(c))
                    {
                        return(false);
                    }
                }

                // If the Weight is absent, this rule matches
                if (!segmentRule.Weight.HasValue)
                {
                    return(true);
                }

                // All of the clauses are met. See if the user buckets in
                var    by     = segmentRule.BucketBy.GetValueOrDefault(UserAttribute.Key);
                double bucket = Bucketing.BucketUser(null, _user, segment.Key, by, segment.Salt);
                double weight = (double)segmentRule.Weight / 100000F;

                return(bucket < weight);
            }