diff --git a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs index 9d3fb8302012..434400f70f8e 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs @@ -754,7 +754,7 @@ private Task ProcessDataFrameAsync(in ReadOnlySequence payload) // // We choose to do that here so we don't have to keep state to track implicitly closed // streams vs. streams closed with END_STREAM or RST_STREAM. - throw new Http2ConnectionErrorException(CoreStrings.FormatHttp2ErrorStreamClosed(_incomingFrame.Type, _incomingFrame.StreamId), Http2ErrorCode.STREAM_CLOSED, ConnectionEndReason.UnknownStream); + throw new Http2ConnectionErrorException(CoreStrings.FormatHttp2ErrorStreamClosed(_incomingFrame.Type, _incomingFrame.StreamId), Http2ErrorCode.STREAM_CLOSED, ConnectionEndReason.FrameAfterStreamClose); } private Http2ConnectionErrorException CreateReceivedFrameStreamAbortedException(Http2Stream stream) diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs index 3d0d0d10ba3b..b5f6006cf220 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs @@ -1639,7 +1639,7 @@ await WaitForConnectionErrorAsync( CoreStrings.FormatHttp2ErrorStreamClosed(Http2FrameType.DATA, streamId: 1), CoreStrings.FormatHttp2ErrorStreamHalfClosedRemote(Http2FrameType.DATA, streamId: 1) }); - AssertConnectionEndReason(ConnectionEndReason.UnknownStream); + AssertConnectionEndReason(ConnectionEndReason.FrameAfterStreamClose); } [Fact] @@ -1853,7 +1853,7 @@ await WaitForConnectionErrorAsync( expectedErrorCode: Http2ErrorCode.STREAM_CLOSED, expectedErrorMessage: CoreStrings.FormatHttp2ErrorStreamClosed(Http2FrameType.DATA, streamId: 1)); - AssertConnectionEndReason(ConnectionEndReason.UnknownStream); + AssertConnectionEndReason(ConnectionEndReason.FrameAfterStreamClose); } [Fact] @@ -3549,11 +3549,12 @@ public async Task RST_STREAM_IncompleteRequest_AdditionalDataFrames_ConnectionAb await SendDataAsync(1, new byte[2], endStream: false); await SendRstStreamAsync(1); await SendDataAsync(1, new byte[10], endStream: false); - tcs.TrySetResult(); await WaitForConnectionErrorAsync(ignoreNonGoAwayFrames: false, expectedLastStreamId: 1, Http2ErrorCode.STREAM_CLOSED, CoreStrings.FormatHttp2ErrorStreamAborted(Http2FrameType.DATA, 1)); + tcs.TrySetResult(); // Don't let the response start until after the abort + AssertConnectionEndReason(ConnectionEndReason.FrameAfterStreamClose); } @@ -3575,11 +3576,12 @@ public async Task RST_STREAM_IncompleteRequest_AdditionalTrailerFrames_Connectio await SendDataAsync(1, new byte[2], endStream: false); await SendRstStreamAsync(1); await SendHeadersAsync(1, Http2HeadersFrameFlags.END_HEADERS | Http2HeadersFrameFlags.END_STREAM, _requestTrailers); - tcs.TrySetResult(); await WaitForConnectionErrorAsync(ignoreNonGoAwayFrames: false, expectedLastStreamId: 1, Http2ErrorCode.STREAM_CLOSED, CoreStrings.FormatHttp2ErrorStreamAborted(Http2FrameType.HEADERS, 1)); + tcs.TrySetResult(); // Don't let the response start until after the abort + AssertConnectionEndReason(ConnectionEndReason.FrameAfterStreamClose); } @@ -5742,7 +5744,7 @@ await WaitForConnectionErrorAsync( CoreStrings.FormatHttp2ErrorStreamClosed(Http2FrameType.DATA, streamId: 1), CoreStrings.FormatHttp2ErrorStreamHalfClosedRemote(Http2FrameType.DATA, streamId: 1) }); - AssertConnectionEndReason(ConnectionEndReason.UnknownStream); + AssertConnectionEndReason(ConnectionEndReason.FrameAfterStreamClose); break; case Http2FrameType.HEADERS: @@ -5833,7 +5835,7 @@ await WaitForConnectionErrorAsync( switch (finalFrameType) { case Http2FrameType.DATA: - AssertConnectionEndReason(ConnectionEndReason.UnknownStream); + AssertConnectionEndReason(ConnectionEndReason.FrameAfterStreamClose); break; case Http2FrameType.HEADERS: diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2TimeoutTests.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2TimeoutTests.cs index 0e10567e68b9..6c0486a8e224 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2TimeoutTests.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2TimeoutTests.cs @@ -304,7 +304,7 @@ await WaitForConnectionErrorAsyncDoNotCloseTransport