示例#1
0
        public void TestBucketVariationInvalidExperimentsWithBucketingId()
        {
            var bucketer          = new Bucketer(LoggerMock.Object);
            var expectedVariation = new Variation();

            Assert.AreEqual(expectedVariation,
                            bucketer.Bucket(Config, Config.GetExperimentFromKey("invalid_experiment"), TestBucketingIdVariation, TestUserId));
        }
示例#2
0
        public void TestBucketRolloutRule()
        {
            var bucketer          = new Bucketer(LoggerMock.Object);
            var rollout           = Config.GetRolloutFromId("166660");
            var rolloutRule       = rollout.Experiments[1];
            var expectedVariation = Config.GetVariationFromId(rolloutRule.Key, "177773");

            Assert.True(TestData.CompareObjects(expectedVariation,
                                                bucketer.Bucket(Config, rolloutRule, "testBucketingId", TestUserId)));
        }
示例#3
0
        public void TestBucketRolloutRule()
        {
            var bucketer          = new Bucketer(LoggerMock.Object);
            var rollout           = Config.GetRolloutFromId("166660");
            var rolloutRule       = rollout.Experiments[1];
            var expectedVariation = Config.GetVariationFromId(rolloutRule.Key, "177773");

            var variationResult = bucketer.Bucket(Config, rolloutRule, "testBucketingId", TestUserId);

            Assert.True(TestData.CompareObjects(expectedVariation,
                                                variationResult.ResultObject));
            Assert.AreEqual(variationResult.DecisionReasons.ToReport().Count, 0);
            var variationsResult = bucketer.Bucket(Config, rolloutRule, "testBucketingId", TestUserId);

            Assert.True(TestData.CompareObjects(expectedVariation,
                                                variationsResult.ResultObject));
            Assert.AreEqual(variationsResult.DecisionReasons.ToReport(true).Count, 1);
            Assert.AreEqual(variationsResult.DecisionReasons.ToReport(true)[0], "User [testUserId] is in variation [177773] of experiment [177772].");
        }
示例#4
0
        public void TestBucketInvalidExperiment()
        {
            var bucketer = new Bucketer(LoggerMock.Object);

            Assert.AreEqual(new Variation {
            },
                            bucketer.Bucket(Config, new Experiment(), TestBucketingIdControl, TestUserId));

            LoggerMock.Verify(l => l.Log(It.IsAny <LogLevel>(), It.IsAny <string>()), Times.Never);
        }
示例#5
0
        public void TestBucketVariationInvalidExperimentsWithBucketingId()
        {
            var bucketer          = new Bucketer(LoggerMock.Object);
            var expectedVariation = new Variation();
            var variationResult   = bucketer.Bucket(Config, Config.GetExperimentFromKey("invalid_experiment"), TestBucketingIdVariation, TestUserId);

            Assert.AreEqual(expectedVariation,
                            variationResult.ResultObject);
            Assert.AreEqual(variationResult.DecisionReasons.ToReport().Count, 0);
        }
示例#6
0
        public void TestBucketVariationGroupedExperimentsWithBucketingId()
        {
            var bucketer               = new Bucketer(LoggerMock.Object);
            var expectedVariation      = new Variation();
            var expectedGroupVariation = new Variation {
                Id = "7725250007", Key = "group_exp_2_var_2"
            };

            Assert.AreEqual(expectedGroupVariation,
                            bucketer.Bucket(Config, Config.GetExperimentFromKey("group_experiment_2"),
                                            TestBucketingIdGroupExp2Var2, TestUserIdBucketsToNoGroup));
        }
示例#7
0
        public void TestBucketValidExperimentInGroupUserInForcedVariation()
        {
            var bucketer = new Bucketer(LoggerMock.Object);

            Assert.AreEqual(new Variation {
                Id = "7722260071", Key = "group_exp_1_var_1"
            },
                            bucketer.Bucket(Config, Config.GetExperimentFromKey("group_experiment_1"), TestBucketingIdControl, "user1"));

            LoggerMock.Verify(l => l.Log(LogLevel.INFO, "User [user1] is forced into variation [group_exp_1_var_1]."));
            LoggerMock.Verify(l => l.Log(It.IsAny <LogLevel>(), It.IsAny <string>()), Times.Exactly(1));
        }
