Skip to content

Commit

Permalink
Don't throw PNSE on QuicImplementationProvider.IsSupported (#67036)
Browse files Browse the repository at this point in the history
  • Loading branch information
rzikm authored Mar 25, 2022
1 parent ba0f8e1 commit e216e13
Show file tree
Hide file tree
Showing 7 changed files with 54 additions and 3 deletions.
1 change: 1 addition & 0 deletions src/libraries/System.Net.Quic/src/ExcludeApiList.PNSE.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
C:System.Net.Quic.QuicImplementationProviders
18 changes: 17 additions & 1 deletion src/libraries/System.Net.Quic/src/System.Net.Quic.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,22 @@
<TargetPlatformIdentifier>$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)'))</TargetPlatformIdentifier>
<DefineConstants Condition="'$(TargetPlatformIdentifier)' == 'FreeBSD' or '$(TargetPlatformIdentifier)' == 'OSX'">$(DefineConstants);SOCKADDR_HAS_LENGTH</DefineConstants>
<GeneratePlatformNotSupportedAssemblyMessage Condition="'$(TargetPlatformIdentifier)' == ''">SR.SystemNetQuic_PlatformNotSupported</GeneratePlatformNotSupportedAssemblyMessage>
<ApiExclusionListPath Condition="'$(TargetPlatformIdentifier)' == ''">ExcludeApiList.PNSE.txt</ApiExclusionListPath>
</PropertyGroup>
<!-- Source files -->
<ItemGroup Condition="'$(TargetPlatformIdentifier)' != ''">
<Compile Include="System\Net\Quic\*.cs" />
<Compile Include="System\Net\Quic\NetEventSource.Quic.cs" />
<Compile Include="System\Net\Quic\QuicClientConnectionOptions.cs" />
<Compile Include="System\Net\Quic\QuicConnection.cs" />
<Compile Include="System\Net\Quic\QuicConnectionAbortedException.cs" />
<Compile Include="System\Net\Quic\QuicException.cs" />
<Compile Include="System\Net\Quic\QuicImplementationProviders.cs" />
<Compile Include="System\Net\Quic\QuicListener.cs" />
<Compile Include="System\Net\Quic\QuicListenerOptions.cs" />
<Compile Include="System\Net\Quic\QuicOperationAbortedException.cs" />
<Compile Include="System\Net\Quic\QuicOptions.cs" />
<Compile Include="System\Net\Quic\QuicStream.cs" />
<Compile Include="System\Net\Quic\QuicStreamAbortedException.cs" />
<Compile Include="System\Net\Quic\Implementations\*.cs" />
<Compile Include="System\Net\Quic\Implementations\Mock\*.cs" />
<Compile Include="System\Net\Quic\Implementations\MsQuic\*.cs" />
Expand All @@ -38,6 +50,10 @@
<Compile Include="$(CommonPath)System\Net\Logging\NetEventSource.Common.cs" Link="Common\System\Net\Logging\NetEventSource.Common.cs" />
<Compile Include="$(CommonPath)System\Net\StreamBuffer.cs" Link="Common\System\Net\StreamBuffer.cs" />
</ItemGroup>
<!-- Unsupported platforms -->
<ItemGroup Condition="'$(TargetPlatformIdentifier)' == ''">
<Compile Include="System\Net\Quic\QuicImplementationProviders.Unsupported.cs" />
</ItemGroup>
<!-- Windows specific files -->
<ItemGroup Condition="'$(TargetPlatformIdentifier)' == 'windows'">
<Compile Include="$(CommonPath)Interop\Windows\Interop.Libraries.cs" Link="Common\Interop\Windows\Interop.Libraries.cs" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Net.Quic.Implementations;

namespace System.Net.Quic
{
public static partial class QuicImplementationProviders
{
public static Implementations.QuicImplementationProvider Mock => Default;
public static Implementations.QuicImplementationProvider MsQuic => Default;
public static Implementations.QuicImplementationProvider Default { get; } = new UnsupportedQuicImplementationProvider();

private class UnsupportedQuicImplementationProvider : QuicImplementationProvider
{
internal UnsupportedQuicImplementationProvider() : base(false) { }
public override bool IsSupported => false;
}
}
}

namespace System.Net.Quic.Implementations
{
public abstract partial class QuicImplementationProvider
{
// alternative constructor because currently it is not possible to exlude ctors from
// PNSE autogeneration (https://github.com/dotnet/arcade/issues/8676)
internal QuicImplementationProvider(bool _) { }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public async Task TestConnect()
ValueTask connectTask = clientConnection.ConnectAsync();
ValueTask<QuicConnection> acceptTask = listener.AcceptConnectionAsync();

await new Task[] { connectTask.AsTask(), acceptTask.AsTask()}.WhenAllOrAnyFailed(PassingTestTimeoutMilliseconds);
await new Task[] { connectTask.AsTask(), acceptTask.AsTask() }.WhenAllOrAnyFailed(PassingTestTimeoutMilliseconds);
QuicConnection serverConnection = acceptTask.Result;

Assert.True(clientConnection.Connected);
Expand Down Expand Up @@ -285,6 +285,7 @@ await RunClientServer(
}
}

[ConditionalClass(typeof(QuicTestBase<MockProviderFactory>), nameof(QuicTestBase<MockProviderFactory>.IsSupported))]
public sealed class QuicConnectionTests_MockProvider : QuicConnectionTests<MockProviderFactory>
{
public QuicConnectionTests_MockProvider(ITestOutputHelper output) : base(output) { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ await Task.Run(async () =>
}
}

[ConditionalClass(typeof(QuicTestBase<MockProviderFactory>), nameof(QuicTestBase<MockProviderFactory>.IsSupported))]
public sealed class QuicListenerTests_MockProvider : QuicListenerTests<MockProviderFactory>
{
public QuicListenerTests_MockProvider(ITestOutputHelper output) : base(output) { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

namespace System.Net.Quic.Tests
{
[ConditionalClass(typeof(QuicTestBase<MockProviderFactory>), nameof(QuicTestBase<MockProviderFactory>.IsSupported))]
public sealed class MockQuicStreamConformanceTests : QuicStreamConformanceTests
{
protected override QuicImplementationProvider Provider => QuicImplementationProviders.Mock;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ static async Task MakeStreams(QuicConnection clientConnection, QuicConnection se
QuicStream clientStream = clientConnection.OpenBidirectionalStream();
ValueTask writeTask = clientStream.WriteAsync(Encoding.UTF8.GetBytes("PING"), endStream: true);
ValueTask<QuicStream> acceptTask = serverConnection.AcceptStreamAsync();
await new Task[] { writeTask.AsTask(), acceptTask.AsTask()}.WhenAllOrAnyFailed(PassingTestTimeoutMilliseconds);
await new Task[] { writeTask.AsTask(), acceptTask.AsTask() }.WhenAllOrAnyFailed(PassingTestTimeoutMilliseconds);
QuicStream serverStream = acceptTask.Result;
await serverStream.ReadAsync(buffer);
}
Expand Down Expand Up @@ -988,6 +988,7 @@ async ValueTask ReleaseOnWriteCompletionAsync()
}
}

[ConditionalClass(typeof(QuicTestBase<MockProviderFactory>), nameof(QuicTestBase<MockProviderFactory>.IsSupported))]
public sealed class QuicStreamTests_MockProvider : QuicStreamTests<MockProviderFactory>
{
public QuicStreamTests_MockProvider(ITestOutputHelper output) : base(output) { }
Expand Down

0 comments on commit e216e13

Please sign in to comment.