Esempio n. 1
0
        public void SplitsReturnWithNoRolloutConditionSuccessfully()
        {
            //Arrange
            var conditionsWithLogic = new List <ConditionWithLogic>();
            var conditionWithLogic  = new ConditionWithLogic()
            {
                conditionType = ConditionType.WHITELIST,
                partitions    = new List <PartitionDefinition>()
                {
                    new PartitionDefinition()
                    {
                        size = 100, treatment = "on"
                    }
                }
            };

            conditionsWithLogic.Add(conditionWithLogic);
            var splitCache = new InMemorySplitCache(new ConcurrentDictionary <string, ParsedSplit>());

            splitCache.AddSplit("test1", new ParsedSplit()
            {
                name = "test1", changeNumber = 10000, killed = false, trafficTypeName = "user", seed = -1, conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test2", new ParsedSplit()
            {
                name = "test2", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test3", new ParsedSplit()
            {
                name = "test3", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test4", new ParsedSplit()
            {
                name = "test4", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test5", new ParsedSplit()
            {
                name = "test5", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test6", new ParsedSplit()
            {
                name = "test6", conditions = conditionsWithLogic
            });

            var manager = new SplitManager(splitCache);

            //Act
            var result = manager.Splits();

            //Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(6, result.Count);
            var firstResult = result.Find(x => x.name == "test1");

            Assert.AreEqual(firstResult.name, "test1");
            Assert.AreEqual(firstResult.changeNumber, 10000);
            Assert.AreEqual(firstResult.killed, false);
            Assert.AreEqual(firstResult.trafficType, "user");
            Assert.AreEqual(firstResult.treatments.Count, 0);
        }
Esempio n. 2
0
        public void SplitReturnDefaultTreatmentsWhenNoRolloutCondition()
        {
            //Arrange
            var conditionsWithLogic = new List <ConditionWithLogic>();
            var conditionWithLogic  = new ConditionWithLogic()
            {
                conditionType = ConditionType.WHITELIST,
                partitions    = new List <PartitionDefinition>()
                {
                    new PartitionDefinition()
                    {
                        size = 100, treatment = "on"
                    },
                }
            };

            conditionsWithLogic.Add(conditionWithLogic);

            var splitCache = new InMemorySplitCache(new ConcurrentDictionary <string, ParsedSplit>());

            splitCache.AddSplit("test1", new ParsedSplit()
            {
                name = "test1", changeNumber = 10000, killed = false, trafficTypeName = "user", seed = -1, conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test2", new ParsedSplit()
            {
                name = "test2", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test3", new ParsedSplit()
            {
                name = "test3", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test4", new ParsedSplit()
            {
                name = "test4", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test5", new ParsedSplit()
            {
                name = "test5", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test6", new ParsedSplit()
            {
                name = "test6", conditions = conditionsWithLogic
            });

            _blockUntilReadyService
            .Setup(mock => mock.IsSdkReady())
            .Returns(true);

            var manager = new SplitManager(splitCache, _blockUntilReadyService.Object);

            //Act
            var result = manager.Split("test1");

            //Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(result.name, "test1");
            Assert.AreEqual(conditionWithLogic.partitions.Count, result.treatments.Count);
        }
Esempio n. 3
0
        public void SplitReturnSuccessfully()
        {
            //Arrange
            var conditionWithLogic = new ConditionWithLogic()
            {
                conditionType = ConditionType.ROLLOUT,
                partitions    = new List <PartitionDefinition>()
                {
                    new PartitionDefinition()
                    {
                        size = 90, treatment = "on"
                    },
                    new PartitionDefinition()
                    {
                        size = 10, treatment = "off"
                    }
                }
            };

            var conditionsWithLogic = new List <ConditionWithLogic>
            {
                conditionWithLogic
            };

            _blockUntilReadyService
            .Setup(mock => mock.IsSdkReady())
            .Returns(true);

            _splitCache
            .Setup(mock => mock.GetSplit("test1"))
            .Returns(new ParsedSplit {
                name = "test1", changeNumber = 10000, killed = false, trafficTypeName = "user", seed = -1, conditions = conditionsWithLogic
            });

            //Act
            var result = _splitManager.Split("test1");

            //Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(result.name, "test1");
            Assert.AreEqual(result.changeNumber, 10000);
            Assert.AreEqual(result.killed, false);
            Assert.AreEqual(result.trafficType, "user");
            Assert.AreEqual(result.treatments.Count, 2);

            var firstTreatment = result.treatments[0];

            Assert.AreEqual(firstTreatment, "on");

            var secondTreatment = result.treatments[1];

            Assert.AreEqual(secondTreatment, "off");
        }
Esempio n. 4
0
        public void SplitNamesReturnSuccessfully()
        {
            //Arrange
            var conditionWithLogic = new ConditionWithLogic()
            {
                partitions = new List <PartitionDefinition>()
                {
                    new PartitionDefinition()
                    {
                        size = 100, treatment = "on"
                    }
                }
            };

            var conditionsWithLogic = new List <ConditionWithLogic>
            {
                conditionWithLogic
            };

            var splitNames = new List <string>
            {
                "test1",
                "test2",
                "test3",
                "test4",
                "test5",
                "test6"
            };

            _blockUntilReadyService
            .Setup(mock => mock.IsSdkReady())
            .Returns(true);

            _splitCache
            .Setup(mock => mock.GetSplitNames())
            .Returns(splitNames);

            _splitManager.BlockUntilReady(1000);

            //Act
            var result = _splitManager.SplitNames();

            //Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(6, result.Count);

            var firstResult = result.Find(x => x == "test1");

            Assert.AreEqual(firstResult, "test1");
        }
Esempio n. 5
0
        public void SplitReturnDefaultTreatmentsWhenNoRolloutCondition()
        {
            //Arrange
            var conditionWithLogic = new ConditionWithLogic()
            {
                conditionType = ConditionType.WHITELIST,
                partitions    = new List <PartitionDefinition>()
                {
                    new PartitionDefinition()
                    {
                        size = 100, treatment = "on"
                    },
                }
            };

            var conditionsWithLogic = new List <ConditionWithLogic>
            {
                conditionWithLogic
            };

            _blockUntilReadyService
            .Setup(mock => mock.IsSdkReady())
            .Returns(true);

            _splitCache
            .Setup(mock => mock.GetSplit("test1"))
            .Returns(new ParsedSplit {
                name = "test1", changeNumber = 10000, killed = false, trafficTypeName = "user", seed = -1, conditions = conditionsWithLogic
            });

            //Act
            var result = _splitManager.Split("test1");

            //Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(result.name, "test1");
            Assert.AreEqual(conditionWithLogic.partitions.Count, result.treatments.Count);
        }
Esempio n. 6
0
        public void Split_WithConfigs_ReturnSuccessfully()
        {
            //Arrange
            var configurations = new Dictionary <string, string>
            {
                { "On", "\"Name = \"Test Config\"" }
            };

            var conditionWithLogic = new ConditionWithLogic()
            {
                partitions = new List <PartitionDefinition>()
                {
                    new PartitionDefinition()
                    {
                        size = 100, treatment = "on"
                    }
                }
            };

            var conditionsWithLogic = new List <ConditionWithLogic>
            {
                conditionWithLogic
            };

            _blockUntilReadyService
            .Setup(mock => mock.IsSdkReady())
            .Returns(true);

            _splitCache
            .Setup(mock => mock.GetSplit("test1"))
            .Returns(new ParsedSplit {
                name = "test1", changeNumber = 10000, killed = false, trafficTypeName = "user", seed = -1, conditions = conditionsWithLogic, configurations = configurations
            });

            _splitCache
            .Setup(mock => mock.GetSplit("test2"))
            .Returns(new ParsedSplit {
                name = "test2", conditions = conditionsWithLogic, configurations = configurations
            });

            _splitCache
            .Setup(mock => mock.GetSplit("test3"))
            .Returns(new ParsedSplit {
                name = "test3", conditions = conditionsWithLogic
            });

            _splitManager.BlockUntilReady(1000);

            //Act
            var result1 = _splitManager.Split("test1");
            var result2 = _splitManager.Split("test2");
            var result3 = _splitManager.Split("test3");

            //Assert
            Assert.IsNotNull(result1);
            Assert.IsNotNull(result1.configs);
            Assert.IsNotNull(result2);
            Assert.IsNotNull(result2.configs);
            Assert.IsNotNull(result3);
            Assert.IsNull(result3.configs);
        }
Esempio n. 7
0
        public void Splits_WithConfigs_ReturnSuccessfully()
        {
            //Arrange
            var configurations = new Dictionary <string, string>
            {
                { "On", "\"Name = \"Test Config\"" }
            };

            var conditionWithLogic = new ConditionWithLogic()
            {
                partitions = new List <PartitionDefinition>()
                {
                    new PartitionDefinition()
                    {
                        size = 100, treatment = "on"
                    }
                }
            };

            var conditionsWithLogic = new List <ConditionWithLogic>
            {
                conditionWithLogic
            };

            var splits = new List <ParsedSplit>
            {
                new ParsedSplit {
                    name = "test1", changeNumber = 10000, killed = false, trafficTypeName = "user", seed = -1, conditions = conditionsWithLogic, configurations = configurations
                },
                new ParsedSplit {
                    name = "test2", conditions = conditionsWithLogic, configurations = configurations
                },
                new ParsedSplit {
                    name = "test3", conditions = conditionsWithLogic
                },
                new ParsedSplit {
                    name = "test4", conditions = conditionsWithLogic
                },
                new ParsedSplit {
                    name = "test5", conditions = conditionsWithLogic
                },
                new ParsedSplit {
                    name = "test6", conditions = conditionsWithLogic
                }
            };

            _blockUntilReadyService
            .Setup(mock => mock.IsSdkReady())
            .Returns(true);

            _splitCache
            .Setup(mock => mock.GetAllSplits())
            .Returns(splits);

            _splitManager.BlockUntilReady(1000);

            //Act
            var result = _splitManager.Splits();

            //Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(6, result.Count);
            var test1Result = result.Find(res => res.name == "test1");

            Assert.IsNotNull(test1Result.configs);
            var test2Result = result.Find(res => res.name == "test2");

            Assert.IsNotNull(test2Result.configs);
            var test3Result = result.Find(res => res.name == "test3");

            Assert.IsNull(test3Result.configs);
        }
Esempio n. 8
0
        public void SplitsReturnWithNoRolloutConditionSuccessfully()
        {
            //Arrange
            var conditionWithLogic = new ConditionWithLogic()
            {
                conditionType = ConditionType.WHITELIST,
                partitions    = new List <PartitionDefinition>()
                {
                    new PartitionDefinition()
                    {
                        size = 100, treatment = "on"
                    }
                }
            };

            var conditionsWithLogic = new List <ConditionWithLogic>
            {
                conditionWithLogic
            };

            var splits = new List <ParsedSplit>
            {
                new ParsedSplit {
                    name = "test1", changeNumber = 10000, killed = false, trafficTypeName = "user", seed = -1, conditions = conditionsWithLogic
                },
                new ParsedSplit {
                    name = "test2", conditions = conditionsWithLogic
                },
                new ParsedSplit {
                    name = "test3", conditions = conditionsWithLogic
                },
                new ParsedSplit {
                    name = "test4", conditions = conditionsWithLogic
                },
                new ParsedSplit {
                    name = "test5", conditions = conditionsWithLogic
                },
                new ParsedSplit {
                    name = "test6", conditions = conditionsWithLogic
                }
            };

            _blockUntilReadyService
            .Setup(mock => mock.IsSdkReady())
            .Returns(true);

            _splitCache
            .Setup(mock => mock.GetAllSplits())
            .Returns(splits);

            //Act
            var result = _splitManager.Splits();

            //Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(6, result.Count);

            var firstResult = result.Find(x => x.name == "test1");

            Assert.AreEqual(firstResult.name, "test1");
            Assert.AreEqual(firstResult.changeNumber, 10000);
            Assert.AreEqual(firstResult.killed, false);
            Assert.AreEqual(firstResult.trafficType, "user");
            Assert.AreEqual(conditionWithLogic.partitions.Count, firstResult.treatments.Count);
        }
Esempio n. 9
0
        public void SplitNamesReturnSuccessfully()
        {
            //Arrange
            var conditionsWithLogic = new List <ConditionWithLogic>();
            var conditionWithLogic  = new ConditionWithLogic()
            {
                partitions = new List <PartitionDefinition>()
                {
                    new PartitionDefinition()
                    {
                        size = 100, treatment = "on"
                    }
                }
            };

            conditionsWithLogic.Add(conditionWithLogic);
            var splitCache = new InMemorySplitCache(new ConcurrentDictionary <string, ParsedSplit>());

            splitCache.AddSplit("test1", new ParsedSplit()
            {
                name = "test1", changeNumber = 10000, killed = false, trafficTypeName = "user", seed = -1, conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test2", new ParsedSplit()
            {
                name = "test2", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test3", new ParsedSplit()
            {
                name = "test3", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test4", new ParsedSplit()
            {
                name = "test4", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test5", new ParsedSplit()
            {
                name = "test5", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test6", new ParsedSplit()
            {
                name = "test6", conditions = conditionsWithLogic
            });

            _blockUntilReadyService
            .Setup(mock => mock.IsSdkReady())
            .Returns(true);

            var manager = new SplitManager(splitCache, _blockUntilReadyService.Object);

            manager.BlockUntilReady(1000);

            //Act
            var result = manager.SplitNames();

            //Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(6, result.Count);
            var firstResult = result.Find(x => x == "test1");

            Assert.AreEqual(firstResult, "test1");
        }
Esempio n. 10
0
        public void SplitReturnSuccessfully()
        {
            //Arrange
            var conditionsWithLogic = new List <ConditionWithLogic>();
            var conditionWithLogic  = new ConditionWithLogic()
            {
                conditionType = ConditionType.ROLLOUT,
                partitions    = new List <PartitionDefinition>()
                {
                    new PartitionDefinition()
                    {
                        size = 90, treatment = "on"
                    },
                    new PartitionDefinition()
                    {
                        size = 10, treatment = "off"
                    }
                }
            };

            conditionsWithLogic.Add(conditionWithLogic);
            var splitCache = new InMemorySplitCache(new ConcurrentDictionary <string, ParsedSplit>());

            splitCache.AddSplit("test1", new ParsedSplit()
            {
                name = "test1", changeNumber = 10000, killed = false, trafficTypeName = "user", seed = -1, conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test2", new ParsedSplit()
            {
                name = "test2", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test3", new ParsedSplit()
            {
                name = "test3", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test4", new ParsedSplit()
            {
                name = "test4", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test5", new ParsedSplit()
            {
                name = "test5", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test6", new ParsedSplit()
            {
                name = "test6", conditions = conditionsWithLogic
            });

            _blockUntilReadyService
            .Setup(mock => mock.IsSdkReady())
            .Returns(true);

            var manager = new SplitManager(splitCache, _blockUntilReadyService.Object);

            //Act
            var result = manager.Split("test1");

            //Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(result.name, "test1");
            Assert.AreEqual(result.changeNumber, 10000);
            Assert.AreEqual(result.killed, false);
            Assert.AreEqual(result.trafficType, "user");
            Assert.AreEqual(result.treatments.Count, 2);
            var firstTreatment = result.treatments[0];

            Assert.AreEqual(firstTreatment, "on");
            var secondTreatment = result.treatments[1];

            Assert.AreEqual(secondTreatment, "off");
        }
Esempio n. 11
0
        public void SplitReturnRolloutConditionTreatmentsSuccessfully()
        {
            //Arrange
            var conditionsWithLogic = new List <ConditionWithLogic>();
            var conditionWithLogic  = new ConditionWithLogic()
            {
                conditionType = ConditionType.WHITELIST,
                partitions    = new List <PartitionDefinition>()
                {
                    new PartitionDefinition()
                    {
                        size = 100, treatment = "on"
                    },
                }
            };

            conditionsWithLogic.Add(conditionWithLogic);

            var conditionWithLogic2 = new ConditionWithLogic()
            {
                conditionType = ConditionType.ROLLOUT,
                partitions    = new List <PartitionDefinition>()
                {
                    new PartitionDefinition()
                    {
                        size = 90, treatment = "on"
                    },
                    new PartitionDefinition()
                    {
                        size = 10, treatment = "off"
                    },
                }
            };

            conditionsWithLogic.Add(conditionWithLogic2);

            var splitCache = new InMemorySplitCache(new ConcurrentDictionary <string, ParsedSplit>());

            splitCache.AddSplit("test1", new ParsedSplit()
            {
                name = "test1", changeNumber = 10000, killed = false, trafficTypeName = "user", seed = -1, conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test2", new ParsedSplit()
            {
                name = "test2", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test3", new ParsedSplit()
            {
                name = "test3", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test4", new ParsedSplit()
            {
                name = "test4", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test5", new ParsedSplit()
            {
                name = "test5", conditions = conditionsWithLogic
            });
            splitCache.AddSplit("test6", new ParsedSplit()
            {
                name = "test6", conditions = conditionsWithLogic
            });

            var manager = new SplitManager(splitCache);

            //Act
            var result = manager.Split("test1");

            //Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(result.name, "test1");
            Assert.AreEqual(result.treatments.Count, 2);
            var firstTreatment = result.treatments[0];

            Assert.AreEqual(firstTreatment, "on");
            var secondTreatment = result.treatments[1];

            Assert.AreEqual(secondTreatment, "off");
        }