@@ -61,7 +61,10 @@ class ConfiguringPipelineTests: XCTestCase {
6161 )
6262 )
6363
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)
6568 XCTAssertEqual ( streamID, HTTP2StreamID ( 1 ) )
6669 channel. writeAndFlush ( reqFrame) . whenComplete { _ in channel. close ( promise: requestPromise) }
6770 return channel. eventLoop. makeSucceededFuture ( ( ) )
@@ -73,9 +76,12 @@ class ConfiguringPipelineTests: XCTestCase {
7376 self . interactInMemory ( self . clientChannel, self . serverChannel)
7477 ( self . clientChannel. eventLoop as! EmbeddedEventLoop ) . run ( )
7578
79+ let streamChannel = try XCTUnwrap ( streamChannelPromise. futureResult. wait ( ) )
80+ XCTAssertNoThrow ( try streamChannel. closeFuture. wait ( ) )
7681 XCTAssertThrowsError ( try requestPromise. futureResult. wait ( ) ) { error in
7782 XCTAssertTrue ( error is NIOHTTP2Errors . StreamClosed )
7883 }
84+ XCTAssertTrue ( errorHandler. encounteredError is NIOHTTP2Errors . StreamClosed )
7985
8086 // We should have received a HEADERS and a RST_STREAM frame.
8187 // The RST_STREAM frame is from closing an incomplete stream on the client side.
@@ -116,7 +122,10 @@ class ConfiguringPipelineTests: XCTestCase {
116122 )
117123 )
118124
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)
120129 XCTAssertEqual ( streamID, HTTP2StreamID ( 1 ) )
121130 channel. writeAndFlush ( reqFrame) . whenComplete { _ in channel. close ( promise: requestPromise) }
122131 return channel. eventLoop. makeSucceededFuture ( ( ) )
@@ -128,9 +137,12 @@ class ConfiguringPipelineTests: XCTestCase {
128137 self . interactInMemory ( self . clientChannel, self . serverChannel)
129138 ( self . clientChannel. eventLoop as! EmbeddedEventLoop ) . run ( )
130139
140+ let streamChannel = try XCTUnwrap ( streamChannelPromise. futureResult. wait ( ) )
141+ XCTAssertNoThrow ( try streamChannel. closeFuture. wait ( ) )
131142 XCTAssertThrowsError ( try requestPromise. futureResult. wait ( ) ) { error in
132143 XCTAssertTrue ( error is NIOHTTP2Errors . StreamClosed )
133144 }
145+ XCTAssertTrue ( errorHandler. encounteredError is NIOHTTP2Errors . StreamClosed )
134146
135147 // We should have received a HEADERS and a RST_STREAM frame.
136148 // The RST_STREAM frame is from closing an incomplete stream on the client side.
@@ -403,7 +415,10 @@ class ConfiguringPipelineTests: XCTestCase {
403415 )
404416 )
405417
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)
407422 XCTAssertEqual ( streamID, HTTP2StreamID ( 1 ) )
408423 channel. writeAndFlush ( reqFrame) . whenComplete { _ in channel. close ( promise: requestPromise) }
409424 return channel. eventLoop. makeSucceededFuture ( ( ) )
@@ -414,9 +429,13 @@ class ConfiguringPipelineTests: XCTestCase {
414429 ( self . clientChannel. eventLoop as! EmbeddedEventLoop ) . run ( )
415430 self . interactInMemory ( self . clientChannel, self . serverChannel)
416431 ( self . clientChannel. eventLoop as! EmbeddedEventLoop ) . run ( )
432+
433+ let streamChannel = try XCTUnwrap ( streamChannelPromise. futureResult. wait ( ) )
434+ XCTAssertNoThrow ( try streamChannel. closeFuture. wait ( ) )
417435 XCTAssertThrowsError ( try requestPromise. futureResult. wait ( ) ) { error in
418436 XCTAssertTrue ( error is NIOHTTP2Errors . StreamClosed )
419437 }
438+ XCTAssertTrue ( errorHandler. encounteredError is NIOHTTP2Errors . StreamClosed )
420439
421440 let serverChildChannel = try serverChildChannelPromise. futureResult. wait ( )
422441 try serverChildChannel. pipeline. handler ( type: HTTP1ServerRequestRecorderHandler . self) . map { serverRecorder in
@@ -492,7 +511,10 @@ class ConfiguringPipelineTests: XCTestCase {
492511 )
493512 )
494513
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)
496518 XCTAssertEqual ( streamID, HTTP2StreamID ( 1 ) )
497519 channel. writeAndFlush ( reqFrame) . whenComplete { _ in channel. close ( promise: requestPromise) }
498520 return channel. eventLoop. makeSucceededFuture ( ( ) )
@@ -503,9 +525,13 @@ class ConfiguringPipelineTests: XCTestCase {
503525 ( self . clientChannel. eventLoop as! EmbeddedEventLoop ) . run ( )
504526 self . interactInMemory ( self . clientChannel, self . serverChannel)
505527 ( self . clientChannel. eventLoop as! EmbeddedEventLoop ) . run ( )
528+
529+ let streamChannel = try XCTUnwrap ( streamChannelPromise. futureResult. wait ( ) )
530+ XCTAssertNoThrow ( try streamChannel. closeFuture. wait ( ) )
506531 XCTAssertThrowsError ( try requestPromise. futureResult. wait ( ) ) { error in
507532 XCTAssertTrue ( error is NIOHTTP2Errors . StreamClosed )
508533 }
534+ XCTAssertTrue ( errorHandler. encounteredError is NIOHTTP2Errors . StreamClosed )
509535
510536 let serverChildChannel = try serverChildChannelPromise. futureResult. wait ( )
511537 try serverChildChannel. pipeline. handler ( type: HTTP1ServerRequestRecorderHandler . self) . map { serverRecorder in
0 commit comments