Skip to content

Commit 7d11497

Browse files
committed
add testConnectionFailureBackoff and testCancelRequestWorks
1 parent 2933388 commit 7d11497

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

Diff for: Tests/AsyncHTTPClientTests/HTTPConnectionPool+HTTP2StateMachineTests.swift

+37
Original file line numberDiff line numberDiff line change
@@ -170,4 +170,41 @@ class HTTPConnectionPool_HTTP2StateMachineTests: XCTestCase {
170170
// 4. retry connection, but no more queued requests.
171171
XCTAssertEqual(state.connectionCreationBackoffDone(newConnectionID), .none)
172172
}
173+
174+
func testCancelRequestWorks() {
175+
let elg = EmbeddedEventLoopGroup(loops: 4)
176+
defer { XCTAssertNoThrow(try elg.syncShutdownGracefully()) }
177+
178+
var state = HTTPConnectionPool.HTTP2StateMaschine(
179+
idGenerator: .init()
180+
)
181+
182+
let mockRequest = MockHTTPRequest(eventLoop: elg.next())
183+
let request = HTTPConnectionPool.Request(mockRequest)
184+
185+
let executeAction = state.executeRequest(request)
186+
XCTAssertEqual(.scheduleRequestTimeout(for: request, on: mockRequest.eventLoop), executeAction.request)
187+
188+
// 1. connection attempt
189+
guard case .createConnection(let connectionID, on: let connectionEL) = executeAction.connection else {
190+
return XCTFail("Unexpected connection action: \(executeAction.connection)")
191+
}
192+
XCTAssert(connectionEL === mockRequest.eventLoop) // XCTAssertIdentical not available on Linux
193+
194+
// 2. cancel request
195+
let cancelAction = state.cancelRequest(request.id)
196+
XCTAssertEqual(cancelAction.request, .cancelRequestTimeout(request.id))
197+
XCTAssertEqual(cancelAction.connection, .none)
198+
199+
// 3. request timeout triggers to late
200+
XCTAssertEqual(state.timeoutRequest(request.id), .none, "To late timeout is ignored")
201+
202+
// 4. succeed connection attempt
203+
let connectedAction = state.newHTTP2ConnectionEstablished(
204+
.__testOnly_connection(id: connectionID, eventLoop: connectionEL),
205+
maxConcurrentStreams: 100
206+
)
207+
XCTAssertEqual(connectedAction.request, .none, "Request must not be executed")
208+
XCTAssertEqual(connectedAction.connection, .scheduleTimeoutTimer(connectionID, on: connectionEL))
209+
}
173210
}

0 commit comments

Comments
 (0)