12
12
package io .vertx .mysqlclient ;
13
13
14
14
import io .vertx .core .Vertx ;
15
+ import io .vertx .core .buffer .Buffer ;
15
16
import io .vertx .core .net .PemKeyCertOptions ;
16
17
import io .vertx .core .net .PemTrustOptions ;
17
18
import io .vertx .ext .unit .TestContext ;
@@ -31,14 +32,18 @@ public class MySQLTLSTest {
31
32
@ ClassRule
32
33
public static MySQLRule rule = MySQLRule .SHARED_TLS_INSTANCE ;
33
34
35
+ @ ClassRule
36
+ public static MySQLRule nonTlsRule = MySQLRule .SHARED_INSTANCE ;
37
+
34
38
Vertx vertx ;
35
39
MySQLConnectOptions options ;
40
+ MySQLConnectOptions nonTlsOptions ;
36
41
37
42
@ Before
38
43
public void setup () {
39
44
vertx = Vertx .vertx ();
40
45
options = new MySQLConnectOptions (rule .options ());
41
-
46
+ nonTlsOptions = new MySQLConnectOptions ( nonTlsRule . options ());
42
47
/*
43
48
* For testing we have to drop using the TLSv1.2.
44
49
*
@@ -79,7 +84,7 @@ public void testSuccessWithDisabledSslMode(TestContext ctx) {
79
84
}
80
85
81
86
@ Test
82
- public void testSuccessWithPreferredSslMode (TestContext ctx ) {
87
+ public void testTlsSuccessWithPreferredSslMode (TestContext ctx ) {
83
88
options .setSslMode (SslMode .PREFERRED );
84
89
options .setPemTrustOptions (new PemTrustOptions ().addCertPath ("tls/files/ca.pem" ));
85
90
options .setPemKeyCertOptions (new PemKeyCertOptions ()
@@ -95,6 +100,40 @@ public void testSuccessWithPreferredSslMode(TestContext ctx) {
95
100
}));
96
101
}
97
102
103
+ @ Test
104
+ public void testTlsHandshakeFailWithPreferredSslMode (TestContext ctx ) {
105
+ options .setSslMode (SslMode .PREFERRED );
106
+ options .setPemTrustOptions (new PemTrustOptions ().addCertValue (Buffer .buffer ("INVALID CERT" )));
107
+ options .setPemKeyCertOptions (new PemKeyCertOptions ()
108
+ .setCertPath ("tls/files/client-cert.pem" )
109
+ .setKeyPath ("tls/files/client-key.pem" ));
110
+
111
+ MySQLConnection .connect (vertx , options , ctx .asyncAssertSuccess (conn -> {
112
+ ctx .assertFalse (conn .isSSL ());
113
+ conn .query ("SELECT 1" ).execute (ctx .asyncAssertSuccess (res -> {
114
+ ctx .assertEquals (1 , res .size ());
115
+ conn .close ();
116
+ }));
117
+ }));
118
+ }
119
+
120
+ @ Test
121
+ public void testNonTlsConnWithPreferredSslMode (TestContext ctx ) {
122
+ nonTlsOptions .setSslMode (SslMode .PREFERRED );
123
+ nonTlsOptions .setPemTrustOptions (new PemTrustOptions ().addCertPath ("tls/files/ca.pem" ));
124
+ nonTlsOptions .setPemKeyCertOptions (new PemKeyCertOptions ()
125
+ .setCertPath ("tls/files/client-cert.pem" )
126
+ .setKeyPath ("tls/files/client-key.pem" ));
127
+
128
+ MySQLConnection .connect (vertx , nonTlsOptions , ctx .asyncAssertSuccess (conn -> {
129
+ ctx .assertFalse (conn .isSSL ());
130
+ conn .query ("SELECT 1" ).execute (ctx .asyncAssertSuccess (res -> {
131
+ ctx .assertEquals (1 , res .size ());
132
+ conn .close ();
133
+ }));
134
+ }));
135
+ }
136
+
98
137
@ Test
99
138
public void testSuccessWithRequiredSslMode (TestContext ctx ) {
100
139
options .setSslMode (SslMode .REQUIRED );
0 commit comments