Skip to content

Commit 02d3a90

Browse files
committed
Fix review comments
1 parent 5c81c71 commit 02d3a90

File tree

2 files changed

+45
-31
lines changed

2 files changed

+45
-31
lines changed

Diff for: Tests/AsyncHTTPClientTests/HTTP2ClientTests.swift

+45-27
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#endif
2020
import Logging
2121
import NIOCore
22+
import NIOHTTP1
2223
import NIOPosix
2324
import NIOSSL
2425
import XCTest
@@ -229,29 +230,23 @@ class HTTP2ClientTests: XCTestCase {
229230
case .success:
230231
XCTFail("Shouldn't succeed")
231232
case .failure(let error):
232-
if let clientError = error as? HTTPClientError, clientError == .cancelled {
233-
continue
234-
} else {
235-
XCTFail("Unexpected error: \(error)")
236-
}
233+
XCTAssertEqual(error as? HTTPClientError, .cancelled)
237234
}
238235
}
239236
}
240237

241238
func testCancelingRunningRequest() {
242-
let bin = HTTPBin(.http2(compress: false))
239+
let bin = HTTPBin(.http2(compress: false)) { _ in SendHeaderAndWaitChannelHandler() }
243240
defer { XCTAssertNoThrow(try bin.shutdown()) }
244-
let client = self.makeClientWithActiveHTTP2Connection(to: bin)
241+
let client = self.makeDefaultHTTPClient()
245242
defer { XCTAssertNoThrow(try client.syncShutdown()) }
246243

247244
var maybeRequest: HTTPClient.Request?
248-
XCTAssertNoThrow(maybeRequest = try HTTPClient.Request(url: "https://localhost:\(bin.port)/sendheaderandwait"))
245+
XCTAssertNoThrow(maybeRequest = try HTTPClient.Request(url: "https://localhost:\(bin.port)"))
249246
guard let request = maybeRequest else { return }
250247

251-
var task: HTTPClient.Task<TestHTTPDelegate.Response>!
252-
let delegate = TestHTTPDelegate()
253-
delegate.stateDidChangeCallback = { state in
254-
guard case .head = state else { return }
248+
var task: HTTPClient.Task<Void>!
249+
let delegate = HeadReceivedCallback { _ in
255250
// request is definitely running because we just received a head from the server
256251
task.cancel()
257252
}
@@ -260,30 +255,26 @@ class HTTP2ClientTests: XCTestCase {
260255
delegate: delegate
261256
)
262257

263-
XCTAssertThrowsError(try task.futureResult.timeout(after: .seconds(2)).wait(), "Should fail") { error in
264-
guard case let error = error as? HTTPClientError, error == .cancelled else {
265-
return XCTFail("Should fail with cancelled")
266-
}
258+
XCTAssertThrowsError(try task.futureResult.timeout(after: .seconds(2)).wait()) {
259+
XCTAssertEqual($0 as? HTTPClientError, .cancelled)
267260
}
268261
}
269262

270263
func testStressCancelingRunningRequestFromDifferentThreads() {
271-
let bin = HTTPBin(.http2(compress: false))
264+
let bin = HTTPBin(.http2(compress: false)) { _ in SendHeaderAndWaitChannelHandler() }
272265
defer { XCTAssertNoThrow(try bin.shutdown()) }
273-
let client = self.makeClientWithActiveHTTP2Connection(to: bin)
266+
let client = self.makeDefaultHTTPClient()
274267
defer { XCTAssertNoThrow(try client.syncShutdown()) }
275268
let cancelPool = MultiThreadedEventLoopGroup(numberOfThreads: 10)
276269
defer { XCTAssertNoThrow(try cancelPool.syncShutdownGracefully()) }
277270

278271
var maybeRequest: HTTPClient.Request?
279-
XCTAssertNoThrow(maybeRequest = try HTTPClient.Request(url: "https://localhost:\(bin.port)/sendheaderandwait"))
272+
XCTAssertNoThrow(maybeRequest = try HTTPClient.Request(url: "https://localhost:\(bin.port)"))
280273
guard let request = maybeRequest else { return }
281274

282275
let tasks = (0..<100).map { _ -> HTTPClient.Task<TestHTTPDelegate.Response> in
283-
var task: HTTPClient.Task<TestHTTPDelegate.Response>!
284-
let delegate = TestHTTPDelegate()
285-
delegate.stateDidChangeCallback = { state in
286-
guard case .head = state else { return }
276+
var task: HTTPClient.Task<Void>!
277+
let delegate = HeadReceivedCallback { _ in
287278
// request is definitely running because we just received a head from the server
288279
cancelPool.next().execute {
289280
// canceling from a different thread
@@ -298,10 +289,8 @@ class HTTP2ClientTests: XCTestCase {
298289
}
299290

300291
for task in tasks {
301-
XCTAssertThrowsError(try task.futureResult.timeout(after: .seconds(2)).wait(), "Should fail") { error in
302-
guard case let error = error as? HTTPClientError, error == .cancelled else {
303-
return XCTFail("Should fail with cancelled")
304-
}
292+
XCTAssertThrowsError(try task.futureResult.timeout(after: .seconds(2)).wait()) {
293+
XCTAssertEqual($0 as? HTTPClientError, .cancelled)
305294
}
306295
}
307296
}
@@ -367,3 +356,32 @@ class HTTP2ClientTests: XCTestCase {
367356
}
368357
}
369358
}
359+
360+
private final class HeadReceivedCallback: HTTPClientResponseDelegate {
361+
typealias Response = Void
362+
private let didReceiveHeadCallback: (HTTPResponseHead) -> Void
363+
init(didReceiveHead: @escaping (HTTPResponseHead) -> Void) {
364+
self.didReceiveHeadCallback = didReceiveHead
365+
}
366+
367+
func didReceiveHead(task: HTTPClient.Task<Void>, _ head: HTTPResponseHead) -> EventLoopFuture<Void> {
368+
self.didReceiveHeadCallback(head)
369+
return task.eventLoop.makeSucceededVoidFuture()
370+
}
371+
372+
func didFinishRequest(task: HTTPClient.Task<Void>) throws {}
373+
}
374+
375+
/// sends some headers and waits indefinitely afterwards
376+
private final class SendHeaderAndWaitChannelHandler: ChannelInboundHandler {
377+
typealias InboundIn = HTTPServerRequestPart
378+
typealias OutboundOut = HTTPServerResponsePart
379+
380+
func channelRead(context: ChannelHandlerContext, data: NIOAny) {
381+
context.writeAndFlush(wrapOutboundOut(.head(HTTPResponseHead(
382+
version: HTTPVersion(major: 1, minor: 1),
383+
status: .ok
384+
))
385+
), promise: nil)
386+
}
387+
}

Diff for: Tests/AsyncHTTPClientTests/HTTPClientTestUtils.swift

-4
Original file line numberDiff line numberDiff line change
@@ -813,10 +813,6 @@ internal final class HTTPBinHandler: ChannelInboundHandler {
813813
builder.add(buff)
814814
self.resps.append(builder)
815815
return
816-
case "/sendheaderandwait":
817-
// sends some headers and waits indefinitely afterwards
818-
context.writeAndFlush(wrapOutboundOut(.head(HTTPResponseHead(version: HTTPVersion(major: 1, minor: 1), status: .ok))), promise: nil)
819-
return
820816
case "/wait":
821817
return
822818
case "/close":

0 commit comments

Comments
 (0)