From 8e325c79e569e2a4b0a1325be2a1be28e78a66b6 Mon Sep 17 00:00:00 2001 From: Denis Kirillov <d.kirillov@yadro.com> Date: Fri, 22 Nov 2024 11:49:26 +0300 Subject: [PATCH] [#6] Add new 'tests' command Signed-off-by: Denis Kirillov <d.kirillov@yadro.com> --- README.md | 13 + cmd/parser/modules/compatibility.go | 14 +- cmd/parser/modules/root.go | 3 + cmd/parser/modules/tests.go | 75 ++ go.mod | 2 +- internal/s3/resources/tests-struct.json | 922 ++++++++++++------------ 6 files changed, 562 insertions(+), 467 deletions(-) create mode 100644 cmd/parser/modules/tests.go diff --git a/README.md b/README.md index 9c596ba..61d2d25 100644 --- a/README.md +++ b/README.md @@ -21,3 +21,16 @@ You can also use json ```shell $ ./bin/s3-tests-parser compatibility tests/fixture/suite.json --format json --output-format md --output result.md ``` + +## Tests to check + +You can see all tests that will be checked during `compatibility` command by using: +```shell +$ ./bin/s3-tests-parser tests --output tests.txt +``` + +Output file now contains tests and can be provided as parameter for running [s3-tests](https://git.frostfs.info/TrueCloudLab/s3-tests): + +```shell +S3TEST_CONF=your.conf tox -- @tests.txt +``` diff --git a/cmd/parser/modules/compatibility.go b/cmd/parser/modules/compatibility.go index e404a3b..807f97c 100644 --- a/cmd/parser/modules/compatibility.go +++ b/cmd/parser/modules/compatibility.go @@ -21,7 +21,8 @@ var compatibilityCmd = &cobra.Command{ Example: `s3-tests-parser compatibility suite.csv s3-tests-parser compatibility suite.json --format json s3-tests-parser compatibility suite.json --format json --output-format md -s3-tests-parser compatibility suite.json --format json --output-format md --output result.md`, +s3-tests-parser compatibility suite.json --format json --output-format md --output result.md +s3-tests-parser compatibility suite.json --format json --output-format txt --output result.txt --verbose`, RunE: runCompatibilityCmd, } @@ -149,10 +150,15 @@ func formTestResult(group s3.Group, testsMap map[string]bool) TestResult { var failed []string var passed []string for _, test := range group.Tests { - if testsMap[test] { - passed = append(passed, test) + split := strings.Split(test, "::") // to trim test path + if len(split) != 2 { + continue + } + testName := split[1] + if testsMap[testName] { + passed = append(passed, testName) } else { - failed = append(failed, test) + failed = append(failed, testName) } } diff --git a/cmd/parser/modules/root.go b/cmd/parser/modules/root.go index 5d68a46..09cee5a 100644 --- a/cmd/parser/modules/root.go +++ b/cmd/parser/modules/root.go @@ -45,4 +45,7 @@ GoVersion: {{ runtimeVersion }} rootCmd.AddCommand(compatibilityCmd) initCompatibilityCmd() + + rootCmd.AddCommand(testsCmd) + initTestsCmd() } diff --git a/cmd/parser/modules/tests.go b/cmd/parser/modules/tests.go new file mode 100644 index 0000000..b79f9be --- /dev/null +++ b/cmd/parser/modules/tests.go @@ -0,0 +1,75 @@ +package modules + +import ( + "fmt" + "os" + "slices" + "sort" + + "git.frostfs.info/TrueCloudLab/s3-tests-parser/internal/s3" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +var testsCmd = &cobra.Command{ + Use: "tests", + Short: "Print tests to check", + Long: "Print all tests that will be checked by 'compatibility' command", + Example: `s3-tests-parser tests +s3-tests-parser tests --output tests.txt`, + RunE: runTestsCmd, +} + +func initTestsCmd() { + testsCmd.Flags().String(outputFlag, "", "file to write output, if missed the stdout is used") +} + +func runTestsCmd(cmd *cobra.Command, _ []string) error { + testStruct, err := s3.ParseTestsStruct() + if err != nil { + return err + } + + var tests []string + + groupTests := make(map[string][]string) + for _, group := range testStruct.Groups { + groupTests[group.Name] = group.Tests + } + + for _, group := range testStruct.Groups { + if group.Skip { + continue + } + + tests = append(tests, group.Tests...) + for _, include := range group.Include { + tests = append(tests, groupTests[include]...) + } + } + + sort.Strings(tests) + tests = slices.Compact(tests) + + return printTests(cmd, tests) +} + +func printTests(cmd *cobra.Command, res []string) error { + w := cmd.OutOrStdout() + if outFile := viper.GetString(outputFlag); outFile != "" { + f, err := os.Create(outFile) + if err != nil { + return fmt.Errorf("create out file: %w", err) + } + w = f + defer f.Close() + } + + for i := range res { + if _, err := fmt.Fprintln(w, res[i]); err != nil { + return err + } + } + + return nil +} diff --git a/go.mod b/go.mod index 9f07aab..b578f6d 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module git.frostfs.info/TrueCloudLab/s3-tests-parser -go 1.20 +go 1.22 require ( github.com/spf13/cobra v1.7.0 diff --git a/internal/s3/resources/tests-struct.json b/internal/s3/resources/tests-struct.json index db1eec2..339124f 100644 --- a/internal/s3/resources/tests-struct.json +++ b/internal/s3/resources/tests-struct.json @@ -4,10 +4,10 @@ "name": "AbortMultipartUpload", "tag": "API", "tests": [ - "test_abort_multipart_upload", - "test_abort_multipart_upload_not_found", - "test_atomic_multipart_upload_write", - "test_list_multipart_upload" + "s3tests_boto3/functional/test_s3.py::test_abort_multipart_upload", + "s3tests_boto3/functional/test_s3.py::test_abort_multipart_upload_not_found", + "s3tests_boto3/functional/test_s3.py::test_atomic_multipart_upload_write", + "s3tests_boto3/functional/test_s3.py::test_list_multipart_upload" ], "skip": false, "comment": "" @@ -16,23 +16,23 @@ "name": "CompleteMultipartUpload", "tag": "API", "tests": [ - "test_object_copy_versioning_multipart_upload", - "test_multipart_upload_empty", - "test_multipart_upload_multiple_sizes", - "test_multipart_upload_size_too_small", - "test_multipart_upload_contents", - "test_multipart_upload_overwrite_existing_object", - "test_multipart_upload_missing_part", - "test_multipart_upload_incorrect_etag", - "test_versioning_obj_create_overwrite_multipart", - "test_versioning_bucket_multipart_upload_return_version_id", - "test_multipart_copy_small", - "test_multipart_copy_invalid_range", - "test_multipart_copy_improper_range", - "test_multipart_copy_without_range", - "test_multipart_copy_special_names", - "test_multipart_copy_versioned", - "test_multipart_copy_multiple_sizes" + "s3tests_boto3/functional/test_s3.py::test_object_copy_versioning_multipart_upload", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_empty", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_multiple_sizes", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_size_too_small", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_contents", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_overwrite_existing_object", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_missing_part", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_incorrect_etag", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_create_overwrite_multipart", + "s3tests_boto3/functional/test_s3.py::test_versioning_bucket_multipart_upload_return_version_id", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_small", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_invalid_range", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_improper_range", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_without_range", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_special_names", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_versioned", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_multiple_sizes" ], "skip": false, "comment": "" @@ -41,27 +41,27 @@ "name": "CopyObject", "tag": "API", "tests": [ - "test_object_copy_16m", - "test_object_copy_retaining_metadata", - "test_object_copy_replacing_metadata", - "test_object_copy_versioned_bucket", - "test_object_copy_versioned_url_encoding", - "test_object_copy_versioning_multipart_upload", - "test_versioning_copy_obj_version", - "test_copy_object_ifmatch_good", - "test_copy_object_ifmatch_failed", - "test_copy_object_ifnonematch_good", - "test_copy_object_ifnonematch_failed", - "test_object_copy_zero_size", - "test_object_copy_same_bucket", - "test_object_copy_verify_contenttype", - "test_object_copy_diff_bucket", - "test_object_copy_to_itself", - "test_object_copy_to_itself_with_metadata", - "test_bucket_policy_put_obj_copy_source", - "test_bucket_policy_put_obj_copy_source_meta", - "test_object_copy_bucket_not_found", - "test_object_copy_key_not_found" + "s3tests_boto3/functional/test_s3.py::test_object_copy_16m", + "s3tests_boto3/functional/test_s3.py::test_object_copy_retaining_metadata", + "s3tests_boto3/functional/test_s3.py::test_object_copy_replacing_metadata", + "s3tests_boto3/functional/test_s3.py::test_object_copy_versioned_bucket", + "s3tests_boto3/functional/test_s3.py::test_object_copy_versioned_url_encoding", + "s3tests_boto3/functional/test_s3.py::test_object_copy_versioning_multipart_upload", + "s3tests_boto3/functional/test_s3.py::test_versioning_copy_obj_version", + "s3tests_boto3/functional/test_s3.py::test_copy_object_ifmatch_good", + "s3tests_boto3/functional/test_s3.py::test_copy_object_ifmatch_failed", + "s3tests_boto3/functional/test_s3.py::test_copy_object_ifnonematch_good", + "s3tests_boto3/functional/test_s3.py::test_copy_object_ifnonematch_failed", + "s3tests_boto3/functional/test_s3.py::test_object_copy_zero_size", + "s3tests_boto3/functional/test_s3.py::test_object_copy_same_bucket", + "s3tests_boto3/functional/test_s3.py::test_object_copy_verify_contenttype", + "s3tests_boto3/functional/test_s3.py::test_object_copy_diff_bucket", + "s3tests_boto3/functional/test_s3.py::test_object_copy_to_itself", + "s3tests_boto3/functional/test_s3.py::test_object_copy_to_itself_with_metadata", + "s3tests_boto3/functional/test_s3.py::test_bucket_policy_put_obj_copy_source", + "s3tests_boto3/functional/test_s3.py::test_bucket_policy_put_obj_copy_source_meta", + "s3tests_boto3/functional/test_s3.py::test_object_copy_bucket_not_found", + "s3tests_boto3/functional/test_s3.py::test_object_copy_key_not_found" ], "skip": false, "comment": "" @@ -70,19 +70,19 @@ "name": "CreateBucket", "tag": "API", "tests": [ - "test_bucket_create_contentlength_none", - "test_bucket_create_bad_expect_empty", - "test_bucket_create_bad_contentlength_empty", - "test_bucket_create_bad_contentlength_negative", - "test_bucket_create_bad_contentlength_none", - "test_bucket_create_naming_bad_short_one", - "test_bucket_create_naming_bad_short_two", - "test_bucket_create_naming_good_long_63", - "test_bucket_create_exists_nonowner", - "test_bucket_create_naming_good_starts_alpha", - "test_bucket_create_naming_good_starts_digit", - "test_bucket_create_naming_good_contains_period", - "test_bucket_create_naming_good_contains_hyphen" + "s3tests_boto3/functional/test_headers.py::test_bucket_create_contentlength_none", + "s3tests_boto3/functional/test_headers.py::test_bucket_create_bad_expect_empty", + "s3tests_boto3/functional/test_headers.py::test_bucket_create_bad_contentlength_empty", + "s3tests_boto3/functional/test_headers.py::test_bucket_create_bad_contentlength_negative", + "s3tests_boto3/functional/test_headers.py::test_bucket_create_bad_contentlength_none", + "s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_bad_short_one", + "s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_bad_short_two", + "s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_good_long_63", + "s3tests_boto3/functional/test_s3.py::test_bucket_create_exists_nonowner", + "s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_good_starts_alpha", + "s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_good_starts_digit", + "s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_good_contains_period", + "s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_good_contains_hyphen" ], "skip": false, "comment": "" @@ -91,24 +91,24 @@ "name": "CreateMultipartUpload", "tag": "API", "tests": [ - "test_multipart_upload_empty", - "test_multipart_upload_multiple_sizes", - "test_multipart_upload_size_too_small", - "test_multipart_upload_contents", - "test_multipart_upload_overwrite_existing_object", - "test_multipart_upload_missing_part", - "test_multipart_upload_incorrect_etag", - "test_versioning_obj_create_overwrite_multipart", - "test_versioning_bucket_multipart_upload_return_version_id", - "test_multipart_upload_resend_part", - "test_multipart_copy_small", - "test_multipart_copy_invalid_range", - "test_multipart_copy_improper_range", - "test_multipart_copy_without_range", - "test_multipart_copy_special_names", - "test_multipart_copy_versioned", - "test_multipart_copy_multiple_sizes", - "test_atomic_multipart_upload_write" + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_empty", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_multiple_sizes", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_size_too_small", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_contents", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_overwrite_existing_object", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_missing_part", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_incorrect_etag", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_create_overwrite_multipart", + "s3tests_boto3/functional/test_s3.py::test_versioning_bucket_multipart_upload_return_version_id", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_resend_part", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_small", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_invalid_range", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_improper_range", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_without_range", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_special_names", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_versioned", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_multiple_sizes", + "s3tests_boto3/functional/test_s3.py::test_atomic_multipart_upload_write" ], "skip": false, "comment": "" @@ -117,9 +117,9 @@ "name": "DeleteBucket", "tag": "API", "tests": [ - "test_bucket_delete_notexist", - "test_bucket_delete_nonempty", - "test_bucket_create_delete" + "s3tests_boto3/functional/test_s3.py::test_bucket_delete_notexist", + "s3tests_boto3/functional/test_s3.py::test_bucket_delete_nonempty", + "s3tests_boto3/functional/test_s3.py::test_bucket_create_delete" ], "skip": false, "comment": "" @@ -145,8 +145,8 @@ "name": "DeleteBucketEncryption", "tag": "API", "tests": [ - "test_delete_bucket_encryption_s3", - "test_delete_bucket_encryption_kms" + "s3tests_boto3/functional/test_s3.py::test_delete_bucket_encryption_s3", + "s3tests_boto3/functional/test_s3.py::test_delete_bucket_encryption_kms" ], "skip": true, "comment": "Not supported" @@ -227,15 +227,15 @@ "name": "DeleteObject", "tag": "API", "tests": [ - "test_object_write_read_update_read_delete", - "test_versioning_obj_create_read_remove_head", - "test_versioning_obj_plain_null_version_removal", - "test_versioning_obj_plain_null_version_overwrite", - "test_versioning_obj_plain_null_version_overwrite_suspended", - "test_versioning_obj_suspend_versions", - "test_versioning_multi_object_delete_with_marker", - "test_versioned_concurrent_object_create_concurrent_remove", - "test_versioned_concurrent_object_create_and_remove" + "s3tests_boto3/functional/test_s3.py::test_object_write_read_update_read_delete", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_create_read_remove_head", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_plain_null_version_removal", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_plain_null_version_overwrite", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_plain_null_version_overwrite_suspended", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_suspend_versions", + "s3tests_boto3/functional/test_s3.py::test_versioning_multi_object_delete_with_marker", + "s3tests_boto3/functional/test_s3.py::test_versioned_concurrent_object_create_concurrent_remove", + "s3tests_boto3/functional/test_s3.py::test_versioned_concurrent_object_create_and_remove" ], "skip": false, "comment": "" @@ -244,12 +244,12 @@ "name": "DeleteObjects", "tag": "API", "tests": [ - "test_multi_object_delete", - "test_multi_objectv2_delete", - "test_multi_object_delete_key_limit", - "test_multi_objectv2_delete_key_limit", - "test_versioning_multi_object_delete", - "test_versioning_multi_object_delete_with_marker" + "s3tests_boto3/functional/test_s3.py::test_multi_object_delete", + "s3tests_boto3/functional/test_s3.py::test_multi_objectv2_delete", + "s3tests_boto3/functional/test_s3.py::test_multi_object_delete_key_limit", + "s3tests_boto3/functional/test_s3.py::test_multi_objectv2_delete_key_limit", + "s3tests_boto3/functional/test_s3.py::test_versioning_multi_object_delete", + "s3tests_boto3/functional/test_s3.py::test_versioning_multi_object_delete_with_marker" ], "skip": false, "comment": "" @@ -309,8 +309,8 @@ "name": "GetBucketEncryption", "tag": "API", "tests": [ - "test_get_bucket_encryption_s3", - "test_get_bucket_encryption_kms" + "s3tests_boto3/functional/test_s3.py::test_get_bucket_encryption_s3", + "s3tests_boto3/functional/test_s3.py::test_get_bucket_encryption_kms" ], "skip": true, "comment": "Not supported" @@ -351,7 +351,7 @@ "name": "GetBucketLocation", "tag": "API", "tests": [ - "test_bucket_get_location" + "s3tests_boto3/functional/test_s3.py::test_bucket_get_location" ], "skip": false, "comment": "" @@ -360,7 +360,7 @@ "name": "GetBucketLogging", "tag": "API", "tests": [ - "test_logging_toggle" + "s3tests_boto3/functional/test_s3.py::test_logging_toggle" ], "skip": true, "comment": "Not supported" @@ -455,29 +455,29 @@ "name": "GetObject", "tag": "API", "tests": [ - "test_get_object_ifmatch_good", - "test_get_object_ifmatch_failed", - "test_get_object_ifnonematch_good", - "test_get_object_ifnonematch_failed", - "test_get_object_ifmodifiedsince_good", - "test_get_object_ifmodifiedsince_failed", - "test_get_object_ifunmodifiedsince_good", - "test_get_object_ifunmodifiedsince_failed", - "test_object_read_not_exist", - "test_object_requestid_matches_header_on_error", - "test_ranged_request_invalid_range", - "test_ranged_request_empty_object", - "test_ranged_request_response_code", - "test_ranged_big_request_response_code", - "test_ranged_request_skip_leading_bytes_response_code", - "test_ranged_request_return_trailing_bytes_response_code", - "test_versioning_obj_plain_null_version_removal", - "test_versioning_obj_plain_null_version_overwrite", - "test_versioning_obj_plain_null_version_overwrite_suspended", - "test_object_write_read_update_read_delete", - "test_object_set_get_metadata_none_to_good", - "test_object_metadata_replaced_on_put", - "test_object_write_file" + "s3tests_boto3/functional/test_s3.py::test_get_object_ifmatch_good", + "s3tests_boto3/functional/test_s3.py::test_get_object_ifmatch_failed", + "s3tests_boto3/functional/test_s3.py::test_get_object_ifnonematch_good", + "s3tests_boto3/functional/test_s3.py::test_get_object_ifnonematch_failed", + "s3tests_boto3/functional/test_s3.py::test_get_object_ifmodifiedsince_good", + "s3tests_boto3/functional/test_s3.py::test_get_object_ifmodifiedsince_failed", + "s3tests_boto3/functional/test_s3.py::test_get_object_ifunmodifiedsince_good", + "s3tests_boto3/functional/test_s3.py::test_get_object_ifunmodifiedsince_failed", + "s3tests_boto3/functional/test_s3.py::test_object_read_not_exist", + "s3tests_boto3/functional/test_s3.py::test_object_requestid_matches_header_on_error", + "s3tests_boto3/functional/test_s3.py::test_ranged_request_invalid_range", + "s3tests_boto3/functional/test_s3.py::test_ranged_request_empty_object", + "s3tests_boto3/functional/test_s3.py::test_ranged_request_response_code", + "s3tests_boto3/functional/test_s3.py::test_ranged_big_request_response_code", + "s3tests_boto3/functional/test_s3.py::test_ranged_request_skip_leading_bytes_response_code", + "s3tests_boto3/functional/test_s3.py::test_ranged_request_return_trailing_bytes_response_code", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_plain_null_version_removal", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_plain_null_version_overwrite", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_plain_null_version_overwrite_suspended", + "s3tests_boto3/functional/test_s3.py::test_object_write_read_update_read_delete", + "s3tests_boto3/functional/test_s3.py::test_object_set_get_metadata_none_to_good", + "s3tests_boto3/functional/test_s3.py::test_object_metadata_replaced_on_put", + "s3tests_boto3/functional/test_s3.py::test_object_write_file" ], "skip": false, "comment": "" @@ -540,7 +540,7 @@ "name": "GetObjectTorrent", "tag": "API", "tests": [ - "test_get_object_torrent" + "s3tests_boto3/functional/test_s3.py::test_get_object_torrent" ], "skip": true, "comment": "Not applicable or will never be supported" @@ -548,9 +548,7 @@ { "name": "GetPublicAccessBlock", "tag": "API", - "tests": [ - "test_get_default_public_block" - ], + "tests": [], "skip": true, "comment": "Not supported" }, @@ -558,8 +556,8 @@ "name": "HeadBucket", "tag": "API", "tests": [ - "test_bucket_head", - "test_bucket_head_notexist" + "s3tests_boto3/functional/test_s3.py::test_bucket_head", + "s3tests_boto3/functional/test_s3.py::test_bucket_head_notexist" ], "skip": false, "comment": "" @@ -568,10 +566,10 @@ "name": "HeadObject", "tag": "API", "tests": [ - "test_object_head_zero_bytes", - "test_object_write_cache_control", - "test_object_write_expires", - "test_get_obj_head_tagging" + "s3tests_boto3/functional/test_s3.py::test_object_head_zero_bytes", + "s3tests_boto3/functional/test_s3.py::test_object_write_cache_control", + "s3tests_boto3/functional/test_s3.py::test_object_write_expires", + "s3tests_boto3/functional/test_s3.py::test_get_obj_head_tagging" ], "skip": false, "comment": "" @@ -608,12 +606,12 @@ "name": "ListBuckets", "tag": "API", "tests": [ - "test_buckets_create_then_list", - "test_buckets_list_ctime", - "test_list_buckets_invalid_auth", - "test_list_buckets_bad_auth", - "test_bucket_list_empty", - "test_bucket_list_distinct" + "s3tests_boto3/functional/test_s3.py::test_buckets_create_then_list", + "s3tests_boto3/functional/test_s3.py::test_buckets_list_ctime", + "s3tests_boto3/functional/test_s3.py::test_list_buckets_invalid_auth", + "s3tests_boto3/functional/test_s3.py::test_list_buckets_bad_auth", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_empty", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_distinct" ], "skip": false, "comment": "" @@ -622,7 +620,7 @@ "name": "ListMultipartUploads", "tag": "API", "tests": [ - "test_list_multipart_upload" + "s3tests_boto3/functional/test_s3.py::test_list_multipart_upload" ], "skip": false, "comment": "" @@ -631,45 +629,45 @@ "name": "ListObjects", "tag": "API", "tests": [ - "test_bucket_list_maxkeys_invalid", - "test_bucket_list_objects_anonymous_fail", - "test_bucket_notexist", - "test_bucket_list_many", - "test_bucket_list_delimiter_basic", - "test_bucket_list_encoding_basic", - "test_bucket_list_delimiter_alt", - "test_bucket_list_delimiter_percentage", - "test_bucket_list_delimiter_whitespace", - "test_bucket_list_delimiter_dot", - "test_bucket_list_delimiter_unreadable", - "test_bucket_list_delimiter_empty", - "test_bucket_list_delimiter_none", - "test_bucket_list_delimiter_not_exist", - "test_bucket_list_delimiter_not_skip_special", - "test_bucket_list_prefix_basic", - "test_bucket_list_prefix_alt", - "test_bucket_list_prefix_empty", - "test_bucket_list_prefix_none", - "test_bucket_list_prefix_not_exist", - "test_bucket_list_prefix_unreadable", - "test_bucket_list_prefix_delimiter_basic", - "test_bucket_list_prefix_delimiter_alt", - "test_bucket_list_prefix_delimiter_prefix_not_exist", - "test_bucket_list_prefix_delimiter_delimiter_not_exist", - "test_bucket_list_prefix_delimiter_prefix_delimiter_not_exist", - "test_bucket_list_maxkeys_one", - "test_bucket_list_maxkeys_zero", - "test_bucket_list_maxkeys_none", - "test_bucket_list_marker_none", - "test_bucket_list_marker_empty", - "test_bucket_list_marker_unreadable", - "test_bucket_list_marker_not_in_list", - "test_bucket_list_marker_after_list", - "test_bucket_list_objects_anonymous", - "test_multi_object_delete", - "test_bucket_list_delimiter_prefix", - "test_bucket_list_delimiter_prefix_ends_with_delimiter", - "test_bucket_list_delimiter_prefix_underscore" + "s3tests_boto3/functional/test_s3.py::test_bucket_list_maxkeys_invalid", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_objects_anonymous_fail", + "s3tests_boto3/functional/test_s3.py::test_bucket_notexist", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_many", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_delimiter_basic", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_encoding_basic", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_delimiter_alt", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_delimiter_percentage", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_delimiter_whitespace", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_delimiter_dot", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_delimiter_unreadable", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_delimiter_empty", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_delimiter_none", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_delimiter_not_exist", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_delimiter_not_skip_special", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_prefix_basic", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_prefix_alt", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_prefix_empty", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_prefix_none", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_prefix_not_exist", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_prefix_unreadable", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_prefix_delimiter_basic", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_prefix_delimiter_alt", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_prefix_delimiter_prefix_not_exist", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_prefix_delimiter_delimiter_not_exist", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_prefix_delimiter_prefix_delimiter_not_exist", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_maxkeys_one", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_maxkeys_zero", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_maxkeys_none", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_marker_none", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_marker_empty", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_marker_unreadable", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_marker_not_in_list", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_marker_after_list", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_objects_anonymous", + "s3tests_boto3/functional/test_s3.py::test_multi_object_delete", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_delimiter_prefix", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_delimiter_prefix_ends_with_delimiter", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_delimiter_prefix_underscore" ], "skip": false, "comment": "" @@ -678,48 +676,48 @@ "name": "ListObjectsV2", "tag": "API", "tests": [ - "test_bucket_listv2_objects_anonymous_fail", - "test_bucketv2_notexist", - "test_bucket_listv2_many", - "test_basic_key_count", - "test_bucket_listv2_delimiter_basic", - "test_bucket_listv2_encoding_basic", - "test_bucket_listv2_delimiter_alt", - "test_bucket_listv2_delimiter_prefix", - "test_bucket_listv2_delimiter_prefix_ends_with_delimiter", - "test_bucket_listv2_delimiter_alt", - "test_bucket_listv2_delimiter_prefix_underscore", - "test_bucket_listv2_delimiter_percentage", - "test_bucket_listv2_delimiter_whitespace", - "test_bucket_listv2_delimiter_dot", - "test_bucket_listv2_delimiter_unreadable", - "test_bucket_listv2_delimiter_empty", - "test_bucket_listv2_delimiter_none", - "test_bucket_listv2_fetchowner_notempty", - "test_bucket_listv2_fetchowner_defaultempty", - "test_bucket_listv2_fetchowner_empty", - "test_bucket_listv2_delimiter_not_exist", - "test_bucket_listv2_prefix_basic", - "test_bucket_listv2_prefix_alt", - "test_bucket_listv2_prefix_empty", - "test_bucket_listv2_prefix_none", - "test_bucket_listv2_prefix_not_exist", - "test_bucket_listv2_prefix_unreadable", - "test_bucket_listv2_prefix_delimiter_basic", - "test_bucket_listv2_prefix_delimiter_alt", - "test_bucket_listv2_prefix_delimiter_prefix_not_exist", - "test_bucket_listv2_prefix_delimiter_delimiter_not_exist", - "test_bucket_listv2_prefix_delimiter_prefix_delimiter_not_exist", - "test_bucket_listv2_maxkeys_one", - "test_bucket_listv2_maxkeys_zero", - "test_bucket_listv2_maxkeys_none", - "test_bucket_listv2_continuationtoken", - "test_bucket_listv2_both_continuationtoken_startafter", - "test_bucket_listv2_startafter_unreadable", - "test_bucket_listv2_startafter_not_in_list", - "test_bucket_listv2_startafter_after_list", - "test_bucket_listv2_objects_anonymous", - "test_multi_objectv2_delete" + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_objects_anonymous_fail", + "s3tests_boto3/functional/test_s3.py::test_bucketv2_notexist", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_many", + "s3tests_boto3/functional/test_s3.py::test_basic_key_count", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_delimiter_basic", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_encoding_basic", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_delimiter_alt", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_delimiter_prefix", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_delimiter_prefix_ends_with_delimiter", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_delimiter_alt", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_delimiter_prefix_underscore", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_delimiter_percentage", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_delimiter_whitespace", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_delimiter_dot", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_delimiter_unreadable", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_delimiter_empty", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_delimiter_none", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_fetchowner_notempty", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_fetchowner_defaultempty", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_fetchowner_empty", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_delimiter_not_exist", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_prefix_basic", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_prefix_alt", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_prefix_empty", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_prefix_none", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_prefix_not_exist", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_prefix_unreadable", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_prefix_delimiter_basic", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_prefix_delimiter_alt", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_prefix_delimiter_prefix_not_exist", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_prefix_delimiter_delimiter_not_exist", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_prefix_delimiter_prefix_delimiter_not_exist", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_maxkeys_one", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_maxkeys_zero", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_maxkeys_none", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_continuationtoken", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_both_continuationtoken_startafter", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_startafter_unreadable", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_startafter_not_in_list", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_startafter_after_list", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_objects_anonymous", + "s3tests_boto3/functional/test_s3.py::test_multi_objectv2_delete" ], "skip": false, "comment": "" @@ -779,20 +777,20 @@ "name": "PutBucketEncryption", "tag": "API", "tests": [ - "test_put_bucket_encryption_s3", - "test_put_bucket_encryption_kms", - "test_sse_s3_default_method_head", - "test_sse_s3_default_multipart_upload", - "test_sse_s3_default_post_object_authenticated_request", - "test_sse_kms_default_post_object_authenticated_request", - "test_sse_s3_default_upload_1b", - "test_sse_kms_default_upload_1b", - "test_sse_s3_default_upload_1kb", - "test_sse_kms_default_upload_1kb", - "test_sse_s3_default_upload_1mb", - "test_sse_kms_default_upload_1mb", - "test_sse_s3_default_upload_8mb", - "test_sse_kms_default_upload_8mb" + "s3tests_boto3/functional/test_s3.py::test_put_bucket_encryption_s3", + "s3tests_boto3/functional/test_s3.py::test_put_bucket_encryption_kms", + "s3tests_boto3/functional/test_s3.py::test_sse_s3_default_method_head", + "s3tests_boto3/functional/test_s3.py::test_sse_s3_default_multipart_upload", + "s3tests_boto3/functional/test_s3.py::test_sse_s3_default_post_object_authenticated_request", + "s3tests_boto3/functional/test_s3.py::test_sse_kms_default_post_object_authenticated_request", + "s3tests_boto3/functional/test_s3.py::test_sse_s3_default_upload_1b", + "s3tests_boto3/functional/test_s3.py::test_sse_kms_default_upload_1b", + "s3tests_boto3/functional/test_s3.py::test_sse_s3_default_upload_1kb", + "s3tests_boto3/functional/test_s3.py::test_sse_kms_default_upload_1kb", + "s3tests_boto3/functional/test_s3.py::test_sse_s3_default_upload_1mb", + "s3tests_boto3/functional/test_s3.py::test_sse_kms_default_upload_1mb", + "s3tests_boto3/functional/test_s3.py::test_sse_s3_default_upload_8mb", + "s3tests_boto3/functional/test_s3.py::test_sse_kms_default_upload_8mb" ], "skip": true, "comment": "Not supported" @@ -833,7 +831,7 @@ "name": "PutBucketLogging", "tag": "API", "tests": [ - "test_logging_toggle" + "s3tests_boto3/functional/test_s3.py::test_logging_toggle" ], "skip": true, "comment": "Not supported" @@ -921,28 +919,28 @@ "name": "PutObject", "tag": "API", "tests": [ - "test_object_create_bad_md5_invalid_short", - "test_object_create_bad_md5_bad", - "test_object_create_bad_md5_empty", - "test_object_create_bad_md5_none", - "test_object_create_bad_expect_empty", - "test_object_create_bad_expect_none", - "test_object_create_bad_contentlength_empty", - "test_object_create_bad_contentlength_negative", - "test_object_create_bad_contenttype_invalid", - "test_object_create_bad_contenttype_empty", - "test_object_create_bad_contenttype_none", - "test_object_write_check_etag", - "test_object_write_cache_control", - "test_object_write_expires", - "test_object_write_read_update_read_delete", - "test_object_set_get_metadata_none_to_good", - "test_object_metadata_replaced_on_put", - "test_object_write_file", - "test_object_anon_put", - "test_object_anon_put_write_access", - "test_object_put_authenticated", - "test_object_raw_put_authenticated_expired" + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_md5_invalid_short", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_md5_bad", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_md5_empty", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_md5_none", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_expect_empty", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_expect_none", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_contentlength_empty", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_contentlength_negative", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_contenttype_invalid", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_contenttype_empty", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_contenttype_none", + "s3tests_boto3/functional/test_s3.py::test_object_write_check_etag", + "s3tests_boto3/functional/test_s3.py::test_object_write_cache_control", + "s3tests_boto3/functional/test_s3.py::test_object_write_expires", + "s3tests_boto3/functional/test_s3.py::test_object_write_read_update_read_delete", + "s3tests_boto3/functional/test_s3.py::test_object_set_get_metadata_none_to_good", + "s3tests_boto3/functional/test_s3.py::test_object_metadata_replaced_on_put", + "s3tests_boto3/functional/test_s3.py::test_object_write_file", + "s3tests_boto3/functional/test_s3.py::test_object_anon_put", + "s3tests_boto3/functional/test_s3.py::test_object_anon_put_write_access", + "s3tests_boto3/functional/test_s3.py::test_object_put_authenticated", + "s3tests_boto3/functional/test_s3.py::test_object_raw_put_authenticated_expired" ], "skip": false, "comment": "" @@ -998,11 +996,11 @@ "name": "PutPublicAccessBlock", "tag": "API", "tests": [ - "test_put_public_block", - "test_block_public_put_bucket_acls", - "test_block_public_object_canned_acls", - "test_block_public_policy", - "test_ignore_public_acls" + "s3tests_boto3/functional/test_s3.py::test_put_public_block", + "s3tests_boto3/functional/test_s3.py::test_block_public_put_bucket_acls", + "s3tests_boto3/functional/test_s3.py::test_block_public_object_canned_acls", + "s3tests_boto3/functional/test_s3.py::test_block_public_policy", + "s3tests_boto3/functional/test_s3.py::test_ignore_public_acls" ], "skip": true, "comment": "Not supported" @@ -1018,40 +1016,40 @@ "name": "SelectObjectContent", "tag": "API", "tests": [ - "test_generate_where_clause", - "test_generate_projection", - "test_count_operation", - "test_count_json_operation", - "test_json_column_sum_min_max", - "test_json_nullif_expressions", - "test_column_sum_min_max", - "test_nullif_expressions", - "test_nulliftrue_expressions", - "test_is_not_null_expressions", - "test_lowerupper_expressions", - "test_in_expressions", - "test_true_false_in_expressions", - "test_like_expressions", - "test_truefalselike_expressions", - "test_complex_expressions", - "test_alias", - "test_alias_cyclic_refernce", - "test_datetime", - "test_true_false_datetime", - "test_csv_parser", - "test_csv_definition", - "test_schema_definition", - "test_when_then_else_expressions", - "test_coalesce_expressions", - "test_cast_expressions", - "test_version", - "test_trim_expressions", - "test_truefalse_trim_expressions", - "test_escape_expressions", - "test_case_value_expressions", - "test_bool_cast_expressions", - "test_progress_expressions", - "test_output_serial_expressions" + "s3tests_boto3/functional/test_s3select.py::test_generate_where_clause", + "s3tests_boto3/functional/test_s3select.py::test_generate_projection", + "s3tests_boto3/functional/test_s3select.py::test_count_operation", + "s3tests_boto3/functional/test_s3select.py::test_count_json_operation", + "s3tests_boto3/functional/test_s3select.py::test_json_column_sum_min_max", + "s3tests_boto3/functional/test_s3select.py::test_json_nullif_expressions", + "s3tests_boto3/functional/test_s3select.py::test_column_sum_min_max", + "s3tests_boto3/functional/test_s3select.py::test_nullif_expressions", + "s3tests_boto3/functional/test_s3select.py::test_nulliftrue_expressions", + "s3tests_boto3/functional/test_s3select.py::test_is_not_null_expressions", + "s3tests_boto3/functional/test_s3select.py::test_lowerupper_expressions", + "s3tests_boto3/functional/test_s3select.py::test_in_expressions", + "s3tests_boto3/functional/test_s3select.py::test_true_false_in_expressions", + "s3tests_boto3/functional/test_s3select.py::test_like_expressions", + "s3tests_boto3/functional/test_s3select.py::test_truefalselike_expressions", + "s3tests_boto3/functional/test_s3select.py::test_complex_expressions", + "s3tests_boto3/functional/test_s3select.py::test_alias", + "s3tests_boto3/functional/test_s3select.py::test_alias_cyclic_refernce", + "s3tests_boto3/functional/test_s3select.py::test_datetime", + "s3tests_boto3/functional/test_s3select.py::test_true_false_datetime", + "s3tests_boto3/functional/test_s3select.py::test_csv_parser", + "s3tests_boto3/functional/test_s3select.py::test_csv_definition", + "s3tests_boto3/functional/test_s3select.py::test_schema_definition", + "s3tests_boto3/functional/test_s3select.py::test_when_then_else_expressions", + "s3tests_boto3/functional/test_s3select.py::test_coalesce_expressions", + "s3tests_boto3/functional/test_s3select.py::test_cast_expressions", + "s3tests_boto3/functional/test_s3select.py::test_version", + "s3tests_boto3/functional/test_s3select.py::test_trim_expressions", + "s3tests_boto3/functional/test_s3select.py::test_truefalse_trim_expressions", + "s3tests_boto3/functional/test_s3select.py::test_escape_expressions", + "s3tests_boto3/functional/test_s3select.py::test_case_value_expressions", + "s3tests_boto3/functional/test_s3select.py::test_bool_cast_expressions", + "s3tests_boto3/functional/test_s3select.py::test_progress_expressions", + "s3tests_boto3/functional/test_s3select.py::test_output_serial_expressions" ], "skip": true, "comment": "Not supported" @@ -1060,22 +1058,22 @@ "name": "UploadPart", "tag": "API", "tests": [ - "test_object_copy_versioning_multipart_upload", - "test_multipart_upload_empty", - "test_multipart_upload_multiple_sizes", - "test_multipart_upload_size_too_small", - "test_multipart_upload_contents", - "test_multipart_upload_overwrite_existing_object", - "test_multipart_upload_missing_part", - "test_multipart_upload_incorrect_etag", - "test_versioning_obj_create_overwrite_multipart", - "test_versioning_bucket_multipart_upload_return_version_id", - "test_multipart_upload_on_a_bucket_with_policy", - "test_multipart_upload_resend_part", - "test_abort_multipart_upload", - "test_abort_multipart_upload_not_found", - "test_atomic_multipart_upload_write", - "test_list_multipart_upload" + "s3tests_boto3/functional/test_s3.py::test_object_copy_versioning_multipart_upload", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_empty", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_multiple_sizes", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_size_too_small", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_contents", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_overwrite_existing_object", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_missing_part", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_incorrect_etag", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_create_overwrite_multipart", + "s3tests_boto3/functional/test_s3.py::test_versioning_bucket_multipart_upload_return_version_id", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_on_a_bucket_with_policy", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_resend_part", + "s3tests_boto3/functional/test_s3.py::test_abort_multipart_upload", + "s3tests_boto3/functional/test_s3.py::test_abort_multipart_upload_not_found", + "s3tests_boto3/functional/test_s3.py::test_atomic_multipart_upload_write", + "s3tests_boto3/functional/test_s3.py::test_list_multipart_upload" ], "skip": false, "comment": "" @@ -1084,13 +1082,13 @@ "name": "UploadPartCopy", "tag": "API", "tests": [ - "test_multipart_copy_small", - "test_multipart_copy_invalid_range", - "test_multipart_copy_improper_range", - "test_multipart_copy_without_range", - "test_multipart_copy_special_names", - "test_multipart_copy_versioned", - "test_multipart_copy_multiple_sizes" + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_small", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_invalid_range", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_improper_range", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_without_range", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_special_names", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_versioned", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_multiple_sizes" ], "skip": false, "comment": "" @@ -1106,18 +1104,18 @@ "name": "BucketPolicy", "tag": "Features", "tests": [ - "test_bucket_policy", - "test_bucketv2_policy", - "test_get_tags_acl_public", - "test_put_tags_acl_public", - "test_delete_tags_obj_public", - "test_bucket_policy_get_obj_existing_tag", - "test_bucket_policy_get_obj_tagging_existing_tag", - "test_bucket_policy_put_obj_tagging_existing_tag", - "test_bucket_policy_put_obj_copy_source", - "test_bucket_policy_put_obj_copy_source_meta", - "test_bucket_policy_get_obj_acl_existing_tag", - "test_multipart_upload_on_a_bucket_with_policy" + "s3tests_boto3/functional/test_s3.py::test_bucket_policy", + "s3tests_boto3/functional/test_s3.py::test_bucketv2_policy", + "s3tests_boto3/functional/test_s3.py::test_get_tags_acl_public", + "s3tests_boto3/functional/test_s3.py::test_put_tags_acl_public", + "s3tests_boto3/functional/test_s3.py::test_delete_tags_obj_public", + "s3tests_boto3/functional/test_s3.py::test_bucket_policy_get_obj_existing_tag", + "s3tests_boto3/functional/test_s3.py::test_bucket_policy_get_obj_tagging_existing_tag", + "s3tests_boto3/functional/test_s3.py::test_bucket_policy_put_obj_tagging_existing_tag", + "s3tests_boto3/functional/test_s3.py::test_bucket_policy_put_obj_copy_source", + "s3tests_boto3/functional/test_s3.py::test_bucket_policy_put_obj_copy_source_meta", + "s3tests_boto3/functional/test_s3.py::test_bucket_policy_get_obj_acl_existing_tag", + "s3tests_boto3/functional/test_s3.py::test_multipart_upload_on_a_bucket_with_policy" ], "skip": false, "comment": "" @@ -1126,10 +1124,10 @@ "name": "BucketCors", "tag": "Features", "tests": [ - "test_set_cors", - "test_cors_origin_response", - "test_cors_origin_wildcard", - "test_cors_header_option" + "s3tests_boto3/functional/test_s3.py::test_set_cors", + "s3tests_boto3/functional/test_s3.py::test_cors_origin_response", + "s3tests_boto3/functional/test_s3.py::test_cors_origin_wildcard", + "s3tests_boto3/functional/test_s3.py::test_cors_header_option" ], "skip": false, "comment": "" @@ -1138,23 +1136,23 @@ "name": "BucketLifecycle", "tag": "Features", "tests": [ - "test_lifecycle_get", - "test_lifecycle_get_no_id", - "test_lifecycle_set", - "test_lifecycle_id_too_long", - "test_lifecycle_same_id", - "test_lifecycle_invalid_status", - "test_lifecycle_set_date", - "test_lifecycle_set_invalid_date", - "test_lifecycle_expiration_days0", - "test_lifecycle_expiration_header_put", - "test_lifecycle_expiration_header_head", - "test_lifecycle_expiration_header_and_tags_head", - "test_lifecycle_set_noncurrent", - "test_lifecycle_set_deletemarker", - "test_lifecycle_set_filter", - "test_lifecycle_set_empty_filter", - "test_lifecycle_set_multipart" + "s3tests_boto3/functional/test_s3.py::test_lifecycle_get", + "s3tests_boto3/functional/test_s3.py::test_lifecycle_get_no_id", + "s3tests_boto3/functional/test_s3.py::test_lifecycle_set", + "s3tests_boto3/functional/test_s3.py::test_lifecycle_id_too_long", + "s3tests_boto3/functional/test_s3.py::test_lifecycle_same_id", + "s3tests_boto3/functional/test_s3.py::test_lifecycle_invalid_status", + "s3tests_boto3/functional/test_s3.py::test_lifecycle_set_date", + "s3tests_boto3/functional/test_s3.py::test_lifecycle_set_invalid_date", + "s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_days0", + "s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_header_put", + "s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_header_head", + "s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_header_and_tags_head", + "s3tests_boto3/functional/test_s3.py::test_lifecycle_set_noncurrent", + "s3tests_boto3/functional/test_s3.py::test_lifecycle_set_deletemarker", + "s3tests_boto3/functional/test_s3.py::test_lifecycle_set_filter", + "s3tests_boto3/functional/test_s3.py::test_lifecycle_set_empty_filter", + "s3tests_boto3/functional/test_s3.py::test_lifecycle_set_multipart" ], "skip": false, "comment": "Transition is not supported" @@ -1163,7 +1161,7 @@ "name": "BucketTagging", "tag": "Features", "tests": [ - "test_set_bucket_tagging" + "s3tests_boto3/functional/test_s3.py::test_set_bucket_tagging" ], "skip": false, "comment": "" @@ -1172,23 +1170,23 @@ "name": "ObjectTagging", "tag": "Features", "tests": [ - "test_put_delete_tags", - "test_get_obj_tagging", - "test_put_max_tags", - "test_put_max_kvsize_tags", - "test_put_excess_key_tags", - "test_put_excess_val_tags", - "test_put_modify_tags", - "test_put_delete_tags", - "test_put_obj_with_tags", - "test_get_obj_tagging", - "test_get_obj_head_tagging", - "test_put_max_tags", - "test_put_max_kvsize_tags", - "test_put_excess_key_tags", - "test_put_excess_val_tags", - "test_put_modify_tags", - "test_put_delete_tags" + "s3tests_boto3/functional/test_s3.py::test_put_delete_tags", + "s3tests_boto3/functional/test_s3.py::test_get_obj_tagging", + "s3tests_boto3/functional/test_s3.py::test_put_max_tags", + "s3tests_boto3/functional/test_s3.py::test_put_max_kvsize_tags", + "s3tests_boto3/functional/test_s3.py::test_put_excess_key_tags", + "s3tests_boto3/functional/test_s3.py::test_put_excess_val_tags", + "s3tests_boto3/functional/test_s3.py::test_put_modify_tags", + "s3tests_boto3/functional/test_s3.py::test_put_delete_tags", + "s3tests_boto3/functional/test_s3.py::test_put_obj_with_tags", + "s3tests_boto3/functional/test_s3.py::test_get_obj_tagging", + "s3tests_boto3/functional/test_s3.py::test_get_obj_head_tagging", + "s3tests_boto3/functional/test_s3.py::test_put_max_tags", + "s3tests_boto3/functional/test_s3.py::test_put_max_kvsize_tags", + "s3tests_boto3/functional/test_s3.py::test_put_excess_key_tags", + "s3tests_boto3/functional/test_s3.py::test_put_excess_val_tags", + "s3tests_boto3/functional/test_s3.py::test_put_modify_tags", + "s3tests_boto3/functional/test_s3.py::test_put_delete_tags" ], "skip": false, "comment": "" @@ -1197,13 +1195,13 @@ "name": "BucketACL", "tag": "Features", "tests": [ - "test_bucket_put_bad_canned_acl", - "test_bucket_list_objects_anonymous", - "test_bucket_listv2_objects_anonymous", - "test_bucket_acl_canned_private_to_private", - "test_100_continue", - "test_block_public_put_bucket_acls", - "test_bucket_concurrent_set_canned_acl" + "s3tests_boto3/functional/test_headers.py::test_bucket_put_bad_canned_acl", + "s3tests_boto3/functional/test_s3.py::test_bucket_list_objects_anonymous", + "s3tests_boto3/functional/test_s3.py::test_bucket_listv2_objects_anonymous", + "s3tests_boto3/functional/test_s3.py::test_bucket_acl_canned_private_to_private", + "s3tests_boto3/functional/test_s3.py::test_100_continue", + "s3tests_boto3/functional/test_s3.py::test_block_public_put_bucket_acls", + "s3tests_boto3/functional/test_s3.py::test_bucket_concurrent_set_canned_acl" ], "skip": false, "comment": "Partly supported. Only restricted canned acl can be applied" @@ -1212,28 +1210,28 @@ "name": "BucketVersioning", "tag": "Features", "tests": [ - "test_object_lock_put_obj_lock", - "test_multipart_copy_versioned", - "test_versioning_bucket_create_suspend", - "test_versioning_obj_plain_null_version_removal", - "test_versioning_obj_plain_null_version_overwrite", - "test_versioning_obj_plain_null_version_overwrite_suspended", - "test_versioning_obj_create_read_remove", - "test_versioning_obj_create_read_remove_head", - "test_versioning_obj_suspend_versions", - "test_versioning_obj_create_versions_remove_all", - "test_versioning_obj_create_versions_remove_special_names", - "test_versioning_obj_create_overwrite_multipart", - "test_versioning_obj_list_marker", - "test_versioning_copy_obj_version", - "test_versioning_multi_object_delete", - "test_versioning_multi_object_delete_with_marker", - "test_versioned_concurrent_object_create_concurrent_remove", - "test_versioned_concurrent_object_create_and_remove", - "test_versioning_bucket_atomic_upload_return_version_id", - "test_versioning_bucket_multipart_upload_return_version_id", - "test_versioning_multi_object_delete_with_marker_create", - "test_versioning_concurrent_multi_object_delete" + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_lock", + "s3tests_boto3/functional/test_s3.py::test_multipart_copy_versioned", + "s3tests_boto3/functional/test_s3.py::test_versioning_bucket_create_suspend", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_plain_null_version_removal", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_plain_null_version_overwrite", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_plain_null_version_overwrite_suspended", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_create_read_remove", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_create_read_remove_head", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_suspend_versions", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_create_versions_remove_all", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_create_versions_remove_special_names", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_create_overwrite_multipart", + "s3tests_boto3/functional/test_s3.py::test_versioning_obj_list_marker", + "s3tests_boto3/functional/test_s3.py::test_versioning_copy_obj_version", + "s3tests_boto3/functional/test_s3.py::test_versioning_multi_object_delete", + "s3tests_boto3/functional/test_s3.py::test_versioning_multi_object_delete_with_marker", + "s3tests_boto3/functional/test_s3.py::test_versioned_concurrent_object_create_concurrent_remove", + "s3tests_boto3/functional/test_s3.py::test_versioned_concurrent_object_create_and_remove", + "s3tests_boto3/functional/test_s3.py::test_versioning_bucket_atomic_upload_return_version_id", + "s3tests_boto3/functional/test_s3.py::test_versioning_bucket_multipart_upload_return_version_id", + "s3tests_boto3/functional/test_s3.py::test_versioning_multi_object_delete_with_marker_create", + "s3tests_boto3/functional/test_s3.py::test_versioning_concurrent_multi_object_delete" ], "skip": false, "comment": "Limitations: \n1. Don't create delete marker for non-existing objects" @@ -1242,7 +1240,7 @@ "name": "MultipartUpload", "tag": "Features", "tests": [ - "test_multipart_upload" + "s3tests_boto3/functional/test_s3.py::test_multipart_upload" ], "include": [ "AbortMultipartUpload", @@ -1259,22 +1257,22 @@ "name": "Encryption", "tag": "Features", "tests": [ - "test_encrypted_transfer_1b", - "test_encrypted_transfer_1kb", - "test_encrypted_transfer_1MB", - "test_encrypted_transfer_13b", - "test_encryption_sse_c_present", - "test_encryption_sse_c_other_key", - "test_encryption_sse_c_invalid_md5", - "test_encryption_sse_c_no_md5", - "test_encryption_sse_c_no_key", - "test_encryption_key_no_sse_c", - "test_encryption_sse_c_multipart_invalid_chunks_1", - "test_encryption_sse_c_multipart_invalid_chunks_2", - "test_encryption_sse_c_method_head", - "test_encryption_sse_c_multipart_upload", - "test_encryption_sse_c_unaligned_multipart_upload", - "test_encryption_sse_c_multipart_bad_download" + "s3tests_boto3/functional/test_s3.py::test_encrypted_transfer_1b", + "s3tests_boto3/functional/test_s3.py::test_encrypted_transfer_1kb", + "s3tests_boto3/functional/test_s3.py::test_encrypted_transfer_1MB", + "s3tests_boto3/functional/test_s3.py::test_encrypted_transfer_13b", + "s3tests_boto3/functional/test_s3.py::test_encryption_sse_c_present", + "s3tests_boto3/functional/test_s3.py::test_encryption_sse_c_other_key", + "s3tests_boto3/functional/test_s3.py::test_encryption_sse_c_invalid_md5", + "s3tests_boto3/functional/test_s3.py::test_encryption_sse_c_no_md5", + "s3tests_boto3/functional/test_s3.py::test_encryption_sse_c_no_key", + "s3tests_boto3/functional/test_s3.py::test_encryption_key_no_sse_c", + "s3tests_boto3/functional/test_s3.py::test_encryption_sse_c_multipart_invalid_chunks_1", + "s3tests_boto3/functional/test_s3.py::test_encryption_sse_c_multipart_invalid_chunks_2", + "s3tests_boto3/functional/test_s3.py::test_encryption_sse_c_method_head", + "s3tests_boto3/functional/test_s3.py::test_encryption_sse_c_multipart_upload", + "s3tests_boto3/functional/test_s3.py::test_encryption_sse_c_unaligned_multipart_upload", + "s3tests_boto3/functional/test_s3.py::test_encryption_sse_c_multipart_bad_download" ], "skip": false, "comment": "Only sse-c currently supported" @@ -1290,18 +1288,18 @@ "name": "aws_v2_signature", "tag": "Features", "tests": [ - "test_object_create_bad_md5_invalid_garbage_aws2", - "test_object_create_bad_contentlength_mismatch_below_aws2", - "test_object_create_bad_authorization_incorrect_aws2", - "test_object_create_bad_authorization_invalid_aws2", - "test_object_create_bad_ua_empty_aws2", - "test_object_create_bad_ua_none_aws2", - "test_object_create_bad_date_invalid_aws2", - "test_object_create_bad_date_empty_aws2", - "test_object_create_bad_date_none_aws2", - "test_object_create_bad_date_before_today_aws2", - "test_object_create_bad_date_before_epoch_aws2", - "test_object_create_bad_date_after_end_aws2" + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_md5_invalid_garbage_aws2", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_contentlength_mismatch_below_aws2", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_authorization_incorrect_aws2", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_authorization_invalid_aws2", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_ua_empty_aws2", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_ua_none_aws2", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_date_invalid_aws2", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_date_empty_aws2", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_date_none_aws2", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_date_before_today_aws2", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_date_before_epoch_aws2", + "s3tests_boto3/functional/test_headers.py::test_object_create_bad_date_after_end_aws2" ], "skip": true, "comment": "Not supported. AWS v2 signature is deprecated." @@ -1310,42 +1308,42 @@ "name": "Locking", "tag": "Features", "tests": [ - "test_object_lock_put_obj_lock", - "test_object_lock_put_obj_lock_invalid_bucket", - "test_object_lock_put_obj_lock_with_days_and_years", - "test_object_lock_put_obj_lock_invalid_days", - "test_object_lock_uploading_obj", - "test_object_lock_put_obj_lock_invalid_years", - "test_object_lock_put_obj_lock_invalid_status", - "test_object_lock_suspend_versioning", - "test_object_lock_get_obj_lock", - "test_object_lock_get_obj_lock_invalid_bucket", - "test_object_lock_put_obj_retention", - "test_object_lock_put_obj_retention_invalid_bucket", - "test_object_lock_put_obj_retention_invalid_mode", - "test_object_lock_get_obj_retention", - "test_object_lock_get_obj_retention_invalid_bucket", - "test_object_lock_put_obj_retention_versionid", - "test_object_lock_put_obj_retention_override_default_retention", - "test_object_lock_put_obj_retention_increase_period", - "test_object_lock_put_obj_retention_shorten_period", - "test_object_lock_put_obj_retention_shorten_period_bypass", - "test_object_lock_delete_object_with_retention", - "test_object_lock_put_legal_hold", - "test_object_lock_put_legal_hold_invalid_bucket", - "test_object_lock_put_legal_hold_invalid_status", - "test_object_lock_get_legal_hold", - "test_object_lock_get_legal_hold_invalid_bucket", - "test_object_lock_delete_object_with_legal_hold_on", - "test_object_lock_delete_object_with_legal_hold_off", - "test_object_lock_get_obj_metadata", - "test_object_lock_get_obj_retention_iso8601", - "test_object_lock_delete_object_with_retention_and_marker", - "test_object_lock_multi_delete_object_with_retention", - "test_object_lock_changing_mode_from_governance_with_bypass", - "test_object_lock_changing_mode_from_governance_without_bypass", - "test_object_lock_changing_mode_from_compliance", - "test_object_lock_put_obj_lock_invalid_mode" + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_lock", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_lock_invalid_bucket", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_lock_with_days_and_years", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_lock_invalid_days", + "s3tests_boto3/functional/test_s3.py::test_object_lock_uploading_obj", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_lock_invalid_years", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_lock_invalid_status", + "s3tests_boto3/functional/test_s3.py::test_object_lock_suspend_versioning", + "s3tests_boto3/functional/test_s3.py::test_object_lock_get_obj_lock", + "s3tests_boto3/functional/test_s3.py::test_object_lock_get_obj_lock_invalid_bucket", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_retention", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_retention_invalid_bucket", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_retention_invalid_mode", + "s3tests_boto3/functional/test_s3.py::test_object_lock_get_obj_retention", + "s3tests_boto3/functional/test_s3.py::test_object_lock_get_obj_retention_invalid_bucket", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_retention_versionid", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_retention_override_default_retention", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_retention_increase_period", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_retention_shorten_period", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_retention_shorten_period_bypass", + "s3tests_boto3/functional/test_s3.py::test_object_lock_delete_object_with_retention", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_legal_hold", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_legal_hold_invalid_bucket", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_legal_hold_invalid_status", + "s3tests_boto3/functional/test_s3.py::test_object_lock_get_legal_hold", + "s3tests_boto3/functional/test_s3.py::test_object_lock_get_legal_hold_invalid_bucket", + "s3tests_boto3/functional/test_s3.py::test_object_lock_delete_object_with_legal_hold_on", + "s3tests_boto3/functional/test_s3.py::test_object_lock_delete_object_with_legal_hold_off", + "s3tests_boto3/functional/test_s3.py::test_object_lock_get_obj_metadata", + "s3tests_boto3/functional/test_s3.py::test_object_lock_get_obj_retention_iso8601", + "s3tests_boto3/functional/test_s3.py::test_object_lock_delete_object_with_retention_and_marker", + "s3tests_boto3/functional/test_s3.py::test_object_lock_multi_delete_object_with_retention", + "s3tests_boto3/functional/test_s3.py::test_object_lock_changing_mode_from_governance_with_bypass", + "s3tests_boto3/functional/test_s3.py::test_object_lock_changing_mode_from_governance_without_bypass", + "s3tests_boto3/functional/test_s3.py::test_object_lock_changing_mode_from_compliance", + "s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_lock_invalid_mode" ], "skip": true, "comment": "Not supported"