Exemple #1
0
        static void Main(string[] args)
        {
            var client = UnlaunchClient.Create(SdkKey);

            try
            {
                client.AwaitUntilReady(TimeSpan.FromSeconds(6));
            }
            catch (TimeoutException e)
            {
                Console.WriteLine($"Client wasn't ready, {e.Message}");
            }

            PrintBanner();

            var targetedCountriesOnVariation  = 0;
            var targetedCountriesOffVariation = 0;
            var offVariation = 0;
            var random       = new Random();

            for (var i = 0; i < NumIterations; i++)
            {
                var country    = Countries[random.Next(Countries.Length)];
                var attributes = new[]
                {
                    UnlaunchAttribute.NewSet(CountryAttributeName, new[] { country })
                };

                var feature   = client.GetFeature(FlagKey, $"user{i}", attributes);
                var variation = feature.GetVariation();
                if (variation == "on")
                {
                    targetedCountriesOnVariation++;
                    var price = feature.GetVariationConfig().GetDouble(country);
                    Console.WriteLine($"The promotion price for {country} is {price}");
                }

                if (variation == "off")
                {
                    if (country == Usa || country == Deu || country == Jpn)
                    {
                        targetedCountriesOffVariation++;
                    }
                    offVariation++;
                }

                if (country != Usa && country != Deu && country != Jpn && variation == "on")
                {
                    Console.WriteLine("This won't happen");
                }
            }

            // We select country randomly so number of on variations would not be exactly 2%
            // but it should be very small compare to number off variations
            Console.WriteLine($"Number of on variations for targeted countries: {targetedCountriesOnVariation}");
            Console.WriteLine($"Number of off variations for targeted countries: {targetedCountriesOffVariation}");
            Console.WriteLine($"Number of off variations for all countries: {offVariation}");

            client.Shutdown();
        }
        public void InvalidType()
        {
            CreateConditions(Operator.SW);

            var attributes = new[]
            {
                UnlaunchAttribute.NewBoolean(AttributeKey, true)
            };

            OffVariationTargetingRulesNotMatch(attributes);
        }
Exemple #3
0
        public void StringNotEndsWith()
        {
            CreateEndsWithCondition(AttributeType.String, "dotnet");

            var attributes = new[]
            {
                UnlaunchAttribute.NewString(AttributeKey, "dotnet-sdk")
            };

            OffVariationTargetingRulesNotMatch(attributes);
        }
Exemple #4
0
        public void StringNotContains()
        {
            CreateContainsCondition(AttributeType.String, "dotnet");

            var attributes = new[]
            {
                UnlaunchAttribute.NewString(AttributeKey, "dotnet-sdk")
            };

            OnVariationTargetingRulesMatch(attributes);
        }
        public void Set_userSet_is_sub_set()
        {
            CreateNotEqualsCondition(AttributeType.Set, "value1");

            var attributes = new[]
            {
                UnlaunchAttribute.NewSet(AttributeKey, new[] { "value2", "value1" })
            };

            OnVariationTargetingRulesMatch(attributes);
        }
        public void Set_userSet_has_some_item()
        {
            CreateAnyOfCondition(AttributeType.Set, "3,5,9");

            var attributes = new[]
            {
                UnlaunchAttribute.NewSet(AttributeKey, new HashSet <string>(new [] { "5" }))
            };

            OnVariationTargetingRulesMatch(attributes);
        }
Exemple #7
0
        public void Set()
        {
            CreateNotAllOfCondition(AttributeType.Set, "2,3,6,8");

            var attributes = new[]
            {
                UnlaunchAttribute.NewSet(AttributeKey, new HashSet <string>(new [] { "1", "3", "2", "6" }))
            };

            OnVariationTargetingRulesMatch(attributes);
        }
