Add ConfigureAwait(false) to test helpers (#1699)

* Add ConfigureAwait(false) to test helpers
This commit is contained in:
David Fowler 2017-04-17 11:33:27 -07:00 committed by Stephen Halter
parent 85d883456b
commit de6da7c757
4 changed files with 38 additions and 37 deletions

View File

@ -38,7 +38,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
using (host) using (host)
{ {
host.Start(); await host.StartAsync();
var response = await HttpClientSlim.GetStringAsync($"https://localhost:{host.GetPort()}/", validateCertificate: false) var response = await HttpClientSlim.GetStringAsync($"https://localhost:{host.GetPort()}/", validateCertificate: false)
.TimeoutAfter(TimeSpan.FromSeconds(10)); .TimeoutAfter(TimeSpan.FromSeconds(10));

View File

@ -108,7 +108,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
while (bytesWritten < data.Length) while (bytesWritten < data.Length)
{ {
var size = Math.Min(data.Length - bytesWritten, maxSendSize); var size = Math.Min(data.Length - bytesWritten, maxSendSize);
await stream.WriteAsync(data, bytesWritten, size); await stream.WriteAsync(data, bytesWritten, size).ConfigureAwait(false);
bytesWritten += size; bytesWritten += size;
lastBytesWritten = DateTime.Now; lastBytesWritten = DateTime.Now;
} }
@ -200,7 +200,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
while (bytesWritten < data.Length) while (bytesWritten < data.Length)
{ {
var size = Math.Min(data.Length - bytesWritten, maxSendSize); var size = Math.Min(data.Length - bytesWritten, maxSendSize);
await stream.WriteAsync(data, bytesWritten, size); await stream.WriteAsync(data, bytesWritten, size).ConfigureAwait(false);
bytesWritten += size; bytesWritten += size;
lastBytesWritten = DateTime.Now; lastBytesWritten = DateTime.Now;
} }
@ -336,7 +336,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{ {
foreach (var line in _requestLines) foreach (var line in _requestLines)
{ {
await writer.WriteAsync(line); await writer.WriteAsync(line).ConfigureAwait(false);
} }
} }
} }

View File

@ -16,26 +16,26 @@ namespace Microsoft.AspNetCore.Testing
// Lightweight version of HttpClient implemented using Socket and SslStream // Lightweight version of HttpClient implemented using Socket and SslStream
public static class HttpClientSlim public static class HttpClientSlim
{ {
public static Task<string> GetStringAsync(string requestUri, bool validateCertificate = true) public static async Task<string> GetStringAsync(string requestUri, bool validateCertificate = true)
=> GetStringAsync(new Uri(requestUri), validateCertificate); => await GetStringAsync(new Uri(requestUri), validateCertificate).ConfigureAwait(false);
public static async Task<string> GetStringAsync(Uri requestUri, bool validateCertificate = true) public static async Task<string> GetStringAsync(Uri requestUri, bool validateCertificate = true)
{ {
using (var stream = await GetStream(requestUri, validateCertificate)) using (var stream = await GetStream(requestUri, validateCertificate).ConfigureAwait(false))
{ {
using (var writer = new StreamWriter(stream, Encoding.ASCII, bufferSize: 1024, leaveOpen: true)) using (var writer = new StreamWriter(stream, Encoding.ASCII, bufferSize: 1024, leaveOpen: true))
{ {
await writer.WriteAsync($"GET {requestUri.PathAndQuery} HTTP/1.0\r\n"); await writer.WriteAsync($"GET {requestUri.PathAndQuery} HTTP/1.0\r\n").ConfigureAwait(false);
await writer.WriteAsync($"Host: {requestUri.Authority}\r\n"); await writer.WriteAsync($"Host: {requestUri.Authority}\r\n").ConfigureAwait(false);
await writer.WriteAsync("\r\n"); await writer.WriteAsync("\r\n").ConfigureAwait(false);
} }
return await ReadResponse(stream); return await ReadResponse(stream).ConfigureAwait(false);
} }
} }
public static Task<string> PostAsync(string requestUri, HttpContent content, bool validateCertificate = true) public static async Task<string> PostAsync(string requestUri, HttpContent content, bool validateCertificate = true)
=> PostAsync(new Uri(requestUri), content, validateCertificate); => await PostAsync(new Uri(requestUri), content, validateCertificate).ConfigureAwait(false);
public static async Task<string> PostAsync(Uri requestUri, HttpContent content, bool validateCertificate = true) public static async Task<string> PostAsync(Uri requestUri, HttpContent content, bool validateCertificate = true)
{ {
@ -43,16 +43,16 @@ namespace Microsoft.AspNetCore.Testing
{ {
using (var writer = new StreamWriter(stream, Encoding.ASCII, bufferSize: 1024, leaveOpen: true)) using (var writer = new StreamWriter(stream, Encoding.ASCII, bufferSize: 1024, leaveOpen: true))
{ {
await writer.WriteAsync($"POST {requestUri.PathAndQuery} HTTP/1.0\r\n"); await writer.WriteAsync($"POST {requestUri.PathAndQuery} HTTP/1.0\r\n").ConfigureAwait(false);
await writer.WriteAsync($"Host: {requestUri.Authority}\r\n"); await writer.WriteAsync($"Host: {requestUri.Authority}\r\n").ConfigureAwait(false);
await writer.WriteAsync($"Content-Type: {content.Headers.ContentType}\r\n"); await writer.WriteAsync($"Content-Type: {content.Headers.ContentType}\r\n").ConfigureAwait(false);
await writer.WriteAsync($"Content-Length: {content.Headers.ContentLength}\r\n"); await writer.WriteAsync($"Content-Length: {content.Headers.ContentLength}\r\n").ConfigureAwait(false);
await writer.WriteAsync("\r\n"); await writer.WriteAsync("\r\n").ConfigureAwait(false);
} }
await content.CopyToAsync(stream); await content.CopyToAsync(stream).ConfigureAwait(false);
return await ReadResponse(stream); return await ReadResponse(stream).ConfigureAwait(false);
} }
} }
@ -61,7 +61,7 @@ namespace Microsoft.AspNetCore.Testing
using (var reader = new StreamReader(stream, Encoding.ASCII, detectEncodingFromByteOrderMarks: true, using (var reader = new StreamReader(stream, Encoding.ASCII, detectEncodingFromByteOrderMarks: true,
bufferSize: 1024, leaveOpen: true)) bufferSize: 1024, leaveOpen: true))
{ {
var response = await reader.ReadToEndAsync(); var response = await reader.ReadToEndAsync().ConfigureAwait(false);
var status = GetStatus(response); var status = GetStatus(response);
new HttpResponseMessage(status).EnsureSuccessStatusCode(); new HttpResponseMessage(status).EnsureSuccessStatusCode();
@ -83,15 +83,16 @@ namespace Microsoft.AspNetCore.Testing
private static async Task<Stream> GetStream(Uri requestUri, bool validateCertificate) private static async Task<Stream> GetStream(Uri requestUri, bool validateCertificate)
{ {
var socket = await GetSocket(requestUri); var socket = await GetSocket(requestUri);
Stream stream = new NetworkStream(socket, ownsSocket: true); var stream = new NetworkStream(socket, ownsSocket: true);
if (requestUri.Scheme.Equals("https", StringComparison.OrdinalIgnoreCase)) if (requestUri.Scheme.Equals("https", StringComparison.OrdinalIgnoreCase))
{ {
var sslStream = new SslStream(stream, leaveInnerStreamOpen: false, userCertificateValidationCallback: var sslStream = new SslStream(stream, leaveInnerStreamOpen: false, userCertificateValidationCallback:
validateCertificate ? null : (RemoteCertificateValidationCallback)((a, b, c, d) => true)); validateCertificate ? null : (RemoteCertificateValidationCallback)((a, b, c, d) => true));
await sslStream.AuthenticateAsClientAsync(requestUri.Host, clientCertificates: null, await sslStream.AuthenticateAsClientAsync(requestUri.Host, clientCertificates: null,
enabledSslProtocols: SslProtocols.Tls11 | SslProtocols.Tls12, enabledSslProtocols: SslProtocols.Tls11 | SslProtocols.Tls12,
checkCertificateRevocation: validateCertificate); checkCertificateRevocation: validateCertificate).ConfigureAwait(false);
return sslStream; return sslStream;
} }
else else
@ -111,7 +112,7 @@ namespace Microsoft.AspNetCore.Testing
// Must use static ConnectAsync(), since instance Connect() does not support DNS names on OSX/Linux. // Must use static ConnectAsync(), since instance Connect() does not support DNS names on OSX/Linux.
if (Socket.ConnectAsync(SocketType.Stream, ProtocolType.Tcp, socketArgs)) if (Socket.ConnectAsync(SocketType.Stream, ProtocolType.Tcp, socketArgs))
{ {
await tcs.Task; await tcs.Task.ConfigureAwait(false);
} }
var socket = socketArgs.ConnectSocket; var socket = socketArgs.ConnectSocket;

View File

@ -52,9 +52,9 @@ namespace Microsoft.AspNetCore.Testing
{ {
var text = string.Join("\r\n", lines); var text = string.Join("\r\n", lines);
var writer = new StreamWriter(_stream, Encoding.GetEncoding("iso-8859-1")); var writer = new StreamWriter(_stream, Encoding.GetEncoding("iso-8859-1"));
await writer.WriteAsync(text); await writer.WriteAsync(text).ConfigureAwait(false);
writer.Flush(); await writer.FlushAsync().ConfigureAwait(false);
_stream.Flush(); await _stream.FlushAsync().ConfigureAwait(false);
} }
public async Task Send(params string[] lines) public async Task Send(params string[] lines)
@ -64,13 +64,13 @@ namespace Microsoft.AspNetCore.Testing
for (var index = 0; index < text.Length; index++) for (var index = 0; index < text.Length; index++)
{ {
var ch = text[index]; var ch = text[index];
await writer.WriteAsync(ch); writer.Write(ch);
await writer.FlushAsync(); await writer.FlushAsync().ConfigureAwait(false);
// Re-add delay to help find socket input consumption bugs more consistently // Re-add delay to help find socket input consumption bugs more consistently
//await Task.Delay(TimeSpan.FromMilliseconds(5)); //await Task.Delay(TimeSpan.FromMilliseconds(5));
} }
writer.Flush(); await writer.FlushAsync().ConfigureAwait(false);
_stream.Flush(); await _stream.FlushAsync().ConfigureAwait(false);
} }
public async Task Receive(params string[] lines) public async Task Receive(params string[] lines)
@ -86,7 +86,7 @@ namespace Microsoft.AspNetCore.Testing
{ {
task = task.TimeoutAfter(Timeout); task = task.TimeoutAfter(Timeout);
} }
var count = await task; var count = await task.ConfigureAwait(false);
if (count == 0) if (count == 0)
{ {
break; break;
@ -99,22 +99,22 @@ namespace Microsoft.AspNetCore.Testing
public async Task ReceiveEnd(params string[] lines) public async Task ReceiveEnd(params string[] lines)
{ {
await Receive(lines); await Receive(lines).ConfigureAwait(false);
_socket.Shutdown(SocketShutdown.Send); _socket.Shutdown(SocketShutdown.Send);
var ch = new char[128]; var ch = new char[128];
var count = await _reader.ReadAsync(ch, 0, 128).TimeoutAfter(Timeout); var count = await _reader.ReadAsync(ch, 0, 128).TimeoutAfter(Timeout).ConfigureAwait(false);
var text = new string(ch, 0, count); var text = new string(ch, 0, count);
Assert.Equal("", text); Assert.Equal("", text);
} }
public async Task ReceiveForcedEnd(params string[] lines) public async Task ReceiveForcedEnd(params string[] lines)
{ {
await Receive(lines); await Receive(lines).ConfigureAwait(false);
try try
{ {
var ch = new char[128]; var ch = new char[128];
var count = await _reader.ReadAsync(ch, 0, 128).TimeoutAfter(Timeout); var count = await _reader.ReadAsync(ch, 0, 128).TimeoutAfter(Timeout).ConfigureAwait(false);
var text = new string(ch, 0, count); var text = new string(ch, 0, count);
Assert.Equal("", text); Assert.Equal("", text);
} }
@ -139,7 +139,7 @@ namespace Microsoft.AspNetCore.Testing
{ {
Assert.True(task.Wait(4000), "timeout"); Assert.True(task.Wait(4000), "timeout");
} }
var count = await task; var count = await task.ConfigureAwait(false);
if (count == 0) if (count == 0)
{ {
break; break;