Allow specifying HttpCompletionOption in IHttpClient

This commit is contained in:
Dominion
2023-06-10 11:18:21 -04:00
parent 34386e590a
commit 22c3f591fe
9 changed files with 21 additions and 18 deletions
+1 -1
View File
@@ -318,7 +318,7 @@ namespace Tgstation.Server.Client
await Task.WhenAll(requestLoggers.Select(x => x.LogRequest(request, cancellationToken))).ConfigureAwait(false);
response = await httpClient.SendAsync(request, cancellationToken).ConfigureAwait(false);
response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
}
finally
{
+2 -1
View File
@@ -45,6 +45,7 @@ namespace Tgstation.Server.Common
public void Dispose() => httpClient.Dispose();
/// <inheritdoc />
public Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) => httpClient.SendAsync(request, cancellationToken);
public Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
=> httpClient.SendAsync(request, completionOption, cancellationToken);
}
}
+2 -1
View File
@@ -25,8 +25,9 @@ namespace Tgstation.Server.Common
/// Send an HTTP request.
/// </summary>
/// <param name="request">The <see cref="HttpRequestMessage"/>.</param>
/// <param name="completionOption">The <see cref="HttpCompletionOption"/>.</param>
/// <param name="cancellationToken">The <see cref="CancellationToken"/> for the operation.</param>
/// <returns>A <see cref="Task{TResult}"/> resulting in the <see cref="HttpResponseMessage"/> of the request.</returns>
Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken);
Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken);
}
}
@@ -51,7 +51,7 @@ namespace Tgstation.Server.Host.IO
if (bearerToken != null)
request.Headers.Authorization = new AuthenticationHeaderValue(ApiHeaders.BearerAuthenticationScheme, bearerToken);
var webRequestTask = httpClient.SendAsync(request, cancellationToken);
var webRequestTask = httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);
using var response = await webRequestTask;
response.EnsureSuccessStatusCode();
await using var responseStream = await response.Content.ReadAsStreamAsync(cancellationToken);
@@ -100,7 +100,7 @@ namespace Tgstation.Server.Host.Security.OAuth
var tokenRequestDictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(tokenRequestJson);
tokenRequest.Content = new FormUrlEncodedContent(tokenRequestDictionary);
using var tokenResponse = await httpClient.SendAsync(tokenRequest, cancellationToken);
using var tokenResponse = await httpClient.SendAsync(tokenRequest, HttpCompletionOption.ResponseHeadersRead, cancellationToken);
tokenResponse.EnsureSuccessStatusCode();
tokenResponsePayload = await tokenResponse.Content.ReadAsStringAsync(cancellationToken);
var tokenResponseJson = JObject.Parse(tokenResponsePayload);
@@ -304,7 +304,7 @@ namespace Tgstation.Server.Host.Swarm
try
{
using var response = await httpClient.SendAsync(request, cancellationToken);
using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead, cancellationToken);
response.EnsureSuccessStatusCode();
}
catch (Exception ex)
@@ -365,7 +365,7 @@ namespace Tgstation.Server.Host.Swarm
try
{
using var commitReadyResponse = await httpClient.SendAsync(commitReadyRequest, cancellationToken);
using var commitReadyResponse = await httpClient.SendAsync(commitReadyRequest, HttpCompletionOption.ResponseContentRead, cancellationToken);
commitReadyResponse.EnsureSuccessStatusCode();
}
catch (Exception ex)
@@ -421,7 +421,7 @@ namespace Tgstation.Server.Host.Swarm
{
// I know using the cancellationToken after this point doesn't seem very sane
// It's the token for Ctrl+C on server's console though, so we must respect it
using var response = await httpClient.SendAsync(request, cancellationToken);
using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead, cancellationToken);
response.EnsureSuccessStatusCode();
}
catch (Exception ex)
@@ -516,7 +516,7 @@ namespace Tgstation.Server.Host.Swarm
try
{
using var response = await httpClient.SendAsync(request, cancellationToken);
using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead, cancellationToken);
response.EnsureSuccessStatusCode();
}
catch (Exception ex)
@@ -782,7 +782,7 @@ namespace Tgstation.Server.Host.Swarm
UpdateVersion = version,
});
using var response = await httpClient.SendAsync(request, cancellationToken);
using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead, cancellationToken);
return response.IsSuccessStatusCode;
}
@@ -943,7 +943,7 @@ namespace Tgstation.Server.Host.Swarm
try
{
using var response = await httpClient.SendAsync(request, cancellationToken);
using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead, cancellationToken);
response.EnsureSuccessStatusCode();
return;
}
@@ -1014,7 +1014,7 @@ namespace Tgstation.Server.Host.Swarm
HttpMethod.Get,
String.Empty,
null);
using var response = await httpClient.SendAsync(request, cancellationToken);
using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead, cancellationToken);
response.EnsureSuccessStatusCode();
logger.LogTrace("Controller health check successful");
return;
@@ -1079,7 +1079,7 @@ namespace Tgstation.Server.Host.Swarm
try
{
using var response = await httpClient.SendAsync(registrationRequest, cancellationToken);
using var response = await httpClient.SendAsync(registrationRequest, HttpCompletionOption.ResponseContentRead, cancellationToken);
if (response.IsSuccessStatusCode)
{
logger.LogInformation("Sucessfully registered with ID {registrationId}", requestedRegistrationId);
@@ -1151,7 +1151,7 @@ namespace Tgstation.Server.Host.Swarm
try
{
using var response = await httpClient.SendAsync(request, cancellationToken);
using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead, cancellationToken);
response.EnsureSuccessStatusCode();
}
catch (Exception ex) when (ex is not OperationCanceledException)
@@ -39,7 +39,7 @@ namespace Tgstation.Server.Client.Tests
};
var httpClient = new Mock<IHttpClient>();
httpClient.Setup(x => x.SendAsync(It.IsNotNull<HttpRequestMessage>(), It.IsAny<CancellationToken>())).Returns(Task.FromResult(response));
httpClient.Setup(x => x.SendAsync(It.IsNotNull<HttpRequestMessage>(), It.IsAny<HttpCompletionOption>(), It.IsAny<CancellationToken>())).Returns(Task.FromResult(response));
var client = new ApiClient(httpClient.Object, new Uri("http://fake.com"), new ApiHeaders(new ProductHeaderValue("fake"), "fake"), null, false);
@@ -64,7 +64,7 @@ namespace Tgstation.Server.Client.Tests
};
var httpClient = new Mock<IHttpClient>();
httpClient.Setup(x => x.SendAsync(It.IsNotNull<HttpRequestMessage>(), It.IsAny<CancellationToken>())).Returns(Task.FromResult(response));
httpClient.Setup(x => x.SendAsync(It.IsNotNull<HttpRequestMessage>(), It.IsAny<HttpCompletionOption>(), It.IsAny<CancellationToken>())).Returns(Task.FromResult(response));
var client = new ApiClient(httpClient.Object, new Uri("http://fake.com"), new ApiHeaders(new ProductHeaderValue("fake"), "fake"), null, true);
@@ -41,7 +41,7 @@ namespace Tgstation.Server.Host.Swarm.Tests
{
this.createSwarmController = createSwarmController;
clientMock
.Setup(x => x.SendAsync(It.IsNotNull<HttpRequestMessage>(), It.IsAny<CancellationToken>()))
.Setup(x => x.SendAsync(It.IsNotNull<HttpRequestMessage>(), It.IsAny<HttpCompletionOption>(), It.IsAny<CancellationToken>()))
.Returns(MapRequest);
this.logger = logger;
AsyncRequests = true;
@@ -59,6 +59,7 @@ namespace Tgstation.Server.Host.Swarm.Tests
async Task<HttpResponseMessage> MapRequest(
HttpRequestMessage request,
HttpCompletionOption httpCompletionOption,
CancellationToken cancellationToken)
{
var (config, node) = configToNodes.FirstOrDefault(
+1 -1
View File
@@ -282,7 +282,7 @@ try
using var httpClient = httpClientFactory.CreateClient();
using var request = new HttpRequestMessage(HttpMethod.Get, downloadUri);
var webRequestTask = httpClient.SendAsync(request, default);
var webRequestTask = httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, default);
using var response = await webRequestTask;
response.EnsureSuccessStatusCode();
await using (var responseStream = await response.Content.ReadAsStreamAsync())