]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
test/rgw/multisite: test error handling of forwarded s3:PutBucketPolicy 63096/head
authorCasey Bodley <cbodley@redhat.com>
Mon, 28 Apr 2025 17:00:00 +0000 (13:00 -0400)
committerCasey Bodley <cbodley@redhat.com>
Fri, 2 May 2025 13:33:42 +0000 (09:33 -0400)
PutBucketPolicy doesn't parse the given policy until after it's
forwarded and applied on the master zone, so add a test that sends a
non-json policy document that will fail to parse

without the fix to rgw_forward_request_to_master(), the InvalidArgument
error Code is still mapped correctly, but the error Message is not
preserved:

>     assert e.response['Error']['Message']
> AssertionError

Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit f8a44d9fa4c50725b036a289591388987a119e46)

src/test/rgw/rgw_multi/tests.py

index 150864c61c3b909d9aa8e76076078b3b8ef4c7ae..1d4ad5d47894fd3ca98106f27609cee7b1adde31 100644 (file)
@@ -2210,6 +2210,27 @@ def test_role_delete_sync():
                       zone.iam_conn.get_role, RoleName=role_name)
         log.info(f'success, zone: {zone.name} does not have role: {role_name}')
 
+def test_forwarded_put_bucket_policy_error():
+    zonegroup = realm.master_zonegroup()
+    zonegroup_conns = ZonegroupConns(zonegroup)
+    primary = zonegroup_conns.rw_zones[0]
+
+    # create a bucket that blocks public policy
+    bucket = gen_bucket_name()
+    primary.create_bucket(bucket)
+    realm_meta_checkpoint(realm)
+
+    # try to write a policy that can't be parsed
+    policy = 'Invalid policy document'
+    try:
+        for zone in zonegroup_conns.rw_zones:
+            e = assert_raises(ClientError, zone.s3_client.put_bucket_policy,
+                              Bucket=bucket, Policy=policy)
+            eq(e.response['Error']['Code'], 'InvalidArgument')
+            assert e.response['Error']['Message']
+    finally:
+        zonegroup_conns.rw_zones[0].delete_bucket(bucket)
+        realm_meta_checkpoint(realm)
 
 def test_replication_status():
     zonegroup = realm.master_zonegroup()