@@ -19,57 +19,9 @@ import GRPCCore
19
19
import GRPCNIOTransportCore
20
20
import GRPCNIOTransportHTTP2TransportServices
21
21
import XCTest
22
+ import NIOSSL
22
23
23
24
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
-
73
25
func testGetListeningAddress_IPv4( ) async throws {
74
26
let transport = GRPCNIOTransportCore . HTTP2ServerTransport. TransportServices (
75
27
address: . ipv4( host: " 0.0.0.0 " , port: 0 ) ,
@@ -198,6 +150,33 @@ final class HTTP2TransportNIOTransportServicesTests: XCTestCase {
198
150
}
199
151
}
200
152
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
+
201
180
func testServerConfig_Defaults( ) throws {
202
181
let grpcTLSConfig = HTTP2ServerTransport . TransportServices. TLS. defaults (
203
182
identityProvider: Self . loadIdentity
@@ -229,4 +208,8 @@ final class HTTP2TransportNIOTransportServicesTests: XCTestCase {
229
208
XCTAssertEqual ( grpcTLSConfig. trustRoots, . systemDefault)
230
209
}
231
210
}
211
+
212
+ enum HTTP2TransportNIOTransportServicesTestsError : Error {
213
+ case failedToImportPKCS12
214
+ }
232
215
#endif
0 commit comments