From 80a412bafb2ab1998ba30019a0c7c9f0e1a23f39 Mon Sep 17 00:00:00 2001 From: Natalia Kondratyeva Date: Wed, 13 Sep 2023 22:37:40 +0100 Subject: [PATCH] Add some timeouts to hanging tests --- .../src/System.Net.Quic.csproj | 2 +- .../FunctionalTests/QuicListenerTests.cs | 24 +++++++++++-------- ...icStreamConnectedStreamConformanceTests.cs | 11 +++++++++ .../tests/FunctionalTests/QuicTestBase.cs | 1 + 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj b/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj index a48f0af5d0b554..a4a8ff6dcf2d3b 100644 --- a/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj +++ b/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj @@ -108,7 +108,7 @@ - + diff --git a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicListenerTests.cs b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicListenerTests.cs index e8ab3c974e95fb..10694f2cde9c83 100644 --- a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicListenerTests.cs +++ b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicListenerTests.cs @@ -62,16 +62,17 @@ await Task.Run(async () => }).WaitAsync(TimeSpan.FromSeconds(6)); } + //[ActiveIssue("[Long Running Test]")] [Fact] public async Task AcceptConnectionAsync_InvalidConnectionOptions_Throws() { QuicListenerOptions listenerOptions = CreateQuicListenerOptions(); // Do not set any options, which should throw an argument exception from accept. listenerOptions.ConnectionOptionsCallback = (_, _, _) => ValueTask.FromResult(new QuicServerConnectionOptions()); - await using QuicListener listener = await CreateQuicListener(listenerOptions); + await using QuicListener listener = await CreateQuicListener(listenerOptions).AsTask().WaitAsync(SmallTestTimeout); ValueTask connectTask = CreateQuicConnection(listener.LocalEndPoint); - await Assert.ThrowsAnyAsync(async () => await listener.AcceptConnectionAsync()); + await Assert.ThrowsAnyAsync(async () => await listener.AcceptConnectionAsync().AsTask().WaitAsync(SmallTestTimeout)); } [Fact] @@ -83,6 +84,7 @@ public void ListenAsync_MissingAlpn_Throws() Assert.Throws(() => QuicListener.ListenAsync(listenerOptions)); } + //[ActiveIssue("[Long Running Test]")] [Theory] [InlineData(true)] [InlineData(false)] @@ -93,16 +95,17 @@ public async Task AcceptConnectionAsync_ThrowingOptionsCallback_Throws(bool useF QuicListenerOptions listenerOptions = CreateQuicListenerOptions(); // Throw an exception, which should throw the same from accept. listenerOptions.ConnectionOptionsCallback = (_, _, _) => useFromException ? ValueTask.FromException(new Exception(expectedMessage)) : throw new Exception(expectedMessage); - await using QuicListener listener = await CreateQuicListener(listenerOptions); + await using QuicListener listener = await CreateQuicListener(listenerOptions).AsTask().WaitAsync(SmallTestTimeout); ValueTask connectTask = CreateQuicConnection(listener.LocalEndPoint); - Exception exception = await AssertThrowsQuicExceptionAsync(QuicError.CallbackError, async () => await listener.AcceptConnectionAsync()); + Exception exception = await AssertThrowsQuicExceptionAsync(QuicError.CallbackError, async () => await listener.AcceptConnectionAsync().AsTask().WaitAsync(SmallTestTimeout)); Assert.NotNull(exception.InnerException); Assert.Equal(expectedMessage, exception.InnerException.Message); - await Assert.ThrowsAsync(() => connectTask.AsTask()); + await Assert.ThrowsAsync(() => connectTask.AsTask().WaitAsync(SmallTestTimeout)); } + //[ActiveIssue("[Long Running Test]")] [Fact] public async Task AcceptConnectionAsync_ThrowingCallbackOde_KeepRunning() { @@ -120,18 +123,18 @@ public async Task AcceptConnectionAsync_ThrowingCallbackOde_KeepRunning() return ValueTask.FromResult(CreateQuicServerOptions()); }; - await using QuicListener listener = await CreateQuicListener(listenerOptions); + await using QuicListener listener = await CreateQuicListener(listenerOptions).AsTask().WaitAsync(SmallTestTimeout); ValueTask connectTask = CreateQuicConnection(listener.LocalEndPoint); - Exception exception = await AssertThrowsQuicExceptionAsync(QuicError.CallbackError, async () => await listener.AcceptConnectionAsync()); + Exception exception = await AssertThrowsQuicExceptionAsync(QuicError.CallbackError, async () => await listener.AcceptConnectionAsync().AsTask().WaitAsync(SmallTestTimeout)); Assert.True(exception.InnerException is ObjectDisposedException); - await Assert.ThrowsAsync(() => connectTask.AsTask()); + await Assert.ThrowsAsync(() => connectTask.AsTask().WaitAsync(SmallTestTimeout)); // Throwing ODE in callback should keep Listener running connectTask = CreateQuicConnection(listener.LocalEndPoint); - await using QuicConnection serverConnection = await listener.AcceptConnectionAsync(); - await using QuicConnection clientConnection = await connectTask; + await using QuicConnection serverConnection = await listener.AcceptConnectionAsync().AsTask().WaitAsync(SmallTestTimeout); + await using QuicConnection clientConnection = await connectTask.AsTask().WaitAsync(SmallTestTimeout); } [Theory] @@ -357,6 +360,7 @@ public async Task ListenOnAlreadyUsedPort_Throws_AddressInUse() Assert.Equal(SocketError.AddressAlreadyInUse, ((SocketException)ex).SocketErrorCode ); } + [ActiveIssue("System.Net.Sockets.SocketException : Only one usage of each socket address (protocol/network address/port) is normally permitted.")] [Fact] public async Task TwoListenersOnSamePort_DisjointAlpn_Success() { diff --git a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicStreamConnectedStreamConformanceTests.cs b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicStreamConnectedStreamConformanceTests.cs index 2cbfb699cbbb31..639e19b9ef16ed 100644 --- a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicStreamConnectedStreamConformanceTests.cs +++ b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicStreamConnectedStreamConformanceTests.cs @@ -170,5 +170,16 @@ public sealed class ManagedQuicQuicStreamConformanceTests : QuicStreamConformanc { public ManagedQuicQuicStreamConformanceTests(ITestOutputHelper output) : base(output, managed: true) { } + + //[ActiveIssue("[Long Running Test]")] + public override Task ZeroByteRead_BlocksUntilDataAvailableOrNops(ReadWriteMode mode) + => base.ZeroByteRead_BlocksUntilDataAvailableOrNops(mode) + .WaitAsync(QuicTestBase.SmallTestTimeout); + + + //[ActiveIssue("[Long Running Test]")] + public override Task ReadAsync_DuringReadAsync_ThrowsIfUnsupported() + => base.ReadAsync_DuringReadAsync_ThrowsIfUnsupported() + .WaitAsync(QuicTestBase.SmallTestTimeout); } } diff --git a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicTestBase.cs b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicTestBase.cs index 8f3f10c587b73e..318afd846b3e3b 100644 --- a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicTestBase.cs +++ b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicTestBase.cs @@ -43,6 +43,7 @@ public abstract class QuicTestBase : IDisposable public bool _managed; public const int PassingTestTimeoutMilliseconds = 4 * 60 * 1000; public static TimeSpan PassingTestTimeout => TimeSpan.FromMilliseconds(PassingTestTimeoutMilliseconds); + public static TimeSpan SmallTestTimeout => TimeSpan.FromSeconds(10); static unsafe QuicTestBase() {