From 962084ded0af2a1eb5875111cb239def423bbf88 Mon Sep 17 00:00:00 2001 From: Alistair Coles Date: Fri, 30 May 2025 14:32:02 +0100 Subject: [PATCH] s3 compat tests: sanitize object listings Swift does not return all the parameters of objects in a listing (e.g. ChecksumType and ChecksumAlgorithm) so pop these from listings before making assertions. Change-Id: Ieb7a9783731c11f1c08db398eae07ffafa127460 --- test/s3api/test_versioning.py | 62 ++++++++++++++++------------------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/test/s3api/test_versioning.py b/test/s3api/test_versioning.py index 01c242ff45..9148a11d47 100644 --- a/test/s3api/test_versioning.py +++ b/test/s3api/test_versioning.py @@ -41,6 +41,14 @@ class TestObjectVersioning(BaseS3TestCase): maxDiff = None + def _sanitize_obj_listing(self, obj): + # there's some object listing parameters that are not deterministic + obj.pop('LastModified') + obj.pop('Owner', None) + # there's some object listing parameters that Swift doesn't return, + obj.pop('ChecksumAlgorithm', None) + obj.pop('ChecksumType', None) + def setUp(self): self.client = self.get_s3_client(1) self.bucket_name = self.create_name('versioning') @@ -132,7 +140,7 @@ class TestObjectVersioning(BaseS3TestCase): resp = self.client.list_objects_v2(Bucket=self.bucket_name) objs = resp.get('Contents', []) for obj in objs: - obj.pop('LastModified') + self._sanitize_obj_listing(obj) self.assertEqual([{ 'ETag': '"%s"' % obj_etag, 'Key': obj_name, @@ -144,8 +152,7 @@ class TestObjectVersioning(BaseS3TestCase): resp = self.client.list_object_versions(Bucket=self.bucket_name) objs = resp.get('Versions', []) for obj in objs: - obj.pop('LastModified') - obj.pop('Owner') + self._sanitize_obj_listing(obj) obj.pop('VersionId') self.assertEqual([{ 'ETag': '"%s"' % obj_etag, @@ -165,7 +172,7 @@ class TestObjectVersioning(BaseS3TestCase): resp = self.client.list_objects_v2(Bucket=self.bucket_name) objs = resp.get('Contents', []) for obj in objs: - obj.pop('LastModified') + self._sanitize_obj_listing(obj) self.assertEqual([{ 'ETag': '"%s"' % new_obj_etag, 'Key': obj_name, @@ -177,8 +184,7 @@ class TestObjectVersioning(BaseS3TestCase): resp = self.client.list_object_versions(Bucket=self.bucket_name) objs = resp.get('Versions', []) for obj in objs: - obj.pop('LastModified') - obj.pop('Owner') + self._sanitize_obj_listing(obj) obj.pop('VersionId') self.assertEqual([{ 'ETag': '"%s"' % new_obj_etag, @@ -207,7 +213,7 @@ class TestObjectVersioning(BaseS3TestCase): resp = self.client.list_objects_v2(Bucket=self.bucket_name) objs = resp.get('Contents', []) for obj in objs: - obj.pop('LastModified') + self._sanitize_obj_listing(obj) self.assertEqual([{ 'ETag': '"%s"' % etags[0], 'Key': obj_name, @@ -220,8 +226,7 @@ class TestObjectVersioning(BaseS3TestCase): objs = resp.get('Versions', []) versions = [] for obj in objs: - obj.pop('LastModified') - obj.pop('Owner') + self._sanitize_obj_listing(obj) versions.append(obj.pop('VersionId')) self.assertEqual([{ 'ETag': '"%s"' % etags[0], @@ -252,8 +257,7 @@ class TestObjectVersioning(BaseS3TestCase): resp = self.client.list_object_versions(Bucket=self.bucket_name) objs = resp.get('Versions', []) for obj in objs: - obj.pop('LastModified') - obj.pop('Owner') + self._sanitize_obj_listing(obj) obj.pop('VersionId') self.assertEqual([{ 'ETag': '"%s"' % etags[0], @@ -273,7 +277,7 @@ class TestObjectVersioning(BaseS3TestCase): resp = self.client.list_objects_v2(Bucket=self.bucket_name) objs = resp.get('Contents', []) for obj in objs: - obj.pop('LastModified') + self._sanitize_obj_listing(obj) self.assertEqual([{ 'ETag': '"%s"' % etags[0], 'Key': obj_name, @@ -291,8 +295,7 @@ class TestObjectVersioning(BaseS3TestCase): resp = self.client.list_object_versions(Bucket=self.bucket_name) objs = resp.get('Versions', []) for obj in objs: - obj.pop('LastModified') - obj.pop('Owner') + self._sanitize_obj_listing(obj) obj.pop('VersionId') self.assertEqual([{ 'ETag': '"%s"' % etags[2], @@ -306,7 +309,7 @@ class TestObjectVersioning(BaseS3TestCase): resp = self.client.list_objects_v2(Bucket=self.bucket_name) objs = resp.get('Contents', []) for obj in objs: - obj.pop('LastModified') + self._sanitize_obj_listing(obj) self.assertEqual([{ 'ETag': '"%s"' % etags[2], 'Key': obj_name, @@ -335,8 +338,7 @@ class TestObjectVersioning(BaseS3TestCase): objs = resp.get('Versions', []) versions = [] for obj in objs: - obj.pop('LastModified') - obj.pop('Owner') + self._sanitize_obj_listing(obj) versions.append(obj.pop('VersionId')) self.assertEqual([{ 'ETag': '"%s"' % etag, @@ -349,8 +351,7 @@ class TestObjectVersioning(BaseS3TestCase): delete_markers = resp.get('DeleteMarkers', []) marker_versions = [] for marker in delete_markers: - marker.pop('LastModified') - marker.pop('Owner') + self._sanitize_obj_listing(marker) marker_versions.append(marker.pop('VersionId')) self.assertEqual([{ 'Key': obj_name, @@ -398,8 +399,7 @@ class TestObjectVersioning(BaseS3TestCase): resp = self.client.list_object_versions(Bucket=self.bucket_name) delete_markers = resp.get('DeleteMarkers', []) for marker in delete_markers: - marker.pop('LastModified') - marker.pop('Owner') + self._sanitize_obj_listing(marker) self.assertEqual([{ 'Key': obj_name, 'IsLatest': True, @@ -437,8 +437,7 @@ class TestObjectVersioning(BaseS3TestCase): objs = resp.get('Versions', []) versions = [] for obj in objs: - obj.pop('LastModified') - obj.pop('Owner') + self._sanitize_obj_listing(obj) versions.append(obj.pop('VersionId')) self.assertEqual([{ 'ETag': obj_etag, @@ -476,8 +475,7 @@ class TestObjectVersioning(BaseS3TestCase): markers = resp.get('DeleteMarkers', []) for marker in markers: - marker.pop('LastModified') - marker.pop('Owner') + self._sanitize_obj_listing(marker) self.assertEqual([{ 'IsLatest': True, 'Key': obj_name, @@ -498,8 +496,7 @@ class TestObjectVersioning(BaseS3TestCase): objs = resp.get('Versions', []) versions = [] for obj in objs: - obj.pop('LastModified') - obj.pop('Owner') + self._sanitize_obj_listing(obj) versions.append(obj.pop('VersionId')) self.assertEqual([{ 'ETag': '"%s"' % etags[0], @@ -672,15 +669,15 @@ class TestObjectVersioning(BaseS3TestCase): resp = self.client.list_objects(Bucket=self.bucket_name) objs = resp.get('Contents', []) for obj in objs: - obj.pop('LastModified') + owner = obj.pop('Owner') + self._sanitize_obj_listing(obj) # one difference seems to be the Owner key - self.assertEqual({'DisplayName', 'ID'}, - set(obj.pop('Owner').keys())) + self.assertEqual({'DisplayName', 'ID'}, set(owner.keys())) self.assertEqual(expected, objs) resp = self.client.list_objects_v2(Bucket=self.bucket_name) objs = resp.get('Contents', []) for obj in objs: - obj.pop('LastModified') + self._sanitize_obj_listing(obj) self.assertEqual(expected, objs) # versioned listings has something for everyone @@ -701,8 +698,7 @@ class TestObjectVersioning(BaseS3TestCase): objs = resp.get('Versions', []) versions = [] for obj in objs: - obj.pop('LastModified') - obj.pop('Owner') + self._sanitize_obj_listing(obj) versions.append(obj.pop('VersionId')) self.assertEqual(expected, objs)