Skip to content

Commit ce54847

Browse files
author
Nate McMaster
committed
Merge branch 'release/2.1' into release/2.2
2 parents c06eec1 + 973b4b2 commit ce54847

File tree

4 files changed

+25
-11
lines changed

4 files changed

+25
-11
lines changed

src/Servers/Kestrel/test/InMemory.FunctionalTests/RequestTests.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public async Task StreamsAreNotPersistedAcrossRequests()
6060
public async Task RequestBodyReadAsyncCanBeCancelled()
6161
{
6262
var helloTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
63+
var readTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
6364
var cts = new CancellationTokenSource();
6465

6566
using (var server = new TestServer(async context =>
@@ -81,7 +82,9 @@ public async Task RequestBodyReadAsyncCanBeCancelled()
8182

8283
try
8384
{
84-
await context.Request.Body.ReadAsync(buffer, 0, 1, cts.Token).DefaultTimeout();
85+
var task = context.Request.Body.ReadAsync(buffer, 0, buffer.Length, cts.Token);
86+
readTcs.TrySetResult(null);
87+
await task;
8588

8689
context.Response.ContentLength = 12;
8790
await context.Response.WriteAsync("Read success");
@@ -107,12 +110,11 @@ await connection.Send(
107110
await connection.Send("Hello ");
108111

109112
await helloTcs.Task;
113+
await readTcs.Task;
110114

111115
// Cancel the body after hello is read
112116
cts.Cancel();
113117

114-
await connection.Send("World");
115-
116118
await connection.Receive($"HTTP/1.1 200 OK",
117119
$"Date: {server.Context.DateHeaderValue}",
118120
"Content-Length: 14",

src/Servers/Kestrel/test/InMemory.FunctionalTests/ResponseTests.cs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,32 +104,42 @@ await connection.Receive($"HTTP/1.1 200 OK",
104104
public async Task ResponseBodyWriteAsyncCanBeCancelled()
105105
{
106106
var serviceContext = new TestServiceContext(LoggerFactory);
107-
serviceContext.ServerOptions.Limits.MaxResponseBufferSize = 5;
108107
var cts = new CancellationTokenSource();
109108
var appTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
110-
var writeStartedTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
109+
var writeBlockedTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
111110

112111
using (var server = new TestServer(async context =>
113112
{
114113
try
115114
{
116115
await context.Response.WriteAsync("hello", cts.Token).DefaultTimeout();
117116

118-
var task = context.Response.WriteAsync("world", cts.Token);
119-
Assert.False(task.IsCompleted);
117+
var data = new byte[1024 * 1024 * 10];
120118

121-
writeStartedTcs.TrySetResult(null);
119+
var timerTask = Task.Delay(TimeSpan.FromSeconds(1));
120+
var writeTask = context.Response.Body.WriteAsync(data, 0, data.Length, cts.Token).DefaultTimeout();
121+
var completedTask = await Task.WhenAny(writeTask, timerTask);
122122

123-
await task.DefaultTimeout();
123+
while (completedTask == writeTask)
124+
{
125+
await writeTask;
126+
timerTask = Task.Delay(TimeSpan.FromSeconds(1));
127+
writeTask = context.Response.Body.WriteAsync(data, 0, data.Length, cts.Token).DefaultTimeout();
128+
completedTask = await Task.WhenAny(writeTask, timerTask);
129+
}
130+
131+
writeBlockedTcs.TrySetResult(null);
132+
133+
await writeTask;
124134
}
125135
catch (Exception ex)
126136
{
127137
appTcs.TrySetException(ex);
138+
writeBlockedTcs.TrySetException(ex);
128139
}
129140
finally
130141
{
131142
appTcs.TrySetResult(null);
132-
writeStartedTcs.TrySetCanceled();
133143
}
134144
}, serviceContext))
135145
{
@@ -148,7 +158,7 @@ await connection.Receive($"HTTP/1.1 200 OK",
148158
"5",
149159
"hello");
150160

151-
await writeStartedTcs.Task.DefaultTimeout();
161+
await writeBlockedTcs.Task.DefaultTimeout();
152162

153163
cts.Cancel();
154164

src/Servers/Kestrel/test/Libuv.FunctionalTests/Libuv.FunctionalTests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
<Reference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" />
2222
<Reference Include="Microsoft.AspNetCore.Server.Kestrel" />
2323
<Reference Include="Microsoft.Internal.AspNetCore.H2Spec.All" />
24+
<Reference Include="Microsoft.AspNetCore.Server.Kestrel.Core" />
2425
<Reference Include="Newtonsoft.Json" />
2526
<Reference Include="System.Net.Http.WinHttpHandler" />
2627
</ItemGroup>

src/Servers/Kestrel/test/Sockets.FunctionalTests/Sockets.FunctionalTests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
<Reference Include="Microsoft.AspNetCore.Server.Kestrel.Https" />
2020
<Reference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets" />
2121
<Reference Include="Microsoft.AspNetCore.Server.Kestrel" />
22+
<Reference Include="Microsoft.AspNetCore.Server.Kestrel.Core" />
2223
<Reference Include="Newtonsoft.Json" />
2324
<Reference Include="System.Net.Http.WinHttpHandler" />
2425
</ItemGroup>

0 commit comments

Comments
 (0)