Skip to content

Commit

Permalink
Adopt a custom shared client (#18)
Browse files Browse the repository at this point in the history
### Motivation

We previously defaulted the HTTPClient to .init(), but that's not
correct as it was never getting shut down.

### Modifications

Instead of creating a new client, just introduce our own shared one and
use that as the default value.

Once AHC provides a shared client, we can default to that in the
configuration initializer.

### Result

No more crashing clients on dealloc.

### Test Plan

All tests pass.

---------

Co-authored-by: David Nadoba <dnadoba@gmail.com>
  • Loading branch information
czechboy0 and dnadoba authored Sep 18, 2023
1 parent 7e40bff commit f228a33
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 11 deletions.
13 changes: 11 additions & 2 deletions Sources/OpenAPIAsyncHTTPClient/AsyncHTTPClientTransport.swift
Original file line number Diff line number Diff line change
Expand Up @@ -68,15 +68,24 @@ public struct AsyncHTTPClientTransport: ClientTransport {
/// The HTTP client used for performing HTTP calls.
public var client: HTTPClient

/// The default shared HTTP client.
///
/// This is a workaround for the lack of a shared client
/// in AsyncHTTPClient. Do not use this value directly, outside of
/// the `Configuration.init(client:timeout:)` initializer, as it will
/// likely be removed in the future.
private static let sharedClient: HTTPClient = .init()

/// The default request timeout.
public var timeout: TimeAmount

/// Creates a new configuration with the specified client and timeout.
/// - Parameters:
/// - client: The underlying client used to perform HTTP operations.
/// Provide nil to use the shared internal client.
/// - timeout: The request timeout, defaults to 1 minute.
public init(client: HTTPClient = .init(), timeout: TimeAmount = .minutes(1)) {
self.client = client
public init(client: HTTPClient? = nil, timeout: TimeAmount = .minutes(1)) {
self.client = client ?? Self.sharedClient
self.timeout = timeout
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,16 +82,8 @@ class Test_AsyncHTTPClientTransport: XCTestCase {
}

func testSend() async throws {
let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)
let httpClient = HTTPClient(
eventLoopGroupProvider: .shared(eventLoopGroup),
configuration: .init()
)
defer {
try! httpClient.syncShutdown()
}
let transport = AsyncHTTPClientTransport(
configuration: .init(client: httpClient),
configuration: .init(),
requestSender: TestSender.test
)
let request: OpenAPIRuntime.Request = .init(
Expand Down

0 comments on commit f228a33

Please sign in to comment.