# 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 # # - SSE-C: Server-side encryption with customer-provided keys # - Object ownership: Bucket ownership controls # # Total: 177 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_basic 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_public_acl_bucket_policy_status test_get_authpublic_acl_bucket_policy_status test_get_publicpolicy_acl_bucket_policy_status test_get_nonpublicpolicy_acl_bucket_policy_status test_block_public_put_bucket_acls test_block_public_object_canned_acls test_ignore_public_acls test_set_get_del_bucket_policy 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_get_obj_head_tagging 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 test_api_error_from_storage_error_mappings test_get_object_torrent # Object attributes test_get_checksum_object_attributes # SSE-C encryption tests test_encryption_sse_c_method_head test_encryption_sse_c_present test_encryption_sse_c_other_key test_encryption_sse_c_no_key test_encryption_sse_c_no_md5 test_put_obj_enc_conflict_c_s3 # ListObjectsV2 delimiter and encoding tests test_bucket_list_encoding_basic test_bucket_listv2_delimiter_alt test_bucket_listv2_delimiter_basic test_bucket_listv2_delimiter_dot test_bucket_listv2_delimiter_empty test_bucket_listv2_delimiter_none test_bucket_listv2_delimiter_not_exist test_bucket_listv2_delimiter_percentage test_bucket_listv2_delimiter_prefix_ends_with_delimiter test_bucket_listv2_delimiter_unreadable test_bucket_listv2_delimiter_whitespace test_bucket_listv2_encoding_basic # Multipart and tagging tests test_abort_multipart_upload test_multipart_resend_first_finishes_last test_set_bucket_tagging test_put_excess_key_tags test_put_excess_tags test_put_excess_val_tags # PublicAccessBlock tests test_put_get_delete_public_block test_put_public_block test_block_public_policy test_block_public_policy_with_principal test_get_public_block_deny_bucket_policy test_get_undefined_public_block # Bucket policy tests test_bucketv2_policy test_bucket_policy_acl test_bucketv2_policy_acl test_bucket_policy_another_bucket test_bucket_policy_allow_notprincipal test_bucket_policy_put_obj_acl test_object_presigned_put_object_with_acl test_object_put_acl_mtime # Object ownership test_create_bucket_no_ownership_controls # Bucket encryption test_put_bucket_encryption_kms test_put_bucket_encryption_s3 test_get_bucket_encryption_kms test_get_bucket_encryption_s3 test_delete_bucket_encryption_kms test_delete_bucket_encryption_s3 test_lifecycle_expiration_days0