/* ĊĠĠĠ ĠCopyright Ġ 2 0 1 7 - 2 0 2 1 Ġ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 . docker client Ċ Ċ import Ġio . kot est . assertions . throw ables . should Throw Ċ import Ġio . kot est . core . spec . style . Should Spec Ċ import Ġio . kot est . inspect ors . for At Least One Ċ import Ġio . kot est . matchers . collections . shouldBe In Ċ import Ġio . kot est . matchers . collections . should Contain Ċ import Ġio . kot est . matchers . collections . should End With Ċ import Ġio . kot est . matchers . collections . should Start With Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . kot est . matchers . should Not Be Ċ Ċ class ĠDocker Client Image Pull Spec Ġ: ĠShould Spec ({ ĊĠĠĠ Ġval Ġclient Ġ= Ġclose After Test ( Docker Client . Builder (). build ()) ĊĊĠĠĠ Ġval Ġdefault Linux Test Image Ġ= Ġ" gcr . io / dist ro less / static @ sha 2 5 6 : a ade a 1 b 1 f 1 6 af 0 4 3 a 3 4 4 9 1 eec 4 8 1 d 0 1 3 2 4 7 9 3 8 2 0 9 6 ea 3 4 f 6 0 8 0 8 7 b 4 bef 3 6 3 4 be " ĊĠĠĠ Ġval Ġdefault Windows Test Image Ġ= Ġ" m cr . microsoft . com / windows / nan oser ver @ sha 2 5 6 : 4 f 0 6 e 1 d 8 2 6 3 b 9 3 4 d 2 e 8 8 dc 1 c 6 ff 4 0 2 f 5 b 4 9 9 c 4 d 1 9 ad 6 d 0 e 2 a 5 b 9 ee 9 4 5 f 7 8 2 9 2 8 " Ġ// ĠThis Ġis Ġnan oser ver : 1 8 0 9 ĊĊĠĠĠ Ġval Ġtest Images Ġ= Ġwhen Ġ( test Environment Container Operating System ) Ġ{ ĊĠĠĠĠĠĠĠ ĠContainer Operating System . Linux Ġ-> Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" with Ġa Ġdigest Ġand Ġno Ġtag " Ġto Ġdefault Linux Test Image , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" with Ġa Ġdigest Ġand Ġtag " Ġto Ġ" gcr . io / dist ro less / static : 0 6 3 a 0 7 9 c 1 a 8 7 bad 3 3 6 9 cb 9 daf 0 5 e 3 7 1 e 9 2 5 c 0 c 9 1 @ sha 2 5 6 : a ade a 1 b 1 f 1 6 af 0 4 3 a 3 4 4 9 1 eec 4 8 1 d 0 1 3 2 4 7 9 3 8 2 0 9 6 ea 3 4 f 6 0 8 0 8 7 b 4 bef 3 6 3 4 be ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" with Ġa Ġtag Ġand Ġno Ġdigest " Ġto Ġ" gcr . io / dist ro less / static : 0 6 3 a 0 7 9 c 1 a 8 7 bad 3 3 6 9 cb 9 daf 0 5 e 3 7 1 e 9 2 5 c 0 c 9 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" with Ġneither Ġa Ġdigest Ġnor Ġa Ġtag " Ġto Ġ" gcr . io / dist ro less / static ", ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTo Ġrecreate Ġthis Ġimage : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠ Ġdocker Ġpull Ġg cr . io / dist ro less / static @ sha 2 5 6 : a ade a 1 b 1 f 1 6 af 0 4 3 a 3 4 4 9 1 eec 4 8 1 d 0 1 3 2 4 7 9 3 8 2 0 9 6 ea 3 4 f 6 0 8 0 8 7 b 4 bef 3 6 3 4 be ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠ Ġdocker Ġtag Ġg cr . io / dist ro less / static @ sha 2 5 6 : a ade a 1 b 1 f 1 6 af 0 4 3 a 3 4 4 9 1 eec 4 8 1 d 0 1 3 2 4 7 9 3 8 2 0 9 6 ea 3 4 f 6 0 8 0 8 7 b 4 bef 3 6 3 4 be Ġgh cr . io / b ate ct / docker - client : sample - authenticated - image ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠ Ġdocker Ġpush Ġgh cr . io / b ate ct / docker - client : sample - authenticated - image ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġyou Ġneed Ġto Ġconfigure Ġcredentials Ġlocally : Ġhttps :// docs . github . com / en / packages / working - with - a - github - packages - registry / working - with - the - container - registry # auth entic ating - to - the - container - registry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" that Ġrequires Ġauthentication Ġto Ġpull " Ġto Ġ" gh cr . io / b ate ct / docker - client : sample - authenticated - image " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠContainer Operating System . Windows Ġ-> Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" with Ġa Ġtag " Ġto Ġdefault Windows Test Image ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġimage That DoesNotExist Ġ= Ġ" b ate ct / this - image - does - not - exist : abc 1 2 3 " ĊĊĠĠĠ ĠbeforeEach Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Images . values . forEach Ġ{ Ġimage Ġ-> Ġclient . delete Image If Present ( image ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtest Images . forEach Ġ{ Ġ( description , Ġimage ) Ġ-> ĊĠĠĠĠĠĠĠ Ġshould (" be Ġable Ġto Ġpull , Ġget Ġand Ġdelete Ġan Ġimage Ġ$ description "). only If Docker Daemon Present Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Reference From Pull Ġ= Ġclient . pull Image ( image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Reference From Get Ġ= Ġclient . getImage ( image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Reference From Pull ĠshouldBe Ġimage Reference From Get ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . delete Image ( image Reference From Pull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Reference After Delete Ġ= Ġclient . getImage ( image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Reference After Delete ĠshouldBe Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġshould (" report Ġprogress Ġinformation Ġwhile Ġpulling Ġa ĠLinux Ġimage "). only If Docker Daemon Supports Linux Containers Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġdefault Linux Test Image ĊĠĠĠĠĠĠĠ Ġval Ġprogress Updates Received Ġ= Ġmutable ListOf < Image Pull Progress Update >() ĊĊĠĠĠĠĠĠĠ Ġclient . pull Image ( image ) Ġ{ Ġupdate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Updates Received . add ( update ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlayer Id Ġ= Ġ" b 4 9 b 9 6 5 9 5 fd 4 " ĊĠĠĠĠĠĠĠ Ġval Ġlayer Size Ġ= Ġ 6 5 7 6 9 6 ĊĊĠĠĠĠĠĠĠ Ġprogress Updates Received . for At Least One Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . message ĠshouldBe Ġ" Pull ing Ġfrom Ġdist ro less / static " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . detail ĠshouldBe Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . id ĠshouldBe In Ġset Of ( image , Ġimage . substring After ('@ ')) Ġ// ĠOl der Ġversions Ġof ĠDocker Ġonly Ġreturn Ġthe Ġdigest Ġhere ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogress Updates Received Ġshould Contain ĠImage Pull Progress Update (" Pull ing Ġfs Ġlayer ", ĠImage Pull Progress Detail ( 0 , Ġ 0 ), Ġlayer Id ) ĊĊĠĠĠĠĠĠĠ Ġprogress Updates Received . for At Least One Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . message ĠshouldBe Ġ" Downloading " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . detail Ġshould Not Be Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . detail !!. total ĠshouldBe Ġlayer Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . id ĠshouldBe Ġlayer Id ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogress Updates Received . for At Least One Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . message ĠshouldBe Ġ" Extract ing " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . detail Ġshould Not Be Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . detail !!. total ĠshouldBe Ġlayer Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . id ĠshouldBe Ġlayer Id ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogress Updates Received Ġshould End With ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Pull Progress Update (" Pull Ġcomplete ", ĠImage Pull Progress Detail ( 0 , Ġ 0 ), Ġlayer Id ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Pull Progress Update (" Digest : Ġsha 2 5 6 : a ade a 1 b 1 f 1 6 af 0 4 3 a 3 4 4 9 1 eec 4 8 1 d 0 1 3 2 4 7 9 3 8 2 0 9 6 ea 3 4 f 6 0 8 0 8 7 b 4 bef 3 6 3 4 be ", Ġnull , Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Pull Progress Update (" Status : ĠDown loaded Ġnewer Ġimage Ġfor Ġ$ image ", Ġnull , Ġ"") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġshould (" grace fully Ġhandle Ġa Ġprogress Ġcallback Ġthat Ġthrows Ġan Ġexception Ġwhile Ġpulling Ġan Ġimage "). only If Docker Daemon Supports Linux Containers Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexception Thrown By Callback Handler Ġ= ĠRuntimeException (" This Ġis Ġan Ġexception Ġfrom Ġthe Ġcallback Ġhandler ") ĊĊĠĠĠĠĠĠĠ Ġval Ġexception Thrown By Pull Method Ġ= Ġshould Throw < Image Pull FailedException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . pull Image ( default Linux Test Image ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġexception Thrown By Callback Handler ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexception Thrown By Pull Method . message ĠshouldBe Ġ" Image Ġpull Ġprogress Ġreceiver Ġthrew Ġan Ġexception : Ġ$ exception Thrown By Callback Handler " ĊĠĠĠĠĠĠĠ Ġexception Thrown By Pull Method . cause ĠshouldBe Ġexception Thrown By Callback Handler ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġshould (" report Ġprogress Ġinformation Ġwhile Ġpulling Ġa ĠWindows Ġimage "). only If Docker Daemon Supports Windows Containers Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġdefault Windows Test Image ĊĠĠĠĠĠĠĠ Ġval Ġprogress Updates Received Ġ= Ġmutable ListOf < Image Pull Progress Update >() ĊĊĠĠĠĠĠĠĠ Ġclient . pull Image ( image ) Ġ{ Ġupdate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Updates Received . add ( update ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlayer Id Ġ= Ġ" 9 3 4 e 2 1 2 9 8 3 f 2 " ĊĠĠĠĠĠĠĠ Ġval Ġlayer Size Ġ= Ġ 1 0 2 6 6 1 3 7 2 ĊĊĠĠĠĠĠĠĠ Ġprogress Updates Received Ġshould Start With ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Pull Progress Update (" Pull ing Ġfrom Ġwindows / nan oser ver ", Ġnull , Ġimage ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Pull Progress Update (" Pull ing Ġfs Ġlayer ", ĠImage Pull Progress Detail ( 0 , Ġ 0 ), Ġlayer Id ), ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprogress Updates Received . for At Least One Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . message ĠshouldBe Ġ" Downloading " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . detail Ġshould Not Be Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . detail !!. total ĠshouldBe Ġlayer Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . id ĠshouldBe Ġlayer Id ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogress Updates Received Ġshould Contain ĠImage Pull Progress Update (" Download Ġcomplete ", ĠImage Pull Progress Detail ( 0 , Ġ 0 ), Ġlayer Id ) ĊĊĠĠĠĠĠĠĠ Ġprogress Updates Received . for At Least One Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . message ĠshouldBe Ġ" Extract ing " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . detail Ġshould Not Be Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . detail !!. total ĠshouldBe Ġlayer Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . id ĠshouldBe Ġlayer Id ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogress Updates Received Ġshould End With ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Pull Progress Update (" Pull Ġcomplete ", ĠImage Pull Progress Detail ( 0 , Ġ 0 ), Ġlayer Id ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Pull Progress Update (" Digest : Ġsha 2 5 6 : 4 f 0 6 e 1 d 8 2 6 3 b 9 3 4 d 2 e 8 8 dc 1 c 6 ff 4 0 2 f 5 b 4 9 9 c 4 d 1 9 ad 6 d 0 e 2 a 5 b 9 ee 9 4 5 f 7 8 2 9 2 8 ", Ġnull , Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Pull Progress Update (" Status : ĠDown loaded Ġnewer Ġimage Ġfor Ġ$ image ", Ġnull , Ġ"") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġshould (" fail Ġwhen Ġpulling Ġa Ġnon - existent Ġimage "). only If Docker Daemon Present Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġshould Throw < Image Pull FailedException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . pull Image ( image That DoesNotExist ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠDocker Ġreturns Ġa Ġdifferent Ġerror Ġmessage Ġdepending Ġon Ġwhether Ġor Ġnot Ġthe Ġuser Ġis Ġlogged Ġin Ġto Ġthe Ġsource Ġregistry ĊĠĠĠĠĠĠĠ Ġexception . message ĠshouldBe In Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUser Ġis Ġlogged Ġin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Error Ġresponse Ġfrom Ġdaemon : Ġmanifest Ġfor Ġb ate ct / this - image - does - not - exist : abc 1 2 3 Ġnot Ġfound : Ġmanifest Ġunknown : Ġmanifest Ġunknown ", ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUser Ġis Ġnot Ġlogged Ġin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Error Ġresponse Ġfrom Ġdaemon : Ġpull Ġaccess Ġdenied Ġfor Ġb ate ct / this - image - does - not - exist , Ġrepository Ġdoes Ġnot Ġexist Ġor Ġmay Ġrequire Ġ' docker Ġlogin ': Ġdenied : Ġrequested Ġaccess Ġto Ġthe Ġresource Ġis Ġdenied " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġshould (" fail Ġwhen Ġpulling Ġan Ġimage Ġfor Ġanother Ġplatform "). only If Docker Daemon Present Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage For Other Platform Ġ= Ġwhen Ġ( test Environment Container Operating System ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer Operating System . Linux Ġ-> Ġ" m cr . microsoft . com / windows / nan oser ver : lt sc 2 0 2 2 " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer Operating System . Windows Ġ-> Ġ" gcr . io / dist ro less / static : 0 6 3 a 0 7 9 c 1 a 8 7 bad 3 3 6 9 cb 9 daf 0 5 e 3 7 1 e 9 2 5 c 0 c 9 1 @ sha 2 5 6 : a ade a 1 b 1 f 1 6 af 0 4 3 a 3 4 4 9 1 eec 4 8 1 d 0 1 3 2 4 7 9 3 8 2 0 9 6 ea 3 4 f 6 0 8 0 8 7 b 4 bef 3 6 3 4 be " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġshould Throw < Image Pull FailedException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . pull Image ( image For Other Platform ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Messages Ġ= Ġwhen Ġ( test Environment Container Operating System ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer Operating System . Linux Ġ-> Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" no Ġmatching Ġmanifest Ġfor Ġlinux / amd 6 4 Ġin Ġthe Ġmanifest Ġlist Ġentries ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" no Ġmatching Ġmanifest Ġfor Ġlinux / arm 6 4 / v 8 Ġin Ġthe Ġmanifest Ġlist Ġentries ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" image Ġoperating Ġsystem Ġ\" windows \" Ġcannot Ġbe Ġused Ġon Ġthis Ġplatform " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer Operating System . Windows Ġ-> Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" no Ġmatching Ġmanifest Ġfor Ġwindows / amd 6 4 Ġin Ġthe Ġmanifest Ġlist Ġentries ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" image Ġoperating Ġsystem Ġ\" linux \" Ġcannot Ġbe Ġused Ġon Ġthis Ġplatform " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexception . message ĠshouldBe In Ġexpected Messages ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġshould (" return Ġnull Ġwhen Ġgetting Ġa Ġnon - existent Ġimage "). only If Docker Daemon Present Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage Reference Ġ= Ġclient . getImage ( image That DoesNotExist ) ĊĠĠĠĠĠĠĠ Ġimage Reference ĠshouldBe Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġshould (" fail Ġwhen Ġdeleting Ġa Ġnon - existent Ġimage "). only If Docker Daemon Present Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġshould Throw < Image Deletion FailedException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . delete Image ( Image Reference (" this - image - does - not - exist ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexception . message ĠshouldBe Ġ" No Ġsuch Ġimage : Ġthis - image - does - not - exist " ĊĠĠĠ Ġ} Ċ }) Ċ Ċ internal Ġfun ĠDocker Client . delete Image If Present ( name : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġimage Ġ= ĠgetImage ( name ) ĊĊĠĠĠ Ġif Ġ( image Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelete Image ( image , Ġforce Ġ= Ġtrue ) ĊĠĠĠ Ġ} Ċ } Ċ