Example #1
0
        public Task ExpectedKeysAreInFeatures()
        {
            var handler = new ClientHandler(new PathString("/A/Path/"), new InspectingApplication(features =>
            {
                // TODO: Assert.True(context.RequestAborted.CanBeCanceled);
                Assert.Equal("HTTP/2.0", features.Get <IHttpRequestFeature>().Protocol);
                Assert.Equal("GET", features.Get <IHttpRequestFeature>().Method);
                Assert.Equal("https", features.Get <IHttpRequestFeature>().Scheme);
                Assert.Equal("/A/Path", features.Get <IHttpRequestFeature>().PathBase);
                Assert.Equal("/and/file.txt", features.Get <IHttpRequestFeature>().Path);
                Assert.Equal("?and=query", features.Get <IHttpRequestFeature>().QueryString);
                Assert.NotNull(features.Get <IHttpRequestFeature>().Body);
                Assert.NotNull(features.Get <IHttpRequestFeature>().Headers);
                Assert.NotNull(features.Get <IHttpResponseFeature>().Headers);
                Assert.NotNull(features.Get <IHttpResponseFeature>().Body);
                Assert.Equal(200, features.Get <IHttpResponseFeature>().StatusCode);
                Assert.Null(features.Get <IHttpResponseFeature>().ReasonPhrase);
                Assert.Equal("example.com", features.Get <IHttpRequestFeature>().Headers["host"]);
                Assert.NotNull(features.Get <IHttpRequestLifetimeFeature>());
            }));
            var httpClient = new HttpClient(handler);

            return(httpClient.GetAsync("https://example.com/A/Path/and/file.txt?and=query"));
        }
Example #2
0
        public async Task ResubmitRequestWorks()
        {
            int requestCount = 1;
            var handler      = new ClientHandler(PathString.Empty, new DummyApplication(async context =>
            {
                int read = await context.Request.Body.ReadAsync(new byte[100], 0, 100);
                Assert.Equal(11, read);

                context.Response.Headers["TestHeader"] = "TestValue:" + requestCount++;
            }));

            HttpMessageInvoker invoker = new HttpMessageInvoker(handler);
            HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, "https://example.com/");

            message.Content = new StringContent("Hello World");

            HttpResponseMessage response = await invoker.SendAsync(message, CancellationToken.None);

            Assert.Equal("TestValue:1", response.Headers.GetValues("TestHeader").First());

            response = await invoker.SendAsync(message, CancellationToken.None);

            Assert.Equal("TestValue:2", response.Headers.GetValues("TestHeader").First());
        }
Example #3
0
        public Task ExceptionFromOnStartingWithErrorHandlerIsReported()
        {
            var handler = new ClientHandler(PathString.Empty, new DummyApplication(async context =>
            {
                context.Response.OnStarting(() =>
                {
                    throw new InvalidOperationException(new string('a', 1024 * 32));
                });
                try
                {
                    await context.Response.WriteAsync("Hello World");
                }
                catch (Exception ex)
                {
                    // This is no longer the first write, so it doesn't trigger OnStarting again.
                    // The exception is large enough that it fills the pipe and stalls.
                    await context.Response.WriteAsync(ex.ToString());
                }
            }));
            var httpClient = new HttpClient(handler);

            return(Assert.ThrowsAsync <InvalidOperationException>(() => httpClient.GetAsync("https://example.com/",
                                                                                            HttpCompletionOption.ResponseHeadersRead)));
        }