public async Task HttpSource_TimesOutDownload() { // Arrange using (var td = TestDirectory.Create()) { var expectedMilliseconds = 250; var server = new TcpListenerServer { Mode = TestServerMode.SlowResponseBody, SleepDuration = TimeSpan.FromSeconds(10) }; var packageSource = new PackageSource(FakeSource); var handler = new HttpClientHandler(); var handlerResource = new HttpHandlerResourceV3(handler, handler); var httpSource = new HttpSource( packageSource, () => Task.FromResult((HttpHandlerResource)handlerResource), NullThrottle.Instance) { HttpCacheDirectory = td }; var logger = new TestLogger(); // Act & Assert var actual = await Assert.ThrowsAsync <IOException>(() => server.ExecuteAsync(uri => httpSource.GetJObjectAsync( new HttpSourceRequest(uri, logger) { DownloadTimeout = TimeSpan.FromMilliseconds(expectedMilliseconds) }, logger, CancellationToken.None))); Assert.IsType <TimeoutException>(actual.InnerException); Assert.EndsWith( $"timed out because no data was received for {expectedMilliseconds}ms.", actual.Message); } }