From c20c235f6135776f4cce6be788fff4116f6df925 Mon Sep 17 00:00:00 2001 From: Jonas Finnemann Jensen Date: Tue, 29 Oct 2024 13:55:18 +0100 Subject: [PATCH 1/2] Tests for garbage collection of package archives in exported API --- .../package/api_export/exported_api_test.dart | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/app/test/package/api_export/exported_api_test.dart b/app/test/package/api_export/exported_api_test.dart index c8d3b11568..54334f8947 100644 --- a/app/test/package/api_export/exported_api_test.dart +++ b/app/test/package/api_export/exported_api_test.dart @@ -96,6 +96,53 @@ void main() { ); } }); + + testWithFakeTime('ExportedApi.garbageCollect()', (fakeTime) async { + await storageService.createBucket('exported-api'); + final bucket = storageService.bucket('exported-api'); + final exportedApi = ExportedApi(storageService, bucket); + + await exportedApi.package('retry').tarball('1.2.3').write([1, 2, 3]); + + await exportedApi.package('retry').tarball('1.2.4').copyFrom( + bucket, + 'latest/api/archives/retry-1.2.3.tar.gz', + ); + + // Files are present + expect( + await bucket.readBytes('latest/api/archives/retry-1.2.3.tar.gz'), + [1, 2, 3], + ); + expect( + await bucket.readBytes('latest/api/archives/retry-1.2.4.tar.gz'), + [1, 2, 3], + ); + + // Nothing is GC'ed after 10 mins + fakeTime.elapseSync(minutes: 10); + await exportedApi.package('retry').garbageCollect({'1.2.3'}); + expect( + await bucket.readBytes('latest/api/archives/retry-1.2.3.tar.gz'), + [1, 2, 3], + ); + expect( + await bucket.readBytes('latest/api/archives/retry-1.2.4.tar.gz'), + [1, 2, 3], + ); + + // Something is GC'ed after 2 days + fakeTime.elapseSync(days: 2); + await exportedApi.package('retry').garbageCollect({'1.2.3'}); + expect( + await bucket.readBytes('latest/api/archives/retry-1.2.3.tar.gz'), + [1, 2, 3], + ); + expect( + await bucket.readBytes('latest/api/archives/retry-1.2.4.tar.gz'), + isNull, + ); + }); } extension on Bucket { From 20b7e3e53a9050e39239b6a9a58e3c7eff69a174 Mon Sep 17 00:00:00 2001 From: Jonas Finnemann Jensen Date: Tue, 29 Oct 2024 15:35:58 +0100 Subject: [PATCH 2/2] Fix test --- app/lib/package/api_export/exported_api.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/package/api_export/exported_api.dart b/app/lib/package/api_export/exported_api.dart index ed76107165..9a143c2791 100644 --- a/app/lib/package/api_export/exported_api.dart +++ b/app/lib/package/api_export/exported_api.dart @@ -233,7 +233,7 @@ final class ExportedPackage { Future garbageCollect(Set allVersionNumbers) async { await Future.wait([ ..._owner._prefixes.map((prefix) async { - final pfx = '/api/archives/$_package-'; + final pfx = prefix + '/api/archives/$_package-'; await _owner._listBucket(prefix: pfx, delimiter: '', (item) async { assert(item.isObject); if (!item.name.endsWith('.tar.gz')) {