/* ĊĠĠ ĠCopyright Ġ 2 0 1 7 - 2 0 1 9 ĠChar les ĠK orn . ĊĊĠĠ Ġ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 Ġb ate ct . execution . model . steps Ċ Ċ import Ġb ate ct . config . Build Image Ċ import Ġb ate ct . config . Container Ċ import Ġb ate ct . config . HealthCheck Config Ċ import Ġb ate ct . config . Literal Value Ċ import Ġb ate ct . config . Port Mapping Ċ import Ġb ate ct . config . Pull Image Ċ import Ġb ate ct . config . Volume Mount Ċ import Ġb ate ct . docker . Container Creation FailedException Ċ import Ġb ate ct . docker . Container HealthCheck Exception Ċ import Ġb ate ct . docker . Container Removal FailedException Ċ import Ġb ate ct . docker . Container Start FailedException Ċ import Ġb ate ct . docker . Container Stop FailedException Ċ import Ġb ate ct . docker . Docker Client Ċ import Ġb ate ct . docker . Docker Container Ċ import Ġb ate ct . docker . Docker Container Creation Request Ċ import Ġb ate ct . docker . Docker Container Creation Request Factory Ċ import Ġb ate ct . docker . Docker Container Run Result Ċ import Ġb ate ct . docker . Docker Exception Ċ import Ġb ate ct . docker . Docker HealthCheck Result Ċ import Ġb ate ct . docker . Docker Image Ċ import Ġb ate ct . docker . Docker Image Build Progress Ċ import Ġb ate ct . docker . Docker Network Ċ import Ġb ate ct . docker . Health Status Ċ import Ġb ate ct . docker . Image Build FailedException Ċ import Ġb ate ct . docker . Image Pull FailedException Ċ import Ġb ate ct . docker . Network Creation FailedException Ċ import Ġb ate ct . docker . Network Deletion FailedException Ċ import Ġb ate ct . docker . User And Group Ċ import Ġb ate ct . docker . pull . Docker Image Pull Progress Ċ import Ġb ate ct . execution . Behaviour After Failure Ċ import Ġb ate ct . execution . Run As CurrentUser Configuration Ċ import Ġb ate ct . execution . Run As CurrentUser Configuration Provider Ċ import Ġb ate ct . execution . Run Options Ċ import Ġb ate ct . execution . model . events . Container B ec ame Health y Event Ċ import Ġb ate ct . execution . model . events . Container Created Event Ċ import Ġb ate ct . execution . model . events . Container Creation Failed Event Ċ import Ġb ate ct . execution . model . events . Container Did Not Be come Health y Event Ċ import Ġb ate ct . execution . model . events . Container Removal Failed Event Ċ import Ġb ate ct . execution . model . events . Container Removed Event Ċ import Ġb ate ct . execution . model . events . Container Run Failed Event Ċ import Ġb ate ct . execution . model . events . Container Start Failed Event Ċ import Ġb ate ct . execution . model . events . Container Started Event Ċ import Ġb ate ct . execution . model . events . Container Stop Failed Event Ċ import Ġb ate ct . execution . model . events . Container Stopped Event Ċ import Ġb ate ct . execution . model . events . Image Build Failed Event Ċ import Ġb ate ct . execution . model . events . Image Build Progress Event Ċ import Ġb ate ct . execution . model . events . Image Built Event Ċ import Ġb ate ct . execution . model . events . Image Pull Failed Event Ċ import Ġb ate ct . execution . model . events . Image Pull Progress Event Ċ import Ġb ate ct . execution . model . events . Image Pul led Event Ċ import Ġb ate ct . execution . model . events . Running Container Exit ed Event Ċ import Ġb ate ct . execution . model . events . Task Event Sink Ċ import Ġb ate ct . execution . model . events . Task Network Created Event Ċ import Ġb ate ct . execution . model . events . Task Network Creation Failed Event Ċ import Ġb ate ct . execution . model . events . Task Network Deleted Event Ċ import Ġb ate ct . execution . model . events . Task Network Deletion Failed Event Ċ import Ġb ate ct . execution . model . events . Temporary Directory Deleted Event Ċ import Ġb ate ct . execution . model . events . Temporary Directory Deletion Failed Event Ċ import Ġb ate ct . execution . model . events . Temporary File Deleted Event Ċ import Ġb ate ct . execution . model . events . Temporary File Deletion Failed Event Ċ import Ġb ate ct . logging . Logger Ċ import Ġb ate ct . logging . Severity Ċ import Ġb ate ct . os . Command Ċ import Ġb ate ct . os . proxies . Proxy Environment Variables Provider Ċ import Ġb ate ct . test utils . InMemory Log Sink Ċ import Ġb ate ct . test utils . create ForEach Test Ċ import Ġb ate ct . test utils . equalTo Ċ import Ġb ate ct . test utils . has Message Ċ import Ġb ate ct . test utils . image Source DoesNot Mat ter Ċ import Ġb ate ct . test utils . on Ċ import Ġb ate ct . test utils . with Additional Data Ċ import Ġb ate ct . test utils . with Log Message Ċ import Ġb ate ct . test utils . with Severity Ċ import Ġcom . google . common . j im fs . Configuration Ċ import Ġcom . google . common . j im fs . Jim fs Ċ import Ġcom . nat pr y ce . ham k rest . and Ċ import Ġcom . nat pr y ce . ham k rest . assertion . assertThat Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . any Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . do Return Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . do Throw Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . eq Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġorg . spe k framework . spe k 2 . Spe k Ċ import Ġorg . spe k framework . spe k 2 . style . specification . describe Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Paths Ċ Ċ object ĠTask Step Runner Spec Ġ: ĠSpe k ({ ĊĠĠĠ Ġdescribe (" a Ġtask Ġstep Ġrunner ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġevent Sink Ġby Ġcreate ForEach Test Ġ{ Ġmock < Task Event Sink >() Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdocker Client Ġby Ġcreate ForEach Test Ġ{ Ġmock < Docker Client >() Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcreation Request Factory Ġby Ġcreate ForEach Test Ġ{ Ġmock < Docker Container Creation Request Factory >() Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġproxy Variables Ġ= Ġmap Of (" SO ME _ PROXY _ CONFIG " Ġto Ġ" some _ proxy ", Ġ" SO ME _ OTHER _ PROXY _ CONFIG " Ġto Ġ" some _ other _ value ") ĊĠĠĠĠĠĠĠ Ġval Ġproxy Environment Variables Provider Ġ= Ġmock < Proxy Environment Variables Provider > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġget Proxy Environment Variables ( empty Set ()) Ġ} Ġdo Return Ġproxy Variables ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrun As CurrentUser Configuration Ġ= ĠRun As CurrentUser Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Volume Mount ("/ tmp / local - path ", Ġ"/ tmp / remote - path ", Ġ" rw ")), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser And Group ( 4 5 6 , Ġ 7 8 9 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrun As CurrentUser Configuration Provider Ġ= Ġmock < Run As CurrentUser Configuration Provider > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġgenerate Configuration ( any (), Ġany ()) Ġ} Ġdo Return Ġrun As CurrentUser Configuration ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlog Sink Ġ= ĠIn Memory Log Sink () ĊĠĠĠĠĠĠĠ Ġval Ġrun Options Ġ= ĠRun Options (" some - task ", Ġempty List (), Ġ 1 2 3 , ĠBe haviour After Failure . Cleanup , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= ĠLogger (" some . source ", Ġlog Sink ) ĊĠĠĠĠĠĠĠ Ġval Ġrunner Ġby Ġcreate ForEach Test Ġ{ ĠTask Step Runner ( docker Client , Ġproxy Environment Variables Provider , Ġcreation Request Factory , Ġrun As CurrentUser Configuration Provider , Ġlogger ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescribe (" running Ġsteps ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon (" running Ġany Ġstep ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Ġ= Ġmock < Task Step > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ ĠtoString () Ġ} Ġdo Return Ġ" The Ġstep Ġdescription " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" logs Ġthat Ġthe Ġstep Ġis Ġstarting ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Sink , Ġhas Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Severity ( Severity . Info ) Ġand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Log Message (" Running Ġstep .") Ġand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Additional Data (" step ", Ġ" The Ġstep Ġdescription ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" logs Ġthat Ġthe Ġstep Ġhas Ġfinished ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Sink , Ġhas Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Severity ( Severity . Info ) Ġand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Log Message (" Step Ġcompleted .") Ġand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Additional Data (" step ", Ġ" The Ġstep Ġdescription ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" running Ġa Ġ' build Ġimage ' Ġstep ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuild Directory Ġ= ĠPaths . get ("/ some - build - dir ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuild Args Ġ= Ġmap Of (" some _ arg " Ġto Ġ" some _ value ", Ġ" SO ME _ PROXY _ CONFIG " Ġto Ġ" over ridden ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocker filePath Ġ= Ġ" some - Dockerfile - path " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Tags Ġ= Ġset Of (" some _ image _ tag ", Ġ" some _ other _ image _ tag ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Source Ġ= ĠBuild Image ( build Directory , Ġbuild Args , Ġdocker filePath ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Ġ= ĠBuild Image Step ( image Source , Ġimage Tags ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" when Ġbuilding Ġthe Ġimage Ġsucceeds ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" and Ġpropag ating Ġproxy - related Ġenvironment Ġvariables Ġis Ġenabled ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠDocker Image (" some - image ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate 1 Ġ= ĠDocker Image Build Progress ( 1 , Ġ 2 , Ġ" First Ġstep ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate 2 Ġ= ĠDocker Image Build Progress ( 2 , Ġ 2 , Ġ" Second Ġstep ", Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . build ( eq ( build Directory ), Ġany (), Ġeq ( docker filePath ), Ġeq ( image Tags ), Ġany ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. then Ġ{ Ġinvocation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġon Status Update Ġ= Ġinvocation . arguments [ 4 ] Ġas Ġ( Docker Image Build Progress ) Ġ-> ĠUnit ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Status Update ( update 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Status Update ( update 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" passes Ġthe Ġimage Ġbuild Ġargs Ġprovided Ġby Ġthe Ġuser Ġas Ġwell Ġas Ġany Ġproxy - related Ġbuild Ġargs , Ġwith Ġuser - provided Ġbuild Ġargs Ġoverriding Ġthe Ġgenerated Ġproxy - related Ġbuild Ġargs ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Args Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" some _ arg " Ġto Ġ" some _ value ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" SO ME _ PROXY _ CONFIG " Ġto Ġ" over ridden ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" SO ME _ OTHER _ PROXY _ CONFIG " Ġto Ġ" some _ other _ value " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( docker Client ). build ( any (), Ġeq ( expected Args ), Ġany (), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' image Ġbuild Ġprogress ' Ġevent Ġfor Ġeach Ġupdate Ġreceived Ġfrom ĠDocker ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Image Build Progress Event ( image Source , Ġupdate 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Image Build Progress Event ( image Source , Ġupdate 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' image Ġbuilt ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Image Built Event ( image Source , Ġimage )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" and Ġpropag ating Ġproxy - related Ġenvironment Ġvariables Ġis Ġdisabled ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠDocker Image (" some - image ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrun Options With Proxy EnvironmentVariable Propagation Disabled Ġ= ĠRun Options (" some - task ", Ġempty List (), Ġ 1 2 3 , ĠBe haviour After Failure . Cleanup , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . build ( eq ( build Directory ), Ġany (), Ġeq ( docker filePath ), Ġeq ( image Tags ), Ġany ())). thenReturn ( image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options With Proxy EnvironmentVariable Propagation Disabled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" does Ġnot Ġpass Ġthe Ġproxy - related Ġenvironment Ġvariables Ġas Ġimage Ġbuild Ġarguments , Ġbut Ġdoes Ġstill Ġpass Ġthe Ġuser - provided Ġbuild Ġargs ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( docker Client ). build ( any (), Ġeq ( build Args ), Ġany (), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' image Ġbuilt ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Image Built Event ( image Source , Ġimage )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġbuilding Ġthe Ġimage Ġfails ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . build ( eq ( build Directory ), Ġany (), Ġeq ( docker filePath ), Ġeq ( image Tags ), Ġany ())). then Throw ( Image Build FailedException (" Something Ġwent Ġwrong .")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' image Ġbuild Ġfailed ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Image Build Failed Event ( image Source , Ġ" Something Ġwent Ġwrong .")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" running Ġa Ġ' pull Ġimage ' Ġstep ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠPull Image (" some - image ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Ġ= ĠPull Image Step ( source ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġpulling Ġthe Ġimage Ġsucceeds ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠDocker Image (" some - image ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate 1 Ġ= ĠDocker Image Pull Progress (" Update Ġ 1 ", Ġ 1 0 , Ġ 2 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate 2 Ġ= ĠDocker Image Pull Progress (" Update Ġ 2 ", Ġ 1 5 , Ġ 2 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . pull Image ( eq (" some - image "), Ġany ())). then Ġ{ Ġinvocation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġon Status Update Ġ= Ġinvocation . arguments [ 1 ] Ġas Ġ( Docker Image Pull Progress ) Ġ-> ĠUnit ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Status Update ( update 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Status Update ( update 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' image Ġpulled ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Image Pul led Event ( source , Ġimage )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' image Ġpull Ġprogress ' Ġevent Ġfor Ġeach Ġupdate Ġreceived Ġfrom ĠDocker ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Image Pull Progress Event ( source , Ġupdate 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Image Pull Progress Event ( source , Ġupdate 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġbuilding Ġthe Ġimage Ġfails ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . pull Image ( eq (" some - image "), Ġany ())). then Throw ( Image Pull FailedException (" Pull ing Ġimage Ġ' some - image ' Ġfailed . ĠOutput Ġfrom ĠDocker Ġwas : ĠSomething Ġwent Ġwrong .")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' image Ġpull Ġfailed ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Image Pull Failed Event ( source , Ġ" Pull ing Ġimage Ġ' some - image ' Ġfailed . ĠOutput Ġfrom ĠDocker Ġwas : ĠSomething Ġwent Ġwrong .")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" running Ġa Ġ' create Ġtask Ġnetwork ' Ġstep ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Ġ= ĠCreate Task Network Step ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġcreating Ġthe Ġnetwork Ġsucceeds ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= ĠDocker Network (" some - network ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . createNew Bridge Network ()). do Return ( network ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' network Ġcreated ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Task Network Created Event ( network )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġcreating Ġthe Ġnetwork Ġfails ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . createNew Bridge Network ()). do Throw ( Network Creation FailedException (" Something Ġwent Ġwrong .")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' network Ġcreation Ġfailed ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Task Network Creation Failed Event (" Something Ġwent Ġwrong .")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" running Ġa Ġ' create Ġcontainer ' Ġstep ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= ĠContainer (" some - container ", Ġimage Source DoesNot Mat ter ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Container Ġ= ĠContainer (" some - other - container ", Ġimage Source DoesNot Mat ter ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= ĠCommand . parse (" do - stuff ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġworking Directory Ġ= Ġ" some - dir " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadditional Environment Variables Ġ= Ġmap Of (" SO ME _ VAR " Ġto ĠLiteral Value (" some Ġvalue ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadditional Port Mappings Ġ= Ġset Of ( Port Mapping ( 1 2 3 , Ġ 4 5 6 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠDocker Image (" some - image ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= ĠDocker Network (" some - network ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Ġ= ĠCreate Container Step ( container , Ġcommand , Ġworking Directory , Ġadditional Environment Variables , Ġadditional Port Mappings , Ġset Of ( container , Ġother Container ), Ġimage , Ġnetwork ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠDocker Container Creation Request ( image , Ġnetwork , Ġcommand . parsed Command , Ġ" some - container ", Ġ" some - container ", Ġempty Map (), Ġ"/ work - dir ", Ġempty Set (), Ġempty Set (), ĠHealth Check Config (), Ġnull , Ġfalse , Ġfalse , Ġempty Set (), Ġempty Set ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreation Request Factory . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworking Directory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Environment Variables , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun As CurrentUser Configuration . volume Mount s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Port Mappings , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Options . propagate Proxy Environment Variables , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun As CurrentUser Configuration . user And Group , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep . all Containers In Network ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). do Return ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġcreating Ġthe Ġcontainer Ġsucceeds ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocker Container Ġ= ĠDocker Container (" some - id ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . create ( request )). do Return ( docker Container ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" creates Ġthe Ġcontainer Ġwith Ġthe Ġprovided Ġconfiguration ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( docker Client ). create ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġcreated ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Container Created Event ( container , Ġdocker Container )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġcreating Ġthe Ġcontainer Ġfails ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . create ( request )). do Throw ( Container Creation FailedException (" Something Ġwent Ġwrong .")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġcreation Ġfailed ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Container Creation Failed Event ( container , Ġ" Something Ġwent Ġwrong .")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" running Ġa Ġ' run Ġcontainer ' Ġstep ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= ĠContainer (" some - container ", Ġimage Source DoesNot Mat ter ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocker Container Ġ= ĠDocker Container (" some - id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Ġ= ĠRun Container Step ( container , Ġdocker Container ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġrunning Ġthe Ġcontainer Ġsucceeds ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . run ( docker Container )). do Return ( Docker Container Run Result ( 1 2 3 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' running Ġcontainer Ġexited ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Running Container Exit ed Event ( container , Ġ 1 2 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġrunning Ġthe Ġcontainer Ġfails ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . run ( docker Container )). do Throw ( Docker Exception (" Something Ġwent Ġwrong ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġrun Ġfailed ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Container Run Failed Event ( container , Ġ" Something Ġwent Ġwrong ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" running Ġa Ġ' start Ġcontainer ' Ġstep ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= ĠContainer (" some - container ", Ġimage Source DoesNot Mat ter ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocker Container Ġ= ĠDocker Container (" some - id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Ġ= ĠStart Container Step ( container , Ġdocker Container ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġstarting Ġthe Ġcontainer Ġsucceeds ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" starts Ġthe Ġcontainer ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( docker Client ). start ( docker Container ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġstarted ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Container Started Event ( container )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġstarting Ġthe Ġcontainer Ġfails ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . start ( docker Container )). then Throw ( Container Start FailedException (" some - id ", Ġ" Something Ġwent Ġwrong ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġstart Ġfailed ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Container Start Failed Event ( container , Ġ" Something Ġwent Ġwrong ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" running Ġa Ġ' stop Ġcontainer ' Ġstep ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= ĠContainer (" some - container ", Ġimage Source DoesNot Mat ter ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocker Container Ġ= ĠDocker Container (" some - id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Ġ= ĠStop Container Step ( container , Ġdocker Container ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġstopping Ġthe Ġcontainer Ġsucceeds ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" stops Ġthe Ġcontainer ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( docker Client ). stop ( docker Container ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġstopped ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Container Stopped Event ( container )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġstopping Ġthe Ġcontainer Ġfails ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . stop ( docker Container )). then Throw ( Container Stop FailedException (" some - id ", Ġ" Something Ġwent Ġwrong ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġstop Ġfailed ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Container Stop Failed Event ( container , Ġ" Something Ġwent Ġwrong ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" running Ġa Ġ' remove Ġcontainer ' Ġstep ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= ĠContainer (" some - container ", Ġimage Source DoesNot Mat ter ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocker Container Ġ= ĠDocker Container (" some - id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Ġ= ĠRemove Container Step ( container , Ġdocker Container ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġremoving Ġthe Ġcontainer Ġsucceeds ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" re moves Ġthe Ġcontainer ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( docker Client ). remove ( docker Container ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġremoved ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Container Removed Event ( container )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġremoving Ġthe Ġcontainer Ġfails ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . remove ( docker Container )). then Throw ( Container Removal FailedException (" some - id ", Ġ" Something Ġwent Ġwrong ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġremoval Ġfailed ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Container Removal Failed Event ( container , Ġ" Something Ġwent Ġwrong ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" running Ġa Ġ' delete Ġtemporary Ġfile ' Ġstep ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile System Ġby Ġcreate ForEach Test Ġ{ ĠJim fs . new FileSystem ( Configuration . unix ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġby Ġcreate ForEach Test Ġ{ Ġfile System . getPath ("/ temp - file ") Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Ġby Ġcreate ForEach Test Ġ{ ĠDelete Temporary File Step ( filePath ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġdeleting Ġthe Ġfile Ġsucceeds ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . write ( filePath , ĠlistOf (" test Ġfile Ġcontents ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' temporary Ġfile Ġdeleted ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Temporary File Deleted Event ( filePath )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" de letes Ġthe Ġfile ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( Files . exists ( filePath ), ĠequalTo ( false )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġdeleting Ġthe Ġfile Ġfails ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' temporary Ġfile Ġdeletion Ġfailed ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Temporary File Deletion Failed Event ( filePath , Ġ" java . nio . file . NoSuch File Exception : Ġ/ temp - file ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" running Ġa Ġ' delete Ġtemporary Ġdirectory ' Ġstep ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile System Ġby Ġcreate ForEach Test Ġ{ ĠJim fs . new FileSystem ( Configuration . unix ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirectory Path Ġby Ġcreate ForEach Test Ġ{ Ġfile System . getPath ("/ temp - directory ") Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Ġby Ġcreate ForEach Test Ġ{ ĠDelete Temporary Directory Step ( directory Path ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġdeleting Ġthe Ġdirectory Ġsucceeds ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . create Directories ( directory Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . write ( directory Path . resolve (" some - file "), ĠlistOf (" some Ġfile Ġcontent ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' temporary Ġdirectory Ġdeleted ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Temporary Directory Deleted Event ( directory Path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" de letes Ġthe Ġdirectory ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( Files . exists ( directory Path ), ĠequalTo ( false )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġdeleting Ġthe Ġdirectory Ġfails ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' temporary Ġdirectory Ġdeletion Ġfailed ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Temporary Directory Deletion Failed Event ( directory Path , Ġ" java . nio . file . NoSuch File Exception : Ġ/ temp - directory ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" running Ġa Ġ' wait Ġfor Ġcontainer Ġto Ġbecome Ġhealthy ' Ġstep ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= ĠContainer (" some - container ", Ġimage Source DoesNot Mat ter ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocker Container Ġ= ĠDocker Container (" some - id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Ġ= ĠWaitFor Container ToBe come Health y Step ( container , Ġdocker Container ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġthe Ġcontainer Ġhas Ġno Ġhealth Ġcheck ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . waitFor Health Status ( docker Container )). do Return ( Health Status . No HealthCheck ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġbecame Ġhealthy ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Container B ec ame Health y Event ( container )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġthe Ġcontainer Ġbecomes Ġhealthy ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . waitFor Health Status ( docker Container )). do Return ( Health Status . B ec ame Health y ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġbecame Ġhealthy ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Container B ec ame Health y Event ( container )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" when Ġthe Ġcontainer Ġbecomes Ġun healthy ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . waitFor Health Status ( docker Container )). do Return ( Health Status . B ec ame Un healthy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" when Ġthe Ġlast Ġhealth Ġcheck Ġreturned Ġa Ġnon - zero Ġexit Ġcode ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" and Ġproduced Ġno Ġoutput ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . getLast HealthCheck Result ( docker Container )). do Return ( Docker HealthCheck Result ( 2 , Ġ"")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġdid Ġnot Ġbecome Ġhealthy ' Ġevent Ġwith Ġdetails Ġof Ġthe Ġlast Ġhealth Ġcheck ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContainer Did Not Be come Health y Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġconfigured Ġhealth Ġcheck Ġdid Ġnot Ġindicate Ġthat Ġthe Ġcontainer Ġwas Ġhealthy Ġwithin Ġthe Ġtimeout Ġperiod . ĠThe Ġlast Ġhealth Ġcheck Ġexited Ġwith Ġcode Ġ 2 Ġbut Ġdid Ġnot Ġproduce Ġany Ġoutput ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" and Ġproduced Ġsome Ġoutput ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . getLast HealthCheck Result ( docker Container )). do Return ( Docker HealthCheck Result ( 2 , Ġ" Something 's Ġnot Ġready Ġyet .\ n ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġdid Ġnot Ġbecome Ġhealthy ' Ġevent Ġwith Ġdetails Ġof Ġthe Ġlast Ġhealth Ġcheck ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContainer Did Not Be come Health y Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġconfigured Ġhealth Ġcheck Ġdid Ġnot Ġindicate Ġthat Ġthe Ġcontainer Ġwas Ġhealthy Ġwithin Ġthe Ġtimeout Ġperiod . ĠThe Ġlast Ġhealth Ġcheck Ġexited Ġwith Ġcode Ġ 2 Ġand Ġoutput :\ n Something 's Ġnot Ġready Ġyet ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġthe Ġlast Ġhealth Ġcheck Ġreturned Ġa Ġzero Ġexit Ġcode ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . getLast HealthCheck Result ( docker Container )). do Return ( Docker HealthCheck Result ( 0 , Ġ"")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġdid Ġnot Ġbecome Ġhealthy ' Ġevent Ġwith Ġan Ġexplanation Ġof Ġthe Ġrace Ġcondition ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContainer Did Not Be come Health y Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġconfigured Ġhealth Ġcheck Ġdid Ġnot Ġindicate Ġthat Ġthe Ġcontainer Ġwas Ġhealthy Ġwithin Ġthe Ġtimeout Ġperiod . ĠThe Ġmost Ġrecent Ġhealth Ġcheck Ġexited Ġwith Ġcode Ġ 0 , Ġwhich Ġusually Ġindicates Ġthat Ġthe Ġcontainer Ġbecame Ġhealthy Ġjust Ġafter Ġthe Ġtimeout Ġperiod Ġexpired ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġgetting Ġthe Ġlast Ġhealth Ġcheck Ġresult Ġthrows Ġan Ġexception ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . getLast HealthCheck Result ( docker Container )). do Throw ( Container HealthCheck Exception (" Something Ġwent Ġwrong .")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġdid Ġnot Ġbecome Ġhealthy ' Ġevent Ġwith Ġdetails Ġof Ġthe Ġlast Ġhealth Ġcheck ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContainer Did Not Be come Health y Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Waiting Ġfor Ġthe Ġcontainer 's Ġhealth Ġstatus Ġfailed : ĠSomething Ġwent Ġwrong ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġthe Ġcontainer Ġexits Ġbefore Ġreporting Ġa Ġhealth Ġstatus ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . waitFor Health Status ( docker Container )). do Return ( Health Status . Exit ed ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġdid Ġnot Ġbecome Ġhealthy ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Container Did Not Be come Health y Event ( container , Ġ" The Ġcontainer Ġexited Ġbefore Ġbecoming Ġhealthy .")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġwaiting Ġfor Ġthe Ġcontainer 's Ġhealth Ġstatus Ġfails ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . waitFor Health Status ( docker Container )). do Throw ( Container HealthCheck Exception (" Something Ġwent Ġwrong ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' container Ġdid Ġnot Ġbecome Ġhealthy ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Container Did Not Be come Health y Event ( container , Ġ" Waiting Ġfor Ġthe Ġcontainer 's Ġhealth Ġstatus Ġfailed : ĠSomething Ġwent Ġwrong ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" running Ġa Ġ' delete Ġtask Ġnetwork ' Ġstep ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= ĠDocker Network (" some - network ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Ġ= ĠDelete Task Network Step ( network ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġdeleting Ġthe Ġnetwork Ġsucceeds ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" de letes Ġthe Ġnetwork ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( docker Client ). delete Network ( network ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' network Ġdeleted ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Task Network Deleted Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon (" when Ġremoving Ġthe Ġcontainer Ġfails ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( docker Client . delete Network ( network )). then Throw ( Network Deletion FailedException (" some - network ", Ġ" Something Ġwent Ġwrong ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . run ( step , Ġevent Sink , Ġrun Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" em its Ġa Ġ' network Ġdeletion Ġfailed ' Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( event Sink ). post Event ( Task Network Deletion Failed Event (" Something Ġwent Ġwrong ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