@@ -96,6 +96,53 @@ void main() {
9696 );
9797 }
9898 });
99+
100+ testWithFakeTime ('ExportedApi.garbageCollect()' , (fakeTime) async {
101+ await storageService.createBucket ('exported-api' );
102+ final bucket = storageService.bucket ('exported-api' );
103+ final exportedApi = ExportedApi (storageService, bucket);
104+
105+ await exportedApi.package ('retry' ).tarball ('1.2.3' ).write ([1 , 2 , 3 ]);
106+
107+ await exportedApi.package ('retry' ).tarball ('1.2.4' ).copyFrom (
108+ bucket,
109+ 'latest/api/archives/retry-1.2.3.tar.gz' ,
110+ );
111+
112+ // Files are present
113+ expect (
114+ await bucket.readBytes ('latest/api/archives/retry-1.2.3.tar.gz' ),
115+ [1 , 2 , 3 ],
116+ );
117+ expect (
118+ await bucket.readBytes ('latest/api/archives/retry-1.2.4.tar.gz' ),
119+ [1 , 2 , 3 ],
120+ );
121+
122+ // Nothing is GC'ed after 10 mins
123+ fakeTime.elapseSync (minutes: 10 );
124+ await exportedApi.package ('retry' ).garbageCollect ({'1.2.3' });
125+ expect (
126+ await bucket.readBytes ('latest/api/archives/retry-1.2.3.tar.gz' ),
127+ [1 , 2 , 3 ],
128+ );
129+ expect (
130+ await bucket.readBytes ('latest/api/archives/retry-1.2.4.tar.gz' ),
131+ [1 , 2 , 3 ],
132+ );
133+
134+ // Something is GC'ed after 2 days
135+ fakeTime.elapseSync (days: 2 );
136+ await exportedApi.package ('retry' ).garbageCollect ({'1.2.3' });
137+ expect (
138+ await bucket.readBytes ('latest/api/archives/retry-1.2.3.tar.gz' ),
139+ [1 , 2 , 3 ],
140+ );
141+ expect (
142+ await bucket.readBytes ('latest/api/archives/retry-1.2.4.tar.gz' ),
143+ isNull,
144+ );
145+ });
99146}
100147
101148extension on Bucket {
0 commit comments