@@ -82,6 +82,9 @@ class HTTPRequestStateMachineTests: XCTestCase {
82
82
}
83
83
84
84
XCTAssertEqual ( error as? HTTPClientError , . bodyLengthMismatch)
85
+
86
+ // if another error happens the new one is ignored
87
+ XCTAssertEqual ( state. errorHappened ( HTTPClientError . remoteConnectionClosed) , . wait)
85
88
}
86
89
87
90
func testPOSTContentLengthIsTooShort( ) {
@@ -522,6 +525,27 @@ class HTTPRequestStateMachineTests: XCTestCase {
522
525
XCTAssertEqual ( state. channelInactive ( ) , . wait)
523
526
}
524
527
528
+ func testNIOSSLErrorUncleanShutdownShouldBeTreatedAsRemoteConnectionCloseWhileInWaitingForHeadState( ) {
529
+ var state = HTTPRequestStateMachine ( isChannelWritable: true )
530
+ let requestHead = HTTPRequestHead ( version: . http1_1, method: . GET, uri: " / " )
531
+ let metadata = RequestFramingMetadata ( connectionClose: false , body: . fixedSize( 0 ) )
532
+ XCTAssertEqual ( state. startRequest ( head: requestHead, metadata: metadata) , . sendRequestHead( requestHead, startBody: false ) )
533
+
534
+ XCTAssertEqual ( state. errorHappened ( NIOSSLError . uncleanShutdown) , . wait)
535
+ XCTAssertEqual ( state. channelInactive ( ) , . failRequest( HTTPClientError . remoteConnectionClosed, . none) )
536
+ }
537
+
538
+ func testArbitraryErrorShouldBeTreatedAsARequestFailureWhileInWaitingForHeadState( ) {
539
+ struct ArbitraryError : Error { }
540
+ var state = HTTPRequestStateMachine ( isChannelWritable: true )
541
+ let requestHead = HTTPRequestHead ( version: . http1_1, method: . GET, uri: " / " )
542
+ let metadata = RequestFramingMetadata ( connectionClose: false , body: . fixedSize( 0 ) )
543
+ XCTAssertEqual ( state. startRequest ( head: requestHead, metadata: metadata) , . sendRequestHead( requestHead, startBody: false ) )
544
+
545
+ XCTAssertEqual ( state. errorHappened ( ArbitraryError ( ) ) , . failRequest( ArbitraryError ( ) , . close) )
546
+ XCTAssertEqual ( state. channelInactive ( ) , . wait)
547
+ }
548
+
525
549
func testFailHTTP1RequestWithContentLengthWithNIOSSLErrorUncleanShutdownButIgnoreIt( ) {
526
550
var state = HTTPRequestStateMachine ( isChannelWritable: true )
527
551
let requestHead = HTTPRequestHead ( version: . http1_1, method: . GET, uri: " / " )
0 commit comments