public void GetTreatmentWithConfig_WithtBUR_WhenTreatmentDoesntExist_ReturnsControl() { // Arrange. using (var httpClientMock = GetHttpClientMock()) { var impressionListener = new IntegrationTestsImpressionListener(50); var configurations = GetConfigurationOptions(httpClientMock?.GetUrl(), impressionListener: impressionListener); var apikey = "base-apikey6"; var splitFactory = new SplitFactory(apikey, configurations); var client = splitFactory.Client(); client.BlockUntilReady(10000); // Act. var result = client.GetTreatment("nico_test", "Random_Treatment"); // Assert. Assert.AreEqual("control", result); // Validate impressions in listener. Thread.Sleep(2000); var impressionQueue = impressionListener.GetQueue(); var keyImpressions = impressionQueue.FetchAll(); Assert.AreEqual(0, keyImpressions.Count); //Validate impressions sent to the be. AssertSentImpressions(0, httpClientMock); client.Destroy(); } }
protected override ConfigurationOptions GetConfigurationOptions(HttpClientMock httpClientMock = null, int?eventsPushRate = null, int?eventsQueueSize = null, int?featuresRefreshRate = null, bool?ipAddressesEnabled = null) { _impressionListener = new IntegrationTestsImpressionListener(50); var cacheConfig = new CacheAdapterConfigurationOptions { Host = Host, Port = Port, Password = Password, Database = Database }; return(new ConfigurationOptions { ImpressionListener = _impressionListener, FeaturesRefreshRate = featuresRefreshRate ?? 1, SegmentsRefreshRate = 1, ImpressionsRefreshRate = 1, MetricsRefreshRate = 1, EventsPushRate = eventsPushRate ?? 1, IPAddressesEnabled = ipAddressesEnabled, CacheAdapterConfig = cacheConfig, Mode = Mode.Consumer }); }
protected override ConfigurationOptions GetConfigurationOptions(HttpClientMock httpClientMock = null, int?eventsPushRate = null, int?eventsQueueSize = null, int?featuresRefreshRate = null, bool?ipAddressesEnabled = null) { _impressionListener = new IntegrationTestsImpressionListener(50); var cacheConfig = new CacheAdapterConfigurationOptions { Type = AdapterType.Redis, Host = Host, Port = Port, Password = Password, Database = Database, ConnectTimeout = 5000, ConnectRetry = 3, SyncTimeout = 1000, UserPrefix = UserPrefix }; return(new ConfigurationOptions { ReadTimeout = 20000, ConnectionTimeout = 20000, ImpressionListener = _impressionListener, FeaturesRefreshRate = featuresRefreshRate ?? 1, SegmentsRefreshRate = 1, ImpressionsRefreshRate = 1, MetricsRefreshRate = 1, EventsPushRate = eventsPushRate ?? 1, Mode = Mode.Consumer, CacheAdapterConfig = cacheConfig, IPAddressesEnabled = ipAddressesEnabled }); }
public void GetTreatments_WithtBUR_WhenTreatmentsDoesntExist_ReturnsTreatments() { // Arrange. using (var httpClientMock = GetHttpClientMock()) { var impressionListener = new IntegrationTestsImpressionListener(50); var configurations = GetConfigurationOptions(httpClientMock?.GetUrl(), impressionListener: impressionListener); var apikey = "base-apikey9"; var splitFactory = new SplitFactory(apikey, configurations); var client = splitFactory.Client(); client.BlockUntilReady(10000); // Act. var result = client.GetTreatments("nico_test", new List <string> { "FACUNDO_TEST", "Random_Treatment", "MAURO_TEST", "Test_Save_1", "Random_Treatment_2", }); // Assert. Assert.AreEqual("on", result["FACUNDO_TEST"]); Assert.AreEqual("control", result["Random_Treatment"]); Assert.AreEqual("off", result["MAURO_TEST"]); Assert.AreEqual("off", result["Test_Save_1"]); Assert.AreEqual("control", result["Random_Treatment_2"]); client.Destroy(); // Validate impressions. Thread.Sleep(2000); var impressionQueue = impressionListener.GetQueue(); var keyImpressions = impressionQueue.FetchAll(); var impression1 = keyImpressions .Where(ki => ki.feature.Equals("FACUNDO_TEST")) .Where(ki => ki.keyName.Equals("nico_test")) .FirstOrDefault(); var impression2 = keyImpressions .Where(ki => ki.feature.Equals("MAURO_TEST")) .Where(ki => ki.keyName.Equals("nico_test")) .FirstOrDefault(); var impression3 = keyImpressions .Where(ki => ki.feature.Equals("Test_Save_1")) .Where(ki => ki.keyName.Equals("nico_test")) .FirstOrDefault(); AssertImpression(impression1, 1506703262916, "FACUNDO_TEST", "nico_test", "whitelisted", "on"); AssertImpression(impression2, 1506703262966, "MAURO_TEST", "nico_test", "not in split", "off"); AssertImpression(impression3, 1503956389520, "Test_Save_1", "nico_test", "in segment all", "off"); Assert.AreEqual(3, keyImpressions.Count); //Validate impressions sent to the be. AssertSentImpressions(3, httpClientMock, impression1, impression2, impression3); } }
public void GetTreatmentWithConfig_WithtInputValidation_ReturnsTreatments() { // Arrange. using (var httpClientMock = GetHttpClientMock()) { var impressionListener = new IntegrationTestsImpressionListener(50); var configurations = GetConfigurationOptions(httpClientMock?.GetUrl(), impressionListener: impressionListener); var apikey = "base-apikey5"; var splitFactory = new SplitFactory(apikey, configurations); var client = splitFactory.Client(); client.BlockUntilReady(10000); // Act. var result1 = client.GetTreatmentWithConfig("nico_test", "FACUNDO_TEST"); var result2 = client.GetTreatmentWithConfig(string.Empty, "FACUNDO_TEST"); var result3 = client.GetTreatmentWithConfig("test", string.Empty); var result4 = client.GetTreatmentWithConfig("mauro", "MAURO_TEST"); client.Destroy(); // Assert. Assert.AreEqual("on", result1.Treatment); Assert.AreEqual("control", result2.Treatment); Assert.AreEqual("control", result3.Treatment); Assert.AreEqual("on", result4.Treatment); Assert.AreEqual("{\"color\":\"green\"}", result1.Config); Assert.IsNull(result2.Config); Assert.IsNull(result3.Config); Assert.AreEqual("{\"version\":\"v2\"}", result4.Config); // Validate impressions. Thread.Sleep(3000); var impressionQueue = impressionListener.GetQueue(); var keyImpressions = impressionQueue.FetchAll(); Assert.AreEqual(2, keyImpressions.Count); var impression1 = keyImpressions .Where(ki => ki.feature.Equals("FACUNDO_TEST")) .Where(ki => ki.keyName.Equals("nico_test")) .FirstOrDefault(); var impression2 = keyImpressions .Where(ki => ki.feature.Equals("MAURO_TEST")) .Where(ki => ki.keyName.Equals("mauro")) .FirstOrDefault(); AssertImpression(impression1, 1506703262916, "FACUNDO_TEST", "nico_test", "whitelisted", "on"); AssertImpression(impression2, 1506703262966, "MAURO_TEST", "mauro", "whitelisted", "on"); //Validate impressions sent to the be. AssertSentImpressions(2, httpClientMock, impression1, impression2); } }
public void Telemetry_ValidatesConfigInitAndStats() { // Arrange. using (var httpClientMock = GetHttpClientMock()) { var impressionListener = new IntegrationTestsImpressionListener(50); var configurations = GetConfigurationOptions(httpClientMock.GetUrl(), impressionListener: impressionListener); var apikey = "apikey-telemetry"; var splitFactory = new SplitFactory(apikey, configurations); var client = splitFactory.Client(); client.Track("test-key", "tt", "test"); try { client.BlockUntilReady(0); } catch { client.BlockUntilReady(10000); } // Act. var result = client.GetTreatment("nico_test", "FACUNDO_TEST"); Thread.Sleep(3000); // Assert. Assert.AreEqual("on", result); var sentConfig = GetMetricsConfigSentBackend(httpClientMock); Assert.IsNotNull(sentConfig); Assert.AreEqual(configurations.StreamingEnabled, sentConfig.StreamingEnabled); Assert.AreEqual("memory", sentConfig.Storage); Assert.AreEqual(configurations.FeaturesRefreshRate, (int)sentConfig.Rates.Splits); Assert.AreEqual(configurations.SegmentsRefreshRate, (int)sentConfig.Rates.Events); Assert.AreEqual(60, (int)sentConfig.Rates.Impressions); Assert.AreEqual(3600, (int)sentConfig.Rates.Telemetry); Assert.IsTrue(sentConfig.UrlOverrides.Telemetry); Assert.IsTrue(sentConfig.UrlOverrides.Sdk); Assert.IsTrue(sentConfig.UrlOverrides.Events); Assert.IsFalse(sentConfig.UrlOverrides.Stream); Assert.IsFalse(sentConfig.UrlOverrides.Auth); Assert.AreEqual(30000, (int)sentConfig.ImpressionsQueueSize); Assert.AreEqual(10000, (int)sentConfig.EventsQueueSize); Assert.AreEqual(ImpressionsMode.Optimized, sentConfig.ImpressionsMode); Assert.IsTrue(sentConfig.ImpressionListenerEnabled); Assert.IsTrue(1 <= sentConfig.ActiveFactories); Assert.AreEqual(1, sentConfig.BURTimeouts); var sentStats = GetMetricsStatsSentBackend(httpClientMock); Assert.AreEqual(0, sentStats.Count); client.Destroy(); } }
public void GetTreatment_WithtInputValidation_ReturnsTreatments() { // Arrange. using (var httpClientMock = GetHttpClientMock()) { var impressionListener = new IntegrationTestsImpressionListener(50); var configurations = GetConfigurationOptions(httpClientMock?.GetUrl(), impressionListener: impressionListener); var apikey = "base-apikey2"; var splitFactory = new SplitFactory(apikey, configurations); var client = splitFactory.Client(); client.BlockUntilReady(10000); // Act. var result1 = client.GetTreatment("nico_test", "FACUNDO_TEST"); var result2 = client.GetTreatment(string.Empty, "FACUNDO_TEST"); var result3 = client.GetTreatment("1", string.Empty); var result4 = client.GetTreatment("24", "Test_Save_1"); // Assert. Assert.AreEqual("on", result1); Assert.AreEqual("control", result2); Assert.AreEqual("control", result3); Assert.AreEqual("off", result4); client.Destroy(); // Validate impressions in listener. Thread.Sleep(2000); var impressionQueue = impressionListener.GetQueue(); var keyImpressions = impressionQueue.FetchAll(); Assert.AreEqual(2, keyImpressions.Count); var impression1 = keyImpressions .Where(ki => ki.feature.Equals("FACUNDO_TEST")) .Where(ki => ki.keyName.Equals("nico_test")) .FirstOrDefault(); var impression2 = keyImpressions .Where(ki => ki.feature.Equals("Test_Save_1")) .Where(ki => ki.keyName.Equals("24")) .FirstOrDefault(); AssertImpression(impression1, 1506703262916, "FACUNDO_TEST", "nico_test", "whitelisted", "on"); AssertImpression(impression2, 1503956389520, "Test_Save_1", "24", "in segment all", "off"); //Validate impressions sent to the be. AssertSentImpressions(2, httpClientMock, impression1, impression2); client.Destroy(); } }
protected override ConfigurationOptions GetConfigurationOptions(HttpClientMock httpClientMock = null, int?eventsPushRate = null, int?eventsQueueSize = null, int?featuresRefreshRate = null, bool?ipAddressesEnabled = null) { _impressionListener = new IntegrationTestsImpressionListener(50); return(new ConfigurationOptions { Endpoint = $"http://localhost:{httpClientMock.GetPort()}", EventsEndpoint = $"http://localhost:{httpClientMock.GetPort()}", ReadTimeout = 20000, ConnectionTimeout = 20000, ImpressionListener = _impressionListener, FeaturesRefreshRate = featuresRefreshRate ?? 1, SegmentsRefreshRate = 1, ImpressionsRefreshRate = 1, MetricsRefreshRate = 1, EventsPushRate = eventsPushRate ?? 1, EventsQueueSize = eventsQueueSize, IPAddressesEnabled = ipAddressesEnabled }); }