未验证 提交 6ae364d5 编写于 作者: A Anton Firszov 提交者: GitHub

Fix FailedRequests_ConnectionClosedWhileReceivingHeaders_Recorded (#89047)

上级 cdff572b
......@@ -530,10 +530,10 @@ protected override void Dispose(bool disposing)
base.Dispose(disposing);
}
protected Task<HttpResponseMessage> SendAsync(HttpMessageInvoker invoker, HttpRequestMessage request) =>
protected Task<HttpResponseMessage> SendAsync(HttpMessageInvoker invoker, HttpRequestMessage request, CancellationToken cancellationToken = default) =>
TestHttpMessageInvoker ?
invoker.SendAsync(request, default) :
((HttpClient)invoker).SendAsync(TestAsync, request);
invoker.SendAsync(request, cancellationToken) :
((HttpClient)invoker).SendAsync(TestAsync, request, cancellationToken);
protected HttpMessageInvoker CreateHttpMessageInvoker(HttpMessageHandler? handler = null) =>
TestHttpMessageInvoker ?
......@@ -617,24 +617,32 @@ public async Task RequestDuration_EnrichmentHandler_ContentLengthError_Recorded(
[Fact]
public async Task FailedRequests_ConnectionClosedWhileReceivingHeaders_Recorded()
{
TimeSpan timeout = TimeSpan.FromSeconds(30);
using CancellationTokenSource cancelServerCts = new CancellationTokenSource();
await LoopbackServerFactory.CreateClientAndServerAsync(async uri =>
{
using HttpMessageInvoker client = CreateHttpMessageInvoker();
using InstrumentRecorder<long> recorder = SetupInstrumentRecorder<long>(InstrumentNames.FailedRequests);
using HttpRequestMessage request = new(HttpMethod.Get, uri) { Version = UseVersion };
await Assert.ThrowsAsync<HttpRequestException>(async () =>
Exception ex = await Assert.ThrowsAnyAsync<Exception>(async () =>
{
using HttpResponseMessage response = await SendAsync(client, request);
}).WaitAsync(timeout);
// Getting a cancellation is also good if we are unable to detect the peer shutdown.
using CancellationTokenSource cts = new CancellationTokenSource(10_000);
using HttpResponseMessage response = await SendAsync(client, request, cts.Token);
});
cancelServerCts.Cancel();
Assert.True(ex is HttpRequestException or TaskCanceledException);
Measurement<long> m = recorder.GetMeasurements().Single();
VerifyFailedRequests(m, 1, uri, null, null);
}, async server =>
{
var connection = (LoopbackServer.Connection)await server.EstablishGenericConnectionAsync().WaitAsync(timeout);
connection.Socket.Close();
try
{
var connection = (LoopbackServer.Connection)await server.EstablishGenericConnectionAsync().WaitAsync(cancelServerCts.Token);
connection.Socket.Close();
}
catch { }
});
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册