@@ -252,23 +252,23 @@ public async Task ResponseTrailers_MultipleStreams_Reset()
252
252
} ;
253
253
254
254
var requestCount = 0 ;
255
+ IHeaderDictionary trailersFirst = null ;
256
+ IHeaderDictionary trailersLast = null ;
255
257
await InitializeConnectionAsync ( context =>
256
258
{
257
259
requestCount ++ ;
258
260
259
261
var trailersFeature = context . Features . Get < IHttpResponseTrailersFeature > ( ) ;
260
-
261
- IHeaderDictionary trailers ;
262
262
if ( requestCount == 1 )
263
263
{
264
- trailers = new ResponseTrailersWrapper ( trailersFeature . Trailers ) ;
265
- trailersFeature . Trailers = trailers ;
264
+ trailersFirst = new ResponseTrailersWrapper ( trailersFeature . Trailers ) ;
265
+ trailersFeature . Trailers = trailersFirst ;
266
266
}
267
267
else
268
268
{
269
- trailers = trailersFeature . Trailers ;
269
+ trailersLast = trailersFeature . Trailers ;
270
270
}
271
- trailers [ "trailer-" + requestCount ] = "true" ;
271
+ trailersFeature . Trailers [ "trailer-" + requestCount ] = "true" ;
272
272
return Task . CompletedTask ;
273
273
} ) ;
274
274
@@ -291,109 +291,55 @@ await ExpectAsync(Http2FrameType.HEADERS,
291
291
292
292
_decodedHeaders . Clear ( ) ;
293
293
294
- // Ping will trigger the stream to be returned to the pool so we can assert it
295
- await SendPingAsync ( Http2PingFrameFlags . NONE ) ;
296
- await ExpectAsync ( Http2FrameType . PING ,
297
- withLength : 8 ,
298
- withFlags : ( byte ) Http2PingFrameFlags . ACK ,
299
- withStreamId : 0 ) ;
300
- await SendPingAsync ( Http2PingFrameFlags . NONE ) ;
301
- await ExpectAsync ( Http2FrameType . PING ,
302
- withLength : 8 ,
303
- withFlags : ( byte ) Http2PingFrameFlags . ACK ,
304
- withStreamId : 0 ) ;
305
-
306
- // Stream has been returned to the pool
307
- Assert . Equal ( 1 , _connection . StreamPool . Count ) ;
308
-
309
- await StartStreamAsync ( 3 , requestHeaders , endStream : true ) ;
310
-
311
- await ExpectAsync ( Http2FrameType . HEADERS ,
312
- withLength : 6 ,
313
- withFlags : ( byte ) ( Http2HeadersFrameFlags . END_HEADERS ) ,
314
- withStreamId : 3 ) ;
315
-
316
- trailersFrame = await ExpectAsync ( Http2FrameType . HEADERS ,
317
- withLength : 16 ,
318
- withFlags : ( byte ) ( Http2HeadersFrameFlags . END_HEADERS | Http2HeadersFrameFlags . END_STREAM ) ,
319
- withStreamId : 3 ) ;
320
-
321
- _hpackDecoder . Decode ( trailersFrame . PayloadSequence , endHeaders : true , handler : this ) ;
322
-
323
- Assert . Single ( _decodedHeaders ) ;
324
- Assert . Equal ( "true" , _decodedHeaders [ "trailer-2" ] ) ;
325
-
326
- _decodedHeaders . Clear ( ) ;
327
-
328
- await StopConnectionAsync ( expectedLastStreamId : 3 , ignoreNonGoAwayFrames : false ) ;
329
- }
330
-
331
- [ Fact ]
332
- public async Task CustomResponseTrailersCollection_MultipleStreams_Reset ( )
333
- {
334
- IEnumerable < KeyValuePair < string , string > > requestHeaders = new [ ]
294
+ for ( int i = 1 ; i < 3 ; i ++ )
335
295
{
336
- new KeyValuePair < string , string > ( HeaderNames . Method , "GET" ) ,
337
- new KeyValuePair < string , string > ( HeaderNames . Path , "/hello" ) ,
338
- new KeyValuePair < string , string > ( HeaderNames . Scheme , "http" ) ,
339
- new KeyValuePair < string , string > ( HeaderNames . Authority , "localhost:80" ) ,
340
- new KeyValuePair < string , string > ( HeaderNames . ContentType , "application/json" )
341
- } ;
296
+ int streamId = i * 2 + 1 ;
297
+ // Ping will trigger the stream to be returned to the pool so we can assert it
298
+ await PingAsync ( ) ;
342
299
343
- IHeaderDictionary trailersFirst = null ;
344
- IHeaderDictionary trailersSecond = null ;
345
- var requestCount = 0 ;
346
- await InitializeConnectionAsync ( context =>
347
- {
348
- requestCount ++ ;
300
+ // Stream has been returned to the pool
301
+ Assert . Equal ( 1 , _connection . StreamPool . Count ) ;
349
302
350
- var trailersFeature = context . Features . Get < IHttpResponseTrailersFeature > ( ) ;
351
- if ( requestCount == 1 )
352
- {
353
- trailersFirst = new ResponseTrailersWrapper ( trailersFeature . Trailers ) ;
354
- trailersFeature . Trailers = trailersFirst ;
355
- }
356
- else
357
- {
358
- trailersSecond = trailersFeature . Trailers ;
359
- }
360
- return Task . CompletedTask ;
361
- } ) ;
303
+ await StartStreamAsync ( streamId , requestHeaders , endStream : true ) ;
362
304
363
- await StartStreamAsync ( 1 , requestHeaders , endStream : true ) ;
305
+ await ExpectAsync ( Http2FrameType . HEADERS ,
306
+ withLength : 6 ,
307
+ withFlags : ( byte ) ( Http2HeadersFrameFlags . END_HEADERS ) ,
308
+ withStreamId : streamId ) ;
364
309
365
- var trailersFrame = await ExpectAsync ( Http2FrameType . HEADERS ,
366
- withLength : 36 ,
367
- withFlags : ( byte ) ( Http2HeadersFrameFlags . END_HEADERS | Http2HeadersFrameFlags . END_STREAM ) ,
368
- withStreamId : 1 ) ;
310
+ trailersFrame = await ExpectAsync ( Http2FrameType . HEADERS ,
311
+ withLength : 16 ,
312
+ withFlags : ( byte ) ( Http2HeadersFrameFlags . END_HEADERS | Http2HeadersFrameFlags . END_STREAM ) ,
313
+ withStreamId : streamId ) ;
369
314
370
- // Ping will trigger the stream to be returned to the pool so we can assert it
371
- await SendPingAsync ( Http2PingFrameFlags . NONE ) ;
372
- await ExpectAsync ( Http2FrameType . PING ,
373
- withLength : 8 ,
374
- withFlags : ( byte ) Http2PingFrameFlags . ACK ,
375
- withStreamId : 0 ) ;
376
- await SendPingAsync ( Http2PingFrameFlags . NONE ) ;
377
- await ExpectAsync ( Http2FrameType . PING ,
378
- withLength : 8 ,
379
- withFlags : ( byte ) Http2PingFrameFlags . ACK ,
380
- withStreamId : 0 ) ;
315
+ _hpackDecoder . Decode ( trailersFrame . PayloadSequence , endHeaders : true , handler : this ) ;
381
316
382
- // Stream has been returned to the pool
383
- Assert . Equal ( 1 , _connection . StreamPool . Count ) ;
317
+ Assert . Single ( _decodedHeaders ) ;
318
+ Assert . Equal ( "true" , _decodedHeaders [ $ "trailer- { i + 1 } " ] ) ;
384
319
385
- await StartStreamAsync ( 3 , requestHeaders , endStream : true ) ;
320
+ _decodedHeaders . Clear ( ) ;
386
321
387
- trailersFrame = await ExpectAsync ( Http2FrameType . HEADERS ,
388
- withLength : 6 ,
389
- withFlags : ( byte ) ( Http2HeadersFrameFlags . END_HEADERS | Http2HeadersFrameFlags . END_STREAM ) ,
390
- withStreamId : 3 ) ;
322
+ }
391
323
392
324
Assert . NotNull ( trailersFirst ) ;
393
- Assert . NotNull ( trailersSecond ) ;
394
- Assert . NotSame ( trailersFirst , trailersSecond ) ;
325
+ Assert . NotNull ( trailersLast ) ;
326
+ Assert . NotSame ( trailersFirst , trailersLast ) ;
395
327
396
- await StopConnectionAsync ( expectedLastStreamId : 3 , ignoreNonGoAwayFrames : false ) ;
328
+ await StopConnectionAsync ( expectedLastStreamId : 5 , ignoreNonGoAwayFrames : false ) ;
329
+
330
+ async Task PingAsync ( )
331
+ {
332
+ await SendPingAsync ( Http2PingFrameFlags . NONE ) ;
333
+ await ExpectAsync ( Http2FrameType . PING ,
334
+ withLength : 8 ,
335
+ withFlags : ( byte ) Http2PingFrameFlags . ACK ,
336
+ withStreamId : 0 ) ;
337
+ await SendPingAsync ( Http2PingFrameFlags . NONE ) ;
338
+ await ExpectAsync ( Http2FrameType . PING ,
339
+ withLength : 8 ,
340
+ withFlags : ( byte ) Http2PingFrameFlags . ACK ,
341
+ withStreamId : 0 ) ;
342
+ }
397
343
}
398
344
399
345
[ Fact ]
0 commit comments