diff --git a/OptimizelySDK.Tests/ConfigTest/HttpProjectConfigManagerTest.cs b/OptimizelySDK.Tests/ConfigTest/HttpProjectConfigManagerTest.cs index 59ca7fbe..14454e03 100644 --- a/OptimizelySDK.Tests/ConfigTest/HttpProjectConfigManagerTest.cs +++ b/OptimizelySDK.Tests/ConfigTest/HttpProjectConfigManagerTest.cs @@ -182,7 +182,8 @@ public void TestOnReadyPromiseResolvedImmediatelyWhenDatafileIsProvided() .WithStartByDefault() .Build(); - httpManager.OnReady().Wait(); + // OnReady waits until is resolved, need to add time in case of deadlock. + httpManager.OnReady().Wait(10000); Assert.AreEqual("15", httpManager.GetConfig().Revision); @@ -208,7 +209,9 @@ public void TestOnReadyPromiseWaitsForProjectConfigRetrievalWhenDatafileIsNotPro .WithStartByDefault(true) .Build(); t.Wait(); - httpManager.OnReady().Wait(); + + // OnReady waits until is resolved, need to add time in case of deadlock. + httpManager.OnReady().Wait(10000); Assert.NotNull(httpManager.GetConfig()); httpManager.Dispose(); } @@ -244,7 +247,7 @@ public void TestHttpConfigManagerDoesNotWaitForTheConfigWhenDeferIsTrue() #region Notification [Test] public void TestHttpConfigManagerSendConfigUpdateNotificationWhenProjectConfigGetsUpdated() - { + { var t = MockSendAsync(TestData.Datafile); var httpManager = new HttpProjectConfigManager.Builder() @@ -266,7 +269,7 @@ public void TestHttpConfigManagerSendConfigUpdateNotificationWhenProjectConfigGe [Test] public void TestHttpConfigManagerDoesNotSendConfigUpdateNotificationWhenDatafileIsProvided() - { + { var t = MockSendAsync(TestData.Datafile, TimeSpan.FromMilliseconds(100)); var httpManager = new HttpProjectConfigManager.Builder() @@ -460,7 +463,6 @@ public void TestAuthenticationHeaderWhenTokenProvided() [Test] public void TestFormatUrlHigherPriorityThanDefaultUrl() { - var t = MockSendAsync(); var httpManager = new HttpProjectConfigManager.Builder() .WithSdkKey("QBw9gFM8oTn7ogY9ANCC1z") @@ -483,7 +485,6 @@ public Task MockSendAsync(string datafile = null, TimeSpan? delay = null, HttpSt { return TestHttpProjectConfigManagerUtil.MockSendAsync(HttpClientMock, datafile, delay, statusCode); } - #endregion } } diff --git a/OptimizelySDK.Tests/ConfigTest/PollingProjectConfigManagerTest.cs b/OptimizelySDK.Tests/ConfigTest/PollingProjectConfigManagerTest.cs index 80bdbb26..e7877ca8 100644 --- a/OptimizelySDK.Tests/ConfigTest/PollingProjectConfigManagerTest.cs +++ b/OptimizelySDK.Tests/ConfigTest/PollingProjectConfigManagerTest.cs @@ -34,12 +34,12 @@ public class PollingProjectConfigManagerTest [SetUp] public void Setup() - { + { LoggerMock = new Mock(); LoggerMock.Setup(l => l.Log(It.IsAny(), It.IsAny())); ProjectConfig = DatafileProjectConfig.Create(TestData.Datafile, LoggerMock.Object, null); } - + [Test] public void TestPollingConfigManagerDoesNotBlockWhenProjectConfigIsAlreadyProvided() { @@ -53,6 +53,7 @@ public void TestPollingConfigManagerDoesNotBlockWhenProjectConfigIsAlreadyProvid Assert.True(stopwatch.Elapsed.Seconds == 0); Assert.NotNull(config); + configManager.Dispose(); } [Test] @@ -66,6 +67,7 @@ public void TestPollingConfigManagerBlocksWhenProjectConfigIsNotProvided() stopwatch.Stop(); Assert.True(stopwatch.Elapsed.TotalMilliseconds >= 500); + configManager.Dispose(); } [Test] @@ -86,6 +88,7 @@ public void TestImmediatelyCalledScheduledRequestIfPreviousRequestDelayedInRespo // Should be called immediately after 1200 seconds. Here checking after 1300 secs. //Thread.Sleep(200); Assert.AreEqual(2, configManager.Counter); + configManager.Dispose(); } @@ -99,7 +102,7 @@ public void TestTimedoutIfTakingMorethanBlockingTimeout() configManager.Start(); var config = configManager.GetConfig(); LoggerMock.Verify(l => l.Log(LogLevel.WARN, "Timeout exceeded waiting for ProjectConfig to be set, returning null.")); - + configManager.Dispose(); } [Test] @@ -113,6 +116,7 @@ public void TestTimedoutOnlyIfSchedulerStarted() var config = configManager.GetConfig(); sw.Stop(); Assert.GreaterOrEqual(sw.Elapsed.TotalMilliseconds, 950); + configManager.Dispose(); } [Test] @@ -126,6 +130,7 @@ public void TestDontTimedoutIfSchedulerNotStarted() var config = configManager.GetConfig(); sw.Stop(); Assert.GreaterOrEqual(sw.Elapsed.TotalMilliseconds, 1000); + configManager.Dispose(); } [Test] @@ -142,6 +147,7 @@ public void TestReturnDatafileImmediatelyOnceGetValidDatafileRemotely() var config = configManager.GetConfig(); Assert.NotNull(config); Assert.AreEqual(1, configManager.Counter); + configManager.Dispose(); } [Test] @@ -168,6 +174,7 @@ public void TestWaitUntilValidDatfileIsNotGiven() var config = configManager.GetConfig(); //Assert.NotNull(config); Assert.AreEqual(3, configManager.Counter); + configManager.Dispose(); } @@ -186,6 +193,7 @@ public void TestWaitUntilValidDatafileIsNotGivenOrTimedout() var config = configManager.GetConfig(); Assert.Null(config); Assert.AreEqual(3, configManager.Counter); + configManager.Dispose(); } } } diff --git a/OptimizelySDK.Tests/OptimizelyTest.cs b/OptimizelySDK.Tests/OptimizelyTest.cs index ba2a97a7..d4ae9081 100644 --- a/OptimizelySDK.Tests/OptimizelyTest.cs +++ b/OptimizelySDK.Tests/OptimizelyTest.cs @@ -3365,8 +3365,10 @@ public void TestDFMNotificationWhenProjectConfigIsUpdated() var optimizely = new Optimizely(httpManager, notificationCenter); optimizely.NotificationCenter.AddNotification(NotificationCenter.NotificationType.OptimizelyConfigUpdate, NotificationCallbackMock.Object.TestConfigUpdateCallback); httpManager.Start(); + + // wait till 10 seconds max, to avoid stale state in worst case. + httpManager.OnReady().Wait(10000); - httpManager.OnReady().Wait(-1); t.Wait(); NotificationCallbackMock.Verify(nc => nc.TestConfigUpdateCallback(), Times.Once); httpManager.Dispose(); @@ -3389,7 +3391,9 @@ public void TestDFMWhenDatafileProvidedDoesNotNotifyWithoutStart() var optimizely = new Optimizely(httpManager); optimizely.NotificationCenter.AddNotification(NotificationCenter.NotificationType.OptimizelyConfigUpdate, NotificationCallbackMock.Object.TestConfigUpdateCallback); - httpManager.OnReady().Wait(-1); + + // added 10 secs max wait to avoid stale state. + httpManager.OnReady().Wait(10000); NotificationCallbackMock.Verify(nc => nc.TestConfigUpdateCallback(), Times.Never); httpManager.Dispose(); @@ -3833,6 +3837,7 @@ public void TestAfterDisposeAPIsNoLongerValid() var activateAfterDispose = optimizely.Activate("test_experiment", TestUserId, new UserAttributes() { { "device_type", "iPhone" }, { "location", "San Francisco" } }); Assert.Null(activateAfterDispose); + httpManager.Dispose(); } [Test]