@@ -5,6 +5,34 @@ import NIOSSL
5
5
6
6
final class MQTTNIOTests : XCTestCase {
7
7
8
+ // downloaded from http://test.mosquitto.org/
9
+ let mosquittoCertificate = """
10
+ -----BEGIN CERTIFICATE-----
11
+ MIIEAzCCAuugAwIBAgIUBY1hlCGvdj4NhBXkZ/uLUZNILAwwDQYJKoZIhvcNAQEL
12
+ BQAwgZAxCzAJBgNVBAYTAkdCMRcwFQYDVQQIDA5Vbml0ZWQgS2luZ2RvbTEOMAwG
13
+ A1UEBwwFRGVyYnkxEjAQBgNVBAoMCU1vc3F1aXR0bzELMAkGA1UECwwCQ0ExFjAU
14
+ BgNVBAMMDW1vc3F1aXR0by5vcmcxHzAdBgkqhkiG9w0BCQEWEHJvZ2VyQGF0Y2hv
15
+ by5vcmcwHhcNMjAwNjA5MTEwNjM5WhcNMzAwNjA3MTEwNjM5WjCBkDELMAkGA1UE
16
+ BhMCR0IxFzAVBgNVBAgMDlVuaXRlZCBLaW5nZG9tMQ4wDAYDVQQHDAVEZXJieTES
17
+ MBAGA1UECgwJTW9zcXVpdHRvMQswCQYDVQQLDAJDQTEWMBQGA1UEAwwNbW9zcXVp
18
+ dHRvLm9yZzEfMB0GCSqGSIb3DQEJARYQcm9nZXJAYXRjaG9vLm9yZzCCASIwDQYJ
19
+ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAME0HKmIzfTOwkKLT3THHe+ObdizamPg
20
+ UZmD64Tf3zJdNeYGYn4CEXbyP6fy3tWc8S2boW6dzrH8SdFf9uo320GJA9B7U1FW
21
+ Te3xda/Lm3JFfaHjkWw7jBwcauQZjpGINHapHRlpiCZsquAthOgxW9SgDgYlGzEA
22
+ s06pkEFiMw+qDfLo/sxFKB6vQlFekMeCymjLCbNwPJyqyhFmPWwio/PDMruBTzPH
23
+ 3cioBnrJWKXc3OjXdLGFJOfj7pP0j/dr2LH72eSvv3PQQFl90CZPFhrCUcRHSSxo
24
+ E6yjGOdnz7f6PveLIB574kQORwt8ePn0yidrTC1ictikED3nHYhMUOUCAwEAAaNT
25
+ MFEwHQYDVR0OBBYEFPVV6xBUFPiGKDyo5V3+Hbh4N9YSMB8GA1UdIwQYMBaAFPVV
26
+ 6xBUFPiGKDyo5V3+Hbh4N9YSMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL
27
+ BQADggEBAGa9kS21N70ThM6/Hj9D7mbVxKLBjVWe2TPsGfbl3rEDfZ+OKRZ2j6AC
28
+ 6r7jb4TZO3dzF2p6dgbrlU71Y/4K0TdzIjRj3cQ3KSm41JvUQ0hZ/c04iGDg/xWf
29
+ +pp58nfPAYwuerruPNWmlStWAXf0UTqRtg4hQDWBuUFDJTuWuuBvEXudz74eh/wK
30
+ sMwfu1HFvjy5Z0iMDU8PUDepjVolOCue9ashlS4EB5IECdSR2TItnAIiIwimx839
31
+ LdUdRudafMu5T5Xma182OC0/u/xRlEm+tvKGGmfFcN0piqVl8OrSPBgIlb+1IKJE
32
+ m/XriWr/Cq4h/JfB7NTsezVslgkBaoU=
33
+ -----END CERTIFICATE-----
34
+ """
35
+
8
36
func createClient( cb: @escaping ( Result < MQTTPublishInfo , Swift . Error > ) -> ( ) = { _ in } ) -> MQTTClient {
9
37
MQTTClient ( host: " mqtt.eclipse.org " , port: 1883 , eventLoopGroupProvider: . createNew, publishCallback: cb)
10
38
}
@@ -17,10 +45,14 @@ final class MQTTNIOTests: XCTestCase {
17
45
publishCallback: cb
18
46
)
19
47
}
20
- func createSSLClient( cb: @escaping ( Result < MQTTPublishInfo , Swift . Error > ) -> ( ) = { _ in } ) -> MQTTClient {
21
- let tlsConfiguration : TLSConfiguration ? = nil //TLSConfiguration.forClient(certificateChain: certificate.map {.certificate($0)}, privateKey: .privateKey(privateKey))
48
+ func createSSLClient( cb: @escaping ( Result < MQTTPublishInfo , Swift . Error > ) -> ( ) = { _ in } ) throws -> MQTTClient {
49
+ let rootCertificate = try NIOSSLCertificate . fromPEMBytes ( [ UInt8] ( mosquittoCertificate. utf8) )
50
+ //let key = try NIOSSLPrivateKey(bytes: [UInt8](macbookProKey.utf8), format: .pem)
51
+ let tlsConfiguration : TLSConfiguration ? = TLSConfiguration . forClient (
52
+ trustRoots: . certificates( rootCertificate)
53
+ )
22
54
return MQTTClient (
23
- host: " broker.emqx.io " ,
55
+ host: " test.mosquitto.org " ,
24
56
eventLoopGroupProvider: . createNew,
25
57
configuration: . init( useSSL: true , tlsConfiguration: tlsConfiguration) ,
26
58
publishCallback: cb
@@ -54,7 +86,7 @@ final class MQTTNIOTests: XCTestCase {
54
86
}
55
87
56
88
func testSSLConnect( ) throws {
57
- let client = createSSLClient ( )
89
+ let client = try createSSLClient ( )
58
90
try connect ( to: client, identifier: " connect " )
59
91
try client. pingreq ( ) . wait ( )
60
92
try client. disconnect ( ) . wait ( )
0 commit comments