Harden TFM checks #2624

This commit is contained in:
Chris Ross (ASP.NET) 2018-06-07 14:56:23 -07:00
parent f4477cd5c3
commit 00827e38bb
14 changed files with 78 additions and 15 deletions

View File

@ -76,9 +76,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal
{
#if NETCOREAPP2_1
await stream.WriteAsync(buffer.First);
#else
#elif NETSTANDARD2_0
var array = buffer.First.GetArray();
await stream.WriteAsync(array.Array, array.Offset, array.Count);
#else
#error TFMs need to be updated
#endif
}
else
@ -87,9 +89,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal
{
#if NETCOREAPP2_1
await stream.WriteAsync(memory);
#else
#elif NETSTANDARD2_0
var array = memory.GetArray();
await stream.WriteAsync(array.Array, array.Offset, array.Count);
#else
#error TFMs need to be updated
#endif
}
}
@ -129,9 +133,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal
var outputBuffer = Input.Writer.GetMemory(MinAllocBufferSize);
#if NETCOREAPP2_1
var bytesRead = await stream.ReadAsync(outputBuffer);
#else
#elif NETSTANDARD2_0
var array = outputBuffer.GetArray();
var bytesRead = await stream.ReadAsync(array.Array, array.Offset, array.Count);
#else
#error TFMs need to be updated
#endif
Input.Writer.Advance(bytesRead);

View File

@ -90,6 +90,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal
Log("Read", destination.Slice(0, read));
return read;
}
#elif NETSTANDARD2_0
#else
#error TFMs need to be updated
#endif
public async override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
@ -106,6 +109,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal
Log("ReadAsync", destination.Span.Slice(0, read));
return read;
}
#elif NETSTANDARD2_0
#else
#error TFMs need to be updated
#endif
public override long Seek(long offset, SeekOrigin origin)
@ -130,6 +136,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal
Log("Write", source);
_inner.Write(source);
}
#elif NETSTANDARD2_0
#else
#error TFMs need to be updated
#endif
public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
@ -144,6 +153,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal
Log("WriteAsync", source.Span);
return _inner.WriteAsync(source, cancellationToken);
}
#elif NETSTANDARD2_0
#else
#error TFMs need to be updated
#endif
private void Log(string method, ReadOnlySpan<byte> buffer)

View File

@ -74,6 +74,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal
{
return ReadAsyncInternal(destination);
}
#elif NETSTANDARD2_0
#else
#error TFMs need to be updated
#endif
public override void Write(byte[] buffer, int offset, int count)
@ -97,6 +100,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal
_output.Write(source.Span);
await _output.FlushAsync(cancellationToken);
}
#elif NETSTANDARD2_0
#else
#error TFMs need to be updated
#endif
public override void Flush()

View File

@ -117,6 +117,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
return ReadAsyncInternal(destination, cancellationToken);
}
#elif NETSTANDARD2_0
#else
#error TFMs need to be updated
#endif
private async ValueTask<int> ReadAsyncInternal(Memory<byte> buffer, CancellationToken cancellationToken)

View File

@ -118,6 +118,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
return new ValueTask(_httpResponseControl.WriteAsync(source, cancellationToken));
}
#elif NETSTANDARD2_0
#else
#error TFMs need to be updated
#endif
public void StartAcceptingWrites()

View File

@ -150,6 +150,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
{
return _requestStream.ReadAsync(destination, cancellationToken);
}
#elif NETSTANDARD2_0
#else
#error TFMs need to be updated
#endif
public override Task CopyToAsync(Stream destination, int bufferSize, CancellationToken cancellationToken)
@ -167,6 +170,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
{
return _responseStream.WriteAsync(source, cancellationToken);
}
#elif NETSTANDARD2_0
#else
#error TFMs need to be updated
#endif
public override long Seek(long offset, SeekOrigin origin)

View File

@ -90,9 +90,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
// - We change the Kestrel Memory Pool to not use pinned arrays but instead use native memory
#if NETCOREAPP2_1
await destination.WriteAsync(memory);
#else
#elif NETSTANDARD2_0
var array = memory.GetArray();
await destination.WriteAsync(array.Array, array.Offset, array.Count, cancellationToken);
#else
#error TFMs need to be updated
#endif
}
}

View File

