|
15 | 15 | @testable import AsyncHTTPClient
|
16 | 16 | import NIOCore
|
17 | 17 | import NIOHTTP1
|
| 18 | +import NIOHTTPCompression |
18 | 19 | import XCTest
|
19 | 20 |
|
20 | 21 | class HTTP1ConnectionStateMachineTests: XCTestCase {
|
21 | 22 | func testPOSTRequestWithWriteAndReadBackpressure() {
|
22 | 23 | var state = HTTP1ConnectionStateMachine()
|
23 | 24 | XCTAssertEqual(state.channelActive(isWritable: false), .fireChannelActive)
|
24 | 25 |
|
25 |
| - let requestHead = HTTPRequestHead(version: .http1_1, method: .POST, uri: "/", headers: HTTPHeaders([("content-length", "4")])) |
| 26 | + let requestHead = HTTPRequestHead(version: .http1_1, method: .POST, uri: "/", headers: ["content-length": "4"]) |
26 | 27 | let metadata = RequestFramingMetadata(connectionClose: false, body: .fixedSize(4))
|
27 | 28 | XCTAssertEqual(state.runNewRequest(head: requestHead, metadata: metadata), .wait)
|
28 | 29 | XCTAssertEqual(state.writabilityChanged(writable: true), .sendRequestHead(requestHead, startBody: true))
|
@@ -64,7 +65,7 @@ class HTTP1ConnectionStateMachineTests: XCTestCase {
|
64 | 65 | let metadata = RequestFramingMetadata(connectionClose: false, body: .none)
|
65 | 66 | XCTAssertEqual(state.runNewRequest(head: requestHead, metadata: metadata), .sendRequestHead(requestHead, startBody: false))
|
66 | 67 |
|
67 |
| - let responseHead = HTTPResponseHead(version: .http1_1, status: .ok, headers: HTTPHeaders([("content-length", "12")])) |
| 68 | + let responseHead = HTTPResponseHead(version: .http1_1, status: .ok, headers: ["content-length": "12"]) |
68 | 69 | XCTAssertEqual(state.channelRead(.head(responseHead)), .forwardResponseHead(responseHead, pauseRequestBodyStream: false))
|
69 | 70 | let part0 = ByteBuffer(bytes: 0...3)
|
70 | 71 | let part1 = ByteBuffer(bytes: 4...7)
|
@@ -141,7 +142,7 @@ class HTTP1ConnectionStateMachineTests: XCTestCase {
|
141 | 142 | var state = HTTP1ConnectionStateMachine()
|
142 | 143 | XCTAssertEqual(state.channelActive(isWritable: false), .fireChannelActive)
|
143 | 144 |
|
144 |
| - let requestHead = HTTPRequestHead(version: .http1_1, method: .POST, uri: "/", headers: HTTPHeaders([("content-length", "4")])) |
| 145 | + let requestHead = HTTPRequestHead(version: .http1_1, method: .POST, uri: "/", headers: ["content-length": "4"]) |
145 | 146 | let metadata = RequestFramingMetadata(connectionClose: false, body: .fixedSize(4))
|
146 | 147 | XCTAssertEqual(state.runNewRequest(head: requestHead, metadata: metadata), .wait)
|
147 | 148 | XCTAssertEqual(state.writabilityChanged(writable: true), .sendRequestHead(requestHead, startBody: true))
|
@@ -185,11 +186,25 @@ class HTTP1ConnectionStateMachineTests: XCTestCase {
|
185 | 186 | func testRequestIsCancelledWhileWaitingForWritable() {
|
186 | 187 | var state = HTTP1ConnectionStateMachine()
|
187 | 188 | XCTAssertEqual(state.channelActive(isWritable: false), .fireChannelActive)
|
188 |
| - let requestHead = HTTPRequestHead(version: .http1_1, method: .POST, uri: "/", headers: HTTPHeaders([("content-length", "4")])) |
| 189 | + let requestHead = HTTPRequestHead(version: .http1_1, method: .POST, uri: "/", headers: ["content-length": "4"]) |
189 | 190 | let metadata = RequestFramingMetadata(connectionClose: false, body: .fixedSize(4))
|
190 | 191 | XCTAssertEqual(state.runNewRequest(head: requestHead, metadata: metadata), .wait)
|
191 | 192 | XCTAssertEqual(state.requestCancelled(closeConnection: false), .failRequest(HTTPClientError.cancelled, .informConnectionIsIdle))
|
192 | 193 | }
|
| 194 | + |
| 195 | + func testConnectionIsClosedIfErrorHappensWhileInRequest() { |
| 196 | + var state = HTTP1ConnectionStateMachine() |
| 197 | + XCTAssertEqual(state.channelActive(isWritable: true), .fireChannelActive) |
| 198 | + let requestHead = HTTPRequestHead(version: .http1_1, method: .GET, uri: "/") |
| 199 | + let metadata = RequestFramingMetadata(connectionClose: false, body: .none) |
| 200 | + XCTAssertEqual(state.runNewRequest(head: requestHead, metadata: metadata), .sendRequestHead(requestHead, startBody: false)) |
| 201 | + let responseHead = HTTPResponseHead(version: .http1_1, status: .ok) |
| 202 | + XCTAssertEqual(state.channelRead(.head(responseHead)), .forwardResponseHead(responseHead, pauseRequestBodyStream: false)) |
| 203 | + XCTAssertEqual(state.channelRead(.body(ByteBuffer(string: "Hello world!\n"))), .wait) |
| 204 | + XCTAssertEqual(state.channelRead(.body(ByteBuffer(string: "Foo Bar!\n"))), .wait) |
| 205 | + let decompressionError = NIOHTTPDecompression.DecompressionError.limit |
| 206 | + XCTAssertEqual(state.errorHappened(decompressionError), .failRequest(decompressionError, .close)) |
| 207 | + } |
193 | 208 | }
|
194 | 209 |
|
195 | 210 | extension HTTP1ConnectionStateMachine.Action: Equatable {
|
|
0 commit comments