}
public static string GetHttpResponse(HttpStatusCode statusCode = HttpStatusCode.OK, string additionalHeaders = null, string content = null, bool connectionClose = false) =>
+ GetHttpResponseHeaders(statusCode, additionalHeaders, content, connectionClose) +
+ content;
+
+ public static string GetHttpResponseHeaders(HttpStatusCode statusCode = HttpStatusCode.OK, string additionalHeaders = null, string content = null, bool connectionClose = false) =>
$"HTTP/1.1 {(int)statusCode} {GetStatusDescription(statusCode)}\r\n" +
(connectionClose ? "Connection: close\r\n" : "") +
$"Date: {DateTimeOffset.UtcNow:R}\r\n" +
$"Content-Length: {(content == null ? 0 : content.Length)}\r\n" +
additionalHeaders +
- "\r\n" +
- content;
+ "\r\n";
public static string GetSingleChunkHttpResponse(HttpStatusCode statusCode = HttpStatusCode.OK, string additionalHeaders = null, string content = null, bool connectionClose = false) =>
$"HTTP/1.1 {(int)statusCode} {GetStatusDescription(statusCode)}\r\n" +
return lines;
}
+ public async Task SendResponseAsync(string response)
+ {
+ await _writer.WriteAsync(response).ConfigureAwait(false);
+ }
+
public async Task SendResponseAsync(HttpStatusCode statusCode = HttpStatusCode.OK, string additionalHeaders = null, string content = null)
{
- await _writer.WriteAsync(GetHttpResponse(statusCode, additionalHeaders, content)).ConfigureAwait(false);
+ await SendResponseAsync(GetHttpResponse(statusCode, additionalHeaders, content)).ConfigureAwait(false);
}
public async Task<List<string>> ReadRequestHeaderAndSendCustomResponseAsync(string response)
if (IsCurlHandler) return;
var clientFinished = new TaskCompletionSource<bool>();
- const string TestString = "test";
+ const string RequestString = "request";
+ const string ResponseString = "response";
await LoopbackServer.CreateClientAndServerAsync(async uri =>
{
using (HttpClient client = CreateHttpClient())
{
HttpRequestMessage initialMessage = new HttpRequestMessage(HttpMethod.Post, uri) { Version = VersionFromUseHttp2 };
- initialMessage.Content = new StringContent(TestString);
+ initialMessage.Content = new StringContent(RequestString);
initialMessage.Headers.ExpectContinue = true;
- HttpResponseMessage response = await client.SendAsync(initialMessage);
+ using (HttpResponseMessage response = await client.SendAsync(initialMessage))
+ {
+ Assert.Equal(HttpStatusCode.OK, response.StatusCode);
+ Assert.Equal(ResponseString, await response.Content.ReadAsStringAsync());
+ }
- Assert.Equal(HttpStatusCode.OK, response.StatusCode);
clientFinished.SetResult(true);
}
}, async server =>
{
await server.AcceptConnectionAsync(async connection =>
{
- // Send final status code 200.
- await connection.ReadRequestHeaderAndSendResponseAsync();
+ await connection.ReadRequestHeaderAsync();
+ await connection.SendResponseAsync(LoopbackServer.GetHttpResponseHeaders(HttpStatusCode.OK, content: ResponseString));
- var result = new char[TestString.Length];
- await connection.ReadBlockAsync(result, 0, TestString.Length);
- Assert.Equal(TestString, new string(result));
+ var result = new char[RequestString.Length];
+ await connection.ReadBlockAsync(result, 0, RequestString.Length);
+ Assert.Equal(RequestString, new string(result));
+
+ await connection.SendResponseAsync(ResponseString);
await clientFinished.Task;
});