public async Task ConnectionShouldCloseAndSignalDoneWhenReadingFromInputFails(bool isServer) { var inPipe = new BufferedPipe(1024); var outPipe = new BufferedPipe(1024); var failableInPipe = new FailingPipe(inPipe); var http2Con = await ConnectionUtils.BuildEstablishedConnection( isServer, failableInPipe, outPipe, loggerProvider); // Make the next write attempt fail failableInPipe.FailNextRead = true; // Send something which triggers no response but will start a new read call await inPipe.WriteWindowUpdate(0, 128); // Wait for the connection to close the outgoing part await outPipe.AssertStreamEnd(); // If the connection was successfully closed close the incoming data // stream, since this is expected from a bidirectional stream implementation await inPipe.CloseAsync(); // Expect the connection to close within timeout var closed = http2Con.Done; Assert.True( closed == await Task.WhenAny(closed, Task.Delay(1000)), "Expected connection to close"); }
public async Task ConnectionShouldCloseAndSignalDoneWhenWritingToOutputFails(bool isServer) { var inPipe = new BufferedPipe(1024); var outPipe = new BufferedPipe(1024); var failableOutPipe = new FailingPipe(outPipe); var http2Con = await ConnectionUtils.BuildEstablishedConnection( isServer, inPipe, failableOutPipe, loggerProvider); // Make the next write attempt fail failableOutPipe.FailNextWrite = true; // Send something which triggers a response await inPipe.WritePing(new byte[8], false); // Wait for the connection to close the outgoing part await outPipe.AssertStreamEnd(); Assert.True(failableOutPipe.CloseCalled); // If the connection was successfully closed close the incoming data // stream, since this is expected from a bidirectional stream implementation await inPipe.CloseAsync(); // Expect the connection to close within timeout var closed = http2Con.Done; Assert.True( closed == await Task.WhenAny(closed, Task.Delay(1000)), "Expected connection to close"); }