fix stream conformance tests for mock provider (#44282)
authorGeoff Kizer <geoffrek@microsoft.com>
Thu, 5 Nov 2020 14:16:09 +0000 (06:16 -0800)
committerGitHub <noreply@github.com>
Thu, 5 Nov 2020 14:16:09 +0000 (09:16 -0500)
Co-authored-by: Geoffrey Kizer <geoffrek@windows.microsoft.com>
src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Mock/MockStream.cs
src/libraries/System.Net.Quic/tests/FunctionalTests/QuicStreamConnectedStreamConformanceTests.cs

index d96db6c..8ce79f6 100644 (file)
@@ -40,7 +40,7 @@ namespace System.Net.Quic.Implementations.Mock
 
         private StreamBuffer? ReadStreamBuffer => _isInitiator ? _streamState._inboundStreamBuffer : _streamState._outboundStreamBuffer;
 
-        internal override bool CanRead => ReadStreamBuffer is not null;
+        internal override bool CanRead => !_disposed && ReadStreamBuffer is not null;
 
         internal override int Read(Span<byte> buffer)
         {
@@ -80,7 +80,7 @@ namespace System.Net.Quic.Implementations.Mock
 
         private StreamBuffer? WriteStreamBuffer => _isInitiator ? _streamState._outboundStreamBuffer : _streamState._inboundStreamBuffer;
 
-        internal override bool CanWrite => WriteStreamBuffer is not null;
+        internal override bool CanWrite => !_disposed && WriteStreamBuffer is not null;
 
         internal override void Write(ReadOnlySpan<byte> buffer)
         {
@@ -199,8 +199,9 @@ namespace System.Net.Quic.Implementations.Mock
         {
             if (!_disposed)
             {
-                _disposed = true;
+                Shutdown();
 
+                _disposed = true;
             }
         }
 
@@ -208,6 +209,8 @@ namespace System.Net.Quic.Implementations.Mock
         {
             if (!_disposed)
             {
+                Shutdown();
+
                 _disposed = true;
             }
 
index eb4a216..5fc894b 100644 (file)
@@ -20,10 +20,7 @@ namespace System.Net.Quic.Tests
     public sealed class MsQuicQuicStreamConformanceTests : QuicStreamConformanceTests
     {
         protected override QuicImplementationProvider Provider => QuicImplementationProviders.MsQuic;
-    }
 
-    public abstract class QuicStreamConformanceTests : ConnectedStreamConformanceTests
-    {
         // TODO: These are all hanging, likely due to Stream close behavior.
         [ActiveIssue("https://github.com/dotnet/runtime/issues/756")]
         public override Task Read_Eof_Returns0(ReadWriteMode mode, bool dataAvailableFirst) => base.Read_Eof_Returns0(mode, dataAvailableFirst);
@@ -38,6 +35,10 @@ namespace System.Net.Quic.Tests
         [ActiveIssue("https://github.com/dotnet/runtime/issues/756")]
         public override Task Parallel_ReadWriteMultipleStreamsConcurrently() => base.Parallel_ReadWriteMultipleStreamsConcurrently();
 
+    }
+
+    public abstract class QuicStreamConformanceTests : ConnectedStreamConformanceTests
+    {
         protected abstract QuicImplementationProvider Provider { get; }
 
         protected override async Task<StreamPair> CreateConnectedStreamsAsync()