Exemple #8
0
        public void Set_userSet_is_same()
        {
            CreatePartOfCondition(AttributeType.Set, "1,2,3");

            var attributes = new[]
            {
                UnlaunchAttribute.NewSet(AttributeKey, new HashSet <string>(new [] { "1", "3", "2" }))
            };

            OnVariationTargetingRulesMatch(attributes);
        }
        public void StringNotStartsWith()
        {
            CreateNswCondition(AttributeType.String, "sdk");

            var attributes = new[]
            {
                UnlaunchAttribute.NewString(AttributeKey, "dotnet-sdk")
            };

            OnVariationTargetingRulesMatch(attributes);
        }
        public void Number()
        {
            CreateNotEqualsCondition(AttributeType.Number, "1.0001");

            var attributes = new[]
            {
                UnlaunchAttribute.NewNumber(AttributeKey, 1.000)
            };

            OnVariationTargetingRulesMatch(attributes);
        }
Exemple #11
0
        public void Set_userSet_is_super_set()
        {
            CreateNpoCondition(AttributeType.Set, "0,3");

            var attributes = new[]
            {
                UnlaunchAttribute.NewSet(AttributeKey, new HashSet <string>(new [] { "0", "3", "6" }))
            };

            OnVariationTargetingRulesMatch(attributes);
        }
Exemple #12
0
        public void Enumerable()
        {
            CreateNotAllOfCondition(AttributeType.Set, "2,1,3,9");

            var attributes = new[]
            {
                UnlaunchAttribute.NewSet(AttributeKey, new [] { "1", "3", "2", "6" })
            };

            OnVariationTargetingRulesMatch(attributes);
        }
        public void InvalidTypeCast()
        {
            CreateConditions(Operator.EQ);

            var attributes = new[]
            {
                UnlaunchAttribute.NewBoolean(AttributeKey, true)
            };

            Assert.Throws <InvalidCastException>(() => OffVariationTargetingRulesNotMatch(attributes));
        }
Exemple #14
0
        public void Enumerable()
        {
            CreatePartOfCondition(AttributeType.Set, "1,2,3");

            var attributes = new[]
            {
                UnlaunchAttribute.NewSet(AttributeKey, new [] { "1", "3" })
            };

            OnVariationTargetingRulesMatch(attributes);
        }
        public void Set_userSet_is_disjoint()
        {
            CreateNhaCondition(AttributeType.Set, "0,8,9");

            var attributes = new[]
            {
                UnlaunchAttribute.NewSet(AttributeKey, new HashSet <string>(new [] { "1", "3", "2", "6" }))
            };

            OnVariationTargetingRulesMatch(attributes);
        }
        public void Boolean()
        {
            CreateNotEqualsCondition(AttributeType.Boolean, "false");

            var attributes = new[]
            {
                UnlaunchAttribute.NewBoolean(AttributeKey, true)
            };

            OnVariationTargetingRulesMatch(attributes);
        }
Exemple #17
0
        [Fact] public void Date_userValue_is_the_same_unixTime()
        {
            var unixTime = UnixTime.Get();

            CreateGteCondition(AttributeType.Date, unixTime.ToString());

            var attributes = new[]
            {
                UnlaunchAttribute.NewDate(AttributeKey, UnixTime.GetUtcDateTime(unixTime))
            };

            OnVariationTargetingRulesMatch(attributes);
        }
        public void StringNotEquals()
        {
            var userValue = "dotnet-sdk";

            CreateNotEqualsCondition(AttributeType.String, userValue);

            var attributes = new[]
            {
                UnlaunchAttribute.NewString(AttributeKey, "hi " + userValue)
            };

            OnVariationTargetingRulesMatch(attributes);
        }
        public void Date()
        {
            var unixTime = UnixTime.Get();

            CreateNotEqualsCondition(AttributeType.Date, unixTime.ToString());

            var attributes = new[]
            {
                UnlaunchAttribute.NewDate(AttributeKey, UnixTime.GetUtcDateTime(unixTime).AddDays(-1))
            };

            OnVariationTargetingRulesMatch(attributes);
        }
        public void DateTime_userValue_is_one_second_behind()
        {
            var unixTime = UnixTime.Get();

            CreateNotEqualsCondition(AttributeType.DateTime, unixTime.ToString());

            var attributes = new[]
            {
                UnlaunchAttribute.NewDateTime(AttributeKey, UnixTime.GetUtcDateTime(unixTime - 1000))
            };

            OnVariationTargetingRulesMatch(attributes);
        }
