public void Create_NullBaseUrl_ShouldThrowArgumentNullException()
        {
            // Act
            var ex = Record.Exception(() => WebRequestHttpClientFactory.Configure(null).Create());

            // Assert
            ex.ShouldBeOfType <ArgumentNullException>();
        }
        public void Create_GivenHttpCache_ShouldSetHttpCacheForHttpClient()
        {
            var baseUri    = new Uri("http://fake.api.com");
            var timeout    = TimeSpan.FromSeconds(20);
            var httpClient = WebRequestHttpClientFactory.Configure(baseUri).WithTimeout(timeout).Create();

            httpClient.Client.Timeout.ShouldBe(timeout);
        }
        public void Create_GivenTimeout_ShouldSetTimeoutForHttpClient()
        {
            // Arrange
            var baseUri = new Uri("http://fake.api.com");
            var timeout = TimeSpan.FromSeconds(20);

            // Act
            var httpClient = WebRequestHttpClientFactory.Configure(baseUri).WithTimeout(timeout).Create();

            // Assert
            httpClient.Client.Timeout.ShouldBe(timeout);
        }
        public async Task GetResponseAsync_ShouldTimeoutOnSlowResponse()
        {
            // Arrange
            var httpClient   = WebRequestHttpClientFactory.Configure(new Uri(Url)).WithTimeout(TimeSpan.FromMilliseconds(100)).Create();
            var webRequester = new WebRequester(httpClient);

            // Act
            var exception = await Record.ExceptionAsync(async() => await webRequester.GetResponseAsync("/delay/250"));

            // Assert
            exception.ShouldBeOfType(typeof(TaskCanceledException));
        }
        public void Create_WithoutConnectionLeaseTimeout_ShouldGiveDefaultConnectionLeaseOnBaseUrl()
        {
            // Arrange
            var       baseUri = new Uri("http://fake.api.com");
            const int defaultConnectionLease = -1;
            // Act
            var httpClient = WebRequestHttpClientFactory.Configure(baseUri).Create();

            // Assert
            var connectionLeaseTimeout = ServicePointManager.FindServicePoint(baseUri).ConnectionLeaseTimeout;

            connectionLeaseTimeout.ShouldBe(defaultConnectionLease);
        }
        public void Create_GivenConnectionLeaseTimeout_ShouldSetConnectionLeaseOnBaseUrl()
        {
            // Arrange
            var       baseUri   = new Uri("http://fake.api.com");
            const int oneMinute = 60 * 1000;
            // Act
            var httpClient = WebRequestHttpClientFactory.Configure(baseUri).WithConnectionLeaseTimeout(60 * 1000).Create();

            // Assert
            var connectionLeaseTimeout = ServicePointManager.FindServicePoint(baseUri).ConnectionLeaseTimeout;

            connectionLeaseTimeout.ShouldBe(oneMinute);
        }
        public void Create_GivenDefaultRequestHeaders_ShouldSetRequestHeadersForHttpClient()
        {
            // Arrange
            var baseUri        = new Uri("http://fake.api.com");
            var requestHeaders = new Dictionary <string, string> {
                { "headerKey", "headerValue" }
            };

            // Act
            var httpClient = WebRequestHttpClientFactory.Configure(baseUri).WithDefaultRequestHeaders(requestHeaders).Create();

            // Assert
            httpClient.Client.DefaultRequestHeaders.Contains("headerKey").ShouldBeTrue();
        }
        public async Task GetResponseAsync_ShouldSetDefaultHeaders()
        {
            // Arrange
            var httpClient =
                WebRequestHttpClientFactory.Configure(new Uri(Url))
                .WithDefaultRequestHeaders(new Dictionary <string, string> {
                { "fakeHeader", "fakeValue" }
            })
                .Create();
            var webRequester = new WebRequester(httpClient);

            // Act
            var response = await webRequester.GetResponseAsStringAsync("/headers");

            // Assert
            response.Contains("fakeHeader").ShouldBeTrue();
        }
예제 #9
0
        public async Task GetResponseAsync_GivenConfiguratorThatAllowsCookiesOnRequestMessage_ShouldSetExpectedHeaders()
        {
            // Arrange
            var httpClient =
                WebRequestHttpClientFactory.Configure(new Uri(Url))
                .WithRequestHandlerConfigurator((handler) => handler.UseCookies = false)
                .WithDefaultRequestHeaders(new Dictionary <string, string> {
                { "Cookie", "foo=bar;bar=baz" }
            })
                .Create();
            var webRequester = new WebRequester(httpClient);

            // Act
            var headerResponse = await webRequester.GetResponseAsStringAsync("/get/headers");

            var cookieResponse = await webRequester.GetResponseAsStringAsync("/get/cookies");

            // Assert
            headerResponse.Contains("Cookie").ShouldBeTrue();
            headerResponse.Contains("foo=bar;bar=baz").ShouldBeTrue();
            cookieResponse.ShouldBe("{\"foo\":\"bar\",\"bar\":\"baz\"}");
        }
예제 #10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DefaultHttpClient"/> class.
 /// </summary>
 /// <param name="httpClientFactory">The factory used to create this <see cref="IHttpClient"/> implementation</param>
 /// <param name="defaultHttpHeaders">The default HTTP headers</param>
 public DefaultHttpClient([NotNull] WebRequestHttpClientFactory httpClientFactory, [NotNull] IHttpHeaders defaultHttpHeaders)
 {
     _httpClientFactory = httpClientFactory;
     Timeout = TimeSpan.FromSeconds(100);
     DefaultRequestHeaders = defaultHttpHeaders;
 }
예제 #11
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DefaultHttpClient"/> class.
 /// </summary>
 /// <param name="httpClientFactory">The factory used to create this <see cref="IHttpClient"/> implementation</param>
 /// <param name="defaultHttpHeaders">The default HTTP headers</param>
 public DefaultHttpClient([NotNull] WebRequestHttpClientFactory httpClientFactory, [NotNull] IHttpHeaders defaultHttpHeaders)
 {
     _httpClientFactory    = httpClientFactory;
     Timeout               = TimeSpan.FromSeconds(100);
     DefaultRequestHeaders = defaultHttpHeaders;
 }
 public WebRequesterIntegrationTests()
 {
     _webApp       = WebApp.Start <Startup>(Url);
     _webRequester = new WebRequester(WebRequestHttpClientFactory.Configure(new Uri(Url)).Create());
 }