@@ -384,6 +384,53 @@ public async Task ClientStreaming_ResponseCompletesWithoutReadingRequest()
384
384
await writeTask ;
385
385
}
386
386
387
+ [ Fact ]
388
+ public async Task ClientStreaming_ResponseCompletesWithoutResponseBodyWrite ( )
389
+ {
390
+ // Arrange
391
+ var requestStreamTcs = new TaskCompletionSource < object > ( TaskCreationOptions . RunContinuationsAsynchronously ) ;
392
+
393
+ RequestDelegate appDelegate = ctx =>
394
+ {
395
+ ctx . Response . Headers [ "test-header" ] = "true" ;
396
+ return Task . CompletedTask ;
397
+ } ;
398
+
399
+ Stream requestStream = null ;
400
+
401
+ var builder = new WebHostBuilder ( ) . Configure ( app => app . Run ( appDelegate ) ) ;
402
+ var server = new TestServer ( builder ) ;
403
+ var client = server . CreateClient ( ) ;
404
+
405
+ var httpRequest = new HttpRequestMessage ( HttpMethod . Post , "http://localhost:12345" ) ;
406
+ httpRequest . Version = new Version ( 2 , 0 ) ;
407
+ httpRequest . Content = new PushContent ( async stream =>
408
+ {
409
+ requestStream = stream ;
410
+ await requestStreamTcs . Task ;
411
+ } ) ;
412
+
413
+ // Act
414
+ var response = await client . SendAsync ( httpRequest , HttpCompletionOption . ResponseHeadersRead ) . WithTimeout ( ) ;
415
+
416
+ var responseContent = await response . Content . ReadAsStreamAsync ( ) . WithTimeout ( ) ;
417
+
418
+ // Assert
419
+ response . EnsureSuccessStatusCode ( ) ;
420
+ Assert . Equal ( "true" , response . Headers . GetValues ( "test-header" ) . Single ( ) ) ;
421
+
422
+ // Read response
423
+ byte [ ] buffer = new byte [ 1024 ] ;
424
+ var length = await responseContent . ReadAsync ( buffer ) . AsTask ( ) . WithTimeout ( ) ;
425
+ Assert . Equal ( 0 , length ) ;
426
+
427
+ // Writing to request stream will fail because server is complete
428
+ await Assert . ThrowsAnyAsync < Exception > ( ( ) => requestStream . WriteAsync ( buffer ) . AsTask ( ) ) ;
429
+
430
+ // Unblock request
431
+ requestStreamTcs . TrySetResult ( null ) ;
432
+ }
433
+
387
434
[ Fact ]
388
435
public async Task ClientStreaming_ServerAbort ( )
389
436
{
0 commit comments