Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/libraries/System.Net.Quic/src/System.Net.Quic.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@
<Reference Include="System.Collections.Concurrent" />
<Reference Include="System.Collections.Immutable" />
<Reference Include="System.Collections.NonGeneric" />
<Reference Include="System.Console" Condition="'$(Configuration)' == 'Debug'" />
<Reference Include="System.Console" />
<Reference Include="System.Diagnostics.Tracing" />
<Reference Include="System.Memory" />
<Reference Include="System.Net.NameResolution" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<QuicConnection> connectTask = CreateQuicConnection(listener.LocalEndPoint);
await Assert.ThrowsAnyAsync<ArgumentException>(async () => await listener.AcceptConnectionAsync());
await Assert.ThrowsAnyAsync<ArgumentException>(async () => await listener.AcceptConnectionAsync().AsTask().WaitAsync(SmallTestTimeout));
}

[Fact]
Expand All @@ -83,6 +84,7 @@ public void ListenAsync_MissingAlpn_Throws()
Assert.Throws<ArgumentNullException>(() => QuicListener.ListenAsync(listenerOptions));
}

//[ActiveIssue("[Long Running Test]")]
[Theory]
[InlineData(true)]
[InlineData(false)]
Expand All @@ -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<QuicServerConnectionOptions>(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<QuicConnection> 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<AuthenticationException>(() => connectTask.AsTask());
await Assert.ThrowsAsync<AuthenticationException>(() => connectTask.AsTask().WaitAsync(SmallTestTimeout));
}

//[ActiveIssue("[Long Running Test]")]
[Fact]
public async Task AcceptConnectionAsync_ThrowingCallbackOde_KeepRunning()
{
Expand All @@ -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<QuicConnection> 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<AuthenticationException>(() => connectTask.AsTask());
await Assert.ThrowsAsync<AuthenticationException>(() => 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]
Expand Down Expand Up @@ -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()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down