public async Task SendAsync_WithMissingCredentials_Returns407() { var defaultClientHandler = GetDefaultClientHandler(); var service = Mock.Of <ICredentialService> (); var handler = new ProxyAuthenticationHandler(defaultClientHandler, service, new ProxyCache()) { InnerHandler = GetLambdaHandler(HttpStatusCode.ProxyAuthenticationRequired) }; var response = await SendAsync(handler); Assert.NotNull(response); Assert.AreEqual(HttpStatusCode.ProxyAuthenticationRequired, response.StatusCode); Mock.Get(service) .Verify( x => x.GetCredentialsAsync( ProxyAddress, It.IsAny <IWebProxy> (), CredentialType.ProxyCredentials, It.IsAny <bool> (), It.IsAny <CancellationToken> ()), Times.Once()); }
public override HttpMessageHandler CreateHttpMessageHandler(Uri uri, HttpClientSettings settings) { var proxy = WebRequestHelper.ProxyCache.GetProxy(uri); var clientHandler = new DefaultHttpClientHandler(proxy, settings); HttpMessageHandler messageHandler = clientHandler; if (proxy != null) { messageHandler = new ProxyAuthenticationHandler(clientHandler, HttpClientProvider.CredentialService, WebRequestHelper.ProxyCache) { NonInteractive = settings.NonInteractive }; } if (settings.SourceAuthenticationRequired) { var innerHandler = messageHandler; messageHandler = new HttpSourceAuthenticationHandler(uri, clientHandler, HttpClientProvider.CredentialService) { InnerHandler = innerHandler }; } return(messageHandler); }
public async Task SendAsync_WithUnauthenticatedProxy_PassesThru() { var defaultClientHandler = GetDefaultClientHandler(); var service = Mock.Of <ICredentialService> (); var handler = new ProxyAuthenticationHandler(defaultClientHandler, service, new ProxyCache()) { InnerHandler = GetLambdaHandler(HttpStatusCode.OK) }; var response = await SendAsync(handler); Assert.NotNull(response); Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); }
public async Task SendAsync_WhenCancelledDuringAcquiringCredentials_Throws() { // Arrange var defaultClientHandler = GetDefaultClientHandler(); var cts = new CancellationTokenSource(); var service = Mock.Of <ICredentialService> (); Mock.Get(service) .Setup( x => x.GetCredentialsAsync( ProxyAddress, It.IsAny <IWebProxy> (), CredentialType.ProxyCredentials, It.IsAny <bool> (), It.IsAny <CancellationToken> ())) .ThrowsAsync(new TaskCanceledException()) .Callback(() => cts.Cancel()); var handler = new ProxyAuthenticationHandler(defaultClientHandler, service, new ProxyCache()); var responses = new Queue <HttpStatusCode> ( new [] { HttpStatusCode.ProxyAuthenticationRequired, HttpStatusCode.OK }); var innerHandler = new LambdaMessageHandler( _ => new HttpResponseMessage(responses.Dequeue())); handler.InnerHandler = innerHandler; // Act await AssertThrowsAsync <TaskCanceledException> ( () => SendAsync (handler, cancellationToken : cts.Token)); Mock.Get(service) .Verify( x => x.GetCredentialsAsync( ProxyAddress, It.IsAny <IWebProxy> (), CredentialType.ProxyCredentials, It.IsAny <bool> (), It.IsAny <CancellationToken> ()), Times.Once); }
public async Task SendAsync_WithWrongCredentials_StopsRetryingAfter3Times() { var defaultClientHandler = GetDefaultClientHandler(); var service = Mock.Of <ICredentialService> (); Mock.Get(service) .Setup( x => x.GetCredentialsAsync( ProxyAddress, It.IsAny <IWebProxy> (), CredentialType.ProxyCredentials, It.IsAny <bool> (), It.IsAny <CancellationToken> ())) .Returns(() => Task.FromResult <ICredentials> (new NetworkCredential())); var handler = new ProxyAuthenticationHandler(defaultClientHandler, service, new ProxyCache()); int retryCount = 0; var innerHandler = new LambdaMessageHandler( _ => { retryCount++; return(new HttpResponseMessage(HttpStatusCode.ProxyAuthenticationRequired)); }); handler.InnerHandler = innerHandler; var response = await SendAsync(handler); Assert.NotNull(response); Assert.AreEqual(HttpStatusCode.ProxyAuthenticationRequired, response.StatusCode); Assert.AreEqual(ProxyAuthenticationHandler.MaxAuthRetries, retryCount); Mock.Get(service) .Verify( x => x.GetCredentialsAsync( ProxyAddress, It.IsAny <IWebProxy> (), CredentialType.ProxyCredentials, It.IsAny <bool> (), It.IsAny <CancellationToken> ()), Times.Exactly(2)); }
public async Task SendAsync_WithAcquiredCredentials_RetriesRequest() { var defaultClientHandler = GetDefaultClientHandler(); var service = Mock.Of <ICredentialService> (); Mock.Get(service) .Setup( x => x.GetCredentialsAsync( ProxyAddress, It.IsAny <IWebProxy> (), CredentialType.ProxyCredentials, It.IsAny <bool> (), It.IsAny <CancellationToken> ())) .Returns(() => Task.FromResult <ICredentials> (new NetworkCredential())); var handler = new ProxyAuthenticationHandler(defaultClientHandler, service, new ProxyCache()); var responses = new Queue <HttpStatusCode> ( new [] { HttpStatusCode.ProxyAuthenticationRequired, HttpStatusCode.OK }); var innerHandler = new LambdaMessageHandler( _ => new HttpResponseMessage(responses.Dequeue())); handler.InnerHandler = innerHandler; var response = await SendAsync(handler); Assert.NotNull(response); Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); Mock.Get(service) .Verify( x => x.GetCredentialsAsync( ProxyAddress, It.IsAny <IWebProxy> (), CredentialType.ProxyCredentials, It.IsAny <bool> (), It.IsAny <CancellationToken> ()), Times.Once()); }