/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 - 2 0 2 1 ĠSIP 3 . IO , ĠCorp . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġio . sip 3 . sal to . ce . udf Ċ Ċ import Ġio . sip 3 . commons . vertx . test . Vert x Test Ċ import Ġio . sip 3 . commons . vertx . util . local Send Ċ import Ġio . vertx . core . json . JsonObject Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ import Ġkotlin . io . path . copy To Ċ Ċ class ĠU df Manager Test Ġ: ĠVert x Test () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠU DF _ LOCATION Ġ= Ġ" src / test / resources / udf / U df Manager Test " ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtmp Dir : ĠPath ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġcreate Temporary Directory () Ġ{ ĊĠĠĠĠĠĠĠ Ġtmp Dir Ġ= ĠFiles . create Temp Directory (" sip 3 - udf - manager ") ĊĠĠĠĠĠĠĠ ĠSystem . setProperty (" udf . location ", Ġtmp Dir . to AbsolutePath (). toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Deploy Ġand Ġre - deploy ĠGro ovy ĠU DF `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" Gro ovy Ġis Ġawesome " ĊĠĠĠĠĠĠĠ Ġval Ġcounter Ġ= ĠAtomicInteger () ĊĊĠĠĠĠĠĠĠ Ġrun Test ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeploy Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . or Create Context . config (). put (" udf ", ĠJsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput (" check - period ", Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU df Manager ( vertx ). start ( tmp Dir . to AbsolutePath (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscript Ġ= ĠPaths . get ( U DF _ LOCATION , Ġ" U df Manager Test V 1 . groovy ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript . copy To ( tmp Dir . resolve (" U df Manager Test . groovy "), Ġoverwrite Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . set Periodic ( 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( counter . get () Ġ== Ġ 1 Ġ&& Ġscript Ġ== ĠPaths . get ( U DF _ LOCATION , Ġ" U df Manager Test V 1 . groovy ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript Ġ= ĠPaths . get ( U DF _ LOCATION , Ġ" U df Manager Test V 2 . groovy ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript . copy To ( tmp Dir . resolve (" U df Manager Test . groovy "), Ġoverwrite Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . set Periodic ( 5 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). local Send (" groovy ", Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). local Consumer < String >(" groovy 1 ") Ġ{ Ġcounter . compare AndSet ( 0 , Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). local Consumer < String >(" groovy 2 ") Ġ{ Ġcounter . compare AndSet ( 1 , Ġ 2 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . set Periodic ( 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( counter . get () Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . complete Now () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Deploy Ġand Ġre - deploy ĠJavaScript ĠU DF `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" JavaScript Ġis Ġawesome " ĊĠĠĠĠĠĠĠ Ġval Ġcounter Ġ= ĠAtomicInteger () ĊĊĠĠĠĠĠĠĠ Ġrun Test ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeploy Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . or Create Context . config (). put (" udf ", ĠJsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput (" check - period ", Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU df Manager ( vertx ). start ( tmp Dir . to AbsolutePath (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscript Ġ= ĠPaths . get ( U DF _ LOCATION , Ġ" U df Manager Test V 1 . js ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript . copy To ( tmp Dir . resolve (" U df Manager Test . js "), Ġoverwrite Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . set Periodic ( 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( counter . get () Ġ== Ġ 1 Ġ&& Ġscript Ġ== ĠPaths . get ( U DF _ LOCATION , Ġ" U df Manager Test V 1 . js ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript Ġ= ĠPaths . get ( U DF _ LOCATION , Ġ" U df Manager Test V 2 . js ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript . copy To ( tmp Dir . resolve (" U df Manager Test . js "), Ġoverwrite Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . set Periodic ( 5 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). local Send (" js ", Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). local Consumer < String >(" js 1 ") Ġ{ Ġcounter . compare AndSet ( 0 , Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). local Consumer < String >(" js 2 ") Ġ{ Ġcounter . compare AndSet ( 1 , Ġ 2 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . set Periodic ( 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( counter . get () Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . complete Now () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun Ġdelete Temporary Directory () Ġ{ ĊĠĠĠĠĠĠĠ ĠFiles . delete IfExists ( tmp Dir . resolve (" U df Manager Test . groovy ")) ĊĠĠĠĠĠĠĠ ĠFiles . delete IfExists ( tmp Dir . resolve (" U df Manager Test . js ")) ĊĠĠĠĠĠĠĠ ĠFiles . delete IfExists ( tmp Dir ) ĊĠĠĠ Ġ} Ċ }