# Implemented S3 feature tests # ============================ # # These tests SHOULD PASS on RustFS for standard S3 API compatibility. # Run these tests to verify RustFS S3 compatibility. # # Covered operations: # - Bucket: Create, Delete, List, Head, GetLocation # - Object: Put, Get, Delete, Copy, Head # - ListObjects/ListObjectsV2: prefix, delimiter, marker, maxkeys # - Multipart Upload: Create, Upload, Complete, Abort, List # - Tagging: Bucket and Object tags # - Bucket Policy: Put, Get, Delete # - Public Access Block: Put, Get, Delete # - Presigned URLs: GET and PUT operations # - Range requests: Partial object retrieval # - Metadata: User-defined metadata # - Conditional GET: If-Match, If-None-Match, If-Modified-Since # # Total: 118 tests test_basic_key_count test_bucket_create_naming_bad_short_one test_bucket_create_naming_bad_short_two test_bucket_create_naming_bad_starts_nonalpha test_bucket_create_naming_dns_dash_at_end test_bucket_create_naming_dns_dash_dot test_bucket_create_naming_dns_dot_dash test_bucket_create_naming_dns_dot_dot test_bucket_create_naming_dns_underscore test_bucket_create_naming_good_contains_hyphen test_bucket_create_naming_good_contains_period test_bucket_create_naming_good_long_60 test_bucket_create_naming_good_long_61 test_bucket_create_naming_good_long_62 test_bucket_create_naming_good_long_63 test_bucket_create_naming_good_starts_alpha test_bucket_create_naming_good_starts_digit test_bucket_delete_nonempty test_bucket_delete_notexist test_bucket_head test_bucket_head_notexist test_bucket_list_distinct test_bucket_list_empty test_bucket_list_long_name test_bucket_list_marker_after_list test_bucket_list_marker_empty test_bucket_list_marker_none test_bucket_list_marker_not_in_list test_bucket_list_marker_unreadable test_bucket_list_maxkeys_invalid test_bucket_list_maxkeys_none test_bucket_list_maxkeys_zero test_bucket_list_prefix_alt test_bucket_list_prefix_basic test_bucket_list_prefix_delimiter_alt test_bucket_list_prefix_delimiter_basic test_bucket_list_prefix_delimiter_delimiter_not_exist test_bucket_list_prefix_delimiter_prefix_delimiter_not_exist test_bucket_list_prefix_delimiter_prefix_not_exist test_bucket_list_prefix_empty test_bucket_list_prefix_none test_bucket_list_prefix_not_exist test_bucket_list_prefix_unreadable test_bucket_list_special_prefix test_bucket_list_delimiter_alt test_bucket_list_delimiter_dot test_bucket_list_delimiter_empty test_bucket_list_delimiter_none test_bucket_list_delimiter_not_exist test_bucket_list_delimiter_percentage test_bucket_list_delimiter_prefix_ends_with_delimiter test_bucket_list_delimiter_unreadable test_bucket_list_delimiter_whitespace test_bucket_listv2_continuationtoken test_bucket_listv2_continuationtoken_empty test_bucket_listv2_fetchowner_defaultempty test_bucket_listv2_fetchowner_empty test_bucket_listv2_fetchowner_notempty test_bucket_listv2_maxkeys_none test_bucket_listv2_maxkeys_zero test_bucket_listv2_prefix_alt test_bucket_listv2_prefix_basic test_bucket_listv2_prefix_delimiter_alt test_bucket_listv2_prefix_delimiter_basic test_bucket_listv2_prefix_delimiter_delimiter_not_exist test_bucket_listv2_prefix_delimiter_prefix_delimiter_not_exist test_bucket_listv2_prefix_delimiter_prefix_not_exist test_bucket_listv2_prefix_empty test_bucket_listv2_prefix_none test_bucket_listv2_prefix_not_exist test_bucket_listv2_prefix_unreadable test_bucket_listv2_startafter_after_list test_bucket_listv2_startafter_not_in_list test_bucket_listv2_startafter_unreadable test_bucket_notexist test_buckets_create_then_list test_buckets_list_ctime test_bucketv2_notexist test_bucketv2_policy_another_bucket test_get_bucket_policy_status test_get_nonpublicpolicy_principal_bucket_policy_status test_get_object_ifmatch_good test_get_object_ifmodifiedsince_good test_get_object_ifunmodifiedsince_failed test_list_buckets_bad_auth test_multi_object_delete test_multi_object_delete_key_limit test_multi_objectv2_delete test_multi_objectv2_delete_key_limit test_multipart_copy_without_range test_multipart_upload_empty test_multipart_upload_incorrect_etag test_multipart_upload_missing_part test_multipart_upload_multiple_sizes test_multipart_upload_on_a_bucket_with_policy test_multipart_upload_overwrite_existing_object test_multipart_upload_size_too_small test_object_copy_bucket_not_found test_object_copy_key_not_found test_object_copy_not_owned_object_bucket test_object_head_zero_bytes test_object_metadata_replaced_on_put test_object_put_authenticated test_object_read_not_exist test_object_set_get_metadata_none_to_empty test_object_set_get_metadata_none_to_good test_object_set_get_metadata_overwrite_to_empty test_object_write_cache_control test_object_write_check_etag test_object_write_expires test_object_write_file test_object_write_read_update_read_delete test_object_write_to_nonexist_bucket test_put_max_kvsize_tags test_ranged_request_empty_object test_ranged_request_invalid_range test_set_multipart_tagging test_upload_part_copy_percent_encoded_key