@@ -3525,4 +3525,47 @@ final class HTTPClientTests: XCTestCaseHTTPClientTestsBaseClass {
3525
3525
let response = try client. get ( url: self . defaultHTTPBinURLPrefix + " get " ) . wait ( )
3526
3526
XCTAssertEqual ( . ok, response. status)
3527
3527
}
3528
+
3529
+ func testAsyncExecuteWithCustomTLS( ) async throws {
3530
+ let httpsBin = HTTPBin ( . http1_1( ssl: true ) )
3531
+ defer {
3532
+ XCTAssertNoThrow ( try httpsBin. shutdown ( ) )
3533
+ }
3534
+
3535
+ // A client with default TLS settings, i.e. it won't accept `httpsBin`'s fake self-signed cert
3536
+ let client = HTTPClient ( eventLoopGroup: MultiThreadedEventLoopGroup . singleton)
3537
+ defer {
3538
+ XCTAssertNoThrow ( try client. shutdown ( ) . wait ( ) )
3539
+ }
3540
+
3541
+ var request = HTTPClientRequest ( url: " https://localhost: \( httpsBin. port) /get " )
3542
+
3543
+ // For now, let's allow bad TLS certs
3544
+ request. tlsConfiguration = TLSConfiguration . clientDefault
3545
+ request. tlsConfiguration!. certificateVerification = . none
3546
+
3547
+ let response1 = try await client. execute ( request, timeout: /* infinity */ . hours( 99 ) )
3548
+ XCTAssertEqual ( . ok, response1. status)
3549
+
3550
+ // For the second request, we reset the TLS config
3551
+ request. tlsConfiguration = nil
3552
+ do {
3553
+ let response2 = try await client. execute ( request, timeout: /* infinity */ . hours( 99 ) )
3554
+ XCTFail ( " shouldn't succeed, self-signed cert: \( response2) " )
3555
+ } catch {
3556
+ switch error as? NIOSSLError {
3557
+ case . some( . handshakeFailed( _) ) :
3558
+ ( ) // ok
3559
+ default :
3560
+ XCTFail ( " unexpected error: \( error) " )
3561
+ }
3562
+ }
3563
+
3564
+ // And finally we allow it again.
3565
+ request. tlsConfiguration = TLSConfiguration . clientDefault
3566
+ request. tlsConfiguration!. certificateVerification = . none
3567
+
3568
+ let response3 = try await client. execute ( request, timeout: /* infinity */ . hours( 99 ) )
3569
+ XCTAssertEqual ( . ok, response3. status)
3570
+ }
3528
3571
}
0 commit comments