/* ĊĠĠĠ ĠCopyright Ġ 2 0 1 7 - 2 0 2 2 Ġ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 Ċ Ċ import Ġb ate ct . cli . CommandLine Options Ċ import Ġb ate ct . config . Project Paths Ċ import Ġb ate ct . docker . client . Docker Container Type Ċ import Ġb ate ct . test utils . create ForEach Test Ċ import Ġb ate ct . test utils . equalTo Ċ import Ġb ate ct . test utils . given Ċ import Ġb ate ct . test utils . run ForEach Test Ċ 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 . assertion . assertThat Ċ import Ġcom . nat pr y ce . ham k rest . matches Ċ import Ġorg . mockito . kotlin . do Return Ċ import Ġorg . mockito . kotlin . mock Ċ import Ġorg . mockito . kotlin . 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 Ċ Ċ object ĠCache Manager Spec Ġ: ĠSpe k ({ ĊĠĠĠ Ġdescribe (" a Ġcache Ġmanager ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile System Ġby Ġcreate ForEach Test Ġ{ ĠJim fs . new FileSystem ( Configuration . unix ()) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcaches DirectoryPath Ġby Ġcreate ForEach Test Ġ{ Ġfile System . getPath ("/ . b ate ct / cache s ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcache Key Path Ġby Ġcreate ForEach Test Ġ{ Ġcaches DirectoryPath . resolve (" key ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġproject Paths Ġby Ġcreate ForEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock < Project Paths > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġcache Directory Ġ} Ġdo Return Ġcaches DirectoryPath ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcommand Line Options Ġby Ġcreate ForEach Test Ġ{ Ġmock < CommandLine Options >() Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescribe (" getting Ġthe Ġproject Ġcache Ġkey ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Manager Ġby Ġcreate ForEach Test Ġ{ ĠCache Manager ( project Paths , ĠDocker Container Type . Linux , Ġcommand Line Options ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgiven (" the Ġcaches Ġdirectory Ġdoes Ġnot Ġexist ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Key Ġby Ġrun ForEach Test Ġ{ Ġcache Manager . project CacheKey Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" gener ates Ġa Ġcache Ġkey Ġin Ġthe Ġexpected Ġformat ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( cacheKey , Ġmatches (""" ^[ a - z 0 - 9 ]{ 6 }$ """. to Regex ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" writes Ġthe Ġcache Ġkey Ġto Ġthe Ġcache Ġkey Ġfile ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . read All Bytes ( cacheKey Path ). toString ( Charsets . UTF _ 8 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠequalTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"# ĠThis Ġfile Ġwas Ġautogenerated Ġby ĠB ate ct Ġto Ġtrack Ġwhich ĠDocker Ġvolumes Ġare Ġassociated Ġwith Ġthis Ġproject .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"# ĠDo Ġnot Ġmodify Ġit , Ġand Ġdo Ġnot Ġcommit Ġit Ġto Ġsource Ġcontrol .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgiven (" the Ġcaches Ġdirectory Ġexists ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . create Directories ( cache s DirectoryPath ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgiven (" the Ġcache Ġkey Ġfile Ġalready Ġexists ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . write ( cacheKey Path , Ġ"# ĠA Ġcomment \ nt he - cache - key - on - disk \ n ". toByteArray ( Charsets . UTF _ 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" returns Ġthe Ġcache Ġkey Ġfrom Ġthe Ġcache Ġkey Ġfile ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( cache Manager . project CacheKey , ĠequalTo (" the - cache - key - on - disk ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgiven (" the Ġcache Ġkey Ġfile Ġdoes Ġnot Ġalready Ġexist ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Key Ġby Ġrun ForEach Test Ġ{ Ġcache Manager . project CacheKey Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" gener ates Ġa Ġcache Ġkey Ġin Ġthe Ġexpected Ġformat ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( cacheKey , Ġmatches (""" ^[ a - z 0 - 9 ]{ 6 }$ """. to Regex ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" writes Ġthe Ġcache Ġkey Ġto Ġthe Ġcache Ġkey Ġfile ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . read All Bytes ( cacheKey Path ). toString ( Charsets . UTF _ 8 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠequalTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"# ĠThis Ġfile Ġwas Ġautogenerated Ġby ĠB ate ct Ġto Ġtrack Ġwhich ĠDocker Ġvolumes Ġare Ġassociated Ġwith Ġthis Ġproject .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"# ĠDo Ġnot Ġmodify Ġit , Ġand Ġdo Ġnot Ġcommit Ġit Ġto Ġsource Ġcontrol .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescribe (" getting Ġthe Ġcache Ġtype Ġto Ġuse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgiven (" Linux Ġcontainers Ġare Ġbeing Ġused ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbeforeEach Test Ġ{ Ġwhenever ( command Line Options . cache Type ) Ġdo Return ĠCache Type . Volume Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Manager Ġby Ġcreate ForEach Test Ġ{ ĠCache Manager ( project Paths , ĠDocker Container Type . Linux , Ġcommand Line Options ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" returns Ġthe Ġcache Ġtype Ġspecified Ġon Ġthe Ġcommand Ġline ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( cache Manager . cache Type , ĠequalTo ( Cache Type . Volume )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgiven (" Windows Ġcontainers Ġare Ġbeing Ġused ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Manager Ġby Ġcreate ForEach Test Ġ{ ĠCache Manager ( project Paths , ĠDocker Container Type . Windows , Ġcommand Line Options ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" always Ġuses Ġdirectory Ġcaches ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( cache Manager . cache Type , ĠequalTo ( Cache Type . Directory )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