1919import static org .assertj .core .api .Assertions .assertThat ;
2020import static org .junit .jupiter .api .Assertions .assertThrows ;
2121
22+ import java .time .Duration ;
23+
2224import org .junit .Assume ;
25+ import org .junit .jupiter .api .BeforeAll ;
2326import org .junit .jupiter .api .Test ;
2427import org .junit .jupiter .api .extension .ExtendWith ;
2528
2629import io .asyncer .r2dbc .mysql .constant .SslMode ;
2730import io .asyncer .r2dbc .mysql .internal .util .TestContainerExtension ;
2831import io .asyncer .r2dbc .mysql .internal .util .TestServerUtil ;
2932import io .r2dbc .spi .R2dbcPermissionDeniedException ;
33+ import io .r2dbc .spi .ValidationDepth ;
34+ import reactor .core .publisher .Mono ;
35+ import reactor .test .StepVerifier ;
3036
3137@ ExtendWith (TestContainerExtension .class )
3238public class RsaEncryptionIntegrationTest {
39+
40+ @ BeforeAll
41+ static void initCachingSha2Password () {
42+ // If the server uses caching_sha2_password, the first time a client connects to the server, the
43+ // server will require a native SSL connection. So all the SSL tunnel tests should be run after
44+ // the caching_sha2_password initialization.
45+
46+ MySqlConnectionConfiguration configuration = MySqlConnectionConfiguration .builder ()
47+ .host (TestServerUtil .getHost ())
48+ .port (TestServerUtil .getPort ())
49+ .connectTimeout (Duration .ofSeconds (3 ))
50+ .user (TestServerUtil .getUsername ())
51+ .password (TestServerUtil .getPassword ())
52+ .database (TestServerUtil .getDatabase ())
53+ .createDatabaseIfNotExist (true )
54+ .build ();
55+
56+ MySqlConnectionFactory .from (configuration ).create ()
57+ .flatMap (connection -> connection .validate (ValidationDepth .REMOTE )
58+ .flatMap (it -> connection .close ().then (Mono .just (it ))))
59+ .as (StepVerifier ::create )
60+ .expectNext (true )
61+ .verifyComplete ();
62+ }
3363
3464 @ Test
35- void rsaEnabledSslDisabledTest () {
65+ void sslDisabledTest () {
3666 Assume .assumeTrue (TestServerUtil .getServerVersion ().getMajor () >= 8 );
3767
3868 MySqlConnectionConfiguration configuration = MySqlConnectionConfiguration .builder ()
@@ -45,6 +75,11 @@ void rsaEnabledSslDisabledTest() {
4575 .build ();
4676
4777 assertThrows (R2dbcPermissionDeniedException .class , () -> MySqlConnectionFactory .from (configuration ));
78+ }
79+
80+ @ Test
81+ void sslDisabledInvalidRsaConfig () {
82+ Assume .assumeTrue (TestServerUtil .getServerVersion ().getMajor () >= 8 );
4883
4984 MySqlConnectionConfiguration configuration2 = MySqlConnectionConfiguration .builder ()
5085 .host ("localhost" )
@@ -57,6 +92,11 @@ void rsaEnabledSslDisabledTest() {
5792 .build ();
5893
5994 assertThrows (IllegalArgumentException .class , () -> MySqlConnectionFactory .from (configuration2 ));
95+ }
96+
97+ @ Test
98+ void sslDisabledValidRsaConfig () {
99+ Assume .assumeTrue (TestServerUtil .getServerVersion ().getMajor () >= 8 );
60100
61101 MySqlConnectionConfiguration configuration3 = MySqlConnectionConfiguration .builder ()
62102 .host ("localhost" )
@@ -68,6 +108,6 @@ void rsaEnabledSslDisabledTest() {
68108 .serverRSAPublicKeyFile ("/usr/local/mysql/data/public_key.pem" )
69109 .build ();
70110
71- assertThat (MySqlConnectionFactory .from (configuration2 )).isExactlyInstanceOf (MySqlConnectionFactory .class );
111+ assertThat (MySqlConnectionFactory .from (configuration3 )).isExactlyInstanceOf (MySqlConnectionFactory .class );
72112 }
73113}
0 commit comments