@@ -97,6 +97,37 @@ class HTTP1ConnectionStateMachineTests: XCTestCase {
97
97
let responseBody = ByteBuffer ( bytes: [ 1 , 2 , 3 , 4 ] )
98
98
XCTAssertEqual ( state. channelRead ( . body( responseBody) ) , . wait)
99
99
XCTAssertEqual ( state. channelRead ( . end( nil ) ) , . succeedRequest( . close, . init( [ responseBody] ) ) )
100
+ XCTAssertEqual ( state. channelInactive ( ) , . fireChannelInactive)
101
+ }
102
+
103
+ func testAHTTP1_0ResponseWithoutKeepAliveHeaderLeadsToConnectionCloseAfterRequest( ) {
104
+ var state = HTTP1ConnectionStateMachine ( )
105
+ XCTAssertEqual ( state. channelActive ( isWritable: true ) , . fireChannelActive)
106
+ let requestHead = HTTPRequestHead ( version: . http1_1, method: . GET, uri: " / " )
107
+ let metadata = RequestFramingMetadata ( connectionClose: false , body: . none)
108
+ XCTAssertEqual ( state. runNewRequest ( head: requestHead, metadata: metadata) , . sendRequestHead( requestHead, startBody: false ) )
109
+
110
+ let responseHead = HTTPResponseHead ( version: . http1_0, status: . ok, headers: [ " content-length " : " 4 " ] )
111
+ XCTAssertEqual ( state. channelRead ( . head( responseHead) ) , . forwardResponseHead( responseHead, pauseRequestBodyStream: false ) )
112
+ let responseBody = ByteBuffer ( bytes: [ 1 , 2 , 3 , 4 ] )
113
+ XCTAssertEqual ( state. channelRead ( . body( responseBody) ) , . wait)
114
+ XCTAssertEqual ( state. channelRead ( . end( nil ) ) , . succeedRequest( . close, . init( [ responseBody] ) ) )
115
+ XCTAssertEqual ( state. channelInactive ( ) , . fireChannelInactive)
116
+ }
117
+
118
+ func testAHTTP1_0ResponseWithKeepAliveHeaderLeadsToConnectionBeingKeptAlive( ) {
119
+ var state = HTTP1ConnectionStateMachine ( )
120
+ XCTAssertEqual ( state. channelActive ( isWritable: true ) , . fireChannelActive)
121
+ let requestHead = HTTPRequestHead ( version: . http1_1, method: . GET, uri: " / " )
122
+ let metadata = RequestFramingMetadata ( connectionClose: false , body: . none)
123
+ XCTAssertEqual ( state. runNewRequest ( head: requestHead, metadata: metadata) , . sendRequestHead( requestHead, startBody: false ) )
124
+
125
+ let responseHead = HTTPResponseHead ( version: . http1_0, status: . ok, headers: [ " content-length " : " 4 " , " connection " : " keep-alive " ] )
126
+ XCTAssertEqual ( state. channelRead ( . head( responseHead) ) , . forwardResponseHead( responseHead, pauseRequestBodyStream: false ) )
127
+ let responseBody = ByteBuffer ( bytes: [ 1 , 2 , 3 , 4 ] )
128
+ XCTAssertEqual ( state. channelRead ( . body( responseBody) ) , . wait)
129
+ XCTAssertEqual ( state. channelRead ( . end( nil ) ) , . succeedRequest( . informConnectionIsIdle, . init( [ responseBody] ) ) )
130
+ XCTAssertEqual ( state. channelInactive ( ) , . fireChannelInactive)
100
131
}
101
132
102
133
func testAConnectionCloseHeaderInTheResponseLeadsToConnectionCloseAfterRequest( ) {
0 commit comments