コード例 #1
0
        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();
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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();
        }