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); }
public void StringNotEndsWith() { CreateEndsWithCondition(AttributeType.String, "dotnet"); var attributes = new[] { UnlaunchAttribute.NewString(AttributeKey, "dotnet-sdk") }; OffVariationTargetingRulesNotMatch(attributes); }
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); }
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); }
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); }
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); }
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)); }
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); }
[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); }
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); }
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); }
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); }
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); }
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); }
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); }
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)); }