package Ġcom . github . j async . sql . db . mysql Ċ Ċ import Ġcom . github . j async . sql . db . SSL Configuration Ċ import Ġjava . io . File Ċ import Ġjava . util . concurrent . ExecutionException Ċ import Ġjavax . net . ssl . SSL Handshake Exception Ċ import Ġorg . assertj . core . api . Assertions Ċ import Ġorg . junit . Test Ċ Ċ class ĠMySQL SSL Connection Spec Ġ: ĠConnection Helper () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdefault Ssl Config Ġ= ĠSSL Configuration ( ĊĠĠĠĠĠĠĠ ĠSSL Configuration . Mode . Require , ĊĠĠĠĠĠĠĠ Ġresource File (" server - cert . pem ") ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ssl Ġhandler Ġshould Ġconnect Ġto Ġthe Ġdatabase Ġin Ġssl Ġwithout Ġverify ing ĠCA `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwith SSL Connection (" 1 2 7 . 0 . 0 . 1 ", Ġdefault Ssl Config . copy ( root Cert Ġ= Ġnull )) Ġ{ Ġhandler Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( handler . isConnected ()). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ssl Ġhandler Ġshould Ġconnect Ġto Ġthe Ġdatabase Ġin Ġssl Ġverify ing ĠCA `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwith SSL Connection (" 1 2 7 . 0 . 0 . 1 ", Ġdefault Ssl Config . copy ( mode Ġ= ĠSSL Configuration . Mode . Verify CA )) Ġ{ Ġhandler Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( handler . isConnected ()). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ssl Ġhandler Ġshould Ġconnect Ġto Ġthe Ġdatabase Ġin Ġssl Ġverify ing ĠCA Ġand Ġhostname `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwith SSL Connection ( ssl Config Ġ= Ġdefault Ssl Config . copy ( mode Ġ= ĠSSL Configuration . Mode . Verify Full )) Ġ{ Ġhandler Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( handler . isConnected ()). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ssl Ġhandler Ġshould Ġthrows Ġexception Ġwhen ĠCA Ġverification Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġverify Exception ( ExecutionException :: class . java , ĠSSL Handshake Exception :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith SSL Connection ( ssl Config Ġ= ĠSSL Configuration ( SSL Configuration . Mode . Verify CA , Ġroot Cert Ġ= Ġnull )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ssl Ġhandler Ġshould Ġthrows Ġexception Ġwhen Ġhostname Ġverification Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġverify Exception ( ExecutionException :: class . java , ĠSSL Handshake Exception :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith SSL Connection (" 1 2 7 . 0 . 0 . 1 ", Ġdefault Ssl Config . copy ( SSL Configuration . Mode . Verify Full )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ssl Ġhandler Ġshould Ġconnect Ġwith Ġa Ġlocal Ġclient Ġcert `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= Ġdefault Ssl Config . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Cert Ġ= Ġresource File (" client - cert . pem "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient PrivateKey Ġ= Ġresource File (" client - key . pem ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwith SSL Connection ( ssl Config Ġ= Ġconfig ) Ġ{ Ġhandler Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( handler . isConnected ()). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresource File ( name : ĠString ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFile ( ClassLoader . getSystem ClassLoader (). getResource ( name ) !!. file ) ĊĠĠĠ Ġ} Ċ } Ċ