Procházet zdrojové kódy

Fix multipart abort test for providers that pre-create empty objects

The abort test asserted the target object is absent after abort, which only
holds on AWS, where objects.create() returns a bare handle. GCP, OpenStack
and Azure materialise an empty placeholder on create(), so objects.get()
returns that empty object rather than None.

Assert the provider-agnostic contract instead: after abort the target is
absent or empty, but never holds the uploaded part. Also clean up the
placeholder so bucket teardown does not leak.
Nuwan Goonasekera před 1 dnem
rodič
revize
58ae94ab27
1 změnil soubory, kde provedl 13 přidání a 8 odebrání
  1. 13 8
      tests/test_object_store_service.py

+ 13 - 8
tests/test_object_store_service.py

@@ -312,14 +312,19 @@ class CloudObjectStoreServiceTestCase(ProviderTestBase):
             obj_name = "mpu-abort.bin"
             obj_name = "mpu-abort.bin"
             obj = test_bucket.objects.create(obj_name)
             obj = test_bucket.objects.create(obj_name)
 
 
-            upload = obj.create_multipart_upload()
-            upload.upload_part(1, b"a" * MIN_PART_SIZE)
-            upload.abort()
-
-            # Aborting must not materialise the target object.
-            self.assertIsNone(
-                test_bucket.objects.get(obj_name),
-                "Object should not exist after a multipart upload is aborted")
+            with cb_helpers.cleanup_action(lambda: obj.delete()):
+                upload = obj.create_multipart_upload()
+                upload.upload_part(1, b"a" * MIN_PART_SIZE)
+                upload.abort()
+
+                # Aborting must not commit any part data. Some providers
+                # pre-materialise an empty placeholder on objects.create(), so
+                # the target may be absent or empty afterwards -- but it must
+                # never hold the uploaded part.
+                stored = test_bucket.objects.get(obj_name)
+                self.assertTrue(
+                    stored is None or stored.size == 0,
+                    "Aborted multipart upload must not commit any part data")
 
 
     @helpers.skipIfNoService(['storage.buckets'])
     @helpers.skipIfNoService(['storage.buckets'])
     def test_transparent_upload_large_stream_uses_multipart(self):
     def test_transparent_upload_large_stream_uses_multipart(self):