mirror of
https://github.com/tgstation/tgstation-server.git
synced 2026-08-22 20:47:28 +01:00
Allow specifying HttpCompletionOption in IHttpClient
This commit is contained in:
@@ -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
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user