package Ġcom . github . v ok orm Ċ Ċ import Ġorg . zer ot urn around . exec . Process Executor Ċ import Ġorg . zer ot urn around . exec . Process Init Exception Ċ import Ġjava . sql . Driver Manager Ċ import Ġjava . sql . SQLException Ċ import Ġjava . time . Duration Ċ import Ġkotlin . test . expect Ċ Ċ /** Ċ Ġ* ĠProvides Ġmeans Ġto Ġstart / stop Ġvarious Ġdatabases Ġin ĠDocker . Ċ Ġ*/ Ċ object ĠDocker Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRuns Ġgiven Ġ[ command ]; Ġif Ġthe Ġcommand Ġfails Ġwith Ġexit Ġcode Ġdifferent Ġthan Ġ 0 Ġthrows Ġan Ġexception Ġwith Ġthe Ġcommand Ġstdout + stderr . ĊĠĠĠĠ Ġ* Ġ@ return Ġstdout ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġexec ( command : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommands Ġ= Ġcommand . split (' Ġ') ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠProcess Executor (). command ( commands ). read Output ( true ). execute () ĊĠĠĠĠĠĠĠ Ġcheck ( result . exit Value Ġ== Ġ 0 ) Ġ{ Ġ"${ result . output UTF 8 () }\ n Process Ġfailed Ġwith Ġ${ result . exit Value }" Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . output UTF 8 () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġwhether Ġthe Ġ" docker " Ġcommand - line Ġtool Ġis Ġavailable . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Present : ĠBoolean Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProcess Executor (). command (" docker ", Ġ" version "). execute (). exit Value Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠProcess Init Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . errorCode Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno Ġsuch Ġfile Ġor Ġdirectory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRuns Ġa Ġnew Ġ` testing _ container ` Ġwith ĠPostgreSQL Ġ 1 0 . 3 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstart Postgres ql ( version : ĠString Ġ= Ġ" 1 0 . 3 ", Ġport : ĠInt Ġ= Ġ 5 4 3 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Testing Container () ĊĠĠĠĠĠĠĠ Ġexec (" docker Ġrun Ġ-- rm Ġ-- name Ġtesting _ container Ġ- e ĠPOST GRES _ PASSWORD = my se cre tp assword Ġ- p Ġ 1 2 7 . 0 . 0 . 1 :$ port : 5 4 3 2 Ġ- d Ġpostgres :$ version ") ĊĠĠĠĠĠĠĠ Ġprobe JDBC (" jdbc : postgresql :// localhost :$ port / postgres ", Ġ" postgres ", Ġ" my se cre tp assword ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġmax Duration Ġmysql Ġstarts Ġslo oooo ow ly ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġprobe JDBC ( url : ĠString , Ġusername : ĠString , Ġpassword : ĠString , Ġmax Duration : ĠDuration Ġ= ĠDuration . of Seconds ( 3 0 )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġthat Ġwe Ġhave Ġa Ġproper Ġdriver Ġon Ġclasspath ĊĠĠĠĠĠĠĠ Ġexpect ( true ) Ġ{ ĠDriver Manager . get Driver ( url ) Ġ!= Ġnull Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġvar Ġlast Exception : ĠSQLException ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġwhile Ġ( Duration . of Millis ( System . currentTimeMillis () Ġ- Ġstart ) Ġ< Ġmax Duration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDriver Manager . getConnection ( url , Ġusername , Ġpassword ). close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSQLException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Exception Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġback Ġoff Ġfor Ġa Ġbit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow Ġlast Exception !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Running (): ĠBoolean Ġ= Ġexec (" docker Ġps "). contains (" testing _ container ") ĊĊĠĠĠ Ġprivate Ġfun Ġstop Testing Container () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( isRunning ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexec (" docker Ġstop Ġtesting _ container ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpause Ġa Ġbit , Ġto Ġavoid Ġthis Ġfailure : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġjava . lang . IllegalStateException : Ġdocker : ĠError Ġresponse Ġfrom Ġdaemon : ĠConflict . ĠThe Ġcontainer Ġname Ġ"/ testing _ container " Ġis Ġalready ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġin Ġuse Ġby Ġcontainer Ġ 6 1 3 ff 9 e 5 f 3 de 3 3 1 2 dc 8 ce 3 3 f 0 d 3 d 3 d 7 b 4 0 2 8 9 c 0 4 e 7 0 c 5 5 1 1 7 9 b 8 7 f 8 3 5 c 2 ebf 3 a . ĠYou Ġhave Ġto Ġremove Ġ( or Ġrename ) Ġthat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcontainer Ġto Ġbe Ġable Ġto Ġreuse Ġthat Ġname .. ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 5 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSto ps Ġthe ĠPostgreSQL Ġ` testing _ container `; Ġdoes Ġnothing Ġif Ġit 's Ġnot Ġrunning . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstop Postgres ql () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Testing Container () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRuns Ġa Ġnew Ġ` testing _ container ` Ġwith ĠMySQL Ġ 5 . 7 . 2 1 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstart Mysql ( version : ĠString Ġ= Ġ" 5 . 7 . 2 1 ", Ġport : ĠInt Ġ= Ġ 3 3 0 6 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Testing Container () ĊĠĠĠĠĠĠĠ Ġexec (" docker Ġrun Ġ-- rm Ġ-- name Ġtesting _ container Ġ- e ĠMYSQL _ ROOT _ PASSWORD = mysql password Ġ- e ĠMYSQL _ DATABASE = db Ġ- e ĠMYSQL _ USER = test user Ġ- e ĠMYSQL _ PASSWORD = mysql password Ġ- p Ġ 1 2 7 . 0 . 0 . 1 :$ port : 3 3 0 6 Ġ- d Ġmysql :$ version ") ĊĠĠĠĠĠĠĠ Ġprobe JDBC (" jdbc : mysql :// localhost :$ port / db ", Ġ" test user ", Ġ" mysql password ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Mysql () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Testing Container () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRuns Ġa Ġnew Ġ` testing _ container ` Ġwith ĠMar iaDB Ġ 1 0 . 1 . 3 1 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstart Mar iaDB ( version : ĠString Ġ= Ġ" 1 0 . 1 . 3 1 ", Ġport : ĠInt Ġ= Ġ 3 3 0 6 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Testing Container () ĊĠĠĠĠĠĠĠ Ġexec (" docker Ġrun Ġ-- rm Ġ-- name Ġtesting _ container Ġ- e ĠMYSQL _ ROOT _ PASSWORD = mysql password Ġ- e ĠMYSQL _ DATABASE = db Ġ- e ĠMYSQL _ USER = test user Ġ- e ĠMYSQL _ PASSWORD = mysql password Ġ- p Ġ 1 2 7 . 0 . 0 . 1 :$ port : 3 3 0 6 Ġ- d Ġm ariadb :$ version ") ĊĠĠĠĠĠĠĠ Ġprobe JDBC (" jdbc : m ariadb :// localhost :$ port / db ", Ġ" test user ", Ġ" mysql password ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Mar iaDB () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Testing Container () ĊĠĠĠ Ġ} Ċ } Ċ