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)); }
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>()); }