public Task BadRttPingResponse_RequestShouldFail(int mode) { return(Http2LoopbackServer.CreateClientAndServerAsync(async uri => { using var handler = CreateHttpClientHandler(); using HttpClient client = CreateHttpClient(handler); HttpRequestException exception = await Assert.ThrowsAsync <HttpRequestException>(() => client.GetAsync(uri)); _output.WriteLine(exception.Message + exception.StatusCode); }, async server => { Http2LoopbackConnection connection = await server.EstablishConnectionAsync(); (int streamId, _) = await connection.ReadAndParseRequestHeaderAsync(); await connection.SendDefaultResponseHeadersAsync(streamId); PingFrame pingFrame = await connection.ReadPingAsync(); // expect an RTT PING if (mode == 0) { // Invalid PING payload await connection.SendPingAckAsync(-6666); // send an invalid PING response } else { // Unexpected PING response await connection.SendPingAckAsync(pingFrame.Data); // send an valid PING response await connection.SendPingAckAsync(pingFrame.Data - 1); // send a second unexpected PING response } await connection.SendResponseDataAsync(streamId, new byte[] { 1, 2, 3 }, true); // otherwise fine response }, NoAutoPingResponseHttp2Options)); }