private async Task TestStreamInterruption_Impl() { var logFactory = new TestLoggerFactory(); using (CustomListenerHost.Start(app => { SetupDefaultAppBuilder(app); app.SetLoggerFactory(logFactory); }, new NamedPipeListener(TestContext.TestName))) { var dialer = new NamedPipeDialer(TestContext.TestName); using (var fuzzyStream = await dialer.DialAsync(new HttpRequestMessage(), CancellationToken.None)) { // just write the first line of a valid http request, and drop the connection var payload = Encoding.ASCII.GetBytes("GET /docs/index.html HTTP/1.0\n"); await fuzzyStream.WriteAsync(payload, 0, payload.Length); } var ex = await logFactory.ExceptionReceived.Task; Assert.IsInstanceOfType(ex, typeof(EndOfStreamException)); // Test the stream still works afterwards var client = new HttpClient(new DialMessageHandler(dialer)); var result = await client.PostAsJsonAsync("http://localhost/api/e2e-tests/hello", new PersonMessage { Name = "Test" }); var wlcMsg = await result.Content.ReadAsAsync <WelcomeMessage>(); Assert.AreEqual("Hello Test", wlcMsg.Text); } }
private async Task TestBodyStream_Impl() { var listener = new NamedPipeListener(TestContext.TestName); var payload = Encoding.UTF8.GetBytes("Hello world"); await listener.StartAsync(con => { Task.Run(async() => { try { await con.WriteAsync(payload, 0, payload.Length); } catch (Exception e) { Debug.WriteLine("... WriteAsync exception:" + e.Message); } }); }, CancellationToken.None); var dialer = new NamedPipeDialer(TestContext.TestName); var stream = await dialer.DialAsync(new HttpRequestMessage(), CancellationToken.None); var bodyStream = new BodyStream(stream, payload.Length); var data = new byte[4096]; var read = await bodyStream.ReadAsync(data, 0, data.Length); Assert.AreEqual(payload.Length, read); read = await bodyStream.ReadAsync(data, 0, data.Length); Assert.AreEqual(0, read); // Clean up await listener.StopAsync(CancellationToken.None); }