public void TestHttpConfigManagerDoesNotWaitForTheConfigWhenDeferIsTrue() { var t = MockSendAsync(TestData.Datafile, TimeSpan.FromMilliseconds(150)); var httpManager = new HttpProjectConfigManager.Builder() .WithSdkKey("QBw9gFM8oTn7ogY9ANCC1z") .WithLogger(LoggerMock.Object) .WithPollingInterval(TimeSpan.FromSeconds(2)) // negligible timeout .WithBlockingTimeoutPeriod(TimeSpan.FromMilliseconds(50)) .WithStartByDefault() .Build(false); // When blocking timeout is 0 and defer is false and getconfig immediately called // should return null Assert.IsNull(httpManager.GetConfig()); // wait until config is retrieved. t.Wait(); // in case deadlock, it will release after 3sec. httpManager.OnReady().Wait(8000); HttpClientMock.Verify(_ => _.SendAsync(It.IsAny <HttpRequestMessage>())); Assert.NotNull(httpManager.GetConfig()); httpManager.Dispose(); }
public void TestOnReadyPromiseResolvedImmediatelyWhenDatafileIsProvided() { // Revision - 42 var t = MockSendAsync(TestData.SimpleABExperimentsDatafile, TimeSpan.FromMilliseconds(100)); HttpProjectConfigManager httpManager = new HttpProjectConfigManager.Builder() // Revision - 15 .WithSdkKey("10192104166") .WithDatafile(TestData.Datafile) .WithLogger(LoggerMock.Object) .WithPollingInterval(TimeSpan.FromMilliseconds(1000)) .WithBlockingTimeoutPeriod(TimeSpan.FromMilliseconds(500)) .WithStartByDefault() .Build(); // OnReady waits until is resolved, need to add time in case of deadlock. httpManager.OnReady().Wait(10000); Assert.AreEqual("15", httpManager.GetConfig().Revision); // loaded datafile from config manager after a second. // This wait triggers when SendAsync is triggered, OnReadyPromise is already resolved because of hardcoded datafile. t.Wait(); Task.Delay(200).Wait(); Assert.AreEqual("42", httpManager.GetConfig().Revision); httpManager.Dispose(); }
public void TestHttpProjectConfigManagerDoesntRaiseExceptionForDefaultErrorHandler() { var t = MockSendAsync(TestData.Datafile); HttpProjectConfigManager httpManager = new HttpProjectConfigManager.Builder() .WithSdkKey("10192104166") .WithFormat("https://cdn.optimizely.com/json/{0}.json") .WithLogger(LoggerMock.Object) .WithPollingInterval(TimeSpan.FromMilliseconds(1000)) .WithBlockingTimeoutPeriod(TimeSpan.FromMilliseconds(500)) .WithStartByDefault() .Build(true); t.Wait(1000); HttpClientMock.Verify(_ => _.SendAsync( It.Is <System.Net.Http.HttpRequestMessage>(requestMessage => requestMessage.RequestUri.ToString() == "https://cdn.optimizely.com/json/10192104166.json" ))); var datafileConfig = httpManager.GetConfig(); Assert.IsNotNull(datafileConfig); Assert.IsNull(datafileConfig.GetExperimentFromKey("project_config_not_valid").Key); LoggerMock.Verify(_ => _.Log(LogLevel.DEBUG, "Making datafile request to url \"https://cdn.optimizely.com/json/10192104166.json\"")); httpManager.Dispose(); }
public void TestPollingGivenOnlySdkKeyGetOptimizelyConfig() { HttpProjectConfigManager httpManager = new HttpProjectConfigManager.Builder() .WithSdkKey("QBw9gFM8oTn7ogY9ANCC1z") .WithLogger(LoggerMock.Object) .WithPollingInterval(TimeSpan.FromMilliseconds(1000)) .WithBlockingTimeoutPeriod(TimeSpan.FromMilliseconds(500)) .WithStartByDefault() .Build(true); Assert.NotNull(httpManager.GetConfig()); var optimizely = new Optimizely(httpManager); var optimizelyConfig = optimizely.GetOptimizelyConfig(); Assert.NotNull(optimizelyConfig); Assert.NotNull(optimizelyConfig.ExperimentsMap); Assert.NotNull(optimizelyConfig.FeaturesMap); Assert.NotNull(optimizelyConfig.Revision); optimizely.Dispose(); var optimizelyConfigAfterDispose = optimizely.GetOptimizelyConfig(); Assert.Null(optimizelyConfigAfterDispose); }
public void TestHttpConfigManagerDoesNotSendConfigUpdateNotificationWhenDatafileIsProvided() { var t = MockSendAsync(TestData.Datafile, TimeSpan.FromMilliseconds(100)); var httpManager = new HttpProjectConfigManager.Builder() .WithSdkKey("QBw9gFM8oTn7ogY9ANCC1z") .WithDatafile(TestData.Datafile) .WithLogger(LoggerMock.Object) .WithPollingInterval(TimeSpan.FromMilliseconds(1000)) .WithBlockingTimeoutPeriod(TimeSpan.FromMilliseconds(500)) .Build(); httpManager.NotifyOnProjectConfigUpdate += NotificationCallbackMock.Object.TestConfigUpdateCallback; NotificationCallbackMock.Verify(nc => nc.TestConfigUpdateCallback(), Times.Never); Assert.NotNull(httpManager.GetConfig()); Assert.NotNull(httpManager.GetConfig()); httpManager.Dispose(); }
public void TestHttpConfigManagerSendConfigUpdateNotificationWhenProjectConfigGetsUpdated() { var t = MockSendAsync(TestData.Datafile); var httpManager = new HttpProjectConfigManager.Builder() .WithSdkKey("QBw9gFM8oTn7ogY9ANCC1z") .WithLogger(LoggerMock.Object) .WithPollingInterval(TimeSpan.FromMilliseconds(1000)) .WithBlockingTimeoutPeriod(TimeSpan.FromMilliseconds(1000)) .WithStartByDefault(false) .Build(true); httpManager.NotifyOnProjectConfigUpdate += NotificationCallbackMock.Object.TestConfigUpdateCallback; httpManager.Start(); Assert.NotNull(httpManager.GetConfig()); Task.Delay(200).Wait(); NotificationCallbackMock.Verify(nc => nc.TestConfigUpdateCallback(), Times.AtLeastOnce); httpManager.Dispose(); }
public void TestOnReadyPromiseWaitsForProjectConfigRetrievalWhenDatafileIsNotProvided() { // Revision - 42 var t = MockSendAsync(TestData.SimpleABExperimentsDatafile, TimeSpan.FromMilliseconds(1000)); HttpProjectConfigManager httpManager = new HttpProjectConfigManager.Builder() .WithSdkKey("QBw9gFM8oTn7ogY9ANCC1z") .WithLogger(LoggerMock.Object) .WithPollingInterval(TimeSpan.FromSeconds(2)) .WithBlockingTimeoutPeriod(TimeSpan.FromSeconds(1)) .WithStartByDefault(true) .Build(); t.Wait(); // OnReady waits until is resolved, need to add time in case of deadlock. httpManager.OnReady().Wait(10000); Assert.NotNull(httpManager.GetConfig()); httpManager.Dispose(); }
public void TestHttpConfigManagerRetreiveProjectConfigBySDKKey() { var t = MockSendAsync(TestData.Datafile); HttpProjectConfigManager httpManager = new HttpProjectConfigManager.Builder() .WithSdkKey("QBw9gFM8oTn7ogY9ANCC1z") .WithLogger(LoggerMock.Object) .WithPollingInterval(TimeSpan.FromMilliseconds(1000)) .WithBlockingTimeoutPeriod(TimeSpan.FromMilliseconds(500)) .WithStartByDefault() .Build(); t.Wait(1000); HttpClientMock.Verify(_ => _.SendAsync( It.Is <System.Net.Http.HttpRequestMessage>(requestMessage => requestMessage.RequestUri.ToString() == "https://cdn.optimizely.com/datafiles/QBw9gFM8oTn7ogY9ANCC1z.json" ))); Assert.IsNotNull(httpManager.GetConfig()); httpManager.Dispose(); }