From 3d65b69c5a40810b0d599ff60c6f123fbde4cd6f Mon Sep 17 00:00:00 2001 From: ManickaP Date: Wed, 13 Sep 2023 11:26:56 +0200 Subject: [PATCH] Fixed test classes --- .../System.Net.Quic/ref/System.Net.Quic.cs | 4 +- .../Managed/ManagedQuicConnection.cs | 2 +- .../Managed/ManagedQuicListener.cs | 4 +- .../FunctionalTests/QuicConnectionTests.cs | 10 ++--- .../FunctionalTests/QuicListenerTests.cs | 9 ++-- ...icStreamConnectedStreamConformanceTests.cs | 42 ++++++++++--------- .../tests/FunctionalTests/QuicStreamTests.cs | 9 ++-- .../tests/FunctionalTests/QuicTestBase.cs | 15 +++---- 8 files changed, 45 insertions(+), 50 deletions(-) diff --git a/src/libraries/System.Net.Quic/ref/System.Net.Quic.cs b/src/libraries/System.Net.Quic/ref/System.Net.Quic.cs index 99fa5383aeef9a..87dfec1d00bcf1 100644 --- a/src/libraries/System.Net.Quic/ref/System.Net.Quic.cs +++ b/src/libraries/System.Net.Quic/ref/System.Net.Quic.cs @@ -148,7 +148,7 @@ internal ManagedQuicConnection() : base (default(bool)) { } public override System.Net.IPEndPoint RemoteEndPoint { get { throw null; } } public override System.Threading.Tasks.ValueTask AcceptInboundStreamAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } public override System.Threading.Tasks.ValueTask CloseAsync(long errorCode, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } - public static new System.Threading.Tasks.ValueTask ConnectAsync(System.Net.Quic.QuicClientConnectionOptions options, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + public static new System.Threading.Tasks.ValueTask ConnectAsync(System.Net.Quic.QuicClientConnectionOptions options, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } public override System.Threading.Tasks.ValueTask DisposeAsync() { throw null; } public override System.Threading.Tasks.ValueTask OpenOutboundStreamAsync(System.Net.Quic.QuicStreamType type, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } } @@ -159,7 +159,7 @@ internal ManagedQuicListener() : base (default(bool)) { } public System.Net.IPEndPoint ListenEndPoint { get { throw null; } } public override System.Threading.Tasks.ValueTask AcceptConnectionAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } public override System.Threading.Tasks.ValueTask DisposeAsync() { throw null; } - public static new System.Threading.Tasks.ValueTask ListenAsync(System.Net.Quic.QuicListenerOptions options, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + public static new System.Threading.Tasks.ValueTask ListenAsync(System.Net.Quic.QuicListenerOptions options, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } } public sealed partial class ManagedQuicStream : System.Net.Quic.QuicStream { diff --git a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.cs b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.cs index 0f6a088d5d6dd7..38d811ad1ae45a 100644 --- a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.cs +++ b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.cs @@ -27,7 +27,7 @@ namespace System.Net.Quic.Implementations.Managed public sealed partial class ManagedQuicConnection : QuicConnection, IAsyncDisposable { public static new bool IsSupported => true; - public static new async ValueTask ConnectAsync(QuicClientConnectionOptions options, CancellationToken cancellationToken = default) + public static new async ValueTask ConnectAsync(QuicClientConnectionOptions options, CancellationToken cancellationToken = default) { var connection = new ManagedQuicConnection(options, TlsFactory.Default); await connection.ConnectAsync(cancellationToken).ConfigureAwait(false); diff --git a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicListener.cs b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicListener.cs index 63227d92552df5..d462cf6422787f 100644 --- a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicListener.cs +++ b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicListener.cs @@ -12,9 +12,9 @@ namespace System.Net.Quic.Implementations.Managed public sealed class ManagedQuicListener : QuicListener, IAsyncDisposable { public static new bool IsSupported => true; - public static new ValueTask ListenAsync(QuicListenerOptions options, CancellationToken cancellationToken = default) + public static new ValueTask ListenAsync(QuicListenerOptions options, CancellationToken cancellationToken = default) { - return ValueTask.FromResult(new ManagedQuicListener(options)); + return ValueTask.FromResult((QuicListener)new ManagedQuicListener(options)); } private bool _disposed; diff --git a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicConnectionTests.cs b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicConnectionTests.cs index 1b9320e25dbb4b..25c2e530aec8ac 100644 --- a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicConnectionTests.cs +++ b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicConnectionTests.cs @@ -16,12 +16,12 @@ namespace System.Net.Quic.Tests [Collection(nameof(DisableParallelization))] [ConditionalClass(typeof(QuicTestBase), nameof(QuicTestBase.IsSupported))] - public sealed class QuicConnectionTests : QuicTestBase + public class QuicConnectionTests : QuicTestBase { const int ExpectedErrorCode = 1234; public static IEnumerable LocalAddresses = Configuration.Sockets.LocalAddresses(); - public QuicConnectionTests(ITestOutputHelper output) : base(output) { } + public QuicConnectionTests(ITestOutputHelper output, bool managed = false) : base(output, managed) { } [Theory] [MemberData(nameof(LocalAddresses))] @@ -89,7 +89,6 @@ await RunClientServer( // Subsequent attempts should fail // TODO: Which exception is correct? - if (IsMockProvider) await AssertThrowsQuicExceptionAsync(QuicError.OperationAborted, async () => await serverConnection.AcceptInboundStreamAsync()); await Assert.ThrowsAsync(() => OpenAndUseStreamAsync(serverConnection)); }); @@ -427,9 +426,8 @@ public void ConnectAsync_MissingDefaults_ThrowsInvalidArgument() } } - [ConditionalClass(typeof(QuicTestBase), nameof(QuicTestBase.IsSupported))] - public sealed class QuicConnectionTests_ManagedQuicProvider : QuicConnectionTests + public sealed class ManagedQuicConnectionTests : QuicConnectionTests { - public QuicConnectionTests_ManagedQuicProvider(ITestOutputHelper output) : base(output) { } + public ManagedQuicConnectionTests(ITestOutputHelper output) : base(output, managed: true) { } } } diff --git a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicListenerTests.cs b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicListenerTests.cs index 8bc15da4747b52..e8ab3c974e95fb 100644 --- a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicListenerTests.cs +++ b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicListenerTests.cs @@ -15,9 +15,9 @@ namespace System.Net.Quic.Tests { [Collection(nameof(DisableParallelization))] [ConditionalClass(typeof(QuicTestBase), nameof(QuicTestBase.IsSupported))] - public sealed class QuicListenerTests : QuicTestBase + public class QuicListenerTests : QuicTestBase { - public QuicListenerTests(ITestOutputHelper output) : base(output) { } + public QuicListenerTests(ITestOutputHelper output, bool managed = false) : base(output, managed) { } [Fact] public async Task Listener_Backlog_Success() @@ -518,9 +518,8 @@ public async Task Listener_AlpnNarrowingDown_Failure(string alpn) } } - [ConditionalClass(typeof(QuicTestBase), nameof(QuicTestBase.IsSupported))] - public sealed class QuicListenerTests_ManagedQuicProvider : QuicListenerTests + public sealed class ManagedQuicListenerTests : QuicListenerTests { - public QuicListenerTests_ManagedQuicProvider(ITestOutputHelper output) : base(output) { } + public ManagedQuicListenerTests(ITestOutputHelper output) : base(output, managed: true) { } } } diff --git a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicStreamConnectedStreamConformanceTests.cs b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicStreamConnectedStreamConformanceTests.cs index 76145b16a1ab03..2cbfb699cbbb31 100644 --- a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicStreamConnectedStreamConformanceTests.cs +++ b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicStreamConnectedStreamConformanceTests.cs @@ -11,12 +11,13 @@ using System.Threading.Tasks; using Xunit; using Xunit.Abstractions; +using System.Net.Quic.Implementations.Managed; namespace System.Net.Quic.Tests { [Collection(nameof(DisableParallelization))] [ConditionalClass(typeof(QuicTestBase), nameof(QuicTestBase.IsSupported))] - public sealed class QuicStreamConformanceTests : ConnectedStreamConformanceTests + public class QuicStreamConformanceTests : ConnectedStreamConformanceTests { protected override bool UsableAfterCanceledReads => false; protected override bool BlocksOnZeroByteReads => true; @@ -24,6 +25,13 @@ public sealed class QuicStreamConformanceTests : ConnectedStreamConformanceTests public readonly X509Certificate2 ServerCertificate = System.Net.Test.Common.Configuration.Certificates.GetServerCertificate(); public ITestOutputHelper _output; + public bool _managed; + + public QuicStreamConformanceTests(ITestOutputHelper output, bool managed = false) + { + _output = output; + _managed = managed; + } protected override void Dispose(bool disposing) { @@ -33,21 +41,6 @@ protected override void Dispose(bool disposing) } base.Dispose(disposing); } - [ConditionalClass(typeof(QuicTestBase), nameof(QuicTestBase.IsSupported))] - [Collection(nameof(DisableParallelization))] - public sealed class ManagedQuicQuicStreamConformanceTests : QuicStreamConformanceTests - { - protected override QuicImplementationProvider Provider => new ManagedQuicProviderFactory().GetProvider(); - protected override bool UsableAfterCanceledReads => false; - protected override bool BlocksOnZeroByteReads => true; - protected override bool CanTimeout => true; - - public ManagedQuicQuicStreamConformanceTests(ITestOutputHelper output) - { - _output = output; - } - } - public bool RemoteCertificateValidationCallback(object sender, X509Certificate? certificate, X509Chain? chain, SslPolicyErrors sslPolicyErrors) { @@ -75,7 +68,7 @@ public SslClientAuthenticationOptions GetSslClientAuthenticationOptions() protected override async Task CreateConnectedStreamsAsync() { - var listener = await QuicListener.ListenAsync(new QuicListenerOptions() + var listenerOptions = new QuicListenerOptions() { ListenEndPoint = new IPEndPoint(IPAddress.Loopback, 0), ApplicationProtocols = new List() { new SslApplicationProtocol("quictest") }, @@ -85,7 +78,8 @@ protected override async Task CreateConnectedStreamsAsync() DefaultCloseErrorCode = QuicTestBase.DefaultCloseErrorCodeServer, ServerAuthenticationOptions = GetSslServerAuthenticationOptions() }) - }); + }; + var listener = _managed ? await ManagedQuicListener.ListenAsync(listenerOptions) : await QuicListener.ListenAsync(listenerOptions); byte[] buffer = new byte[1] { 42 }; QuicConnection connection1 = null, connection2 = null; @@ -103,13 +97,14 @@ await WhenAllOrAnyFailed( { try { - connection2 = await QuicConnection.ConnectAsync(new QuicClientConnectionOptions() + var connectionOptions = new QuicClientConnectionOptions() { DefaultStreamErrorCode = QuicTestBase.DefaultStreamErrorCodeClient, DefaultCloseErrorCode = QuicTestBase.DefaultCloseErrorCodeClient, RemoteEndPoint = listener.LocalEndPoint, ClientAuthenticationOptions = GetSslClientAuthenticationOptions() - }); + }; + connection2 = _managed ? await ManagedQuicConnection.ConnectAsync(connectionOptions) : await QuicConnection.ConnectAsync(connectionOptions); stream2 = await connection2.OpenOutboundStreamAsync(QuicStreamType.Bidirectional); // OpenBidirectionalStream only allocates ID. We will force stream opening // by Writing there and receiving data on the other side. @@ -169,4 +164,11 @@ public override void Dispose() } } } + + [Collection(nameof(DisableParallelization))] + public sealed class ManagedQuicQuicStreamConformanceTests : QuicStreamConformanceTests + { + public ManagedQuicQuicStreamConformanceTests(ITestOutputHelper output) : base(output, managed: true) + { } + } } diff --git a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicStreamTests.cs b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicStreamTests.cs index ed08a03ac4f997..38977ff13adaef 100644 --- a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicStreamTests.cs +++ b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicStreamTests.cs @@ -14,10 +14,10 @@ namespace System.Net.Quic.Tests { [Collection(nameof(DisableParallelization))] [ConditionalClass(typeof(QuicTestBase), nameof(QuicTestBase.IsSupported))] - public sealed class QuicStreamTests : QuicTestBase + public class QuicStreamTests : QuicTestBase { private static byte[] s_data = "Hello world!"u8.ToArray(); - public QuicStreamTests(ITestOutputHelper output) : base(output) { } + public QuicStreamTests(ITestOutputHelper output, bool managed = false) : base(output, managed) { } [Fact] public async Task BasicTest() @@ -1210,10 +1210,9 @@ async ValueTask ReleaseOnReadsClosedAsync() } } - [ConditionalClass(typeof(QuicTestBase), nameof(QuicTestBase.IsSupported))] [Collection(nameof(DisableParallelization))] - public sealed class QuicStreamTests_ManagedQuicProvider : QuicStreamTests + public sealed class QuicStreamTests_ManagedQuicProvider : QuicStreamTests { - public QuicStreamTests_ManagedQuicProvider(ITestOutputHelper output) : base(output) { } + public QuicStreamTests_ManagedQuicProvider(ITestOutputHelper output) : base(output, managed: true) { } } } diff --git a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicTestBase.cs b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicTestBase.cs index 695dce5852cc6c..8f3f10c587b73e 100644 --- a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicTestBase.cs +++ b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicTestBase.cs @@ -15,6 +15,7 @@ using System.Net.Sockets; using System.Reflection; using Microsoft.Quic; +using System.Net.Quic.Implementations.Managed; namespace System.Net.Quic.Tests { @@ -39,6 +40,7 @@ public abstract class QuicTestBase : IDisposable public readonly X509Certificate2 ClientCertificate = System.Net.Test.Common.Configuration.Certificates.GetClientCertificate(); public ITestOutputHelper _output; + public bool _managed; public const int PassingTestTimeoutMilliseconds = 4 * 60 * 1000; public static TimeSpan PassingTestTimeout => TimeSpan.FromMilliseconds(PassingTestTimeoutMilliseconds); @@ -64,9 +66,10 @@ static unsafe QuicTestBase() } } - public unsafe QuicTestBase(ITestOutputHelper output) + public unsafe QuicTestBase(ITestOutputHelper output, bool managed = false) { _output = output; + _managed = managed; } public void Dispose() @@ -137,7 +140,7 @@ internal ValueTask CreateQuicConnection(IPEndPoint endpoint) internal ValueTask CreateQuicConnection(QuicClientConnectionOptions clientOptions) { - return QuicConnection.ConnectAsync(clientOptions); + return _managed ? ManagedQuicConnection.ConnectAsync(clientOptions) : QuicConnection.ConnectAsync(clientOptions); } internal QuicListenerOptions CreateQuicListenerOptions(IPAddress address = null) @@ -168,7 +171,7 @@ internal ValueTask CreateQuicListener(IPEndPoint endpoint) return CreateQuicListener(options); } - internal ValueTask CreateQuicListener(QuicListenerOptions options) => QuicListener.ListenAsync(options); + internal ValueTask CreateQuicListener(QuicListenerOptions options) => _managed ? ManagedQuicListener.ListenAsync(options) : QuicListener.ListenAsync(options); internal Task<(QuicConnection, QuicConnection)> CreateConnectedQuicConnection(QuicListener listener) => CreateConnectedQuicConnection(null, listener); internal async Task<(QuicConnection, QuicConnection)> CreateConnectedQuicConnection(QuicClientConnectionOptions? clientOptions, QuicListenerOptions listenerOptions) @@ -411,10 +414,4 @@ internal static bool GetIsIPv6Available() } } } - - public sealed class ManagedQuicProviderFactory : IQuicImplProviderFactory - { - // Use MockTls due to lack of modified OpenSSL - public QuicImplementationProvider GetProvider() => QuicImplementationProviders.ManagedMockTls; - } }