diff --git a/src/libraries/System.Net.Security/tests/FunctionalTests/SslStreamStreamToStreamTest.cs b/src/libraries/System.Net.Security/tests/FunctionalTests/SslStreamStreamToStreamTest.cs index 9fb2ac9fefbd6b..d04f4b56c38438 100644 --- a/src/libraries/System.Net.Security/tests/FunctionalTests/SslStreamStreamToStreamTest.cs +++ b/src/libraries/System.Net.Security/tests/FunctionalTests/SslStreamStreamToStreamTest.cs @@ -259,6 +259,34 @@ public async Task SslStream_StreamToStream_Successive_ClientWrite_WithZeroBytes_ } } + [Fact] + public async Task SslStream_StreamToStream_ZeroByteRead_SucceedsWhenDataAvailable() + { + (NetworkStream clientStream, NetworkStream serverStream) = TestHelper.GetConnectedTcpStreams(); + using var clientSslStream = new SslStream(clientStream, leaveInnerStreamOpen: false, AllowAnyServerCertificate); + using var serverSslStream = new SslStream(serverStream); + await DoHandshake(clientSslStream, serverSslStream); + + for (int iter = 0; iter < 2; iter++) + { + ValueTask zeroByteRead = clientSslStream.ReadAsync(Memory.Empty); + Assert.False(zeroByteRead.IsCompleted); + + await serverSslStream.WriteAsync(Encoding.UTF8.GetBytes("hello")); + Assert.Equal(0, await zeroByteRead); + + var readBytes = new byte[5]; + int count = 0; + while (count < readBytes.Length) + { + int n = await clientSslStream.ReadAsync(readBytes.AsMemory(count)); + Assert.InRange(n, 1, readBytes.Length - count); + count += n; + } + Assert.Equal("hello", Encoding.UTF8.GetString(readBytes)); + } + } + [Theory] [InlineData(false)] [InlineData(true)]