14
14
15
15
namespace Microsoft . AspNetCore . Server . HttpSys . Listener
16
16
{
17
- public class ResponseHeaderTests
17
+ public class ResponseHeaderTests : IDisposable
18
18
{
19
+ private HttpClient _client = new HttpClient ( ) ;
20
+
21
+ void IDisposable . Dispose ( )
22
+ {
23
+ _client . Dispose ( ) ;
24
+ }
25
+
19
26
[ ConditionalFact ]
20
27
public async Task ResponseHeaders_11Request_ServerSendsDefaultHeaders ( )
21
28
{
@@ -74,12 +81,18 @@ public async Task ResponseHeaders_11HeadRequest_ServerSendsDefaultHeaders()
74
81
75
82
HttpResponseMessage response = await responseTask ;
76
83
response . EnsureSuccessStatusCode ( ) ;
77
- Assert . Equal ( 3 , response . Headers . Count ( ) ) ;
78
- Assert . True ( response . Headers . TransferEncodingChunked . Value ) ;
84
+ Assert . Equal ( 2 , response . Headers . Count ( ) ) ;
85
+ Assert . False ( response . Headers . TransferEncodingChunked . HasValue ) ;
79
86
Assert . True ( response . Headers . Date . HasValue ) ;
80
87
Assert . Equal ( "Microsoft-HTTPAPI/2.0" , response . Headers . Server . ToString ( ) ) ;
81
88
Assert . False ( response . Content . Headers . Contains ( "Content-Length" ) ) ;
82
89
Assert . Equal ( 0 , response . Content . Headers . Count ( ) ) ;
90
+
91
+ // Send a second request to check for connection corruption.
92
+ responseTask = SendHeadRequestAsync ( address ) ;
93
+ context = await server . AcceptAsync ( Utilities . DefaultTimeout ) ;
94
+ context . Dispose ( ) ;
95
+ response = await responseTask ;
83
96
}
84
97
}
85
98
@@ -103,6 +116,12 @@ public async Task ResponseHeaders_10HeadRequest_ServerSendsDefaultHeaders()
103
116
Assert . Equal ( "Microsoft-HTTPAPI/2.0" , response . Headers . Server . ToString ( ) ) ;
104
117
Assert . False ( response . Content . Headers . Contains ( "Content-Length" ) ) ;
105
118
Assert . Equal ( 0 , response . Content . Headers . Count ( ) ) ;
119
+
120
+ // Send a second request to check for connection corruption.
121
+ responseTask = SendHeadRequestAsync ( address ) ;
122
+ context = await server . AcceptAsync ( Utilities . DefaultTimeout ) ;
123
+ context . Dispose ( ) ;
124
+ response = await responseTask ;
106
125
}
107
126
}
108
127
@@ -126,6 +145,12 @@ public async Task ResponseHeaders_11HeadRequestWithContentLength_Success()
126
145
Assert . Equal ( "Microsoft-HTTPAPI/2.0" , response . Headers . Server . ToString ( ) ) ;
127
146
Assert . Equal ( 1 , response . Content . Headers . Count ( ) ) ;
128
147
Assert . Equal ( 20 , response . Content . Headers . ContentLength ) ;
148
+
149
+ // Send a second request to check for connection corruption.
150
+ responseTask = SendHeadRequestAsync ( address ) ;
151
+ context = await server . AcceptAsync ( Utilities . DefaultTimeout ) ;
152
+ context . Dispose ( ) ;
153
+ response = await responseTask ;
129
154
}
130
155
}
131
156
@@ -172,6 +197,12 @@ public async Task ResponseHeaders_11HeadRequestStatusCodeWithoutBody_NoContentLe
172
197
Assert . Equal ( "Microsoft-HTTPAPI/2.0" , response . Headers . Server . ToString ( ) ) ;
173
198
Assert . False ( response . Content . Headers . Contains ( "Content-Length" ) ) ;
174
199
Assert . Equal ( 0 , response . Content . Headers . Count ( ) ) ;
200
+
201
+ // Send a second request to check for connection corruption.
202
+ responseTask = SendHeadRequestAsync ( address ) ;
203
+ context = await server . AcceptAsync ( Utilities . DefaultTimeout ) ;
204
+ context . Dispose ( ) ;
205
+ response = await responseTask ;
175
206
}
176
207
}
177
208
@@ -484,32 +515,26 @@ public async Task AddingControlCharactersToHeadersThrows(string key, string valu
484
515
485
516
private async Task < HttpResponseMessage > SendRequestAsync ( string uri , bool usehttp11 = true , bool sendKeepAlive = false )
486
517
{
487
- using ( HttpClient client = new HttpClient ( ) )
518
+ var request = new HttpRequestMessage ( HttpMethod . Get , uri ) ;
519
+ if ( ! usehttp11 )
488
520
{
489
- var request = new HttpRequestMessage ( HttpMethod . Get , uri ) ;
490
- if ( ! usehttp11 )
491
- {
492
- request . Version = new Version ( 1 , 0 ) ;
493
- }
494
- if ( sendKeepAlive )
495
- {
496
- request . Headers . Add ( "Connection" , "Keep-Alive" ) ;
497
- }
498
- return await client . SendAsync ( request ) ;
521
+ request . Version = new Version ( 1 , 0 ) ;
522
+ }
523
+ if ( sendKeepAlive )
524
+ {
525
+ request . Headers . Add ( "Connection" , "Keep-Alive" ) ;
499
526
}
527
+ return await _client . SendAsync ( request ) ;
500
528
}
501
529
502
530
private async Task < HttpResponseMessage > SendHeadRequestAsync ( string uri , bool usehttp11 = true )
503
531
{
504
- using ( HttpClient client = new HttpClient ( ) )
532
+ var request = new HttpRequestMessage ( HttpMethod . Head , uri ) ;
533
+ if ( ! usehttp11 )
505
534
{
506
- var request = new HttpRequestMessage ( HttpMethod . Head , uri ) ;
507
- if ( ! usehttp11 )
508
- {
509
- request . Version = new Version ( 1 , 0 ) ;
510
- }
511
- return await client . SendAsync ( request ) ;
535
+ request . Version = new Version ( 1 , 0 ) ;
512
536
}
537
+ return await _client . SendAsync ( request ) ;
513
538
}
514
539
}
515
540
}
0 commit comments