From 210835319a16891940b30ead4a8d5e297cde8f29 Mon Sep 17 00:00:00 2001 From: Samaksh Dhingra Date: Wed, 9 Oct 2024 21:32:56 +0000 Subject: [PATCH 1/2] s3tests_boto3/functional/test_s3.py: add test for list object versions with key marker The key-marker parameter in the list-object-versions operation is inclusive in RGW, while it's exclusive in S3. This commit adds the test to check the corresponding case. Issue ref: https://tracker.ceph.com/issues/68055 Fix PR: https://github.com/ceph/ceph/pull/60068 Signed-off-by: Samaksh Dhingra --- s3tests_boto3/functional/test_s3.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/s3tests_boto3/functional/test_s3.py b/s3tests_boto3/functional/test_s3.py index 76fa58510..bf25fb36f 100644 --- a/s3tests_boto3/functional/test_s3.py +++ b/s3tests_boto3/functional/test_s3.py @@ -1450,6 +1450,22 @@ def test_bucket_list_return_data_versioning(): assert obj['VersionId'] == key_data['VersionId'] _compare_dates(obj['LastModified'],key_data['LastModified']) +@pytest.mark.fails_on_dbstore +def test_bucket_list_return_data_versioning_key_marker(): + + bucket_name = get_new_bucket() + check_configure_versioning_retry(bucket_name, "Enabled", "Enabled") + key_names = ['bar', 'baz', 'foo'] + bucket_name = _create_objects(bucket_name=bucket_name,keys=key_names) + + client = get_client() + response = client.list_object_versions(Bucket=bucket_name, KeyMarker='baz') + assert response['KeyMarker'] == 'baz' + assert response['IsTruncated'] == False + + keys = [obj['Key'] for obj in response['Versions']] + assert keys == ['foo'] + def test_bucket_list_objects_anonymous(): bucket_name = get_new_bucket() client = get_client() From d0d0f22cdec9575c679b62efbf7d1d5bc187b241 Mon Sep 17 00:00:00 2001 From: Samaksh Dhingra Date: Fri, 11 Oct 2024 18:28:57 +0000 Subject: [PATCH 2/2] s3tests_boto3/functional/test_s3.py: add test for list object versions with key marker and version id marker, modified key marker test Added test for list object versions with key marker and version id marker. Modified the previous list object versions with key marker test to make it more stronger. Signed-off-by: Samaksh Dhingra --- s3tests_boto3/functional/test_s3.py | 41 ++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/s3tests_boto3/functional/test_s3.py b/s3tests_boto3/functional/test_s3.py index bf25fb36f..0695f432c 100644 --- a/s3tests_boto3/functional/test_s3.py +++ b/s3tests_boto3/functional/test_s3.py @@ -1450,21 +1450,50 @@ def test_bucket_list_return_data_versioning(): assert obj['VersionId'] == key_data['VersionId'] _compare_dates(obj['LastModified'],key_data['LastModified']) -@pytest.mark.fails_on_dbstore def test_bucket_list_return_data_versioning_key_marker(): bucket_name = get_new_bucket() check_configure_versioning_retry(bucket_name, "Enabled", "Enabled") - key_names = ['bar', 'baz', 'foo'] + key_names = ['file1', 'file2', 'file3','file1','file2','file3'] bucket_name = _create_objects(bucket_name=bucket_name,keys=key_names) client = get_client() - response = client.list_object_versions(Bucket=bucket_name, KeyMarker='baz') - assert response['KeyMarker'] == 'baz' + list_object_versions_response = client.list_object_versions(Bucket=bucket_name) + + all_keys=[obj['Key'] for obj in list_object_versions_response['Versions']] + all_version_ids=[obj['VersionId'] for obj in list_object_versions_response['Versions']] + + expected_keys_response=all_keys[4:] + expected_version_ids_response=all_version_ids[4:] + + response = client.list_object_versions(Bucket=bucket_name,KeyMarker='file2') + assert response['KeyMarker'] == 'file2' assert response['IsTruncated'] == False - keys = [obj['Key'] for obj in response['Versions']] - assert keys == ['foo'] + keys_response = [obj['Key'] for obj in response['Versions']] + version_ids_response = [obj['VersionId'] for obj in response['Versions']] + + assert keys_response == expected_keys_response + assert version_ids_response == expected_version_ids_response + +def test_bucket_list_return_data_versioning_version_id_marker(): + + bucket_name = get_new_bucket() + check_configure_versioning_retry(bucket_name, "Enabled", "Enabled") + key_names = ['bar', 'bar', 'bar','baz'] + bucket_name = _create_objects(bucket_name=bucket_name,keys=key_names) + + client = get_client() + list_object_versions_response = client.list_object_versions(Bucket=bucket_name) + all_version_ids=[obj['VersionId'] for obj in list_object_versions_response['Versions']] + + version_id_marker=all_version_ids[1] + expected_version_ids_response=all_version_ids[2:] + + response = client.list_object_versions(Bucket=bucket_name, KeyMarker='bar', VersionIdMarker=version_id_marker) + version_ids_response=[obj['VersionId'] for obj in response['Versions']] + + assert expected_version_ids_response==version_ids_response def test_bucket_list_objects_anonymous(): bucket_name = get_new_bucket()