feature/add-all-tests #11

Open
dkirillov wants to merge 4 commits from dkirillov/s3-tests-parser:feature/add-all-tests into master
5 changed files with 604 additions and 44 deletions

View file

@ -22,7 +22,10 @@ var compatibilityCmd = &cobra.Command{
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 txt --output result.txt --verbose`,
s3-tests-parser compatibility suite.json --format json --output-format txt --output result.txt --verbose
s3-tests-parser compatibility suite.json --format json --output-format txt --output result.txt --verbose
s3-tests-parser compatibility suite.json --format json --output-format txt --output result.txt --verbose --include-ignored
`,
RunE: runCompatibilityCmd,
}
@ -59,6 +62,7 @@ const (
outputFlag = "output"
outputFormatFlag = "output-format"
verboseFlag = "verbose"
allFlag = "all"
)
func initCompatibilityCmd() {
@ -66,6 +70,7 @@ func initCompatibilityCmd() {
compatibilityCmd.Flags().String(outputFlag, "", "file to write output, if missed the stdout is used")
compatibilityCmd.Flags().String(outputFormatFlag, "txt", "format of output")
compatibilityCmd.Flags().Bool(verboseFlag, false, "produce additional info")
compatibilityCmd.Flags().Bool(allFlag, false, "include in output ignored tests")
}
func runCompatibilityCmd(cmd *cobra.Command, args []string) error {
@ -85,6 +90,16 @@ func runCompatibilityCmd(cmd *cobra.Command, args []string) error {
res := formResults(testStruct, testsMap)
res.Verbose = viper.GetBool(verboseFlag)
if !viper.GetBool(allFlag) {
for i, group := range res.TagGroups {
if group.Name == "Ignored" {
res.TagGroups = append(res.TagGroups[:i], res.TagGroups[i+1:]...)
break
}
}
}
return printResults(cmd, res)
}

View file

@ -1,27 +1,41 @@
package modules
import (
"cmp"
"fmt"
"os"
"slices"
"sort"
"git.frostfs.info/TrueCloudLab/s3-tests-parser/internal/s3"
"git.frostfs.info/TrueCloudLab/s3-tests-parser/internal/templates"
"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",
Short: "Print tests info",
Long: "Print all handled tests",
Example: `s3-tests-parser tests
s3-tests-parser tests --output tests.txt`,
RunE: runTestsCmd,
}
const (
describeFlag = "describe"
)
func initTestsCmd() {
testsCmd.Flags().String(outputFlag, "", "file to write output, if missed the stdout is used")
testsCmd.Flags().Bool(allFlag, false, "include all tests")
testsCmd.Flags().Bool(describeFlag, false, "describe test (its group, skip status, reason etc.)")
}
type DescribedTest struct {
Name string
Group string
Skip bool
Comment string
}
func runTestsCmd(cmd *cobra.Command, _ []string) error {
@ -30,34 +44,40 @@ func runTestsCmd(cmd *cobra.Command, _ []string) error {
return err
}
var tests []string
includeAll := viper.GetBool(allFlag)
groupTests := make(map[string][]string)
for _, group := range testStruct.Groups {
if group.Skip {
continue
}
groupTests[group.Name] = group.Tests
}
var tests []DescribedTest
for _, group := range testStruct.Groups {
if group.Skip {
if group.Skip && !includeAll {
continue
}
tests = append(tests, group.Tests...)
for _, include := range group.Include {
tests = append(tests, groupTests[include]...)
for _, test := range group.Tests {
tests = append(tests, DescribedTest{
Name: test,
Group: group.Name,
Skip: group.Skip,
Comment: group.Comment,
})
}
}
sort.Strings(tests)
tests = slices.Compact(tests)
slices.SortFunc(tests, func(a, b DescribedTest) int {
return cmp.Compare(a.Name, b.Name)
})
tests = slices.CompactFunc(tests, func(a DescribedTest, b DescribedTest) bool {
return a.Name == b.Name
})
if viper.GetBool(describeFlag) {
return describeTests(cmd, tests)
}
return printTests(cmd, tests)
}
func printTests(cmd *cobra.Command, res []string) error {
func printTests(cmd *cobra.Command, res []DescribedTest) error {
w := cmd.OutOrStdout()
if outFile := viper.GetString(outputFlag); outFile != "" {
f, err := os.Create(outFile)
@ -69,10 +89,29 @@ func printTests(cmd *cobra.Command, res []string) error {
}
for i := range res {
if _, err := fmt.Fprintln(w, res[i]); err != nil {
if _, err := fmt.Fprintln(w, res[i].Name); err != nil {
return err
}
}
return nil
}
func describeTests(cmd *cobra.Command, res []DescribedTest) 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()
}
outTemplate, err := templates.GetDescribeTemplate()
if err != nil {
return fmt.Errorf("form describe template: %w", err)
}
return outTemplate.Execute(w, res)
}

View file

@ -1,4 +1,7 @@
{
"info": {
"commit": "https://git.frostfs.info/TrueCloudLab/s3-tests/commit/7aae6ce2ca48ccd0ac35100af074281c7c88a210"
},
"groups": [
{
"name": "AbortMultipartUpload",
@ -61,7 +64,8 @@
"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"
"s3tests_boto3/functional/test_s3.py::test_object_copy_key_not_found",
"s3tests_boto3/functional/test_s3.py::test_versioning_obj_suspended_copy"
],
"skip": false,
"comment": ""
@ -268,8 +272,11 @@
"name": "DeletePublicAccessBlock",
"tag": "API",
"tests": [],
"skip": true,
"comment": "Not supported"
"include": [
"PublicAccessBlock"
],
"skip": false,
"comment": "See PublicAccessBlock feature"
},
{
"name": "GetBucketAccelerateConfiguration",
@ -335,7 +342,7 @@
"tests": [],
"include": [],
"skip": true,
"comment": "Not supported. This method is deprecated by AWS. Use GetBucketLifecycleConfiguration"
"comment": "Not supported <br>This method is deprecated by AWS, use GetBucketLifecycleConfiguration"
},
{
"name": "GetBucketLifecycleConfiguration",
@ -486,6 +493,9 @@
"name": "GetObjectAcl",
"tag": "API",
"tests": [],
"include": [
"ObjectACL"
],
"skip": true,
"comment": "Not supported"
},
@ -549,8 +559,11 @@
"name": "GetPublicAccessBlock",
"tag": "API",
"tests": [],
"skip": true,
"comment": "Not supported"
"include": [
"PublicAccessBlock"
],
"skip": false,
"comment": "See PublicAccessBlock feature"
},
{
"name": "HeadBucket",
@ -667,7 +680,8 @@
"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"
"s3tests_boto3/functional/test_s3.py::test_bucket_list_delimiter_prefix_underscore",
"s3tests_boto3/functional/test_s3.py::test_bucket_list_special_prefix"
],
"skip": false,
"comment": ""
@ -815,7 +829,7 @@
"tests": [],
"include": [],
"skip": true,
"comment": "Not supported. This method is deprecated by AWS. Use PutBucketLifecycleConfiguration"
"comment": "Not supported <br>This method is deprecated by AWS, use PutBucketLifecycleConfiguration"
},
{
"name": "PutBucketLifecycleConfiguration",
@ -940,7 +954,8 @@
"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"
"s3tests_boto3/functional/test_s3.py::test_object_raw_put_authenticated_expired",
"s3tests_boto3/functional/test_s3.py::test_object_write_to_nonexist_bucket"
],
"skip": false,
"comment": ""
@ -949,6 +964,9 @@
"name": "PutObjectAcl",
"tag": "API",
"tests": [],
"include": [
"ObjectACL"
],
"skip": true,
"comment": "Not supported"
},
@ -995,15 +1013,12 @@
{
"name": "PutPublicAccessBlock",
"tag": "API",
"tests": [
"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"
"tests": [],
"include": [
"PublicAccessBlock"
],
"skip": true,
"comment": "Not supported"
"skip": false,
"comment": "See PublicAccessBlock feature"
},
{
"name": "RestoreObject",
@ -1204,7 +1219,7 @@
"s3tests_boto3/functional/test_s3.py::test_bucket_concurrent_set_canned_acl"
],
"skip": false,
"comment": "Partly supported. Only restricted canned acl can be applied"
"comment": "Partly supported <br>Only restricted canned acl can be applied"
},
{
"name": "BucketVersioning",
@ -1230,11 +1245,10 @@
"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"
"s3tests_boto3/functional/test_s3.py::test_versioning_multi_object_delete_with_marker_create"
],
"skip": false,
"comment": "Limitations: \n1. Don't create delete marker for non-existing objects"
"comment": "Limitations: <br>1. Don't create delete marker for non-existing objects"
},
{
"name": "MultipartUpload",
@ -1277,6 +1291,21 @@
"skip": false,
"comment": "Only sse-c currently supported"
},
{
"name": "PublicAccessBlock",
"tag": "Features",
"tests": [
"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",
"s3tests_boto3/functional/test_s3.py::test_get_public_block_deny_bucket_policy",
"s3tests_boto3/functional/test_s3.py::test_get_undefined_public_block"
],
"skip": false,
"comment": ""
},
{
"name": "PostObject",
"tag": "Features",
@ -1299,10 +1328,57 @@
"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"
"s3tests_boto3/functional/test_headers.py::test_object_create_bad_date_after_end_aws2",
"s3tests_boto3/functional/test_headers.py::test_bucket_create_bad_authorization_invalid_aws2",
"s3tests_boto3/functional/test_headers.py::test_bucket_create_bad_date_after_today_aws2",
"s3tests_boto3/functional/test_headers.py::test_bucket_create_bad_date_before_epoch_aws2",
"s3tests_boto3/functional/test_headers.py::test_bucket_create_bad_date_before_today_aws2",
"s3tests_boto3/functional/test_headers.py::test_bucket_create_bad_date_empty_aws2",
"s3tests_boto3/functional/test_headers.py::test_bucket_create_bad_date_invalid_aws2",
"s3tests_boto3/functional/test_headers.py::test_bucket_create_bad_date_none_aws2",
"s3tests_boto3/functional/test_headers.py::test_bucket_create_bad_ua_empty_aws2",
"s3tests_boto3/functional/test_headers.py::test_bucket_create_bad_ua_none_aws2",
"s3tests_boto3/functional/test_s3.py::test_bucket_policy_put_obj_s3_noenc",
"s3tests_boto3/functional/test_s3.py::test_cors_presigned_get_object_v2",
"s3tests_boto3/functional/test_s3.py::test_cors_presigned_get_object_tenant_v2",
"s3tests_boto3/functional/test_s3.py::test_cors_presigned_put_object_v2",
"s3tests_boto3/functional/test_s3.py::test_cors_presigned_put_object_tenant_v2",
"s3tests_boto3/functional/test_s3.py::test_encryption_sse_c_post_object_authenticated_request",
"s3tests_boto3/functional/test_s3.py::test_post_object_authenticated_no_content_type",
"s3tests_boto3/functional/test_s3.py::test_post_object_authenticated_request",
"s3tests_boto3/functional/test_s3.py::test_post_object_authenticated_request_bad_access_key",
"s3tests_boto3/functional/test_s3.py::test_post_object_case_insensitive_condition_fields",
"s3tests_boto3/functional/test_s3.py::test_post_object_condition_is_case_sensitive",
"s3tests_boto3/functional/test_s3.py::test_post_object_empty_conditions",
"s3tests_boto3/functional/test_s3.py::test_post_object_escaped_field_values",
"s3tests_boto3/functional/test_s3.py::test_post_object_expired_policy",
"s3tests_boto3/functional/test_s3.py::test_post_object_expires_is_case_sensitive",
"s3tests_boto3/functional/test_s3.py::test_post_object_ignored_header",
"s3tests_boto3/functional/test_s3.py::test_post_object_invalid_access_key",
"s3tests_boto3/functional/test_s3.py::test_post_object_invalid_content_length_argument",
"s3tests_boto3/functional/test_s3.py::test_post_object_invalid_date_format",
"s3tests_boto3/functional/test_s3.py::test_post_object_invalid_request_field_value",
"s3tests_boto3/functional/test_s3.py::test_post_object_invalid_signature",
"s3tests_boto3/functional/test_s3.py::test_post_object_missing_conditions_list",
"s3tests_boto3/functional/test_s3.py::test_post_object_missing_content_length_argument",
"s3tests_boto3/functional/test_s3.py::test_post_object_missing_expires_condition",
"s3tests_boto3/functional/test_s3.py::test_post_object_missing_policy_condition",
"s3tests_boto3/functional/test_s3.py::test_post_object_missing_signature",
"s3tests_boto3/functional/test_s3.py::test_post_object_no_key_specified",
"s3tests_boto3/functional/test_s3.py::test_post_object_request_missing_policy_specified_field",
"s3tests_boto3/functional/test_s3.py::test_post_object_set_key_from_filename",
"s3tests_boto3/functional/test_s3.py::test_post_object_success_redirect_action",
"s3tests_boto3/functional/test_s3.py::test_post_object_tags_anonymous_request",
"s3tests_boto3/functional/test_s3.py::test_post_object_tags_authenticated_request",
"s3tests_boto3/functional/test_s3.py::test_post_object_upload_larger_than_chunk",
"s3tests_boto3/functional/test_s3.py::test_post_object_upload_size_below_minimum",
"s3tests_boto3/functional/test_s3.py::test_post_object_upload_size_limit_exceeded",
"s3tests_boto3/functional/test_s3.py::test_post_object_upload_size_rgw_chunk_size_bug",
"s3tests_boto3/functional/test_s3.py::test_post_object_user_specified_header",
"s3tests_boto3/functional/test_s3.py::test_post_object_wrong_bucket"
],
"skip": true,
"comment": "Not supported. AWS v2 signature is deprecated."
"comment": "Not supported <br>AWS v2 signature is deprecated"
},
{
"name": "Locking",
@ -1343,10 +1419,427 @@
"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"
"s3tests_boto3/functional/test_s3.py::test_object_lock_put_obj_lock_invalid_mode",
"s3tests_boto3/functional/test_s3.py::test_object_lock_delete_multipart_object_with_legal_hold_on",
"s3tests_boto3/functional/test_s3.py::test_object_lock_delete_multipart_object_with_retention"
],
"skip": true,
"comment": "Not supported"
},
{
"name": "ObjectACL",
"tag": "Features",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_access_bucket_private_object_private",
"s3tests_boto3/functional/test_s3.py::test_access_bucket_private_object_publicread",
"s3tests_boto3/functional/test_s3.py::test_access_bucket_private_object_publicreadwrite",
"s3tests_boto3/functional/test_s3.py::test_access_bucket_private_objectv2_private",
"s3tests_boto3/functional/test_s3.py::test_access_bucket_private_objectv2_publicread",
"s3tests_boto3/functional/test_s3.py::test_access_bucket_private_objectv2_publicreadwrite",
"s3tests_boto3/functional/test_s3.py::test_access_bucket_publicread_object_private",
"s3tests_boto3/functional/test_s3.py::test_access_bucket_publicread_object_publicread",
"s3tests_boto3/functional/test_s3.py::test_access_bucket_publicread_object_publicreadwrite",
"s3tests_boto3/functional/test_s3.py::test_access_bucket_publicreadwrite_object_private",
"s3tests_boto3/functional/test_s3.py::test_access_bucket_publicreadwrite_object_publicread",
"s3tests_boto3/functional/test_s3.py::test_access_bucket_publicreadwrite_object_publicreadwrite",
"s3tests_boto3/functional/test_s3.py::test_bucket_create_special_key_names",
"s3tests_boto3/functional/test_s3.py::test_bucket_policy_put_obj_acl",
"s3tests_boto3/functional/test_s3.py::test_bucket_policy_put_obj_grant",
"s3tests_boto3/functional/test_s3.py::test_cors_presigned_get_object",
"s3tests_boto3/functional/test_s3.py::test_cors_presigned_get_object_tenant",
"s3tests_boto3/functional/test_s3.py::test_cors_presigned_put_object",
"s3tests_boto3/functional/test_s3.py::test_cors_presigned_put_object_with_acl",
"s3tests_boto3/functional/test_s3.py::test_cors_presigned_put_object_tenant",
"s3tests_boto3/functional/test_s3.py::test_cors_presigned_put_object_tenant_with_acl",
"s3tests_boto3/functional/test_s3.py::test_object_presigned_put_object_with_acl",
"s3tests_boto3/functional/test_s3.py::test_object_presigned_put_object_with_acl_tenant",
"s3tests_boto3/functional/test_s3.py::test_object_acl",
"s3tests_boto3/functional/test_s3.py::test_object_acl_canned",
"s3tests_boto3/functional/test_s3.py::test_object_acl_canned_authenticatedread",
"s3tests_boto3/functional/test_s3.py::test_object_acl_canned_bucketownerfullcontrol",
"s3tests_boto3/functional/test_s3.py::test_object_acl_canned_bucketownerread",
"s3tests_boto3/functional/test_s3.py::test_object_acl_canned_during_create",
"s3tests_boto3/functional/test_s3.py::test_object_acl_canned_publicreadwrite",
"s3tests_boto3/functional/test_s3.py::test_object_acl_create_contentlength_none",
"s3tests_boto3/functional/test_s3.py::test_object_acl_default",
"s3tests_boto3/functional/test_s3.py::test_object_acl_full_control_verify_attributes",
"s3tests_boto3/functional/test_s3.py::test_object_acl_full_control_verify_owner",
"s3tests_boto3/functional/test_s3.py::test_object_acl_read",
"s3tests_boto3/functional/test_s3.py::test_object_acl_readacp",
"s3tests_boto3/functional/test_s3.py::test_object_acl_write",
"s3tests_boto3/functional/test_s3.py::test_object_acl_writeacp",
"s3tests_boto3/functional/test_s3.py::test_object_copy_canned_acl",
"s3tests_boto3/functional/test_s3.py::test_object_copy_not_owned_object_bucket",
"s3tests_boto3/functional/test_s3.py::test_object_delete_key_bucket_gone",
"s3tests_boto3/functional/test_s3.py::test_object_put_acl_mtime",
"s3tests_boto3/functional/test_s3.py::test_object_raw_authenticated",
"s3tests_boto3/functional/test_s3.py::test_object_raw_authenticated_bucket_acl",
"s3tests_boto3/functional/test_s3.py::test_object_raw_authenticated_bucket_gone",
"s3tests_boto3/functional/test_s3.py::test_object_raw_authenticated_object_acl",
"s3tests_boto3/functional/test_s3.py::test_object_raw_authenticated_object_gone",
"s3tests_boto3/functional/test_s3.py::test_object_raw_get",
"s3tests_boto3/functional/test_s3.py::test_object_raw_get_bucket_acl",
"s3tests_boto3/functional/test_s3.py::test_object_raw_get_bucket_gone",
"s3tests_boto3/functional/test_s3.py::test_object_raw_get_object_acl",
"s3tests_boto3/functional/test_s3.py::test_object_raw_get_object_gone",
"s3tests_boto3/functional/test_s3.py::test_object_raw_get_x_amz_expires_not_expired",
"s3tests_boto3/functional/test_s3.py::test_object_raw_get_x_amz_expires_not_expired_tenant",
"s3tests_boto3/functional/test_s3.py::test_object_raw_get_x_amz_expires_out_max_range",
"s3tests_boto3/functional/test_s3.py::test_object_raw_get_x_amz_expires_out_positive_range",
"s3tests_boto3/functional/test_s3.py::test_object_raw_get_x_amz_expires_out_range_zero",
"s3tests_boto3/functional/test_s3.py::test_object_raw_response_headers",
"s3tests_boto3/functional/test_s3.py::test_post_object_anonymous_request",
"s3tests_boto3/functional/test_s3.py::test_post_object_set_invalid_success_code",
"s3tests_boto3/functional/test_s3.py::test_post_object_set_success_code",
"s3tests_boto3/functional/test_s3.py::test_versioned_object_acl",
"s3tests_boto3/functional/test_s3.py::test_versioned_object_acl_no_version_specified"
],
"skip": true,
"comment": "Not supported"
},
{
"name": "Atomicity",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_atomic_dual_write_1mb",
"s3tests_boto3/functional/test_s3.py::test_atomic_dual_write_4mb",
"s3tests_boto3/functional/test_s3.py::test_atomic_dual_write_8mb",
"s3tests_boto3/functional/test_s3.py::test_atomic_read_1mb",
"s3tests_boto3/functional/test_s3.py::test_atomic_read_4mb",
"s3tests_boto3/functional/test_s3.py::test_atomic_read_8mb",
"s3tests_boto3/functional/test_s3.py::test_atomic_write_1mb",
"s3tests_boto3/functional/test_s3.py::test_atomic_write_4mb",
"s3tests_boto3/functional/test_s3.py::test_atomic_write_8mb"
],
"skip": true,
"comment": "Passed but don't fit any API related group, so skip"
},
{
"name": "Bucket canned ACL, owner full control",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_bucket_acl_canned",
"s3tests_boto3/functional/test_s3.py::test_bucket_acl_canned_authenticatedread",
"s3tests_boto3/functional/test_s3.py::test_bucket_acl_canned_during_create",
"s3tests_boto3/functional/test_s3.py::test_bucket_acl_canned_publicreadwrite",
"s3tests_boto3/functional/test_s3.py::test_bucket_acl_default"
],
"skip": true,
"comment": "Not supported <br>Full Control to bucket owner is required"
},
{
"name": "Bucket ACL, using payload",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_bucket_acl_grant_nonexist_user",
"s3tests_boto3/functional/test_s3.py::test_bucket_acl_grant_userid_fullcontrol",
"s3tests_boto3/functional/test_s3.py::test_bucket_acl_grant_userid_read",
"s3tests_boto3/functional/test_s3.py::test_bucket_acl_grant_userid_readacp",
"s3tests_boto3/functional/test_s3.py::test_bucket_acl_grant_userid_write",
"s3tests_boto3/functional/test_s3.py::test_bucket_acl_grant_userid_writeacp",
"s3tests_boto3/functional/test_s3.py::test_bucket_header_acl_grants"
],
"skip": true,
"comment": "Not supported <br>Full Control to bucket owner is required"
},
{
"name": "Email checking",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_bucket_acl_grant_email",
"s3tests_boto3/functional/test_s3.py::test_bucket_acl_grant_email_not_exist"
],
"skip": true,
"comment": "Not supported <br>Email checking"
},
{
"name": "Authorization header manipulating",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_headers.py::test_bucket_create_bad_authorization_empty",
"s3tests_boto3/functional/test_headers.py::test_bucket_create_bad_authorization_none"
],
"skip": true,
"comment": "Bad test <br>failed_on_rwg <br># TODO: remove 'fails_on_rgw' and once we have learned how to manipulate the authorization header"
},
{
"name": "test_bucket_create_bad_expect_mismatch",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_headers.py::test_bucket_create_bad_expect_mismatch"
],
"skip": true,
"comment": "Don't support 'Expect: 200'"
},
{
"name": "test_bucket_create_exists",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_bucket_create_exists"
],
"skip": true,
"comment": "Bad test <br>Incorrect asserting response error"
},
{
"name": "Checking object owner",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_bucket_list_return_data",
"s3tests_boto3/functional/test_s3.py::test_bucket_list_return_data_versioning",
"s3tests_boto3/functional/test_s3.py::test_list_multipart_upload_owner"
],
"skip": true,
"comment": "Checking object owner. In s3-gw it's always gate key."
},
{
"name": "test_bucket_listv2_continuationtoken_empty",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_bucket_listv2_continuationtoken_empty"
],
"skip": true,
"comment": "Empty continuation token not supported"
},
{
"name": "authenticated-read bucket acl",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_bucket_policy_acl",
"s3tests_boto3/functional/test_s3.py::test_bucketv2_policy_acl"
],
"skip": true,
"comment": "authenticated-read bucket ACL not supported"
},
{
"name": "any bucket as resource in bucket policy",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_bucket_policy_another_bucket",
"s3tests_boto3/functional/test_s3.py::test_bucketv2_policy_another_bucket"
],
"skip": true,
"comment": "Bucket policy with 'arn:aws:s3:::*' resource not supported"
},
{
"name": "tenants",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_bucket_policy_different_tenant",
"s3tests_boto3/functional/test_s3.py::test_bucketv2_policy_different_tenant"
],
"skip": true,
"comment": "Such tenants not supported"
},
{
"name": "kms",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_bucket_policy_put_obj_kms_noenc",
"s3tests_boto3/functional/test_s3.py::test_bucket_policy_put_obj_kms_s3",
"s3tests_boto3/functional/test_s3.py::test_bucket_policy_put_obj_s3_kms",
"s3tests_boto3/functional/test_s3.py::test_put_obj_enc_conflict_bad_enc_kms",
"s3tests_boto3/functional/test_s3.py::test_put_obj_enc_conflict_c_kms",
"s3tests_boto3/functional/test_s3.py::test_put_obj_enc_conflict_c_s3",
"s3tests_boto3/functional/test_s3.py::test_put_obj_enc_conflict_s3_kms",
"s3tests_boto3/functional/test_s3.py::test_sse_kms_method_head",
"s3tests_boto3/functional/test_s3.py::test_sse_kms_multipart_invalid_chunks_1",
"s3tests_boto3/functional/test_s3.py::test_sse_kms_multipart_invalid_chunks_2",
"s3tests_boto3/functional/test_s3.py::test_sse_kms_multipart_upload",
"s3tests_boto3/functional/test_s3.py::test_sse_kms_no_key",
"s3tests_boto3/functional/test_s3.py::test_sse_kms_not_declared",
"s3tests_boto3/functional/test_s3.py::test_sse_kms_post_object_authenticated_request",
"s3tests_boto3/functional/test_s3.py::test_sse_kms_present",
"s3tests_boto3/functional/test_s3.py::test_sse_kms_read_declare",
"s3tests_boto3/functional/test_s3.py::test_sse_kms_transfer_13b",
"s3tests_boto3/functional/test_s3.py::test_sse_kms_transfer_1MB",
"s3tests_boto3/functional/test_s3.py::test_sse_kms_transfer_1b"
],
"skip": true,
"comment": "KMS not supported"
},
{
"name": "sse_s3",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_sse_s3_encrypted_upload_1b",
"s3tests_boto3/functional/test_s3.py::test_sse_s3_encrypted_upload_1kb",
"s3tests_boto3/functional/test_s3.py::test_sse_s3_encrypted_upload_1mb",
"s3tests_boto3/functional/test_s3.py::test_sse_s3_encrypted_upload_8mb"
],
"skip": true,
"comment": "SSE-S3 not supported"
},
{
"name": "alternative client in different account",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_bucket_policy_put_obj_request_obj_tag",
"s3tests_boto3/functional/test_s3.py::test_object_copy_not_owned_bucket"
],
"skip": true,
"comment": "Alternative client must be in different namespace. Couldn't be used without additional header."
},
{
"name": "test_bucket_policy_set_condition_operator_end_with_IfExists",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_bucket_policy_set_condition_operator_end_with_IfExists"
],
"skip": true,
"comment": "StringLikeIfExists operator not supported."
},
{
"name": "Recreate bucket with acl",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_bucket_recreate_new_acl",
"s3tests_boto3/functional/test_s3.py::test_bucket_recreate_overwrite_acl"
],
"skip": true,
"comment": "Expected BucketAlreadyExists but s3-gw returns BucketAlreadyOwnedByYou because tests use the same client."
},
{
"name": "Recreate bucket",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_bucket_recreate_not_overriding",
"s3tests_boto3/functional/test_s3.py::test_versioning_concurrent_multi_object_delete"
],
"skip": true,
"comment": "Not supported <br>Expect success on bucket recreate in default region https://git.frostfs.info/TrueCloudLab/frostfs-s3-gw/issues/537"
},
{
"name": "test_lifecycle_expiration_header_tags_head",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_header_tags_head"
],
"skip": true,
"comment": "Probably bad test <br>AWS fails <br>https://git.frostfs.info/TrueCloudLab/frostfs-s3-gw/issues/545"
},
{
"name": "get bucket policy status",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_get_authpublic_acl_bucket_policy_status",
"s3tests_boto3/functional/test_s3.py::test_get_public_acl_bucket_policy_status",
"s3tests_boto3/functional/test_s3.py::test_get_publicpolicy_acl_bucket_policy_status",
"s3tests_boto3/functional/test_s3.py::test_get_bucket_policy_status",
"s3tests_boto3/functional/test_s3.py::test_get_nonpublicpolicy_acl_bucket_policy_status"
],
"skip": true,
"comment": "Not supported <br>S3 gate computes status based on policy, not on canned acl <br>AWS also fails"
},
{
"name": "Lifecycle transition",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_lifecycle_plain_null_version_current_transition",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_set_noncurrent_transition",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_transition",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_transition_set_invalid_date",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_transition_single_rule_multi_trans"
],
"skip": true,
"comment": "Lifecycle transition not supported."
},
{
"name": "Repeated complete multipart upload",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_multipart_upload_small",
"s3tests_boto3/functional/test_s3.py::test_multipart_upload"
],
"skip": true,
"comment": "https://git.frostfs.info/TrueCloudLab/frostfs-s3-gw/issues/530"
},
{
"name": "bad authorization tests",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_headers.py::test_object_create_amz_date_and_no_date",
"s3tests_boto3/functional/test_headers.py::test_object_create_bad_authorization_empty",
"s3tests_boto3/functional/test_headers.py::test_object_create_bad_authorization_none",
"s3tests_boto3/functional/test_headers.py::test_object_create_bad_contentlength_none",
"s3tests_boto3/functional/test_headers.py::test_object_create_date_and_amz_date",
"s3tests_boto3/functional/test_headers.py::test_object_read_unreadable",
"s3tests_boto3/functional/test_headers.py::test_object_set_get_unicode_metadata",
"s3tests_boto3/functional/test_s3.py::test_object_write_with_chunked_transfer_encoding",
"s3tests_boto3/functional/test_s3.py::test_put_excess_tags"
],
"skip": true,
"comment": "Fails on aws though there are not fails_on_aws mark"
},
{
"name": "empty metadata",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_object_set_get_metadata_none_to_empty",
"s3tests_boto3/functional/test_s3.py::test_object_set_get_metadata_overwrite_to_empty"
],
"skip": true,
"comment": "Empty metadata not supported"
},
{
"name": "fails_on_aws",
"tag": "Ignored",
"tests": [
"s3tests_boto3/functional/test_s3.py::test_account_usage",
"s3tests_boto3/functional/test_s3.py::test_head_bucket_usage",
"s3tests_boto3/functional/test_s3.py::test_atomic_conditional_write_1mb",
"s3tests_boto3/functional/test_s3.py::test_atomic_dual_conditional_write_1mb",
"s3tests_boto3/functional/test_s3.py::test_atomic_write_bucket_gone",
"s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_bad_ip",
"s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_bad_starts_nonalpha",
"s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_dns_dash_at_end",
"s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_dns_dash_dot",
"s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_dns_dot_dash",
"s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_dns_dot_dot",
"s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_dns_long",
"s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_dns_underscore",
"s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_good_long_60",
"s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_good_long_61",
"s3tests_boto3/functional/test_s3.py::test_bucket_create_naming_good_long_62",
"s3tests_boto3/functional/test_s3.py::test_bucket_head_extended",
"s3tests_boto3/functional/test_s3.py::test_bucket_list_long_name",
"s3tests_boto3/functional/test_s3.py::test_bucket_list_unordered",
"s3tests_boto3/functional/test_s3.py::test_bucket_listv2_unordered",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_cloud_multiple_transition",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_cloud_transition",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_cloud_transition_large_obj",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_deletemarker_expiration",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_date",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_newer_noncurrent",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_noncur_tags1",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_size_gt",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_size_lt",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_tags1",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_tags2",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_versioned_tags2",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_versioning_enabled",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_multipart_expiration",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_noncur_cloud_transition",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_noncur_expiration",
"s3tests_boto3/functional/test_s3.py::test_lifecycle_noncur_transition",
"s3tests_boto3/functional/test_s3.py::test_lifecyclev2_expiration",
"s3tests_boto3/functional/test_s3.py::test_list_buckets_anonymous",
"s3tests_boto3/functional/test_s3.py::test_object_header_acl_grants",
"s3tests_boto3/functional/test_s3.py::test_multipart_get_part",
"s3tests_boto3/functional/test_s3.py::test_non_multipart_get_part",
"s3tests_boto3/functional/test_s3.py::test_multipart_resend_first_finishes_last",
"s3tests_boto3/functional/test_s3.py::test_put_object_ifmatch_failed",
"s3tests_boto3/functional/test_s3.py::test_put_object_ifmatch_good",
"s3tests_boto3/functional/test_s3.py::test_put_object_ifmatch_nonexisted_failed",
"s3tests_boto3/functional/test_s3.py::test_put_object_ifmatch_overwrite_existed_good",
"s3tests_boto3/functional/test_s3.py::test_put_object_ifnonmatch_failed",
"s3tests_boto3/functional/test_s3.py::test_put_object_ifnonmatch_good",
"s3tests_boto3/functional/test_s3.py::test_put_object_ifnonmatch_nonexisted_good",
"s3tests_boto3/functional/test_s3.py::test_put_object_ifnonmatch_overwrite_existed_failed"
],
"skip": true,
"comment": "Fails on AWS"
}
]
}

View file

@ -0,0 +1,7 @@
# S3 Tests
Commit: [7aae6ce2ca48ccd0ac35100af074281c7c88a210](https://git.frostfs.info/TrueCloudLab/s3-tests/commit/7aae6ce2ca48ccd0ac35100af074281c7c88a210)
| Test | Group | Skip | Comment |
|------|-------|------|---------|{{range .}}
| {{.Name}} | {{.Group}} | {{.Skip}} | {{.Comment}} |{{end}}

View file

@ -35,6 +35,8 @@ var (
txtTemplate []byte
//go:embed resources/md-template.gotmpl
mdTemplate []byte
//go:embed resources/tests-describe-template.gotmpl
describeTemplate []byte
)
func GetTemplate(outFormat string) (*template.Template, error) {
@ -84,3 +86,7 @@ func ColorToTerminal(color string) string {
return blackTerminal
}
}
func GetDescribeTemplate() (*template.Template, error) {
return template.New("describe-tests").Parse(string(describeTemplate))
}