Exemple #21
0
        public void Date_userValue_is_less()
        {
            var date = DateTime.SpecifyKind(new DateTime(2019, 9, 26), DateTimeKind.Utc);

            CreateGreaterThanCondition(AttributeType.Date, UnixTime.Get(date).ToString());

            var attributes = new[]
            {
                UnlaunchAttribute.NewDate(AttributeKey, date.AddDays(-1))
            };

            OffVariationTargetingRulesNotMatch(attributes);
        }
Exemple #22
0
        public void DateTime_userValue_is_less()
        {
            var unixTime = UnixTime.Get();

            CreateGreaterThanCondition(AttributeType.DateTime, unixTime.ToString());

            var attributes = new[]
            {
                UnlaunchAttribute.NewDateTime(AttributeKey, UnixTime.GetUtcDateTime(unixTime - 1000))
            };

            OffVariationTargetingRulesNotMatch(attributes);
        }
Exemple #23
0
        public void Date_userValue_is_one_hour_less_which_is_previous_day()
        {
            var date = DateTime.SpecifyKind(new DateTime(2019, 9, 26), DateTimeKind.Utc);

            CreateGreaterThanCondition(AttributeType.Date, UnixTime.Get(date).ToString());

            var attributes = new[]
            {
                UnlaunchAttribute.NewDate(AttributeKey, date.AddHours(1)) // one hour more but still in same day
            };

            OffVariationTargetingRulesNotMatch(attributes);
        }
Exemple #24
0
        public void Date_userValue_is_the_same_dateTime()
        {
            var date = DateTime.SpecifyKind(new DateTime(2019, 9, 26), DateTimeKind.Utc);

            CreateEqualsCondition(AttributeType.Date, UnixTime.Get(date).ToString());

            var attributes = new[]
            {
                UnlaunchAttribute.NewDate(AttributeKey, date)
            };

            OnVariationTargetingRulesMatch(attributes);
        }
Exemple #25
0
        public void DateTime_userValue_is_greater()
        {
            var date = DateTime.UtcNow;

            CreateLessThanCondition(AttributeType.DateTime, UnixTime.Get(date).ToString());

            var attributes = new[]
            {
                UnlaunchAttribute.NewDateTime(AttributeKey, date.AddSeconds(2))
            };

            OffVariationTargetingRulesNotMatch(attributes);
        }
Exemple #26
0
        public void Date_userValue_is_greater_unixTime()
        {
            var unixTime = UnixTime.Get();

            CreateGreaterThanCondition(AttributeType.Date, unixTime.ToString());

            var attributes = new[]
            {
                UnlaunchAttribute.NewDate(AttributeKey, UnixTime.GetUtcDateTime(unixTime).AddDays(1))
            };

            OnVariationTargetingRulesMatch(attributes);
        }
Exemple #27
0
        public void DateTime_userValue_is_same_dateTime()
        {
            var date = DateTime.UtcNow;

            CreateEqualsCondition(AttributeType.DateTime, UnixTime.Get(date).ToString());

            var attributes = new[]
            {
                UnlaunchAttribute.NewDateTime(AttributeKey, date)
            };

            OnVariationTargetingRulesMatch(attributes);
        }
        public void DateTime_userValue_is_greater_unixTime()
        {
            var unixTime = UnixTime.Get();

            CreateLteCondition(AttributeType.DateTime, unixTime.ToString());

            var attributes = new[]
            {
                UnlaunchAttribute.NewDateTime(AttributeKey, unixTime + 1000)
            };

            OffVariationTargetingRulesNotMatch(attributes);
        }
        public void InvalidAttributeKey()
        {
            var flag = FlagResponse.data.flags.First();

            flag.rules.First().conditions = new[] { new TargetRuleConditionDto
                                                    {
                                                        id        = 119,
                                                        attribute = AttributeKey,
                                                        type      = AttributeType.Boolean,
                                                        op        = Operator.EQ,
                                                        value     = "True"
                                                    } };

            LoadFeatureFlags();

            var attributes = new[]
            {
                UnlaunchAttribute.NewBoolean("wrongKey", true)
            };

            OffVariationTargetingRulesNotMatch(attributes);
        }
 public void UserString_is_null()
 {
     Assert.Throws <ArgumentException>(() => UnlaunchAttribute.NewString("attributeKey", null));
 }