public void IsEnabled_WhenPercentageIsAboveMinimum_ShouldReturnTrue()
        {
            var groupId = string.Empty;

            var minimumPercentage = StrategyUtils.GetNormalizedNumber(SessionId, groupId);

            var context    = new UnleashContext.Builder().SessionId(SessionId).Build();
            var parameters = new Dictionary <string, string>();

            for (var percentage = 0; percentage <= 100; percentage++)
            {
                parameters[GradualRolloutSessionIdStrategy.Percentage] = percentage.ToString();
                parameters[GradualRolloutSessionIdStrategy.GroupId]    = groupId;

                var actual = Strategy.IsEnabled(parameters, context);

                if (percentage < minimumPercentage)
                {
                    Assert.False(actual);
                }
                else
                {
                    Assert.True(actual);
                }
            }
        }
        public static Variant SelectVariant(FeatureToggle featureToggle, UnleashContext context, Variant defaultVariant)
        {
            var variantDefinitions = featureToggle.Variants;
            var totalWeight        = variantDefinitions.Sum(v => v.Weight);

            if (totalWeight == 0)
            {
                return(defaultVariant);
            }

            var variantOverride = GetOverride(variantDefinitions, context);

            if (variantOverride != null)
            {
                return(variantOverride.ToVariant());
            }

            var target = StrategyUtils.GetNormalizedNumber(GetIdentifier(context), featureToggle.Name, totalWeight);

            var counter = 0;

            foreach (var variantDefinition in variantDefinitions)
            {
                if (variantDefinition.Weight != 0)
                {
                    counter += variantDefinition.Weight;
                    if (counter >= target)
                    {
                        return(variantDefinition.ToVariant());
                    }
                }
            }

            return(defaultVariant);
        }
        public void GetNormalizedNumber_Variants()
        {
            // Normal cases
            StrategyUtils.GetNormalizedNumber("user1", "group1").Should().BeInRange(0, 100);

            // Strange inputs
            StrategyUtils.GetNormalizedNumber(null, null).Should().BeInRange(0, 100);
            StrategyUtils.GetNormalizedNumber("", "").Should().BeInRange(0, 100);
            StrategyUtils.GetNormalizedNumber("#%&/(", "§~:<>&nbsp;").Should().BeInRange(0, 100);
        }
        public void should_be_enabled_above_minimum_percentage()
        {
            var userId            = "1574576830";
            var groupId           = "";
            var minimumPercentage = StrategyUtils.GetNormalizedNumber(userId, groupId);

            var context = UnleashContext.New().UserId(userId).Build();
            var gradualRolloutStrategy = new GradualRolloutUserIdStrategy();

            for (var p = minimumPercentage; p <= 100; p++)
            {
                var paramseters = buildParams(p, groupId);
                var actual      = gradualRolloutStrategy.IsEnabled(paramseters, context);

                actual.Should().BeTrue("should be enabled when " + p + "% rollout");
            }
        }
Beispiel #5
0
        public void should_be_enabled_above_minimum_percentage()
        {
            const string sessionId         = "1574576830";
            const string groupId           = "";
            var          minimumPercentage = StrategyUtils.GetNormalizedNumber(sessionId, groupId);

            var context = UnleashContext.CreateBuilder().SessionId(sessionId).Build();

            var gradualRolloutStrategy = new GradualRolloutSessionIdStrategy();

            for (int p = minimumPercentage; p <= 100; p++)
            {
                var parms  = BuildParams(p, groupId);
                var actual = gradualRolloutStrategy.IsEnabled(parms, context);
                Assert.True(actual); //"should be enabled when " + p + "% rollout"
            }
        }
 public void GetNormalizedNumber_Is_Compatible_With_Java_And_Go_Implementations()
 {
     Assert.AreEqual(73, StrategyUtils.GetNormalizedNumber("123", "gr1"));
     Assert.AreEqual(25, StrategyUtils.GetNormalizedNumber("999", "groupX"));
 }
Beispiel #7
0
 public void normalized_values_are_the_same_across_node_java_go_and_dotnet_clients()
 {
     Assert.Equal(73, StrategyUtils.GetNormalizedNumber("123", "gr1"));
     Assert.Equal(25, StrategyUtils.GetNormalizedNumber("999", "groupX"));
 }