package Ġcom . sh ere pen ko . android . arch ivari us . tasks Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . test . core . app . Application Provider . getApplicationContext Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġcom . sh ere pen ko . android . arch ivari us . rules . Arch ivari us Test Rule Ċ import Ġcom . sh ere pen ko . android . arch ivari us . utils . Arch ivari us TestUtils Ċ import Ġcom . sh ere pen ko . android . arch ivari us . utils . Arch ivari us TestUtils . new LogFile Ċ import Ġcom . sh ere pen ko . android . arch ivari us . utils . Arch ivari us Utils Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . util . Calendar Ċ import Ġjava . util . Random Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Assert . fail Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠCleanup Task Test Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTEST _ LOG _ SIZE Ġ= Ġ 1 0 0 0 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTEST _ LOG S _ COUNT Ġ= Ġ 3 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠR AN DOM Ġ= ĠRandom () ĊĊĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Log Files ( log Dir : ĠFile , ĠcurrentTime : ĠLong ): ĠList < File > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Files Ġ= Ġmutable ListOf < File >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelay Ġ= ĠTimeUnit . DAYS . to Millis ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠByteArray ( TEST _ LOG _ SIZE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR AN DOM . next Bytes ( content ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil ĠTEST _ LOG S _ COUNT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Modified Ġ= ĠcurrentTime Ġ- Ġi Ġ* Ġdelay ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog FileName Ġ= ĠArch ivari us Utils . build Log FileName (" test -$ i ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog File Ġ= Ġnew LogFile ( log Dir , Ġlog FileName , Ġcontent , Ġlast Modified ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( log File . exists ()). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( log File . lastModified ()). isEqualTo ( lastModified ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( log File . length ()). isEqualTo ( TEST _ LOG _ SIZE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Files . add ( log File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlog Files ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġval Ġarch ivari us Rule Ġ= ĠArch ivari us Test Rule ( ĊĠĠĠĠĠĠĠ Ġget ApplicationContext (), ĊĠĠĠĠĠĠĠ ĠArch ivari us Test Rule . Mode . THROW ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlog Dir : ĠFile ĊĊĠĠĠ Ġprivate Ġvar ĠcurrentTime : ĠLong Ġ= Ġ 0 L ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠArch ivari us TestUtils . setDefault TimeZone () ĊĊĠĠĠĠĠĠĠ Ġlog Dir Ġ= Ġget ApplicationContext < Context >(). files Dir ĊĊĠĠĠĠĠĠĠ ĠcurrentTime Ġ= ĠCalendar . getInstance (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set ( Calendar . MILLI SECOND , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ}. time In Millis ĊĊĠĠĠĠĠĠĠ Ġcreate Log Files ( log Dir , ĠcurrentTime ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( log Dir . list Files ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. asList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Size ( TEST _ LOG S _ COUNT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġlog Dir . list Files ()?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Cleanup Only When MaxSize Exceeded () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax Allowed Size Ġ= Ġ( TEST _ LOG _ SIZE Ġ* Ġ( TEST _ LOG S _ COUNT Ġ- Ġ 1 )). to Long () ĊĠĠĠĠĠĠĠ Ġval Ġlog File Ġ= ĠFile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Dir , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArch ivari us Utils . build Log FileName (" test -${ ( TEST _ LOG S _ COUNT Ġ- Ġ 1 )} ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( log File . exists ()). isTrue () ĊĠĠĠĠĠĠĠ ĠassertThat ( log Dir . list Files ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. asList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Size ( TEST _ LOG S _ COUNT ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= ĠCleanup Task ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ApplicationContext (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Dir , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Allowed Size ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġtask . call () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( log Dir . list Files ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. asList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Size ( TEST _ LOG S _ COUNT Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( log File . exists ()). isFalse () ĊĊĠĠĠĠĠĠĠ Ġtask . call () ĊĠĠĠĠĠĠĠ ĠassertThat ( log Dir . list Files ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. asList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Size ( TEST _ LOG S _ COUNT Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Not Delete Current Log () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlog File Ġ= ĠFile ( log Dir , ĠArch ivari us Utils . build Log FileName (" test - 0 ")) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( log File . exists ()). isTrue () ĊĠĠĠĠĠĠĠ ĠassertThat ( log Dir . list Files ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. asList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Size ( TEST _ LOG S _ COUNT ) ĊĊĠĠĠĠĠĠĠ ĠCleanup Task ( getApplicationContext (), Ġlog Dir , ĠSystem . currentTimeMillis (), Ġ 0 L ). call () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( log Dir . list Files ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. asList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Size ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( log File . exists ()). isTrue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Cleanup All Out dated Files () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( log Dir . list Files ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. asList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Size ( TEST _ LOG S _ COUNT ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠMake Ġall Ġlogs Ġold Ġenough Ġfor Ġcleanup ĊĠĠĠĠĠĠĠ Ġlog Dir . list Files () !!. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . set LastModified ( 0 )). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠCleanup Task ( getApplicationContext (), Ġlog Dir , ĠcurrentTime , Ġ 0 L ). call () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( log Dir . list Files ()). isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Ignore File As Parameter () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( log Dir . list Files ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. asList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Size ( TEST _ LOG S _ COUNT ) ĊĊĠĠĠĠĠĠĠ Ġlog Dir . list Files () !!. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCleanup Task ( getApplicationContext (), Ġit , ĠcurrentTime , Ġ 0 L ). call () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" not Ġreported ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠAssertionError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . cause ). isInstanceOf ( IllegalStateException :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Ignore Non existent Dirs () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠFile ( log Dir , Ġ" device _ logs ") ĊĠĠĠĠĠĠĠ ĠassertThat ( dir . exists ()). isFalse () ĊĊĠĠĠĠĠĠĠ ĠCleanup Task ( getApplicationContext (), Ġdir , ĠcurrentTime , Ġ 1 ). call () ĊĠĠĠĠĠĠĠ ĠassertThat ( dir . exists ()). isFalse () ĊĠĠĠ Ġ} Ċ } Ċ