package Ġde . qual ers oft . jmeter . gradle plugin Ċ Ċ import Ġio . kot est . matchers . string . should Contain Ċ import Ġorg . gradle . internal . impl dep . org . junit . rules . Temporary Folder Ċ import Ġorg . gradle . test kit . runner . Build Result Ċ import Ġorg . gradle . test kit . runner . Gradle Runner Ċ import Ġorg . junit . jupiter . api . Tag Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Ċ import Ġjava . util . zip . Zip File Ċ Ċ private Ġconst Ġval ĠEXT _ GR Ġ= Ġ". gradle " Ċ private Ġconst Ġval ĠEXT _ KT Ġ= Ġ"$ EXT _ GR . k ts " Ċ Ċ open Ġclass ĠJ Meter Plugin Functional TestBase Ġ{ ĊĊĠ Ġ@ Tag (" groovy ") ĊĠ Ġannotation Ġclass ĠGro ovy Tag ĊĊĠ Ġ@ Tag (" kotlin ") ĊĠ Ġannotation Ġclass ĠKotlin Tag ĊĊĠ Ġprotected Ġval Ġtest Project Dir : ĠTemporary Folder Ġ= ĠTemporary Folder . builder () ĊĠĠĠ Ġ. parent Folder ( File ("./ build / tmp / functional Test "). absolute File ) ĊĠĠĠ Ġ. ass ure Deletion () ĊĠĠĠ Ġ. build () ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠPath Ġto Ġthe Ġj mx File . ĊĠĠ Ġ* ĠWill Ġbe Ġcopied Ġto Ġdefault Ġlocation . ĊĠĠ Ġ* ĠDefaults Ġto Ġ` Test . j mx ` ĊĠĠ Ġ*/ ĊĠ Ġprotected Ġvar Ġj mx File Ġ= Ġ{ Ġ" Test . j mx " Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠMe ant Ġto Ġbe Ġoverridden Ġif Ġrequired . ĊĠĠ Ġ* ĠIf Ġnot Ġ` null ` Ġthe Ġwhole Ġfolder Ġwill Ġbe Ġcopied . ĊĠĠ Ġ* Ġ@ see Ġsetup Gro ovy Test ĊĠĠ Ġ* Ġ@ see Ġsetup Kotlin Test ĊĠĠ Ġ*/ ĊĠ Ġprotected Ġvar Ġroot Folder : Ġ() Ġ-> ĠString ? Ġ= Ġ{ Ġnull Ġ} ĊĊĠ Ġprotected Ġfun Ġsetup Kotlin Test ( base FileName : ĠString , Ġdebug : ĠBoolean Ġ= Ġfalse ): ĠGradle Runner Ġ{ ĊĠĠĠ Ġcopy Test File To Temp ( base FileName , ĠEXT _ KT ) ĊĠĠĠ Ġreturn Ġcreate Runner ( debug ) ĊĠ Ġ} ĊĊĠ Ġprotected Ġfun Ġsetup Gro ovy Test ( base FileName : ĠString , Ġdebug : ĠBoolean Ġ= Ġfalse ): ĠGradle Runner Ġ{ ĊĠĠĠ Ġcopy Test File To Temp ( base FileName , ĠEXT _ GR ) ĊĠĠĠ Ġreturn Ġcreate Runner ( debug ) ĊĠ Ġ} ĊĊĠ Ġprotected Ġfun Ġrun Should Suc ceed ( result : ĠBuild Result ) Ġ{ ĊĠĠĠ Ġresult . output Ġshould Contain Ġ" BUILD ĠSUCCESS FUL " ĊĠ Ġ} ĊĊĠ Ġprotected Ġfun Ġrun Should Fail ( result : ĠBuild Result , Ġreason : ĠString Ġ= Ġ"") Ġ{ ĊĠĠĠ Ġresult . output Ġshould Contain Ġ" FAILURE : Ġ$ reason " ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Runner ( debug : ĠBoolean ) Ġ= ĠGradle Runner . create () ĊĠĠĠ Ġ. with Project Dir ( test Project Dir . root ) ĊĠĠĠ Ġ// ĠAtt ention : Ġdo Ġnot Ġenable Ġdebug ! ĠDetails Ġsee Ġhttps :// github . com / gradle / gradle / issues / 6 8 6 2 ĊĠĠĠ Ġ. with Plugin Classpath () ĊĠĠĠ Ġ. with Debug ( debug ) ĊĠĠĠ Ġ. with Test Kit Dir ( test Project Dir . new Folder ()) ĊĠĠĠ Ġ. with Ja Co Co () ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCop ies Ġa Ġj mx - file Ġfrom Ġ` resource ` Ġto Ġthe Ġdefault Ġlocation . ĊĠĠ Ġ* Ġ@ param Ġsrc J mx ĠThe Ġpath Ġto Ġthe Ġj mx - file . ĠDefaults Ġto Ġ[ j mx File ] ĊĠĠ Ġ*/ ĊĠ Ġfun Ġcopy J mx To Default Location ( src J mx : ĠString Ġ= Ġj mx File ()) Ġ{ ĊĠĠĠ Ġval Ġdest Dir Ġ= Ġtest Project Dir . new Folder ("./ src / test / jmeter ") ĊĠĠĠ Ġdest Dir . mkdir s () ĊĠĠĠ Ġval Ġresource Ġ= ĠFile ( java Class . class Loader . getResource ( src J mx ) !!. file ) ĊĠĠĠ Ġval Ġdest File Ġ= Ġdest Dir . resolve ( resource . name ) ĊĠĠĠ Ġresource . copy To ( dest File ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCop ies Ġa Ġresult - file Ġ(* . j tl ) Ġfrom Ġ` resource ` Ġto Ġthe Ġdefault Ġlocation . ĊĠĠ Ġ* Ġ@ param Ġsource ĠThe Ġpath Ġto Ġthe Ġresource Ġfile . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġcopy Result To Default Location ( source : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġdest Dir Ġ= Ġtest Project Dir . new Folder ("./ build / test - results / jmeter ") ĊĠĠĠ Ġdest Dir . mkdir s () ĊĠĠĠ Ġval Ġresource Ġ= ĠFile ( java Class . class Loader . getResource ( source ) !!. file ) ĊĠĠĠ Ġval Ġdest File Ġ= Ġdest Dir . resolve ( resource . name ) ĊĠĠĠ Ġresource . copy To ( dest File ) ĊĠ Ġ} ĊĊĠ Ġfun Ġcopy Zip Resource To ( resource : ĠString , Ġtarget Dir : ĠFile ) Ġ{ ĊĠĠĠ Ġval Ġtmp Ġ= Ġtest Project Dir . new Folder () ĊĠĠĠ Ġval Ġtmp Zip Ġ= Ġtmp . resolve ( resource ) ĊĊĠĠĠ Ġjava Class . class Loader . getResource AsStream ( resource ). copy To ( tmp Zip . output Stream ()) ĊĠĠĠ Ġval Ġzip Ġ= ĠZip File ( tmp Zip ) ĊĠĠĠ Ġzip . use Ġ{ Ġz f Ġ-> ĊĠĠĠĠĠ Ġz f . stream (). forEach Ġ{ Ġze Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġtarget Entry Ġ= Ġtarget Dir . resolve ( ze . name ) ĊĠĠĠĠĠĠĠ Ġif Ġ( ze . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtarget Entry . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġz f . getInputStream ( ze ). copy To ( target Entry . output Stream ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcopy Test File To Temp ( resource : ĠString , Ġext : ĠString ): ĠFile Ġ{ ĊĠĠĠ Ġvar Ġres Ġ= Ġresource Ġ+ Ġext ĊĠĠĠ Ġ// Ġif Ġwe Ġhave Ġa Ġroot Ġfolder ĊĠĠĠ Ġroot Folder ()?. also Ġ{ ĊĠĠĠĠĠ Ġres Ġ= Ġ"$ it /$ res " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfile Ġ= ĠFile ( J Meter Plugin Functional TestBase :: class . java . class Loader . getResource ( res ) !!. file ) ĊĠĠĠ Ġtest Project Dir . create () ĊĠĠĠ Ġval Ġresult Ġ= Ġtest Project Dir . new File (" build $ ext ") ĊĠĠĠ Ġfile . inputStream (). use Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠ Ġresult . output Stream (). use Ġ{ Ġoutput Ġ-> Ġinput . copy To ( output ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsettings Ġ= Ġtest Project Dir . new File (" settings $ ext ") ĊĠĠĠ Ġsettings . write Text ("") ĊĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} ĊĊĊĠ Ġprotected Ġfun ĠFile . copy To ( file : ĠFile ) Ġ{ ĊĠĠĠ Ġthis . inputStream (). to File ( file ) ĊĠ Ġ} ĊĊĠ Ġprotected Ġfun ĠInputStream . to File ( file : ĠFile ) Ġ{ ĊĠĠĠ Ġuse Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠ Ġfile . output Stream (). use Ġ{ Ġinput . copy To ( it ) Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠGradle Runner . with Ja Co Co (): ĠGradle Runner Ġ{ ĊĠĠĠ Ġjava Class . class Loader . getResource AsStream (" test kit - gradle . properties ") ĊĠĠĠĠĠ Ġ? . to File ( File ( project Dir , Ġ" gradle . properties ")) ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} Ċ } Ċ