File tree Expand file tree Collapse file tree 4 files changed +40
-0
lines changed Expand file tree Collapse file tree 4 files changed +40
-0
lines changed Original file line number Diff line number Diff line change @@ -767,6 +767,7 @@ extension MessageToByteHandler {
767
767
case . notInChannelYet:
768
768
preconditionFailure ( " MessageToByteHandler.write called before it was added to a Channel " )
769
769
case . error( let error) :
770
+ promise? . fail ( error)
770
771
context. fireErrorCaught ( error)
771
772
return
772
773
case . done:
@@ -784,6 +785,7 @@ extension MessageToByteHandler {
784
785
context. write ( self . wrapOutboundOut ( self . buffer!) , promise: promise)
785
786
} catch {
786
787
self . state = . error( error)
788
+ promise? . fail ( error)
787
789
context. fireErrorCaught ( error)
788
790
}
789
791
}
Original file line number Diff line number Diff line change @@ -75,6 +75,7 @@ import XCTest
75
75
testCase ( IntegerTypesTest . allTests) ,
76
76
testCase ( MarkedCircularBufferTests . allTests) ,
77
77
testCase ( MessageToByteEncoderTest . allTests) ,
78
+ testCase ( MessageToByteHandlerTest . allTests) ,
78
79
testCase ( MulticastTest . allTests) ,
79
80
testCase ( NIOAnyDebugTest . allTests) ,
80
81
testCase ( NIOCloseOnErrorHandlerTest . allTests) ,
Original file line number Diff line number Diff line change @@ -74,3 +74,12 @@ extension MessageToByteEncoderTest {
74
74
}
75
75
}
76
76
77
+ extension MessageToByteHandlerTest {
78
+
79
+ static var allTests : [ ( String , ( MessageToByteHandlerTest ) -> ( ) throws -> Void ) ] {
80
+ return [
81
+ ( " testThrowingEncoderFailsPromises " , testThrowingEncoderFailsPromises) ,
82
+ ]
83
+ }
84
+ }
85
+
Original file line number Diff line number Diff line change @@ -1587,3 +1587,31 @@ private class PairOfBytesDecoder: ByteToMessageDecoder {
1587
1587
return . needMoreData
1588
1588
}
1589
1589
}
1590
+
1591
+ public final class MessageToByteHandlerTest : XCTestCase {
1592
+ private struct ThrowingMessageToByteEncoder : MessageToByteEncoder {
1593
+ private struct HandlerError : Error { }
1594
+
1595
+ typealias OutboundIn = Int
1596
+
1597
+ public func encode( data value: Int , out: inout ByteBuffer ) throws {
1598
+ if value == 0 {
1599
+ out. writeInteger ( value)
1600
+ } else {
1601
+ throw HandlerError ( )
1602
+ }
1603
+ }
1604
+ }
1605
+
1606
+ func testThrowingEncoderFailsPromises( ) {
1607
+ let channel = EmbeddedChannel ( )
1608
+
1609
+ XCTAssertNoThrow ( try channel. pipeline. addHandler ( MessageToByteHandler ( ThrowingMessageToByteEncoder ( ) ) ) . wait ( ) )
1610
+
1611
+ XCTAssertNoThrow ( try channel. writeAndFlush ( 0 ) . wait ( ) )
1612
+
1613
+ XCTAssertThrowsError ( try channel. writeAndFlush ( 1 ) . wait ( ) )
1614
+
1615
+ XCTAssertThrowsError ( try channel. writeAndFlush ( 0 ) . wait ( ) )
1616
+ }
1617
+ }
You can’t perform that action at this time.
0 commit comments