Пример #1
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);
        }
Пример #2
0
        public void SplitWhenCacheIsNotInstancedShouldReturnNull()
        {
            //Arrange
            var manager = new SplitManager(null);

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

            //Assert
            Assert.IsNull(result);
        }
Пример #3
0
        public void SplitReturnsNullWhenCacheIsNull()
        {
            //Arrange
            var manager = new SplitManager(null);

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

            //Assert
            Assert.IsNull(result);
        }
Пример #4
0
        public void SplitReturnsNullWhenInexistent()
        {
            //Arrange
            var splitCache = new InMemorySplitCache(new ConcurrentDictionary <string, ParsedSplit>());

            var manager = new SplitManager(splitCache);

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

            //Assert
            Assert.IsNull(result);
        }
Пример #5
0
        public void SplitWhenCacheIsNotInstancedShouldReturnNull()
        {
            //Arrange
            _blockUntilReadyService
            .Setup(mock => mock.IsSdkReady())
            .Returns(true);

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

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

            //Assert
            Assert.IsNull(result);
        }
Пример #6
0
        public void SplitWithNullNameShouldReturnNull()
        {
            //Arrange
            _blockUntilReadyService
            .Setup(mock => mock.IsSdkReady())
            .Returns(true);

            var splitCache = new InMemorySplitCache(new ConcurrentDictionary <string, ParsedSplit>());
            var manager    = new SplitManager(splitCache, _blockUntilReadyService.Object);

            //Act
            var result = manager.Split(null);

            //Assert
            Assert.IsNull(result);
        }
Пример #7
0
        public void SplitReturnsNullWhenInexistent()
        {
            //Arrange
            var splitCache = new InMemorySplitCache(new ConcurrentDictionary <string, ParsedSplit>());

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

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

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

            //Assert
            Assert.IsNull(result);
        }
Пример #8
0
        public void Split_WithConfigs_ReturnSuccessfully()
        {
            //Arrange
            var configurations = new Dictionary <string, string>
            {
                { "On", "\"Name = \"Test Config\"" }
            };

            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, configurations = configurations
            });
            splitCache.AddSplit("test2", new ParsedSplit()
            {
                name = "test2", conditions = conditionsWithLogic, configurations = configurations
            });
            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 result1 = manager.Split("test1");
            var result2 = manager.Split("test2");
            var result3 = manager.Split("test3");

            //Assert
            Assert.IsNotNull(result1);
            Assert.IsNotNull(result1.configs);
            Assert.IsNotNull(result2);
            Assert.IsNotNull(result2.configs);
            Assert.IsNotNull(result3);
            Assert.IsNull(result3.configs);
        }
Пример #9
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");
        }
Пример #10
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");
        }