Skip to content

Commit 9ea3093

Browse files
committed
Fix copied flakey tests
1 parent d3e896d commit 9ea3093

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

src/Servers/Kestrel/test/InMemory.FunctionalTests/Http3/Http3TimeoutTests.cs

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Net.Http;
88
using System.Threading.Tasks;
99
using Microsoft.AspNetCore.Connections;
10+
using Microsoft.AspNetCore.Http;
1011
using Microsoft.AspNetCore.Server.Kestrel.Core.Features;
1112
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http3;
1213
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure;
@@ -263,6 +264,29 @@ public async Task ResponseDrain_SlowerThanMinimumDataRate_AbortsConnection()
263264
}
264265
*/
265266

267+
private class EchoAppWithNotification
268+
{
269+
private readonly TaskCompletionSource _writeStartedTcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);
270+
271+
public Task WriteStartedTask => _writeStartedTcs.Task;
272+
273+
public async Task RunApp(HttpContext context)
274+
{
275+
await context.Response.Body.FlushAsync();
276+
277+
var buffer = new byte[16 * 1024];
278+
int received;
279+
280+
while ((received = await context.Request.Body.ReadAsync(buffer, 0, buffer.Length)) > 0)
281+
{
282+
var writeTask = context.Response.Body.WriteAsync(buffer, 0, received);
283+
_writeStartedTcs.TrySetResult();
284+
285+
await writeTask;
286+
}
287+
}
288+
}
289+
266290
[Fact]
267291
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/21520")]
268292
public async Task DATA_Sent_TooSlowlyDueToSocketBackPressureOnSmallWrite_AbortsConnectionAfterGracePeriod()
@@ -278,13 +302,16 @@ public async Task DATA_Sent_TooSlowlyDueToSocketBackPressureOnSmallWrite_AbortsC
278302

279303
_timeoutControl.Initialize(mockSystemClock.UtcNow.Ticks);
280304

281-
var requestStream = await InitializeConnectionAndStreamsAsync(_echoApplication);
305+
var app = new EchoAppWithNotification();
306+
var requestStream = await InitializeConnectionAndStreamsAsync(app.RunApp);
282307

283308
await requestStream.SendHeadersAsync(_browserRequestHeaders, endStream: false);
284309
await requestStream.SendDataAsync(_helloWorldBytes, endStream: true);
285310

286311
await requestStream.ExpectHeadersAsync();
287312

313+
await app.WriteStartedTask.DefaultTimeout();
314+
288315
// Complete timing of the request body so we don't induce any unexpected request body rate timeouts.
289316
_timeoutControl.Tick(mockSystemClock.UtcNow);
290317

@@ -306,7 +333,6 @@ public async Task DATA_Sent_TooSlowlyDueToSocketBackPressureOnSmallWrite_AbortsC
306333
}
307334

308335
[Fact]
309-
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/21520")]
310336
public async Task DATA_Sent_TooSlowlyDueToSocketBackPressureOnLargeWrite_AbortsConnectionAfterRateTimeout()
311337
{
312338
var mockSystemClock = _serviceContext.MockSystemClock;
@@ -320,18 +346,21 @@ public async Task DATA_Sent_TooSlowlyDueToSocketBackPressureOnLargeWrite_AbortsC
320346

321347
_timeoutControl.Initialize(mockSystemClock.UtcNow.Ticks);
322348

323-
var requestStream = await InitializeConnectionAndStreamsAsync(_echoApplication);
349+
var app = new EchoAppWithNotification();
350+
var requestStream = await InitializeConnectionAndStreamsAsync(app.RunApp);
324351

325352
await requestStream.SendHeadersAsync(_browserRequestHeaders, endStream: false);
326353
await requestStream.SendDataAsync(_maxData, endStream: true);
327354

328355
await requestStream.ExpectHeadersAsync();
329356

357+
await app.WriteStartedTask.DefaultTimeout();
358+
330359
// Complete timing of the request body so we don't induce any unexpected request body rate timeouts.
331360
_timeoutControl.Tick(mockSystemClock.UtcNow);
332361

333362
var timeToWriteMaxData = TimeSpan.FromSeconds((requestStream.BytesReceived + _maxData.Length) / limits.MinResponseDataRate.BytesPerSecond) +
334-
Heartbeat.Interval - TimeSpan.FromSeconds(.5);
363+
limits.MinResponseDataRate.GracePeriod + Heartbeat.Interval - TimeSpan.FromSeconds(.5);
335364

336365
// Don't read data frame to induce "socket" backpressure.
337366
AdvanceClock(timeToWriteMaxData);

0 commit comments

Comments
 (0)