From a847ddfea5265218afab95adb7fd5eb3730091dc Mon Sep 17 00:00:00 2001 From: Radek Zikmund <32671551+rzikm@users.noreply.github.com> Date: Thu, 31 Mar 2022 21:26:58 +0200 Subject: [PATCH] Fix Wrong exception for Open*Stream after connection is closed (#67342) * Fix Wrong exception for Open*Stream after connection is closed * Don't handle InvalidState * Update src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/MsQuic/MsQuicStream.cs Co-authored-by: Natalia Kondratyeva Co-authored-by: Natalia Kondratyeva --- .../Quic/Implementations/MsQuic/MsQuicStream.cs | 6 ++++++ .../FunctionalTests/QuicConnectionTests.cs | 17 ++--------------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/MsQuic/MsQuicStream.cs b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/MsQuic/MsQuicStream.cs index a8c2bc38211..db7f1a73ad8 100644 --- a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/MsQuic/MsQuicStream.cs +++ b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/MsQuic/MsQuicStream.cs @@ -173,6 +173,12 @@ internal MsQuicStream(MsQuicConnection.State connectionState, QUIC_STREAM_OPEN_F GCHandle.ToIntPtr(_state.StateGCHandle), out _state.Handle); + if (status == MsQuicStatusCodes.Aborted) + { + // connection already aborted by peer, throw relevant exception + throw ThrowHelper.GetConnectionAbortedException(connectionState.AbortErrorCode); + } + QuicExceptionHelpers.ThrowIfFailed(status, "Failed to open stream to peer."); Debug.Assert(!Monitor.IsEntered(_state), "!Monitor.IsEntered(_state)"); diff --git a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicConnectionTests.cs b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicConnectionTests.cs index e0d68fb05bb..d4d1a89f11f 100644 --- a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicConnectionTests.cs +++ b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicConnectionTests.cs @@ -86,10 +86,6 @@ public async Task CloseAsync_WithPendingAcceptAndConnect_PendingAndSubsequentThr else { await Assert.ThrowsAsync(async () => await serverConnection.AcceptStreamAsync()); - - // TODO: ActiveIssue https://github.com/dotnet/runtime/issues/56133 - // MsQuic fails with System.Net.Quic.QuicException: Failed to open stream to peer. Error Code: INVALID_STATE - //await Assert.ThrowsAsync(async () => await OpenAndUseStreamAsync(serverConnection)); await Assert.ThrowsAsync(() => OpenAndUseStreamAsync(serverConnection)); } }); @@ -166,17 +162,8 @@ public async Task ConnectionClosedByPeer_WithPendingAcceptAndConnect_PendingAndS // Subsequent attempts should fail ex = await Assert.ThrowsAsync(() => serverConnection.AcceptStreamAsync().AsTask()); Assert.Equal(ExpectedErrorCode, ex.ErrorCode); - // TODO: ActiveIssue https://github.com/dotnet/runtime/issues/56133 - // MsQuic fails with System.Net.Quic.QuicException: Failed to open stream to peer. Error Code: INVALID_STATE - if (IsMsQuicProvider) - { - await Assert.ThrowsAsync(() => OpenAndUseStreamAsync(serverConnection)); - } - else - { - ex = await Assert.ThrowsAsync(() => OpenAndUseStreamAsync(serverConnection)); - Assert.Equal(ExpectedErrorCode, ex.ErrorCode); - } + ex = await Assert.ThrowsAsync(() => OpenAndUseStreamAsync(serverConnection)); + Assert.Equal(ExpectedErrorCode, ex.ErrorCode); }); } -- GitLab