示例#8
0
        public void TestBucketVariationGroupedExperimentsWithBucketingId()
        {
            var bucketer               = new Bucketer(LoggerMock.Object);
            var expectedVariation      = new Variation();
            var expectedGroupVariation = new Variation {
                Id = "7725250007", Key = "group_exp_2_var_2"
            };
            var variationResult = bucketer.Bucket(Config, Config.GetExperimentFromKey("group_experiment_2"),
                                                  TestBucketingIdGroupExp2Var2, TestUserIdBucketsToNoGroup);

            Assert.AreEqual(expectedGroupVariation,
                            variationResult.ResultObject);
            Assert.AreEqual(variationResult.DecisionReasons.ToReport().Count, 0);
            bucketer.Bucket(Config, Config.GetExperimentFromKey("group_experiment_2"),
                            TestBucketingIdGroupExp2Var2, TestUserIdBucketsToNoGroup);
            var report = variationResult.DecisionReasons.ToReport(true);

            Assert.AreEqual(report.Count, 2);
            Assert.AreEqual(report[0], "User [testUserId] is in experiment [group_experiment_2] of group [7722400015].");
            Assert.AreEqual(report[1], "User [testUserId] is in variation [group_exp_2_var_2] of experiment [group_experiment_2].");
        }
示例#9
0
        public void TestBucketWithBucketingId()
        {
            var bucketer          = new Bucketer(LoggerMock.Object);
            var experiment        = Config.GetExperimentFromKey("test_experiment");
            var expectedVariation = new Variation {
                Id = "7722370027", Key = "control"
            };
            var expectedVariation2 = new Variation {
                Id = "7721010009", Key = "variation"
            };

            // make sure that the bucketing ID is used for the variation bucketing and not the user ID
            var variationResult = bucketer.Bucket(Config, experiment, TestBucketingIdControl, TestUserIdBucketsToVariation);

            Assert.AreEqual(expectedVariation,
                            variationResult.ResultObject);
            Assert.AreEqual(variationResult.DecisionReasons.ToReport().Count, 0);
            variationResult = bucketer.Bucket(Config, experiment, TestBucketingIdControl, TestUserIdBucketsToVariation);
            Assert.AreEqual(expectedVariation,
                            variationResult.ResultObject);
            Assert.AreEqual(variationResult.DecisionReasons.ToReport(true).Count, 1);
            Assert.AreEqual(variationResult.DecisionReasons.ToReport(true)[0], "User [bucketsToVariation!] is in variation [control] of experiment [test_experiment].");
        }
示例#10
0
        public void TestBucketWithBucketingId()
        {
            var bucketer          = new Bucketer(LoggerMock.Object);
            var experiment        = Config.GetExperimentFromKey("test_experiment");
            var expectedVariation = new Variation {
                Id = "7722370027", Key = "control"
            };
            var expectedVariation2 = new Variation {
                Id = "7721010009", Key = "variation"
            };

            // make sure that the bucketing ID is used for the variation bucketing and not the user ID
            Assert.AreEqual(expectedVariation,
                            bucketer.Bucket(Config, experiment, TestBucketingIdControl, TestUserIdBucketsToVariation));
        }
示例#11
0
        public DataBlockResult Compute(Partition p)
        {
            if (p == null)
            {
                throw new ArgumentNullException("p");
            }
            DataBlockResult result = new DataBlockResult(this);

            // Verify the column exists
            if (!p.ContainsColumn(this.Column))
            {
                result.Details.AddError(ExecutionDetails.ColumnDoesNotExist, this.Column);
                return(result);
            }

            // Verify we were able to get percentile values
            if (this.Buckets == null)
            {
                result.Details.AddError(ExecutionDetails.ColumnDoesNotSupportOperator, "percentile", this.Column);
                return(result);
            }

            // Find the set of items matching the where clause
            ShortSet whereSet = new ShortSet(p.Count);

            this.Where.TryEvaluate(p, whereSet, result.Details);

            IUntypedColumn column = p.Columns[this.Column];

            if (result.Details.Succeeded)
            {
                Bucketer bucketer = NativeContainer.CreateTypedInstance <Bucketer>(typeof(Bucketer <>), column.ColumnType);
                result.Values = bucketer.Bucket(column.InnerColumn, whereSet, this.Buckets, this.Inclusive);
                result.Total  = whereSet.Count();
            }

            return(result);
        }