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

View File

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

View File

@ -117,6 +117,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
return ReadAsyncInternal(destination, cancellationToken); return ReadAsyncInternal(destination, cancellationToken);
} }
#elif NETSTANDARD2_0
#else
#error TFMs need to be updated
#endif #endif
private async ValueTask<int> ReadAsyncInternal(Memory<byte> buffer, CancellationToken cancellationToken) 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)); return new ValueTask(_httpResponseControl.WriteAsync(source, cancellationToken));
} }
#elif NETSTANDARD2_0
#else
#error TFMs need to be updated
#endif #endif
public void StartAcceptingWrites() public void StartAcceptingWrites()

View File

@ -150,6 +150,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
{ {
return _requestStream.ReadAsync(destination, cancellationToken); return _requestStream.ReadAsync(destination, cancellationToken);
} }
#elif NETSTANDARD2_0
#else
#error TFMs need to be updated
#endif #endif
public override Task CopyToAsync(Stream destination, int bufferSize, CancellationToken cancellationToken) 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); return _responseStream.WriteAsync(source, cancellationToken);
} }
#elif NETSTANDARD2_0
#else
#error TFMs need to be updated
#endif #endif
public override long Seek(long offset, SeekOrigin origin) 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 // - We change the Kestrel Memory Pool to not use pinned arrays but instead use native memory
#if NETCOREAPP2_1 #if NETCOREAPP2_1
await destination.WriteAsync(memory); await destination.WriteAsync(memory);
#else #elif NETSTANDARD2_0
var array = memory.GetArray(); var array = memory.GetArray();
await destination.WriteAsync(array.Array, array.Offset, array.Count, cancellationToken); await destination.WriteAsync(array.Array, array.Offset, array.Count, cancellationToken);
#else
#error TFMs need to be updated
#endif #endif
} }
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -140,7 +140,7 @@ namespace Microsoft.AspNetCore.Testing
_innerStream.Close(); _innerStream.Close();
} }
#if NETCOREAPP2_1 #if NETCOREAPP2_2
public override int Read(Span<byte> buffer) public override int Read(Span<byte> buffer)
{ {
return _innerStream.Read(buffer); return _innerStream.Read(buffer);
@ -165,7 +165,10 @@ namespace Microsoft.AspNetCore.Testing
{ {
_innerStream.CopyTo(destination, bufferSize); _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) public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{ {
var exceptionIsIgnored = IgnoredExceptions.Contains(exception?.GetType()); var exceptionIsIgnored = IgnoredExceptions.Contains(exception?.GetType());
#if true
if (logLevel == LogLevel.Critical && ThrowOnCriticalErrors && !exceptionIsIgnored) if (logLevel == LogLevel.Critical && ThrowOnCriticalErrors && !exceptionIsIgnored)
#endif
{ {
var log = $"Log {logLevel}[{eventId}]: {formatter(state, exception)} {exception}"; var log = $"Log {logLevel}[{eventId}]: {formatter(state, exception)} {exception}";