Split SslStream stream conformance tests for TLS1.2/1.3 (#44245)
authorStephen Toub <stoub@microsoft.com>
Thu, 5 Nov 2020 01:33:18 +0000 (20:33 -0500)
committerGitHub <noreply@github.com>
Thu, 5 Nov 2020 01:33:18 +0000 (20:33 -0500)
src/libraries/System.Net.Security/tests/FunctionalTests/SslStreamConformanceTests.cs

index 152d7d7..1bad100 100644 (file)
@@ -3,8 +3,10 @@
 
 using System.IO;
 using System.IO.Tests;
+using System.Security.Authentication;
 using System.Security.Cryptography.X509Certificates;
 using System.Threading.Tasks;
+using Xunit;
 
 namespace System.Net.Security.Tests
 {
@@ -14,6 +16,8 @@ namespace System.Net.Security.Tests
         protected override bool BlocksOnZeroByteReads => true;
         protected override Type UnsupportedConcurrentExceptionType => typeof(NotSupportedException);
 
+        protected virtual SslProtocols GetSslProtocols() => SslProtocols.None;
+
         protected override async Task<StreamPair> CreateWrappedConnectedStreamsAsync(StreamPair wrapped, bool leaveOpen = false)
         {
             X509Certificate2? cert = Test.Common.Configuration.Certificates.GetServerCertificate();
@@ -22,8 +26,8 @@ namespace System.Net.Security.Tests
 
             await new[]
             {
-                ssl1.AuthenticateAsClientAsync(cert.GetNameInfo(X509NameType.SimpleName, false)),
-                ssl2.AuthenticateAsServerAsync(cert, false, false)
+                ssl1.AuthenticateAsClientAsync(cert.GetNameInfo(X509NameType.SimpleName, false), null, GetSslProtocols(), false),
+                ssl2.AuthenticateAsServerAsync(cert, false, GetSslProtocols(), false)
             }.WhenAllOrAnyFailed().ConfigureAwait(false);
 
             return new StreamPair(ssl1, ssl2);
@@ -36,11 +40,29 @@ namespace System.Net.Security.Tests
             CreateWrappedConnectedStreamsAsync(ConnectedStreams.CreateBidirectional());
     }
 
-    public sealed class SslStreamNetworkConformanceTests : SslStreamConformanceTests
+    public abstract class SslStreamDefaultNetworkConformanceTests : SslStreamConformanceTests
     {
         protected override bool CanTimeout => true;
 
         protected override Task<StreamPair> CreateConnectedStreamsAsync() =>
             CreateWrappedConnectedStreamsAsync(TestHelper.GetConnectedTcpStreams());
     }
+
+    [ConditionalClass(typeof(PlatformDetection), nameof(PlatformDetection.SupportsTls11))]
+    public sealed class SslStreamTls11NetworkConformanceTests : SslStreamDefaultNetworkConformanceTests
+    {
+        protected override SslProtocols GetSslProtocols() => SslProtocols.Tls11;
+    }
+
+    [ConditionalClass(typeof(PlatformDetection), nameof(PlatformDetection.SupportsTls12))]
+    public sealed class SslStreamTls12NetworkConformanceTests : SslStreamDefaultNetworkConformanceTests
+    {
+        protected override SslProtocols GetSslProtocols() => SslProtocols.Tls12;
+    }
+
+    [ConditionalClass(typeof(PlatformDetection), nameof(PlatformDetection.SupportsTls13))]
+    public sealed class SslStreamTls13NetworkConformanceTests : SslStreamDefaultNetworkConformanceTests
+    {
+        protected override SslProtocols GetSslProtocols() => SslProtocols.Tls13;
+    }
 }