public static async Task MakeHttpGet(Random random)
        {
            var baseAddress = new Uri(@"https://bing.com");
            var url         = @"?toWww=1&redig=test";

            // 5 minute timeout on all calls for debugging
            var buildStrategy = new HttpClientBuildStrategy(baseAddress)
                                .UseTimeOut(new TimeSpan(0, 5, 0));

            // 5 minute age then it'll retire
            var renewStrategy = new RenewStrategy()
                                .UseAgeStrategy(new TimeSpan(1, 5, 0));

            using (var client = new EffectiveHttpClient(buildStrategy, renewStrategy))
            {
                // Sleep random number of milliseconds (20 to 500) beforehand to allow connection reuse
                // This simulates real time concurrency scenarios
                Thread.Sleep(random.Next(100, 5000));

                // Make the real call
                var originatingThread = Thread.CurrentThread.ManagedThreadId;
                Console.WriteLine($"{originatingThread}: started...");

                var ret = await client.GetStringAsync(url).ConfigureAwait(false);

                var endingThread = Thread.CurrentThread.ManagedThreadId;
                Console.WriteLine($"{originatingThread} -> {endingThread}: downloaded {ret.Length} characters. {client.ToString()}");
            }
        }
        public void TestDefaultRenewStrategy()
        {
            var strategy = new RenewStrategy();

            // Default behavior is to renew whenever asked
            Assert.IsTrue(strategy.ShallRenew(this.renewable));
        }
Exemple #3
0
        public void TestHttpClientNotDisposedWhenDisposeCalled()
        {
            var baseAddress = "http://google.com";

            // since we cannot mock HttpClient.Dispose(non virtual), we mock HttpClient.Dispose(bool) instead.
            var httpClientMock = new Mock <HttpClient>();

            httpClientMock.Protected().Setup("Dispose", It.IsAny <bool>());
            var buildStrategy = new HttpClientBuildStrategy(new Uri(baseAddress), () => httpClientMock.Object);
            var renewStrategy = new RenewStrategy();
            var client        = new EffectiveHttpClient(buildStrategy, renewStrategy);

            // Call dispose, and make sure HttpClient is not really disposed
            client.Dispose();
            httpClientMock.Protected().Verify("Dispose", Times.Never(), It.IsAny <bool>());
            client.Dispose();
            httpClientMock.Protected().Verify("Dispose", Times.Never(), It.IsAny <bool>());
        }