@@ -61,7 +61,10 @@ class ConfiguringPipelineTests: XCTestCase {
61
61
)
62
62
)
63
63
64
- clientHandler. createStreamChannel ( promise: nil ) { channel, streamID in
64
+ let errorHandler = ErrorEncounteredHandler ( )
65
+ let streamChannelPromise = self . clientChannel. eventLoop. makePromise ( of: Channel . self)
66
+ clientHandler. createStreamChannel ( promise: streamChannelPromise) { channel, streamID in
67
+ try ? channel. pipeline. syncOperations. addHandler ( errorHandler)
65
68
XCTAssertEqual ( streamID, HTTP2StreamID ( 1 ) )
66
69
channel. writeAndFlush ( reqFrame) . whenComplete { _ in channel. close ( promise: requestPromise) }
67
70
return channel. eventLoop. makeSucceededFuture ( ( ) )
@@ -73,9 +76,12 @@ class ConfiguringPipelineTests: XCTestCase {
73
76
self . interactInMemory ( self . clientChannel, self . serverChannel)
74
77
( self . clientChannel. eventLoop as! EmbeddedEventLoop ) . run ( )
75
78
79
+ let streamChannel = try XCTUnwrap ( streamChannelPromise. futureResult. wait ( ) )
80
+ XCTAssertNoThrow ( try streamChannel. closeFuture. wait ( ) )
76
81
XCTAssertThrowsError ( try requestPromise. futureResult. wait ( ) ) { error in
77
82
XCTAssertTrue ( error is NIOHTTP2Errors . StreamClosed )
78
83
}
84
+ XCTAssertTrue ( errorHandler. encounteredError is NIOHTTP2Errors . StreamClosed )
79
85
80
86
// We should have received a HEADERS and a RST_STREAM frame.
81
87
// The RST_STREAM frame is from closing an incomplete stream on the client side.
@@ -116,7 +122,10 @@ class ConfiguringPipelineTests: XCTestCase {
116
122
)
117
123
)
118
124
119
- clientHandler. createStreamChannel ( promise: nil ) { channel, streamID in
125
+ let errorHandler = ErrorEncounteredHandler ( )
126
+ let streamChannelPromise = self . clientChannel. eventLoop. makePromise ( of: Channel . self)
127
+ clientHandler. createStreamChannel ( promise: streamChannelPromise) { channel, streamID in
128
+ try ? channel. pipeline. syncOperations. addHandler ( errorHandler)
120
129
XCTAssertEqual ( streamID, HTTP2StreamID ( 1 ) )
121
130
channel. writeAndFlush ( reqFrame) . whenComplete { _ in channel. close ( promise: requestPromise) }
122
131
return channel. eventLoop. makeSucceededFuture ( ( ) )
@@ -128,9 +137,12 @@ class ConfiguringPipelineTests: XCTestCase {
128
137
self . interactInMemory ( self . clientChannel, self . serverChannel)
129
138
( self . clientChannel. eventLoop as! EmbeddedEventLoop ) . run ( )
130
139
140
+ let streamChannel = try XCTUnwrap ( streamChannelPromise. futureResult. wait ( ) )
141
+ XCTAssertNoThrow ( try streamChannel. closeFuture. wait ( ) )
131
142
XCTAssertThrowsError ( try requestPromise. futureResult. wait ( ) ) { error in
132
143
XCTAssertTrue ( error is NIOHTTP2Errors . StreamClosed )
133
144
}
145
+ XCTAssertTrue ( errorHandler. encounteredError is NIOHTTP2Errors . StreamClosed )
134
146
135
147
// We should have received a HEADERS and a RST_STREAM frame.
136
148
// The RST_STREAM frame is from closing an incomplete stream on the client side.
@@ -403,7 +415,10 @@ class ConfiguringPipelineTests: XCTestCase {
403
415
)
404
416
)
405
417
406
- clientHandler. createStreamChannel ( promise: nil ) { channel, streamID in
418
+ let errorHandler = ErrorEncounteredHandler ( )
419
+ let streamChannelPromise = self . clientChannel. eventLoop. makePromise ( of: Channel . self)
420
+ clientHandler. createStreamChannel ( promise: streamChannelPromise) { channel, streamID in
421
+ try ? channel. pipeline. syncOperations. addHandler ( errorHandler)
407
422
XCTAssertEqual ( streamID, HTTP2StreamID ( 1 ) )
408
423
channel. writeAndFlush ( reqFrame) . whenComplete { _ in channel. close ( promise: requestPromise) }
409
424
return channel. eventLoop. makeSucceededFuture ( ( ) )
@@ -414,9 +429,13 @@ class ConfiguringPipelineTests: XCTestCase {
414
429
( self . clientChannel. eventLoop as! EmbeddedEventLoop ) . run ( )
415
430
self . interactInMemory ( self . clientChannel, self . serverChannel)
416
431
( self . clientChannel. eventLoop as! EmbeddedEventLoop ) . run ( )
432
+
433
+ let streamChannel = try XCTUnwrap ( streamChannelPromise. futureResult. wait ( ) )
434
+ XCTAssertNoThrow ( try streamChannel. closeFuture. wait ( ) )
417
435
XCTAssertThrowsError ( try requestPromise. futureResult. wait ( ) ) { error in
418
436
XCTAssertTrue ( error is NIOHTTP2Errors . StreamClosed )
419
437
}
438
+ XCTAssertTrue ( errorHandler. encounteredError is NIOHTTP2Errors . StreamClosed )
420
439
421
440
let serverChildChannel = try serverChildChannelPromise. futureResult. wait ( )
422
441
try serverChildChannel. pipeline. handler ( type: HTTP1ServerRequestRecorderHandler . self) . map { serverRecorder in
@@ -492,7 +511,10 @@ class ConfiguringPipelineTests: XCTestCase {
492
511
)
493
512
)
494
513
495
- clientHandler. createStreamChannel ( promise: nil ) { channel, streamID in
514
+ let errorHandler = ErrorEncounteredHandler ( )
515
+ let streamChannelPromise = self . clientChannel. eventLoop. makePromise ( of: Channel . self)
516
+ clientHandler. createStreamChannel ( promise: streamChannelPromise) { channel, streamID in
517
+ try ? channel. pipeline. syncOperations. addHandler ( errorHandler)
496
518
XCTAssertEqual ( streamID, HTTP2StreamID ( 1 ) )
497
519
channel. writeAndFlush ( reqFrame) . whenComplete { _ in channel. close ( promise: requestPromise) }
498
520
return channel. eventLoop. makeSucceededFuture ( ( ) )
@@ -503,9 +525,13 @@ class ConfiguringPipelineTests: XCTestCase {
503
525
( self . clientChannel. eventLoop as! EmbeddedEventLoop ) . run ( )
504
526
self . interactInMemory ( self . clientChannel, self . serverChannel)
505
527
( self . clientChannel. eventLoop as! EmbeddedEventLoop ) . run ( )
528
+
529
+ let streamChannel = try XCTUnwrap ( streamChannelPromise. futureResult. wait ( ) )
530
+ XCTAssertNoThrow ( try streamChannel. closeFuture. wait ( ) )
506
531
XCTAssertThrowsError ( try requestPromise. futureResult. wait ( ) ) { error in
507
532
XCTAssertTrue ( error is NIOHTTP2Errors . StreamClosed )
508
533
}
534
+ XCTAssertTrue ( errorHandler. encounteredError is NIOHTTP2Errors . StreamClosed )
509
535
510
536
let serverChildChannel = try serverChildChannelPromise. futureResult. wait ( )
511
537
try serverChildChannel. pipeline. handler ( type: HTTP1ServerRequestRecorderHandler . self) . map { serverRecorder in
0 commit comments