@ -166,7 +166,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Https.Internal
}
await sslStream.AuthenticateAsServerAsync(sslOptions, CancellationToken.None);
#else
#elif NETSTANDARD2_0 // No ALPN support
var serverCert = _serverCertificate;
if (_serverCertificateSelector != null)
{
@ -179,6 +179,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Https.Internal
}
await sslStream.AuthenticateAsServerAsync(serverCert, certificateRequired,
_options.SslProtocols, _options.CheckCertificateRevocation);
#else
#error TFMs need to be updated
#endif
}
catch (OperationCanceledException)
@ -201,6 +203,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Https.Internal
#if NETCOREAPP2_1
feature.ApplicationProtocol = sslStream.NegotiatedApplicationProtocol.Protocol;
context.Features.Set<ITlsApplicationProtocolFeature>(feature);
#elif NETSTANDARD2_0 // No ALPN support
#else
#error TFMs need to be updated
#endif
feature.ClientCertificate = ConvertToX509Certificate2(sslStream.RemoteCertificate);

View File

@ -71,6 +71,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure
#if NETCOREAPP2_1
public override ValueTask<int> ReadAsync(Memory<byte> destination, CancellationToken cancellationToken = default)
=> _inner.ReadAsync(destination, cancellationToken);
#elif NETSTANDARD2_0
#else
#error TFMs need to be updated
#endif
public override int ReadByte()
@ -91,6 +94,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure
#if NETCOREAPP2_1
public override ValueTask WriteAsync(ReadOnlyMemory<byte> source, CancellationToken cancellationToken = default)
=> _inner.WriteAsync(source, cancellationToken);
#elif NETSTANDARD2_0
#else
#error TFMs need to be updated
#endif
public override void WriteByte(byte value)

View File

@ -25,10 +25,12 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal
{
#if NETCOREAPP2_1
_eventArgs.SetBuffer(buffer);
#else
#elif NETSTANDARD2_0
var segment = buffer.GetArray();
_eventArgs.SetBuffer(segment.Array, segment.Offset, segment.Count);
#else
#error TFMs need to be updated
#endif
if (!_socket.ReceiveAsync(_eventArgs))
{

View File

@ -36,8 +36,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal
#if NETCOREAPP2_1
if (!_eventArgs.MemoryBuffer.Equals(Memory<byte>.Empty))
#else
#elif NETSTANDARD2_0
if (_eventArgs.Buffer != null)
#else
#error TFMs need to be updated
#endif
{
_eventArgs.SetBuffer(null, 0, 0);
@ -63,10 +65,12 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal
#if NETCOREAPP2_1
_eventArgs.SetBuffer(MemoryMarshal.AsMemory(memory));
#else
#elif NETSTANDARD2_0
var segment = memory.GetArray();
_eventArgs.SetBuffer(segment.Array, segment.Offset, segment.Count);
#else
#error TFMs need to be updated
#endif
if (!_socket.SendAsync(_eventArgs))
{

View File

@ -154,8 +154,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
Assert.NotNull(connection.Features.Get<SslStream>());
#if NETCOREAPP2_2
Assert.Equal("localhost", name);
#else
#elif NET461
Assert.Null(name);
#else
#error TFMs need to be updated
#endif
selectorCalled++;
return _x509Certificate2;
@ -194,8 +196,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
Assert.NotNull(connection.Features.Get<SslStream>());
#if NETCOREAPP2_2
Assert.Equal("localhost", name);
#else
#elif NET461
Assert.Null(name);
#else
#error TFMs need to be updated
#endif
selectorCalled++;
if (selectorCalled == 1)
@ -282,8 +286,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
Assert.NotNull(connection.Features.Get<SslStream>());
#if NETCOREAPP2_2
Assert.Equal("localhost", name);
#else
#elif NET461
Assert.Null(name);
#else
#error TFMs need to be updated
#endif
selectorCalled++;
return _x509Certificate2;

View File

@ -140,7 +140,7 @@ namespace Microsoft.AspNetCore.Testing
_innerStream.Close();
}
#if NETCOREAPP2_1
#if NETCOREAPP2_2
public override int Read(Span<byte> buffer)
{
return _innerStream.Read(buffer);
@ -165,7 +165,10 @@ namespace Microsoft.AspNetCore.Testing
{
_innerStream.CopyTo(destination, bufferSize);
}
#endif
#elif NET461
#else
#error TFMs need to be updated
#endif
}
}
}

View File

@ -45,9 +45,8 @@ namespace Microsoft.AspNetCore.Testing
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
var exceptionIsIgnored = IgnoredExceptions.Contains(exception?.GetType());
#if true
if (logLevel == LogLevel.Critical && ThrowOnCriticalErrors && !exceptionIsIgnored)
#endif
{
var log = $"Log {logLevel}[{eventId}]: {formatter(state, exception)} {exception}";