]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
qa/radosgw_admin: add a testcase to verify use of --marker and --object-version in... wip-oozmen-75831 68163/head
authorOguzhan Ozmen <oozmen@bloomberg.net>
Wed, 1 Apr 2026 17:25:51 +0000 (17:25 +0000)
committerOguzhan Ozmen <oozmen@bloomberg.net>
Thu, 16 Apr 2026 00:00:19 +0000 (00:00 +0000)
Signed-off-by: Oguzhan Ozmen <oozmen@bloomberg.net>
qa/tasks/radosgw_admin.py

index f93b185829cd187f0323e72bf0adeeeb6d14d164..0889dd17bc5525030648140bedca765462b05d50 100644 (file)
@@ -516,6 +516,51 @@ def task(ctx, config):
     assert len(out) >= 1
     assert bucket_name in out;
 
+    # TESTCASE 'bucket-list-versioned','bucket','list','versioned bucket with --object-version marker','succeeds'
+    versioned_bucket_name = bucket_name + '-' + 'versioned'
+    connection.create_bucket(Bucket=versioned_bucket_name)
+    connection.put_bucket_versioning(
+        Bucket=versioned_bucket_name,
+        VersioningConfiguration={'Status': 'Enabled'}
+    )
+
+    # Create exactly 3 versions of a unique object
+    unique_obj_key = 'test-versioned-obj-' + str(int(time.time()))
+    connection.put_object(Bucket=versioned_bucket_name, Key=unique_obj_key, Body=b'version1')
+    connection.put_object(Bucket=versioned_bucket_name, Key=unique_obj_key, Body=b'version2')
+    connection.put_object(Bucket=versioned_bucket_name, Key=unique_obj_key, Body=b'version3')
+
+    # List with marker (name only) and max-entries=3, should get exactly 3 versions
+    (err, out) = rgwadmin(ctx, client, [
+            'bucket', 'list', '--bucket', versioned_bucket_name,
+            '--marker', unique_obj_key,
+            '--max-entries', '3'], check_status=True)
+    assert len(out) == 3, f"Expected exactly 3 versions, got {len(out)}"
+    assert all(v['name'] == unique_obj_key for v in out), "All entries should have the same object name"
+
+    # Now use --marker with --object-version to paginate from the second entry
+    # This should return only the third entry
+    second_instance = out[1]['instance']
+    (err, out2) = rgwadmin(ctx, client, [
+            'bucket', 'list', '--bucket', versioned_bucket_name,
+            '--marker', unique_obj_key,
+            '--object-version', second_instance,
+            '--max-entries', '1'], check_status=True)
+
+    # Should get exactly 1 result, and it should be the third entry from the first list
+    assert len(out2) == 1, f"Expected exactly 1 result, got {len(out2)}"
+    assert out2[0]['name'] == out[2]['name'], "Result should match third entry name"
+    assert out2[0]['instance'] == out[2]['instance'], "Result should match third entry instance"
+
+    # Clean up: delete all versions and the versioned bucket
+    versions = connection.list_object_versions(Bucket=versioned_bucket_name)
+    to_delete = []
+    for v in versions.get('Versions', []):
+        to_delete.append({'Key': v['Key'], 'VersionId': v['VersionId']})
+    if to_delete:
+        connection.delete_objects(Bucket=versioned_bucket_name, Delete={'Objects': to_delete})
+    connection.delete_bucket(Bucket=versioned_bucket_name)
+
     # TESTCASE 'max-bucket-limit,'bucket','create','4 buckets','5th bucket fails due to max buckets == 4'
     connection.create_bucket(Bucket=bucket_name + '2')
     connection.create_bucket(Bucket=bucket_name + '3')