/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġd ork box , Ġl lc Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 4 ĠZero Turn around Ġ< support @ zer ot urn around . com > Ċ Ġ* ĠContains Ġfragments Ġof Ġcode Ġfrom ĠApache ĠCommons ĠExec , Ġrights Ġowned Ċ Ġ* Ġby ĠApache ĠSoftware ĠFoundation Ġ( ASF ). Ċ Ġ* Ċ Ġ* Ġ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 Ġd ork box . executor Ċ Ċ import Ġd ork box . executor . samples . Loop Ċ import Ġd ork box . executor . samples . Test Setup Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . jupiter . api . Assertions Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent .* Ċ Ċ class ĠTimeout Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġwriter Loop Command : ĠList < String > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠlistOf (" java ", ĠTest Setup . getFile ( Loop :: class . java )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Start Timeout () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġtimeout Ġin Ġcase Ġwe Ġget Ġstuck ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġwriter Loop Command ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecutor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. command ( args ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . fail < Void >(" TimeoutException Ġexpected .") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠTimeout Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġe . message ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertTrue ( message ?. contains (" 1 ĠSE COND ") Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertTrue ( message ?. contains ( Test Setup . getFile ( Loop :: class . java )) Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Start Async Timeout () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġtimeout Ġin Ġcase Ġwe Ġget Ġstuck ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġwriter Loop Command ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġasync Process Ġ= ĠExecutor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. command ( args ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start Async () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwait Ġwith Ġtimeout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasync Process . await ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . fail < Void >(" TimeoutException Ġexpected .") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠTimeout Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertTrue ( e . message ?. contains (" 1 ĠSE COND ") Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġis Ġa Ġtest Ġcopied Ġfrom Ġhttps :// github . com / zer ot urn around / zt - exec / issues / 5 6 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Execute Timeout Issue 5 6 _ Sync () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommands : ĠMutable List < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Executor . IS _ OS _ WINDOWS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnative Ġsleep Ġcommand Ġis Ġnot Ġavailable Ġon ĠWindows Ġplatform ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmock Ġusing Ġstandard Ġping Ġto Ġlocalhost Ġinstead ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( Windows Ġping Ġdoes Ġ 4 Ġrequests Ġwhich Ġtakes Ġabout Ġ 3 Ġseconds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommands . add (" ping ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommands . add (" 1 2 7 . 0 . 0 . 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommands . add (" sleep ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommands . add (" 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecutor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. command ( commands ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . fail < Void >(" TimeoutException Ġexpected .") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠTimeout Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertTrue ( e . message ?. contains (" 1 ĠSE COND ") Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġis Ġa Ġtest Ġcopied Ġfrom Ġhttps :// github . com / zer ot urn around / zt - exec / issues / 5 6 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Start Timeout Issue 5 6 _ Async () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommands : ĠMutable List < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Executor . IS _ OS _ WINDOWS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnative Ġsleep Ġcommand Ġis Ġnot Ġavailable Ġon ĠWindows Ġplatform ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmock Ġusing Ġstandard Ġping Ġto Ġlocalhost Ġinstead ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( Windows Ġping Ġdoes Ġ 4 Ġrequests Ġwhich Ġtakes Ġabout Ġ 3 Ġseconds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommands . add (" ping ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommands . add (" 1 2 7 . 0 . 0 . 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommands . add (" sleep ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommands . add (" 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠExecutor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. command ( commands ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start Async () ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwait Ġwith Ġtimeout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob . await ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . fail < Void >(" TimeoutException Ġexpected .") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠTimeout Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertTrue ( e . message ?. contains (" 1 ĠSE COND ") Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