Skip to content

Commit 7b9b6f3

Browse files
authored
Add NIOTS transport to E2E TLS-enabled tests (#20)
1 parent cad03db commit 7b9b6f3

File tree

4 files changed

+364
-172
lines changed

4 files changed

+364
-172
lines changed

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ let dependencies: [Package.Dependency] = [
5151
),
5252
.package(
5353
url: "https://github.com/apple/swift-nio-ssl.git",
54-
from: "2.27.2"
54+
from: "2.29.0"
5555
),
5656
.package(
5757
url: "https://github.com/apple/swift-nio-extras.git",

Tests/GRPCNIOTransportHTTP2Tests/HTTP2TransportNIOTransportServicesTests.swift

Lines changed: 32 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -19,57 +19,9 @@ import GRPCCore
1919
import GRPCNIOTransportCore
2020
import GRPCNIOTransportHTTP2TransportServices
2121
import XCTest
22+
import NIOSSL
2223

2324
final class HTTP2TransportNIOTransportServicesTests: XCTestCase {
24-
private static let p12bundleURL = URL(fileURLWithPath: #filePath)
25-
.deletingLastPathComponent() // (this file)
26-
.deletingLastPathComponent() // GRPCHTTP2TransportTests
27-
.deletingLastPathComponent() // Tests
28-
.appendingPathComponent("Sources")
29-
.appendingPathComponent("GRPCSampleData")
30-
.appendingPathComponent("bundle")
31-
.appendingPathExtension("p12")
32-
33-
@Sendable private static func loadIdentity() throws -> SecIdentity {
34-
let data = try Data(contentsOf: Self.p12bundleURL)
35-
36-
var externalFormat = SecExternalFormat.formatUnknown
37-
var externalItemType = SecExternalItemType.itemTypeUnknown
38-
let passphrase = "password" as CFTypeRef
39-
var exportKeyParams = SecItemImportExportKeyParameters()
40-
exportKeyParams.passphrase = Unmanaged.passUnretained(passphrase)
41-
var items: CFArray?
42-
43-
let status = SecItemImport(
44-
data as CFData,
45-
"bundle.p12" as CFString,
46-
&externalFormat,
47-
&externalItemType,
48-
SecItemImportExportFlags(rawValue: 0),
49-
&exportKeyParams,
50-
nil,
51-
&items
52-
)
53-
54-
if status != errSecSuccess {
55-
XCTFail(
56-
"""
57-
Unable to load identity from '\(Self.p12bundleURL)'. \
58-
SecItemImport failed with status \(status)
59-
"""
60-
)
61-
} else if items == nil {
62-
XCTFail(
63-
"""
64-
Unable to load identity from '\(Self.p12bundleURL)'. \
65-
SecItemImport failed.
66-
"""
67-
)
68-
}
69-
70-
return ((items! as NSArray)[0] as! SecIdentity)
71-
}
72-
7325
func testGetListeningAddress_IPv4() async throws {
7426
let transport = GRPCNIOTransportCore.HTTP2ServerTransport.TransportServices(
7527
address: .ipv4(host: "0.0.0.0", port: 0),
@@ -198,6 +150,33 @@ final class HTTP2TransportNIOTransportServicesTests: XCTestCase {
198150
}
199151
}
200152

153+
@Sendable private static func loadIdentity() throws -> SecIdentity {
154+
let certificateKeyPairs = try SelfSignedCertificateKeyPairs()
155+
let password = "somepassword"
156+
let bundle = NIOSSLPKCS12Bundle(
157+
certificateChain: [
158+
try NIOSSLCertificate(bytes: certificateKeyPairs.server.certificate, format: .der)
159+
],
160+
privateKey: try NIOSSLPrivateKey(bytes: certificateKeyPairs.server.key, format: .der)
161+
)
162+
let pkcs12Bytes = try bundle.serialize(passphrase: password.utf8)
163+
let options = [kSecImportExportPassphrase as String: password]
164+
var rawItems: CFArray?
165+
let status = SecPKCS12Import(
166+
Data(pkcs12Bytes) as CFData,
167+
options as CFDictionary,
168+
&rawItems
169+
)
170+
guard status == errSecSuccess else {
171+
XCTFail("Failed to import PKCS12 bundle: status \(status).")
172+
throw HTTP2TransportNIOTransportServicesTestsError.failedToImportPKCS12
173+
}
174+
let items = rawItems! as! [[String: Any]]
175+
let firstItem = items[0]
176+
let identity = firstItem[kSecImportItemIdentity as String] as! SecIdentity
177+
return identity
178+
}
179+
201180
func testServerConfig_Defaults() throws {
202181
let grpcTLSConfig = HTTP2ServerTransport.TransportServices.TLS.defaults(
203182
identityProvider: Self.loadIdentity
@@ -229,4 +208,8 @@ final class HTTP2TransportNIOTransportServicesTests: XCTestCase {
229208
XCTAssertEqual(grpcTLSConfig.trustRoots, .systemDefault)
230209
}
231210
}
211+
212+
enum HTTP2TransportNIOTransportServicesTestsError: Error {
213+
case failedToImportPKCS12
214+
}
232215
#endif

0 commit comments

Comments
 (0)