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)); }
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)); }
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)); }
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)); }
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 )); }
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); }