Skip to content

Commit d112695

Browse files
committed
additional test
1 parent 373d19e commit d112695

File tree

4 files changed

+56
-8
lines changed

4 files changed

+56
-8
lines changed

Tests/AsyncHTTPClientTests/HTTPClientInternalTests+XCTest.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ extension HTTPClientInternalTests {
4545
("testTaskPromiseBoundToEL", testTaskPromiseBoundToEL),
4646
("testConnectErrorCalloutOnCorrectEL", testConnectErrorCalloutOnCorrectEL),
4747
("testInternalRequestURI", testInternalRequestURI),
48+
("testBodyPartStreamStateChangedBeforeNotification", testBodyPartStreamStateChangedBeforeNotification),
4849
]
4950
}
5051
}

Tests/AsyncHTTPClientTests/HTTPClientInternalTests.swift

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,4 +1031,50 @@ class HTTPClientInternalTests: XCTestCase {
10311031
XCTAssertEqual(request5.socketPath, "/tmp/file")
10321032
XCTAssertEqual(request5.uri, "/file/path")
10331033
}
1034+
1035+
func testBodyPartStreamStateChangedBeforeNotification() throws {
1036+
class StateValidationDelegate: HTTPClientResponseDelegate {
1037+
typealias Response = Void
1038+
1039+
var handler: TaskHandler<StateValidationDelegate>!
1040+
var triggered = false
1041+
1042+
func didReceiveError(task: HTTPClient.Task<Response>, _ error: Error) {
1043+
self.triggered = true
1044+
switch self.handler.state {
1045+
case .endOrError:
1046+
// expected
1047+
break
1048+
default:
1049+
XCTFail("unexpected state: \(self.handler.state)")
1050+
}
1051+
}
1052+
1053+
func didFinishRequest(task: HTTPClient.Task<Void>) throws {}
1054+
}
1055+
1056+
let channel = EmbeddedChannel()
1057+
XCTAssertNoThrow(try channel.connect(to: try SocketAddress(unixDomainSocketPath: "/fake")).wait())
1058+
1059+
let task = Task<Void>(eventLoop: channel.eventLoop, logger: HTTPClient.loggingDisabled)
1060+
1061+
let delegate = StateValidationDelegate()
1062+
let handler = TaskHandler(task: task,
1063+
kind: .host,
1064+
delegate: delegate,
1065+
redirectHandler: nil,
1066+
ignoreUncleanSSLShutdown: false,
1067+
logger: HTTPClient.loggingDisabled)
1068+
1069+
delegate.handler = handler
1070+
try channel.pipeline.addHandler(handler).wait()
1071+
1072+
var request = try Request(url: "http://localhost:8080/post")
1073+
request.body = .stream(length: 1) { writer in
1074+
writer.write(.byteBuffer(ByteBuffer(string: "1234")))
1075+
}
1076+
1077+
XCTAssertThrowsError(try channel.writeOutbound(request))
1078+
XCTAssertTrue(delegate.triggered)
1079+
}
10341080
}

Tests/AsyncHTTPClientTests/HTTPClientTests+XCTest.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ extension HTTPClientTests {
121121
("testContentLengthTooLongFails", testContentLengthTooLongFails),
122122
("testContentLengthTooShortFails", testContentLengthTooShortFails),
123123
("testBodyUploadAfterEndFails", testBodyUploadAfterEndFails),
124+
("testNoBytesSentOverBodyLimit", testNoBytesSentOverBodyLimit),
124125
]
125126
}
126127
}

Tests/AsyncHTTPClientTests/HTTPClientTests.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1524,7 +1524,7 @@ class HTTPClientTests: XCTestCase {
15241524
XCTAssertEqual(.ok, firstResponse.status)
15251525
return localClient.get(url: url) // <== interesting bit here
15261526
}
1527-
}.wait().status))
1527+
}.wait().status))
15281528
}
15291529

15301530
func testMakeSecondRequestWhilstFirstIsOngoing() {
@@ -1910,7 +1910,7 @@ class HTTPClientTests: XCTestCase {
19101910
body: .stream { streamWriter in
19111911
streamWriterPromise.succeed(streamWriter)
19121912
return sentOffAllBodyPartsPromise.futureResult
1913-
})
1913+
})
19141914
}
19151915

19161916
guard let server = makeServer(), let request = makeRequest(server: server) else {
@@ -2502,7 +2502,7 @@ class HTTPClientTests: XCTestCase {
25022502
streamWriter.write(.byteBuffer(ByteBuffer(string: "1"))).cascade(to: promise)
25032503
}
25042504
return promise.futureResult
2505-
})).wait()) { error in
2505+
})).wait()) { error in
25062506
XCTAssertEqual(error as! HTTPClientError, HTTPClientError.bodyLengthMismatch)
25072507
}
25082508
// Quickly try another request and check that it works.
@@ -2528,7 +2528,7 @@ class HTTPClientTests: XCTestCase {
25282528
Request(url: url,
25292529
body: .stream(length: 1) { streamWriter in
25302530
streamWriter.write(.byteBuffer(ByteBuffer(string: tooLong)))
2531-
})).wait()) { error in
2531+
})).wait()) { error in
25322532
XCTAssertEqual(error as! HTTPClientError, HTTPClientError.bodyLengthMismatch)
25332533
}
25342534
// Quickly try another request and check that it works. If we by accident wrote some extra bytes into the
@@ -2589,10 +2589,10 @@ class HTTPClientTests: XCTestCase {
25892589

25902590
let tooLong = "XBAD BAD BAD NOT HTTP/1.1\r\n\r\n"
25912591
let future = self.defaultClient.execute(
2592-
request: try Request(url: "http://localhost:\(server.serverPort)",
2593-
body: .stream(length: 1) { streamWriter in
2594-
streamWriter.write(.byteBuffer(ByteBuffer(string: tooLong)))
2595-
}))
2592+
request: try Request(url: "http://localhost:\(server.serverPort)",
2593+
body: .stream(length: 1) { streamWriter in
2594+
streamWriter.write(.byteBuffer(ByteBuffer(string: tooLong)))
2595+
}))
25962596

25972597
XCTAssertNoThrow(try server.readInbound()) // .head
25982598
// this should fail if client detects that we are about to send more bytes than body limit and closes the connection

0 commit comments

Comments
 (0)