diff --git a/.dockerignore b/.dockerignore index 50998123..20c2acdf 100644 --- a/.dockerignore +++ b/.dockerignore @@ -43,4 +43,7 @@ dist/ /LICENSE /NOTICE /CODE_OF_CONDUCT.md -/README.md \ No newline at end of file +/README.md + +# standard bats test file folder +/versity-gwtest-files \ No newline at end of file diff --git a/tests/README.md b/tests/README.md index 8ba5fb03..3c9ceba5 100644 --- a/tests/README.md +++ b/tests/README.md @@ -121,7 +121,7 @@ A single instance can be run with `docker-compose -f docker-compose-bats.yml up **VERSITY_EXE**: location of the versity executable relative to test folder. -**RUN_VERSITYGW**: whether to run the versitygw executable, should be set to **false** when running tests directly against **s3**. +**RUN_VERSITYGW**: whether to run the versitygw executable, should be set to **false** when running tests directly against **s3**, or testing against another S3-compatible endpoint. **PORT**: port to run the versity app on, if not specified, defaults to **7070**. @@ -157,7 +157,7 @@ A single instance can be run with `docker-compose -f docker-compose-bats.yml up **VERSITY_LOG_FILE**: log file for versity application as it is tested by bats tests. -**DIRECT**: if **true**, bypass versitygw and run directly against s3 (for comparison and validity-checking purposes). +**DIRECT**: if **true**, bypass versitygw and run directly against s3, for comparison and validity-checking purposes. This parameter disables the `AWS_ENDPOINT_URL` parameter. **DIRECT_DISPLAY_NAME**: AWS ACL main user display name if **DIRECT** is set to **true**. diff --git a/tests/drivers/rest.sh b/tests/drivers/rest.sh index 7cbf67bc..56138c74 100644 --- a/tests/drivers/rest.sh +++ b/tests/drivers/rest.sh @@ -410,7 +410,7 @@ check_for_header_key_and_value() { elif [ "$check_result" -eq 0 ]; then return 0 fi - done <<< "$(grep -E '^.+: .+$' "$1")" + done <<< "$(grep -aE '^.+: .+$' "$1")" log 2 "no header key '$2' found" return 1 } diff --git a/tests/rest_scripts/calculate_checksum.sh b/tests/rest_scripts/calculate_checksum.sh index ca99e899..33560baa 100755 --- a/tests/rest_scripts/calculate_checksum.sh +++ b/tests/rest_scripts/calculate_checksum.sh @@ -21,7 +21,7 @@ calculate_checksum_python() { log 2 "'calculate_checksum_python' requires checksum type, data file" return 1 fi - if ! DEACTIVATE=false source ./tests/rest_scripts/init_python_env.sh; then + if ! DEACTIVATE=false source ./tests/rest_scripts/init_python_env.sh 2>/dev/null; then log_rest 2 "error initializing python environment" return 1 fi diff --git a/tests/tags/get_tests.sh b/tests/tags/get_tests.sh index 65be73f7..3a275e53 100755 --- a/tests/tags/get_tests.sh +++ b/tests/tags/get_tests.sh @@ -55,6 +55,12 @@ run_tests() { return 1 fi + if [ -z "$VERSITYGW_TEST_ENV" ]; then + usage + echo "VERSITYGW_TEST_ENV must be defined" >&2 + exit 1 + fi + local i=0 files=() names=() tags=() while IFS=$'\t' read -r loc t name || [ -n "$loc" ]; do @@ -140,11 +146,5 @@ if [ "$list_tags_flag" -eq 1 ]; then exit 0 fi -if [ -z "$VERSITYGW_TEST_ENV" ]; then - usage - echo "VERSITYGW_TEST_ENV must be defined" >&2 - exit 1 -fi - list_and_run_tests "$tag_matching_mode" "$list_flag" "$count_flag" "$run_flag" "${forwarded_args[@]}" diff --git a/tests/tags/list_tags.py b/tests/tags/list_tags.py index fe96f66f..67ad62a9 100644 --- a/tests/tags/list_tags.py +++ b/tests/tags/list_tags.py @@ -93,7 +93,7 @@ def print_tag_description(data: dict, tag: str) -> int: g_lower = {k.lower(): v for k, v in group_tags.items()} tag_lower = tag.lower() if tag_lower in g_lower: - desc = (group_tags.get(tag_lower, {}) or {}).get("desc", "") + desc = (g_lower.get(tag_lower, {}) or {}).get("desc", "") print(f"{tag}: {desc}") return 0 return 1 diff --git a/tests/tags/tags.yaml b/tests/tags/tags.yaml index 4eaad5f2..c1090aec 100644 --- a/tests/tags/tags.yaml +++ b/tests/tags/tags.yaml @@ -2,52 +2,294 @@ version: 1 tags: feature: + cors: + desc: "Bucket CORS configuration and CORS response behavior" + location-constraint: + desc: "CreateBucket LocationConstraint XML field" + legal-hold: + desc: "Object Lock legal hold behavior" + object-lock: + desc: "Object Lock feature (retention/legal hold)" + retention: + desc: "Retention policy behavior" + composite-checksum: + desc: "Composite checksum calculation" + checksum: + desc: "Checksum behavior and validation" + chunked: + desc: "Chunked/streaming upload tests" invalid-method: desc: "Tests for invalid methods" invalid-header: desc: "Tests for invalid headers" + invalid-query: + desc: "Tests for invalid query parameters" malformed-message: desc: "Tests for severely malformed messages" minimal-request: desc: "Tests that do not use any optional query or header values" multipart: desc: "Multipart upload" + presigned-url: + desc: "Presigned URL" required-headers: desc: "Required headers such as 'Authorization' and 'x-amz-date'" + unit: + desc: "versitygw unit tests" user: desc: "versitygw user tests" + tagging: + desc: "Bucket/object tagging" + policy: + desc: "Bucket/object policies" + public-access: + desc: "Public access / policy status behavior" + versioning: + desc: "Versioning semantics" + not-implemented: + desc: "Operations expected to return 501 Not Implemented" client: curl: desc: "REST curl commands" + s3: + desc: "AWS CLI s3 commands" + s3api: + desc: "AWS CLI s3api commands" + s3cmd: + desc: "s3cmd client commands" + mc: + desc: "Minio MC commands" openssl: desc: "REST OpenSSL commands" command: + AbortMultipartUpload: + desc: "AbortMultipartUpload command" + CompleteMultipartUpload: + desc: "CompleteMultipartUpload command" + CopyObject: + desc: "CopyObject command" + CreateBucket: + desc: "CreateBucket command" + CreateMultipartUpload: + desc: "CreateMultipartUpload command" + DeleteBucket: + desc: "DeleteBucket command" + DeleteBucketCors: + desc: "DeleteBucketCors command" + DeleteBucketOwnershipControls: + desc: "DeleteBucketOwnershipControls command" + DeleteBucketPolicy: + desc: "DeleteBucketPolicy command" + DeleteBucketTagging: + desc: "DeleteBucketTagging command" + DeleteObject: + desc: "DeleteObject command" + DeleteObjectTagging: + desc: "DeleteObjectTagging command" + GetBucketAcl: + desc: "GetBucketAcl command" + GetBucketCors: + desc: "GetBucketCors command" + GetBucketLocation: + desc: "GetBucketLocation command" + GetBucketOwnershipControls: + desc: "GetBucketOwnershipControls command" + GetBucketPolicy: + desc: "GetBucketPolicy command" + GetBucketPolicyStatus: + desc: "GetBucketPolicyStatus command" + GetBucketTagging: + desc: "GetBucketTagging command" GetObject: desc: "GetObject command" + GetObjectAttributes: + desc: "GetObjectAttributes command" + GetObjectLegalHold: + desc: "GetObjectLegalHold command" + GetObjectLockConfiguration: + desc: "GetObjectLockConfiguration command" + GetObjectRetention: + desc: "GetObjectRetention command" + GetObjectTagging: + desc: "GetObjectTagging command" + HeadBucket: + desc: "HeadBucket command" + HeadObject: + desc: "HeadObject command" ListBuckets: desc: "ListBuckets command" + ListMultipartUploads: + desc: "ListMultipartUploads command" + ListObjects: + desc: "ListObjects (v1) command" + ListObjectsV2: + desc: "ListObjectsV2 (list-type=2) command" + ListObjectVersions: + desc: "ListObjectVersions command" + ListParts: + desc: "ListParts command" + PutBucketAcl: + desc: "PutBucketAcl command" + PutBucketCors: + desc: "PutBucketCors command" + PutBucketOwnershipControls: + desc: "PutBucketOwnershipControls command" + PutBucketPolicy: + desc: "PutBucketPolicy command" + PutBucketTagging: + desc: "PutBucketTagging command" + PutBucketVersioning: + desc: "PutBucketVersioning command" + PutObject: + desc: "PutObject command" + PutObjectLegalHold: + desc: "PutObjectLegalHold command" + PutObjectLockConfiguration: + desc: "PutObjectLockConfiguration command" + PutObjectRetention: + desc: "PutObjectRetention command" + PutObjectTagging: + desc: "PutObjectTagging command" + PutPublicAccessBlock: + desc: "PutPublicAccessBlock command" + SelectObjectContent: + desc: "SelectObjectContent command" + UploadPart: + desc: "UploadPart command" + UploadPartCopy: + desc: "UploadPartCopy command" header: Authorization: desc: "Authorization header" host: desc: "host header" + origin: + desc: "Origin header" + access-control-request-method: + desc: "Access-Control-Request-Method header (preflight)" + access-control-request-headers: + desc: "Access-Control-Request-Headers header (preflight)" + access-control-allow-origin: + desc: "Access-Control-Allow-Origin response header" + access-control-allow-methods: + desc: "Access-Control-Allow-Methods response header" + access-control-allow-headers: + desc: "Access-Control-Allow-Headers response header" + access-control-expose-headers: + desc: "Access-Control-Expose-Headers response header" + access-control-max-age: + desc: "Access-Control-Max-Age response header" + content-md5: + desc: "Content-MD5 header" + Content-Disposition: + desc: "Content-Disposition header" + content-length: + desc: "Content-Length header" + Content-Type: + desc: "Content-Type header" + Expect: + desc: "Expect header (e.g. 100-continue)" + ETag: + desc: "ETag response header" + Expires: + desc: "Expires header" + If-Match: + desc: "If-Match header" + If-None-Match: + desc: "If-None-Match header" range: desc: "ranged download tests" + x-amz-acl: + desc: "x-amz-acl (canned ACL) header" + x-amz-meta: + desc: "x-amz-meta-* user metadata headers" x-amz-content-sha256: desc: "x-amz-content-sha256 header (payload hash and/or type)" + x-amz-copy-source: + desc: "x-amz-copy-source header" x-amz-date: desc: "x-amz-date header" + x-amz-bucket-region: + desc: "x-amz-bucket-region response header" + x-amz-trailer: + desc: "x-amz-trailer header (checksum trailer declaration)" + x-amz-object-attributes: + desc: "x-amz-object-attributes header (requested attribute set)" + x-amz-object-lock-mode: + desc: "x-amz-object-lock-mode header" + x-amz-object-lock-retain-until-date: + desc: "x-amz-object-lock-retain-until-date header" + x-amz-checksum-sha256: + desc: "x-amz-checksum-sha256 header (checksum request/validation)" + x-amz-checksum-crc32: + desc: "x-amz-checksum-crc32 header (checksum request/validation)" + x-amz-checksum-crc32c: + desc: "x-amz-checksum-crc32c header (checksum request/validation)" + x-amz-checksum-crc64nvme: + desc: "x-amz-checksum-crc64nvme header (checksum request/validation)" + x-amz-checksum-sha1: + desc: "x-amz-checksum-sha1 header (checksum request/validation)" + x-amz-checksum-type: + desc: "x-amz-checksum-type header" + x-amz-checksum-algorithm: + desc: "x-amz-checksum-algorithm header" + x-amz-grant-read-acp: + desc: "ACL permission to read object ACL" + x-amz-grant-full-control: + desc: "x-amz-grant-full-control header" + x-amz-grant-read: + desc: "x-amz-grant-read header" + x-amz-grant-write: + desc: "x-amz-grant-write header" + x-amz-grant-write-acp: + desc: "x-amz-grant-write-acp header" + x-amz-expected-bucket-owner: + desc: "x-amz-expected-bucket-owner header" + x-amz-bypass-governance-retention: + desc: "x-amz-bypass-governance-retention header" + x-amz-mp-object-size: + desc: "x-amz-mp-object-size header" query: bucket-region: desc: "ListBuckets bucket-region query" + cors: + desc: "Bucket CORS subresource (?cors)" continuation-token: desc: "ListBuckets/ListObjects continuation token query" + delimiter: + desc: "ListObjects delimiter query" + legal-hold: + desc: "Object legal-hold subresource (?legal-hold=)" + encoding-type: + desc: "ListObjects encoding-type query" + fetch-owner: + desc: "ListObjectsV2 fetch-owner query" + list-type: + desc: "ListObjectsV2 list-type query" + marker: + desc: "ListObjects marker query" + max-keys: + desc: "ListObjects max-keys query" + object-lock: + desc: "Object lock configuration subresource (?object-lock=)" max-buckets: desc: "Maximum amount of buckets returned by ListBuckets command" + ownershipControls: + desc: "Bucket ownershipControls subresource (?ownershipControls=)" + policyStatus: + desc: "Bucket policyStatus subresource (?policyStatus=)" + policy: + desc: "Bucket policy subresource (?policy=)" partNumber: desc: "partNumber query for multiparts and gets" + uploadId: + desc: "Multipart uploadId query" prefix: desc: "bucket or object prefix query" + tagging: + desc: "Bucket/object tagging subresource (?tagging=)" + start-after: + desc: "ListObjectsV2 start-after query" response-cache-control: desc: "override cache-control header response" response-content-disposition: @@ -60,3 +302,13 @@ tags: desc: "override content-type header response" response-expires: desc: "override expires header response" + retention: + desc: "Object retention subresource (?retention=)" + attributes: + desc: "GetObjectAttributes attributes query/subresource" + versionId: + desc: "Object versionId query" + versions: + desc: "ListObjectVersions subresource (?versions=)" + versioning: + desc: "Bucket versioning subresource (?versioning=)" diff --git a/tests/test_file.sh b/tests/test_file.sh index 75b186d9..f6bb39c6 100755 --- a/tests/test_file.sh +++ b/tests/test_file.sh @@ -31,6 +31,7 @@ assert_test_file_folder_exists() { } # shellcheck disable=SC2030 +# tags: curl, GetObject @test "test - download_and_compare_file" { file_exists_in_dest_location=("true" "false") pass_or_fail=("true" "false") diff --git a/tests/test_mc.sh b/tests/test_mc.sh index 23c91d61..0f13c852 100755 --- a/tests/test_mc.sh +++ b/tests/test_mc.sh @@ -34,21 +34,25 @@ source ./tests/util/util_head_bucket.sh export RUN_MC=true # complete-multipart-upload +# tags: mc,minimal-request,PutObject,multipart @test "test_multipart_upload_mc" { test_common_multipart_upload "mc" } # copy-object +# tags: mc,minimal-request,CopyObject @test "test_copy_object" { test_common_copy_object "mc" } # create-bucket +# tags: mc,minimal-request,CreateBucket,DeleteBucket @test "test_create_delete_bucket" { test_common_create_delete_bucket "mc" } # delete-bucket +# tags: mc,minimal-request,CreateBucket,DeleteBucket @test "test_delete_bucket" { if [[ $RECREATE_BUCKETS == "false" ]]; then skip "will not test bucket deletion in static bucket test config" @@ -61,6 +65,7 @@ export RUN_MC=true } # delete-bucket-policy +# tags: mc,minimal-request,GetBucketPolicy,PutBucketPolicy @test "test_get_put_delete_bucket_policy" { if [[ -n $SKIP_POLICY ]]; then skip "will not test policy actions with SKIP_POLICY set" @@ -68,58 +73,57 @@ export RUN_MC=true test_common_get_put_delete_bucket_policy "mc" } -# delete-bucket-tagging +# tags: mc,minimal-request,GetBucketTagging,PutBucketTagging,DeleteBucketTagging @test "test_set_get_delete_bucket_tags" { test_common_set_get_delete_bucket_tags "mc" } -# delete-object - put-object tests - -# delete-object-tagging +# tags: mc,minimal-request,GetObjectTagging,PutObjectTagging,DeleteObjectTagging @test "test_delete_object_tagging" { test_common_delete_object_tagging "mc" } -# delete-objects - test setup/teardown - -# get-bucket-location +# tags: mc,minimal-request,GetBucketLocation @test "test_get_bucket_location" { test_common_get_bucket_location "mc" } -# get-bucket-policy - test_get_put_delete_bucket_policy - -# get-bucket-tagging +# tags: mc,minimal-request,GetObjectTagging,PutObjectTagging,DeleteObjectTagging @test "test_set_get_object_tags_mc" { test_common_set_get_object_tags "mc" } -# get-object +# tags: mc,minimal-request,PutObject,GetObject @test "test_put_get_object" { test_common_put_get_object "mc" } +# tags: mc,minimal-request,PutObject @test "test_put_object-with-data-mc" { test_common_put_object_with_data "mc" } +# tags: mc,minimal-request,PutObject @test "test_put_object-no-data-mc" { test_common_put_object_no_data "mc" } +# tags: mc,minimal-request,ListBuckets @test "test_list_buckets_mc" { test_common_list_buckets "mc" } +# tags: mc,minimal-request,ListObjects @test "test_list_objects_mc" { test_common_list_objects "mc" } - +# tags: mc,presigned-url @test "test_presigned_url_utf8_chars_mc" { test_common_presigned_url_utf8_chars "mc" } +# tags: mc,minimal-request,CreateBucket @test "test_create_bucket_invalid_name_mc" { if [[ $RECREATE_BUCKETS != "true" ]]; then return @@ -129,6 +133,7 @@ export RUN_MC=true assert_success } +# tags: mc,minimal-request,HeadBucket @test "test_get_bucket_info_mc" { run setup_bucket "$BUCKET_ONE_NAME" assert_success @@ -137,6 +142,7 @@ export RUN_MC=true assert_success } +# tags: mc,minimal-request,HeadBucket @test "test_get_bucket_info_doesnt_exist_mc" { run setup_bucket "$BUCKET_ONE_NAME" assert_success @@ -145,6 +151,7 @@ export RUN_MC=true assert_failure 1 } +# tags: mc,minimal-request,ListObjects @test "test_ls_directory_object" { test_common_ls_directory_object "mc" } diff --git a/tests/test_mc_file_count.sh b/tests/test_mc_file_count.sh index d05a93ab..32970a45 100755 --- a/tests/test_mc_file_count.sh +++ b/tests/test_mc_file_count.sh @@ -22,6 +22,7 @@ source ./tests/test_common.sh export RUN_MC=true +# tags: mc,minimal-request,ListObjects @test "test_list_objects_file_count" { test_common_list_objects_file_count "mc" } diff --git a/tests/test_report.sh b/tests/test_report.sh index 67c49eeb..30974123 100755 --- a/tests/test_report.sh +++ b/tests/test_report.sh @@ -21,6 +21,7 @@ source ./tests/logger.sh source ./tests/report.sh source ./tests/setup_unit.sh +# tags: unit @test "reporting - parse curl method" { tests=(" -Iks" "" " -X PUT" " -X DELETE") expected_results=("HEAD" "GET" "PUT" "DELETE") @@ -32,6 +33,7 @@ source ./tests/setup_unit.sh done } +# tags: unit @test "reporting - parse curl route" { tests=("http://localhost:7070/bucket_name" "http://localhost:7070/bucket_name/file_name" "http://localhost:7070/" "") expected_results=("BUCKET" "OBJECT" "MAIN" "UNKNOWN") @@ -43,6 +45,7 @@ source ./tests/setup_unit.sh done } +# tags: unit @test "reporting - get query" { tests=("https://localhost:7070/?query1=" "https://localhost/bucket?another=" "https://1.2.3.4/" "http://localhost/bucket/file?third") expected_results=("query1" "another" "" "third") @@ -54,6 +57,7 @@ source ./tests/setup_unit.sh done } +# tags: unit @test "reporting - parse curl rest command" { tests=("curl -iks https://localhost:7070/versity-gwtest-bucket-one-1-20260127113351?location= -H Authorization: AWS4-HMAC-SHA256 Credential=AKIA6****/20260127/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=68c0b96180a5791be8a10335c10d302d31d358c4bc6028aec94faf502f3a185e -H host: localhost:7070 -H x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -H x-amz-date: 20260127T143355Z") expected_command=("GET BUCKET location") @@ -64,6 +68,7 @@ source ./tests/setup_unit.sh done } +# tags: unit @test "openssl - get method, route, and queries" { tests=("GET / HTTP/1.1 Authorization: AWS4-HMAC-SHA256 Credential=AKIAQJVWFRZQNI6LF3W7/20250911/us-east-1/s3/aws4_request,SignedHeaders=x-amz-content-sha256;x-amz-date,Signature=86ffbe2317caddcac569b25aa9b8e8db4a613a639b2a402cf4a9dc0e975ba997 @@ -83,6 +88,7 @@ source ./tests/setup_unit.sh done } +# tags: unit @test "report - check for copy header value" { test_clients=("OPENSSL" "OPENSSL" "CURL" "CURL" "CUR") test_data=("GET / HTTP/1.1 diff --git a/tests/test_rest.sh b/tests/test_rest.sh index 426b1387..1d4603d0 100755 --- a/tests/test_rest.sh +++ b/tests/test_rest.sh @@ -23,6 +23,7 @@ source ./tests/drivers/rest.sh source ./tests/logger.sh source ./tests/setup_unit.sh +# tags: unit @test "check_key_and_value_pair_for_match" { run check_key_and_value_pair_for_match "one" "two" "three" assert_failure 2 @@ -43,6 +44,7 @@ source ./tests/setup_unit.sh assert_success } +# tags: unit @test "check_for_key_and_value_within_pairs" { # match in middle, omit it run check_for_key_and_value_within_pairs "B" "2" "A" "1" "B" "2" "C" "3" @@ -77,6 +79,7 @@ source ./tests/setup_unit.sh assert_failure 2 } +# tags: unit @test "check_header_keys_and_values" { run get_file_name assert_success diff --git a/tests/test_rest_acl.sh b/tests/test_rest_acl.sh index 511768bb..019b1370 100755 --- a/tests/test_rest_acl.sh +++ b/tests/test_rest_acl.sh @@ -33,6 +33,7 @@ if [ "$SKIP_ACL_TESTING" == "true" ] || [ "$SKIP_USERS_TESTS" == "true" ]; then exit 0 fi +# tags: curl,minimal-request,GetBucketAcl @test "REST - get ACL" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -45,6 +46,7 @@ fi assert_success } +# tags: curl,minimal-request,PutBucketAcl @test "REST - put ACL" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -84,6 +86,7 @@ fi assert_success } +# tags: curl,PutBucketAcl,x-amz-acl @test "REST - put public-read canned acl" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -120,6 +123,7 @@ fi assert_success } +# tags: curl,minimal-request,PutBucketAcl @test "REST - put invalid ACL" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -149,6 +153,7 @@ fi assert_success } +# tags: curl,PutBucketAcl,x-amz-acl @test "REST - put public-read-write canned acl" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -182,6 +187,7 @@ fi assert_success } +# tags: curl,PutBucketAcl,x-amz-acl @test "REST - invalid canned acl" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1367" @@ -201,6 +207,7 @@ fi assert_success } +# tags: curl,GetBucketAcl,x-amz-grant-read-acp @test "REST - FULL_CONTROL permission not returned for owner after CreateBucket with GRANT_READ_ACP" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1407" diff --git a/tests/test_rest_attributes.sh b/tests/test_rest_attributes.sh index a7227c5c..dbb7f521 100755 --- a/tests/test_rest_attributes.sh +++ b/tests/test_rest_attributes.sh @@ -21,6 +21,7 @@ source ./tests/setup.sh source ./tests/drivers/create_bucket/create_bucket_rest.sh source ./tests/drivers/get_object_attributes/get_object_attributes_rest.sh +# tags: curl,GetObjectAttributes,attributes,x-amz-object-attributes,multipart @test "REST - get object attributes" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1001" @@ -47,6 +48,7 @@ source ./tests/drivers/get_object_attributes/get_object_attributes_rest.sh assert_success } +# tags: curl,GetObjectAttributes,attributes,x-amz-object-attributes,invalid-header @test "REST - attributes - invalid param" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1001" @@ -70,6 +72,7 @@ source ./tests/drivers/get_object_attributes/get_object_attributes_rest.sh assert_success } +# tags: curl,PutObject,GetObjectAttributes,attributes,x-amz-object-attributes,x-amz-checksum-sha256 @test "REST - attributes - checksum" { run get_file_name assert_success diff --git a/tests/test_rest_bucket.sh b/tests/test_rest_bucket.sh index dba4630a..32563fc7 100755 --- a/tests/test_rest_bucket.sh +++ b/tests/test_rest_bucket.sh @@ -36,6 +36,7 @@ source ./tests/util/util_rest.sh export RUN_USERS=true +# tags: curl,minimal-request,HeadBucket @test "REST - HeadBucket" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -48,6 +49,7 @@ export RUN_USERS=true assert_success } +# tags: curl,minimal-request,GetBucketTagging @test "REST - bucket tagging - no tags" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -60,6 +62,7 @@ export RUN_USERS=true assert_success } +# tags: curl,minimal-request,GetBucketOwnershipControls,PutBucketOwnershipControls @test "REST - get, put bucket ownership controls" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -78,6 +81,7 @@ export RUN_USERS=true assert_success } +# tags: curl,minimal-request,GetObjectLockConfiguration,PutObjectLockConfiguration @test "test_rest_set_get_lock_config" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "test not valid for static buckets" @@ -103,6 +107,7 @@ export RUN_USERS=true assert_success } +# tags: curl,PutBucketVersioning,PutObjectLockConfiguration @test "REST - can set object lock enabled on existing buckets" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -119,6 +124,7 @@ export RUN_USERS=true assert_success } +# tags: curl,PutObjectLockConfiguration,content-md5,invalid-header @test "REST - cannot set object lock enabled without content-md5" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -132,6 +138,7 @@ export RUN_USERS=true assert_success } +# tags: curl,minimal-request,GetBucketPolicy @test "REST - get policy w/o policy" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/959" @@ -147,6 +154,7 @@ export RUN_USERS=true assert_success } +# tags: curl,PutBucketPolicy,user @test "REST - put policy" { if [ "$SKIP_USERS_TESTS" == "true" ]; then skip "skip versitygw-specific users tests" @@ -172,6 +180,7 @@ export RUN_USERS=true assert_success } +# tags: curl,malformed-message,invalid-method @test "REST - POST call on root endpoint" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1487" diff --git a/tests/test_rest_checksum.sh b/tests/test_rest_checksum.sh index ca4a868b..c71be638 100755 --- a/tests/test_rest_checksum.sh +++ b/tests/test_rest_checksum.sh @@ -24,6 +24,7 @@ source ./tests/setup.sh export RUN_USERS=true test_file="test_file" +# tags: curl,checksum,PutObject,invalid-header,x-amz-checksum-sha256 @test "REST - invalid checksum type" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -36,21 +37,25 @@ test_file="test_file" assert_success } +# tags: curl,checksum,PutObject,invalid-header,x-amz-checksum-sha256 @test "REST - sha256 checksum - invalid" { run check_checksum_rest_invalid "sha256" assert_success } +# tags: curl,checksum,PutObject,invalid-header,x-amz-checksum-sha256 @test "REST - sha256 checksum - incorrect" { run check_checksum_rest_incorrect "sha256" assert_success } +# tags: curl,checksum,PutObject,x-amz-checksum-sha256 @test "REST - sha256 checksum - correct" { run add_correct_checksum "sha256" assert_success } +# tags: curl,checksum,PutObject,HeadObject,x-amz-checksum-sha256 @test "REST - HeadObject returns x-amz-checksum-sha256" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -66,21 +71,25 @@ test_file="test_file" assert_success } +# tags: curl,checksum,PutObject,invalid-header,x-amz-checksum-crc32c @test "REST - crc32 checksum - invalid" { run check_checksum_rest_invalid "crc32c" assert_success } +# tags: curl,checksum,PutObject,invalid-header,x-amz-checksum-crc32 @test "REST - crc32 checksum - incorrect" { run check_checksum_rest_incorrect "crc32" assert_success } +# tags: curl,checksum,PutObject,x-amz-checksum-crc32 @test "REST - crc32 checksum - correct" { run add_correct_checksum "crc32" assert_success } +# tags: curl,checksum,PutObject,HeadObject,x-amz-checksum-crc32 @test "REST - crc32 checksum - HeadObject" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -96,51 +105,61 @@ test_file="test_file" assert_success } +# tags: curl,checksum,PutObject,invalid-header,x-amz-checksum-crc64nvme @test "REST - crc64nvme checksum - invalid" { run check_checksum_rest_invalid "crc64nvme" assert_success } +# tags: curl,checksum,PutObject,invalid-header,x-amz-checksum-crc64nvme @test "REST - crc64nvme checksum - incorrect" { run check_checksum_rest_incorrect "crc64nvme" assert_success } +# tags: curl,checksum,PutObject,x-amz-checksum-crc64nvme @test "REST - crc64nvme checksum - correct" { - run add_correct_checksum "sha256" + run add_correct_checksum "crc64nvme" assert_success } +# tags: curl,checksum,PutObject,invalid-header,x-amz-checksum-crc32c @test "REST - crc32c checksum - invalid" { run check_checksum_rest_invalid "crc32c" assert_success } +# tags: curl,checksum,PutObject,invalid-header,x-amz-checksum-crc32c @test "REST - crc32c checksum - incorrect" { run check_checksum_rest_incorrect "crc32c" assert_success } +# tags: curl,checksum,PutObject,x-amz-checksum-crc32c @test "REST - crc32c checksum - correct" { run add_correct_checksum "crc32c" assert_success } +# tags: curl,checksum,PutObject,invalid-header,x-amz-checksum-sha1 @test "REST - sha1 checksum - invalid" { run check_checksum_rest_invalid "sha1" assert_success } +# tags: curl,checksum,PutObject,invalid-header,x-amz-checksum-sha1 @test "REST - sha1 checksum - incorrect" { run check_checksum_rest_incorrect "sha1" assert_success } +# tags: curl,checksum,PutObject,x-amz-checksum-sha1 @test "REST - sha1 checksum - correct" { run add_correct_checksum "sha1" assert_success } +# tags: curl,checksum,PutObject,HeadObject @test "REST - attempt to get checksum without checksum mode" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -156,6 +175,7 @@ test_file="test_file" assert_success } +# tags: curl,checksum,PutObject,HeadObject,x-amz-checksum-crc64nvme @test "REST - HeadObject - default crc64nvme checksum" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success diff --git a/tests/test_rest_chunked.sh b/tests/test_rest_chunked.sh index 8158dc53..8fcdb532 100755 --- a/tests/test_rest_chunked.sh +++ b/tests/test_rest_chunked.sh @@ -24,6 +24,7 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh source ./tests/drivers/get_object_lock_config/get_object_lock_config_rest.sh source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_controls_rest.sh +# tags: openssl,chunked,PutObject,invalid-header,content-length @test "REST - chunked upload, no content length" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -40,6 +41,7 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,PutObject,invalid-header @test "REST - chunked upload, signature error" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -59,6 +61,7 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,PutObject,invalid-header @test "REST - chunked upload, final signature error" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -78,6 +81,7 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,PutObject @test "REST - chunked upload, success (file with just a's)" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -100,6 +104,7 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,PutObject @test "REST - chunked upload, success (null bytes)" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -122,6 +127,7 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,PutObject @test "REST - chunked upload, success (random bytes)" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -144,6 +150,7 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,PutObject @test "REST - chunked upload, success (zero-byte file)" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -166,31 +173,37 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,checksum,PutObject,x-amz-trailer,x-amz-checksum-crc32c @test "REST - chunked upload - crc32c trailer - success" { run chunked_upload_trailer_success "crc32c" assert_success } +# tags: openssl,chunked,checksum,PutObject,x-amz-trailer,x-amz-checksum-sha1 @test "test - REST chunked upload - sha1 trailer - success" { run chunked_upload_trailer_success "sha1" assert_success } +# tags: openssl,chunked,checksum,PutObject,x-amz-trailer,x-amz-checksum-sha256 @test "test - REST chunked upload - sha256 trailer - success" { run chunked_upload_trailer_success "sha256" assert_success } +# tags: openssl,chunked,checksum,PutObject,x-amz-trailer,x-amz-checksum-crc64nvme @test "test - REST chunked upload - crc64nvme trailer - success" { run chunked_upload_trailer_success "crc64nvme" assert_success } +# tags: openssl,chunked,checksum,PutObject,x-amz-trailer,x-amz-checksum-crc32 @test "test - REST chunked upload - crc32 trailer - success" { run chunked_upload_trailer_success "crc32" assert_success } +# tags: openssl,chunked,checksum,PutObject,invalid-header,x-amz-trailer @test "test - REST chunked upload - invalid trailer" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -207,56 +220,67 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,checksum,PutObject,invalid-header,x-amz-trailer,x-amz-checksum-sha1 @test "test - REST chunked upload - sha1 trailer - invalid" { run chunked_upload_trailer_invalid_checksum "sha1" assert_success } +# tags: openssl,chunked,checksum,PutObject,invalid-header,x-amz-trailer,x-amz-checksum-sha256 @test "test - REST chunked upload - sha256 trailer - invalid" { run chunked_upload_trailer_invalid_checksum "sha256" assert_success } +# tags: openssl,chunked,checksum,PutObject,invalid-header,x-amz-trailer,x-amz-checksum-crc32 @test "test - REST chunked upload - crc32 trailer - invalid" { run chunked_upload_trailer_invalid_checksum "crc32" assert_success } +# tags: openssl,chunked,checksum,PutObject,invalid-header,x-amz-trailer,x-amz-checksum-crc32c @test "test - REST chunked upload - crc32c trailer - invalid" { run chunked_upload_trailer_invalid_checksum "crc32c" assert_success } +# tags: openssl,chunked,checksum,PutObject,invalid-header,x-amz-trailer,x-amz-checksum-crc64nvme @test "test - REST chunked upload - crc64nvme trailer - invalid" { run chunked_upload_trailer_invalid_checksum "crc64nvme" assert_success } +# tags: openssl,chunked,checksum,PutObject,invalid-header,x-amz-trailer,x-amz-checksum-sha1 @test "test - REST chunked upload - sha1 trailer - incorrect" { run chunked_upload_trailer_incorrect_checksum "sha1" assert_success } +# tags: openssl,chunked,checksum,PutObject,invalid-header,x-amz-trailer,x-amz-checksum-sha256 @test "test - REST chunked upload - sha256 trailer - incorrect" { run chunked_upload_trailer_incorrect_checksum "sha256" assert_success } +# tags: openssl,chunked,checksum,PutObject,invalid-header,x-amz-trailer,x-amz-checksum-crc32 @test "test - REST chunked upload - crc32 trailer - incorrect" { run chunked_upload_trailer_incorrect_checksum "crc32" assert_success } +# tags: openssl,chunked,checksum,PutObject,invalid-header,x-amz-trailer,x-amz-checksum-crc32c @test "test - REST chunked upload - crc32c trailer - incorrect" { run chunked_upload_trailer_incorrect_checksum "crc32c" assert_success } +# tags: openssl,chunked,checksum,PutObject,invalid-header,x-amz-trailer,x-amz-checksum-crc64nvme @test "test - REST chunked upload - crc64nvme trailer - incorrect" { run chunked_upload_trailer_incorrect_checksum "crc64nvme" assert_success } +# tags: openssl,chunked,checksum,PutObject,x-amz-trailer,x-amz-checksum-sha256 @test "REST chunked upload - smaller chunk size" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -279,6 +303,7 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,PutObject,invalid-header,x-amz-trailer,x-amz-checksum-crc32 @test "REST - PutObject - STREAMING-UNSIGNED-PAYLOAD-TRAILER, x-amz-trailer of crc32, trailer missing" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -294,6 +319,7 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,checksum,PutObject,x-amz-trailer,x-amz-checksum-sha256 @test "REST - PutObject - STREAMING-UNSIGNED-PAYLOAD-TRAILER - 200 header returns correct checksum type" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -316,6 +342,7 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,checksum,PutObject,x-amz-trailer,x-amz-checksum-sha1 @test "REST - PutObject - STREAMING-UNSIGNED-PAYLOAD-TRAILER - success (sha1)" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -341,6 +368,7 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,checksum,PutObject,x-amz-trailer,x-amz-checksum-crc32 @test "REST - PutObject - STREAMING-UNSIGNED-PAYLOAD-TRAILER - success (crc32)" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -366,6 +394,7 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,checksum,PutObject,x-amz-trailer,x-amz-checksum-crc32c @test "REST - PutObject - STREAMING-UNSIGNED-PAYLOAD-TRAILER - success (crc32c)" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -391,6 +420,7 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,checksum,PutObject,x-amz-trailer,x-amz-checksum-crc64nvme @test "REST - PutObject - STREAMING-UNSIGNED-PAYLOAD-TRAILER - success (crc64nvme)" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -416,6 +446,7 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,PutObject,invalid-header,content-length @test "REST - PutObject - STREAMING-AWS4-HMAC-SHA256-PAYLOAD - missing content length" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1623" @@ -431,6 +462,7 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,PutObject,invalid-header,x-amz-trailer @test "REST - PutObject - STREAMING-UNSIGNED-PAYLOAD-TRAILER, x-amz-trailer of crc32, trailer key missing" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -446,6 +478,7 @@ source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_contro assert_success } +# tags: openssl,chunked,checksum,PutObject,x-amz-trailer,x-amz-checksum-crc64nvme @test "REST - PutObject - STREAMING-UNSIGNED-PAYLOAD-TRAILER - default crc64nvme" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success diff --git a/tests/test_rest_copy_object.sh b/tests/test_rest_copy_object.sh index b69b9b0a..2c764961 100755 --- a/tests/test_rest_copy_object.sh +++ b/tests/test_rest_copy_object.sh @@ -21,6 +21,7 @@ source ./tests/drivers/copy_object/copy_object_rest.sh source ./tests/drivers/create_bucket/create_bucket_rest.sh source ./tests/setup.sh +# tags: curl,CopyObject,invalid-header,x-amz-copy-source @test "REST - copy object w/invalid copy source" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -40,6 +41,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,CopyObject,invalid-header,x-amz-copy-source @test "REST - copy object w/copy source and payload" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success diff --git a/tests/test_rest_cors.sh b/tests/test_rest_cors.sh index 11eb9fb9..55cdb722 100755 --- a/tests/test_rest_cors.sh +++ b/tests/test_rest_cors.sh @@ -21,6 +21,7 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh source ./tests/drivers/get_bucket_cors/get_bucket_cors_rest.sh source ./tests/setup.sh +# tags: curl,cors,GetBucketCors,minimal-request @test "REST - GetCors - correct content-type, and returns bucket name" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1842" @@ -36,6 +37,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,cors,PutBucketCors,GetBucketCors,content-md5 @test "REST - PutBucketCors and GetBucketCors - valid configuration" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -48,6 +50,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,cors,PutBucketCors,content-md5,invalid-header @test "REST - CORS - empty CORS rule" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -61,6 +64,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,cors,PutBucketCors,content-md5,invalid-header @test "REST - CORS - missing allowed origin" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -74,6 +78,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,cors,PutBucketCors,content-md5,invalid-header @test "REST - CORS - missing allowed method" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -87,6 +92,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,cors,PutBucketCors,content-md5,invalid-header @test "REST - CORS - empty allowed method" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -100,6 +106,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,cors,PutBucketCors,content-md5,invalid-header @test "REST - CORS - invalid origin" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -113,6 +120,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,cors,PutBucketCors,DeleteBucketCors,GetBucketCors,content-md5 @test "REST - CORS - delete" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -131,6 +139,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,cors,PutBucketCors,GetBucketCors,content-md5,origin,access-control-expose-headers @test "REST - CORS - origin - ETag not returned in exposed headers" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1893" @@ -149,6 +158,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,cors,PutBucketCors,GetBucketCors,content-md5,origin,access-control-request-method,access-control-allow-methods @test "REST - CORS - non-allowed method" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -164,6 +174,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,cors,PutBucketCors,GetBucketCors,content-md5,origin,access-control-request-method,access-control-allow-methods,access-control-allow-origin @test "REST - CORS - allowed method" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -180,6 +191,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,cors,PutBucketCors,GetBucketCors,content-md5,access-control-request-headers,access-control-allow-headers @test "REST - CORS - non-allowed header" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -195,6 +207,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,cors,PutBucketCors,GetBucketCors,content-md5,origin,access-control-request-headers,access-control-allow-headers @test "REST - CORS - allowed headers" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -215,6 +228,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,cors,PutBucketCors,content-md5,invalid-header,access-control-max-age @test "REST - CORS - invalid max age seconds" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -227,6 +241,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,cors,PutBucketCors,GetBucketCors,content-md5,origin,access-control-max-age @test "REST - CORS - valid max age seconds" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -243,6 +258,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,cors,PutBucketCors,GetBucketCors,content-md5,origin,access-control-request-method,access-control-request-headers,access-control-allow-origin,access-control-allow-methods,access-control-allow-headers,access-control-expose-headers,access-control-max-age @test "REST - CORS - all fields" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1893" @@ -263,6 +279,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,cors,PutBucketCors,GetBucketCors,content-md5,origin,access-control-request-method,access-control-allow-origin,access-control-allow-methods @test "REST - CORS - two rules" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success diff --git a/tests/test_rest_create_bucket.sh b/tests/test_rest_create_bucket.sh index 72d875be..0b860c1c 100755 --- a/tests/test_rest_create_bucket.sh +++ b/tests/test_rest_create_bucket.sh @@ -24,6 +24,7 @@ source ./tests/setup.sh export RUN_USERS=true +# tags: curl,CreateBucket,minimal-request @test "REST - create bucket test" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "skip bucket create tests for static buckets" @@ -39,6 +40,7 @@ export RUN_USERS=true assert_success } +# tags: curl,CreateBucket,invalid-header,x-amz-acl @test "REST - CreateBucket w/invalid acl" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "skip bucket create tests for static buckets" @@ -55,6 +57,7 @@ export RUN_USERS=true assert_success } +# tags: curl,CreateBucket,invalid-header,x-amz-grant-full-control @test "REST - CreateBucket - x-amz-grant-full-control - non-existent user" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1384" @@ -75,6 +78,7 @@ export RUN_USERS=true assert_success } +# tags: curl,CreateBucket,invalid-header,x-amz-grant-full-control @test "REST - CreateBucket - x-amz-grant-full-control - no ownership control change" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "skip bucket create tests for static buckets" @@ -97,36 +101,43 @@ export RUN_USERS=true assert_success } +# tags: curl,CreateBucket,x-amz-grant-full-control @test "REST - CreateBucket - x-amz-grant-full-control - success w/tests" { run setup_and_create_bucket_and_check_acl "GRANT_FULL_CONTROL" assert_success } +# tags: curl,CreateBucket,x-amz-grant-read @test "REST - CreateBucket - x-amz-grant-read" { run setup_and_create_bucket_and_check_acl "GRANT_READ" assert_success } +# tags: curl,CreateBucket,x-amz-grant-write @test "REST - CreateBucket - x-amz-grant-write" { run setup_and_create_bucket_and_check_acl "GRANT_WRITE" assert_success } +# tags: curl,CreateBucket,x-amz-grant-read-acp @test "REST - CreateBucket - x-amz-grant-read-acp" { run setup_and_create_bucket_and_check_acl "GRANT_READ_ACP" assert_success } +# tags: curl,CreateBucket,x-amz-grant-write-acp @test "REST - CreateBucket - x-amz-grant-write-acp" { run setup_and_create_bucket_and_check_acl "GRANT_WRITE_ACP" assert_success } +# tags: curl,CreateBucket,invalid-header,location-constraint @test "REST - CreateBucket - empty location constraint" { run send_curl_command_create_bucket_expect_error "400" "InvalidLocationConstraint" "The specified location-constraint is not valid" "-locationConstraint" "" assert_success } +# tags: curl,CreateBucket,invalid-header,location-constraint @test "REST - CreateBucket - location constraint mismatch" { if [ "$DIRECT" == "true" ]; then skip "not valid for direct mode" @@ -140,6 +151,7 @@ export RUN_USERS=true assert_success } +# tags: curl,CreateBucket,invalid-header,location-constraint @test "REST - CreateBucket - fail - us-east-1 with 'us-east-1' location constraint" { if [ "$AWS_REGION" != "us-east-1" ]; then skip "only valid for us-east-1 region" @@ -148,6 +160,7 @@ export RUN_USERS=true assert_success } +# tags: curl,CreateBucket,invalid-header,location-constraint @test "REST - CreateBucket - location constraint error returns invalid constraint" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1645" diff --git a/tests/test_rest_delete_bucket.sh b/tests/test_rest_delete_bucket.sh index 39b9fd4d..c1873c00 100755 --- a/tests/test_rest_delete_bucket.sh +++ b/tests/test_rest_delete_bucket.sh @@ -22,6 +22,7 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh source ./tests/drivers/delete_object/delete_object_rest.sh source ./tests/drivers/put_object/put_object_rest.sh +# tags: curl,DeleteBucket,multipart @test "REST - DeleteBucket - can delete with partial multipart upload" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "avoid bucket deletion in static mode" @@ -40,6 +41,7 @@ source ./tests/drivers/put_object/put_object_rest.sh assert_success } +# tags: curl,DeleteBucket,DeleteObject @test "REST - DeleteBucket - file - non-versioning" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "avoid bucket deletion in static mode" @@ -61,6 +63,7 @@ source ./tests/drivers/put_object/put_object_rest.sh assert_success } +# tags: curl,DeleteBucket,DeleteObject,PutBucketVersioning,versioning @test "REST - DeleteBucket - file - versioning" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "avoid bucket deletion in static mode" @@ -91,6 +94,7 @@ source ./tests/drivers/put_object/put_object_rest.sh assert_success } +# tags: curl,DeleteBucket,invalid-header,x-amz-expected-bucket-owner @test "REST - DeleteBucket - invalid x-amz-expected-bucket-owner" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "avoid bucket deletion in static mode" @@ -116,6 +120,7 @@ source ./tests/drivers/put_object/put_object_rest.sh assert_success } +# tags: curl,DeleteBucket,invalid-header,x-amz-expected-bucket-owner @test "REST - DeleteBucket - incorrect x-amz-expected-bucket-owner" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "avoid bucket deletion in static mode" @@ -131,6 +136,7 @@ source ./tests/drivers/put_object/put_object_rest.sh assert_success } +# tags: curl,DeleteBucket,x-amz-expected-bucket-owner @test "REST - DeleteBucket - correct x-amz-expected-bucket-owner" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "avoid bucket deletion in static mode" @@ -150,6 +156,7 @@ source ./tests/drivers/put_object/put_object_rest.sh assert_success } +# tags: curl,DeleteBucket,PutObject @test "REST - DeleteBucket - BucketNotEmpty error contains bucket that is not empty" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1780" diff --git a/tests/test_rest_delete_bucket_ownership_controls.sh b/tests/test_rest_delete_bucket_ownership_controls.sh index c73cbefc..8b1d6711 100755 --- a/tests/test_rest_delete_bucket_ownership_controls.sh +++ b/tests/test_rest_delete_bucket_ownership_controls.sh @@ -24,6 +24,7 @@ source ./tests/setup.sh export RUN_USERS=true +# tags: curl,DeleteBucketOwnershipControls,ownershipControls,user,invalid-header @test "REST - DeleteBucketOwnershipControls - lack permission" { if [ "$SKIP_USERS_TESTS" == "true" ]; then skip "skip versitygw-specific users tests" @@ -44,6 +45,7 @@ export RUN_USERS=true assert_success } +# tags: curl,DeleteBucketOwnershipControls,ownershipControls,invalid-header @test "REST - DeleteBucketOwnershipControls - invalid username" { if [ "$SKIP_USERS_TESTS" == "true" ]; then skip "skip versitygw-specific users tests" @@ -63,6 +65,7 @@ export RUN_USERS=true assert_success } +# tags: curl,DeleteBucketOwnershipControls,PutBucketOwnershipControls,GetBucketOwnershipControls,ownershipControls @test "REST - DeleteBucketOwnershipControls - success" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -88,6 +91,7 @@ export RUN_USERS=true assert_equal "$rule" "" } +# tags: curl,DeleteBucketOwnershipControls,ownershipControls @test "REST - DeleteBucketOwnershipControls - BucketName is reported in error" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1493" diff --git a/tests/test_rest_delete_bucket_tagging.sh b/tests/test_rest_delete_bucket_tagging.sh index 1832102f..0b52cd1d 100755 --- a/tests/test_rest_delete_bucket_tagging.sh +++ b/tests/test_rest_delete_bucket_tagging.sh @@ -26,6 +26,7 @@ source ./tests/drivers/get_bucket_tagging/get_bucket_tagging_rest.sh export RUN_USERS=true +# tags: curl,DeleteBucketTagging,tagging,user,invalid-header @test "REST - DeleteBucketTagging - lack permission" { if [ "$SKIP_USERS_TESTS" == "true" ]; then skip "skip versitygw-specific users tests" @@ -44,6 +45,7 @@ export RUN_USERS=true assert_success } +# tags: curl,PutBucketTagging,GetBucketTagging,DeleteBucketTagging,tagging @test "REST - DeleteBucketTagging - success" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success diff --git a/tests/test_rest_delete_object.sh b/tests/test_rest_delete_object.sh index 0d8a18c8..7052f719 100755 --- a/tests/test_rest_delete_object.sh +++ b/tests/test_rest_delete_object.sh @@ -21,6 +21,7 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh source ./tests/drivers/delete_objects/delete_objects_rest.sh source ./tests/setup.sh +# tags: curl,PutObject,GetObject,DeleteObject,minimal-request @test "test_rest_delete_object" { run get_file_name assert_success @@ -46,6 +47,7 @@ source ./tests/setup.sh assert_failure } +# tags: curl,DeleteObjects,invalid-header,content-md5 @test "REST - delete objects - no content-md5 header" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -58,6 +60,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,PutObject,DeleteObjects,content-md5 @test "REST - delete objects command" { run get_file_name assert_success diff --git a/tests/test_rest_get_bucket_location.sh b/tests/test_rest_get_bucket_location.sh index 30e55015..be04de2b 100755 --- a/tests/test_rest_get_bucket_location.sh +++ b/tests/test_rest_get_bucket_location.sh @@ -21,6 +21,7 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh source ./tests/drivers/get_bucket_location/get_bucket_location_rest.sh source ./tests/setup.sh +# tags: curl,GetBucketLocation,location @test "REST - GetBucketLocation - no bucket" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "not valid for static mode" @@ -33,6 +34,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,GetBucketLocation,location,region-us-east-1 @test "REST - GetBucketLocation - us-east-1 is returned as null" { log 5 "AWS_REGION: $AWS_REGION" if [ "$AWS_REGION" != "us-east-1" ]; then @@ -42,6 +44,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,GetBucketLocation,location,region-non-us-east-1 @test "REST - GetBucketLocation - success (non us-east-1)" { if [ "$AWS_REGION" == "us-east-1" ]; then skip "test not valid for us-east-1" diff --git a/tests/test_rest_get_bucket_policy_status.sh b/tests/test_rest_get_bucket_policy_status.sh index 6a810446..e43ffad7 100755 --- a/tests/test_rest_get_bucket_policy_status.sh +++ b/tests/test_rest_get_bucket_policy_status.sh @@ -23,6 +23,7 @@ source ./tests/drivers/put_bucket_policy/put_bucket_policy_rest.sh source ./tests/util/util_public_access_block.sh source ./tests/setup.sh +# tags: curl,GetBucketPolicyStatus,policy,policyStatus @test "REST - GetBucketPolicyStatus" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -38,6 +39,7 @@ source ./tests/setup.sh assert_success } +# tags: curl,GetBucketPolicyStatus,policy,policyStatus,public-access @test "REST - GetBucketPolicyStatus true" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -56,4 +58,4 @@ source ./tests/setup.sh run get_and_check_policy_status "$bucket_name" "true" assert_success -} \ No newline at end of file +} diff --git a/tests/test_rest_get_object.sh b/tests/test_rest_get_object.sh index c97013d1..0788fcc7 100755 --- a/tests/test_rest_get_object.sh +++ b/tests/test_rest_get_object.sh @@ -22,7 +22,7 @@ source ./tests/drivers/complete_multipart_upload/complete_multipart_upload_rest. source ./tests/drivers/create_bucket/create_bucket_rest.sh source ./tests/setup.sh -# tags: curl, GetObject, HeadObject, range +# tags: curl,GetObject,HeadObject,range @test "REST - range download and compare" { run get_file_name assert_success @@ -43,7 +43,7 @@ source ./tests/setup.sh assert_success } -# tags: rest, PutObject, GetObject +# tags: curl,PutObject,GetObject,special-chars,encoding @test "REST - put, get object, encoded name" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -69,7 +69,7 @@ source ./tests/setup.sh assert_success } -# tags: rest, GetObject,x-amz-content-sha256 +# tags: curl,GetObject,invalid-header,x-amz-content-sha256 @test "REST - GetObject w/invalid payload type" { run get_file_name assert_success @@ -86,7 +86,7 @@ source ./tests/setup.sh assert_success } -# tags: curl,GetObject,partNumber +# tags: curl,GetObject,partNumber,invalid-header @test "REST - GetObject - part number 2 w/o multipart upload" { run setup_bucket_and_file_v3 "$BUCKET_ONE_NAME" assert_success @@ -99,7 +99,7 @@ source ./tests/setup.sh assert_success } -# tags: curl,GetObject,partNumber +# tags: curl,GetObject,partNumber,range,Content-Range @test "REST - GetObject - part number 1 returns 206, Content-Range header" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/2074" @@ -116,7 +116,7 @@ source ./tests/setup.sh assert_success } -# tags: curl,GetObject,invalid-header +# tags: curl,GetObject,invalid-header,response-headers @test "REST - GetObject - response query - invalid response type" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/2075" @@ -134,37 +134,37 @@ source ./tests/setup.sh assert_success } -# tags: curl,GetObject,response-cache-control +# tags: curl,GetObject,response-cache-control,response-headers @test "REST - GetObject - response-cache-control" { run test_get_object_with_custom_content_header "cache-control" "dummy" assert_success } -# tags: curl,GetObject,response-content-disposition +# tags: curl,GetObject,response-content-disposition,response-headers @test "REST - GetObject - response-content-disposition" { run test_get_object_with_custom_content_header "content-disposition" "dummy" assert_success } -# tags: curl,GetObject,response-content-encoding +# tags: curl,GetObject,response-content-encoding,response-headers @test "REST - GetObject - response-content-encoding" { run test_get_object_with_custom_content_header "content-encoding" "dummy" assert_success } -# tags: curl,GetObject,response-content-language +# tags: curl,GetObject,response-content-language,response-headers @test "REST - GetObject - response-content-language" { run test_get_object_with_custom_content_header "content-language" "dummy" assert_success } -# tags: curl,GetObject,response-content-type +# tags: curl,GetObject,response-content-type,response-headers @test "REST - GetObject - response-content-type" { run test_get_object_with_custom_content_header "content-type" "dummy" assert_success } -# tags: curl,GetObject,response-expires +# tags: curl,GetObject,response-expires,response-headers @test "REST - GetObject - response-expires" { run test_get_object_with_custom_content_header "expires" "dummy+ one" assert_success diff --git a/tests/test_rest_get_object_legal_hold.sh b/tests/test_rest_get_object_legal_hold.sh index 5d02cae4..8b145154 100755 --- a/tests/test_rest_get_object_legal_hold.sh +++ b/tests/test_rest_get_object_legal_hold.sh @@ -20,6 +20,7 @@ load ./bats-assert/load source ./tests/setup.sh source ./tests/drivers/create_bucket/create_bucket_rest.sh +# tags: curl,GetObjectLegalHold,legal-hold,object-lock,invalid-header @test "REST - legal hold, get without config" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "test requires object lock not to be enabled" @@ -42,6 +43,7 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh assert_success } +# tags: curl,GetObjectLegalHold,legal-hold,object-lock,invalid-header @test "REST - legal hold, object lock enabled w/o specific object lock set" { run get_file_name assert_success diff --git a/tests/test_rest_get_object_tagging.sh b/tests/test_rest_get_object_tagging.sh index 53c8ee17..1f455e5c 100755 --- a/tests/test_rest_get_object_tagging.sh +++ b/tests/test_rest_get_object_tagging.sh @@ -25,6 +25,7 @@ source ./tests/drivers/get_object_tagging/get_object_tagging.sh source ./tests/drivers/get_object_tagging/get_object_tagging_rest.sh source ./tests/drivers/put_object/put_object_rest.sh +# tags: curl,GetObjectTagging,tagging,minimal-request @test "REST - GetObjectTagging - no tags" { run get_file_name assert_success @@ -41,6 +42,7 @@ source ./tests/drivers/put_object/put_object_rest.sh assert_success } +# tags: curl,GetObjectTagging,PutObjectTagging,tagging,versioning @test "REST - GetObjectTagging - older version returns version ID" { run get_file_name assert_success @@ -57,6 +59,7 @@ source ./tests/drivers/put_object/put_object_rest.sh assert_success } +# tags: curl,GetObjectTagging,tagging,versioning,invalid-header,versionId @test "REST - GetObjectTagging - invalid version ID error returns version ID" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1698" @@ -82,6 +85,7 @@ source ./tests/drivers/put_object/put_object_rest.sh assert_success } +# tags: curl,PutObject,PutObjectTagging,GetObjectTagging,DeleteObjectTagging,tagging @test "test_rest_tagging" { test_key="TestKey" test_value="TestValue" diff --git a/tests/test_rest_head_bucket.sh b/tests/test_rest_head_bucket.sh index 8eae10e4..7e8027b9 100755 --- a/tests/test_rest_head_bucket.sh +++ b/tests/test_rest_head_bucket.sh @@ -20,6 +20,7 @@ load ./bats-assert/load source ./tests/setup.sh source ./tests/drivers/create_bucket/create_bucket_rest.sh +# tags: curl,HeadBucket,invalid-header,x-amz-expected-bucket-owner @test "REST - HeadBucket - mismatched owner" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -32,6 +33,7 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh assert_success } +# tags: curl,HeadBucket,invalid-header,x-amz-expected-bucket-owner @test "REST - HeadBucket - invalid owner" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -51,11 +53,13 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh assert_success } +# tags: curl,HeadBucket,minimal-request @test "REST - HeadBucket - doesn't exist" { run head_bucket_rest "$BUCKET_ONE_NAME-$(uuidgen)" assert_failure 1 } +# tags: curl,HeadBucket,x-amz-expected-bucket-owner @test "REST - HeadBucket - expected owner success" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success diff --git a/tests/test_rest_head_object.sh b/tests/test_rest_head_object.sh index a1f02bdb..992a060d 100755 --- a/tests/test_rest_head_object.sh +++ b/tests/test_rest_head_object.sh @@ -21,6 +21,7 @@ source ./tests/setup.sh source ./tests/drivers/create_bucket/create_bucket_rest.sh source ./tests/drivers/get_object_attributes/get_object_attributes_rest.sh +# tags: curl,HeadObject,GetObjectAttributes,ETag,x-amz-object-attributes @test "REST - head object" { run get_file_name assert_success @@ -44,6 +45,7 @@ source ./tests/drivers/get_object_attributes/get_object_attributes_rest.sh assert_success } +# tags: curl,HeadObject,Content-Type @test "REST - HeadObject - default Content-Type is binary/octet-stream" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success diff --git a/tests/test_rest_list_buckets.sh b/tests/test_rest_list_buckets.sh index c278eae5..7ca63ad7 100755 --- a/tests/test_rest_list_buckets.sh +++ b/tests/test_rest_list_buckets.sh @@ -52,7 +52,7 @@ export RUN_USERS=true assert_success } -# tags, curl,ListBuckets,required-headers,authorization +# tags: curl,ListBuckets,required-headers,Authorization,invalid-header @test "REST - invalid authorization scheme" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1705" @@ -61,25 +61,25 @@ export RUN_USERS=true assert_success } -# tags, curl,ListBuckets,required-headers,authorization +# tags: curl,ListBuckets,required-headers,Authorization,invalid-header @test "REST - very invalid credential string" { run send_rest_go_command_expect_error "400" "AuthorizationHeaderMalformed" "the Credential is mal-formed" "-incorrectCredential" "Credentials" assert_success } -# tags: curl,ListBuckets,required-headers,authorization +# tags: curl,ListBuckets,required-headers,Authorization,invalid-header @test "REST - nonexistent key ID" { run send_rest_go_command_expect_error "403" "InvalidAccessKeyId" "does not exist" "-awsAccessKeyId" "dummy" assert_success } -# tags: curl,ListBuckets,required-headers,authorization,x-amz-date +# tags: curl,ListBuckets,required-headers,Authorization,x-amz-date,invalid-header @test "REST - invalid year/month/day" { run send_rest_go_command_expect_error "400" "AuthorizationHeaderMalformed" "incorrect date format" "-invalidYearMonthDay" assert_success } -# tags: curl,ListBuckets,required-headers,authorization,x-amz-date +# tags: curl,ListBuckets,required-headers,Authorization,x-amz-date,invalid-header @test "REST - incorrect year/month/day" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1514" @@ -88,25 +88,25 @@ export RUN_USERS=true assert_success } -# tags: curl,ListBuckets,required-headers,authorization +# tags: curl,ListBuckets,required-headers,Authorization,invalid-header @test "REST - invalid region" { run send_rest_go_command_expect_error "400" "AuthorizationHeaderMalformed" "us-eest-1" "-awsRegion" "us-eest-1" assert_success } -# tags: curl,ListBuckets,required-headers,authorization +# tags: curl,ListBuckets,required-headers,Authorization,invalid-header @test "REST - invalid service name" { run send_rest_go_command_expect_error "400" "AuthorizationHeaderMalformed" "incorrect service" "-serviceName" "s2" assert_success } -# tags: curl,ListBuckets,required-headers,authorization +# tags: curl,ListBuckets,required-headers,Authorization,invalid-header @test "REST - incorrect signature" { run send_rest_go_command_expect_error "403" "SignatureDoesNotMatch" "does not match" "-incorrectSignature" assert_success } -# tags: openssl,ListBuckets,required-headers,host +# tags: openssl,ListBuckets,required-headers,host,invalid-header @test "REST - missing host parameter" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1530" @@ -128,7 +128,7 @@ export RUN_USERS=true assert_success } -# tags: curl,ListBuckets,max-buckets +# tags: curl,ListBuckets,max-buckets,continuation-token @test "REST - list buckets - continuation token isn't bucket name" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1399" @@ -256,7 +256,7 @@ export RUN_USERS=true assert_success } -# tags: curl,ListBuckets,bucket-region +# tags: curl,ListBuckets,bucket-region,invalid-query @test "REST - ListBuckets - invalid bucket-region query" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1923" diff --git a/tests/test_rest_list_object_versions.sh b/tests/test_rest_list_object_versions.sh index 4927daed..0e09f34f 100755 --- a/tests/test_rest_list_object_versions.sh +++ b/tests/test_rest_list_object_versions.sh @@ -22,6 +22,7 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh source ./tests/drivers/list_object_versions/list_object_versions_rest.sh source ./tests/util/util_time.sh +# tags: curl,ListObjectVersions,versions,invalid-query @test "ListObjectVersions - accidental query of versions on object returns correct error" { test_file="test_file" @@ -37,6 +38,7 @@ source ./tests/util/util_time.sh assert_success } +# tags: curl,ListObjectVersions,versions,versioning,object-lock,retention,x-amz-object-lock-mode,x-amz-object-lock-retain-until-date,content-md5 @test "ListObjectVersions - version changes after deletion w/retention policy" { test_file="test_file" @@ -64,4 +66,4 @@ source ./tests/util/util_time.sh run list_object_versions_before_and_after_retention_deletion "$bucket_name" "$test_file" assert_success -} \ No newline at end of file +} diff --git a/tests/test_rest_list_objects.sh b/tests/test_rest_list_objects.sh index d1db867f..e4b9af7d 100755 --- a/tests/test_rest_list_objects.sh +++ b/tests/test_rest_list_objects.sh @@ -21,6 +21,7 @@ source ./tests/setup.sh source ./tests/drivers/create_bucket/create_bucket_rest.sh source ./tests/drivers/list_objects/list_objects_rest.sh +# tags: curl,ListObjects,minimal-request @test "test_rest_list_objects" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -40,6 +41,7 @@ source ./tests/drivers/list_objects/list_objects_rest.sh assert_success } +# tags: curl,ListObjectsV2,continuation-token,invalid-query @test "REST - list objects v2 - invalid continuation token" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/993" @@ -81,6 +83,7 @@ source ./tests/drivers/list_objects/list_objects_rest.sh assert_success } +# tags: curl,ListObjectsV2,bucket-region,x-amz-bucket-region @test "REST - ListObjectsV2 - includes bucket header" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1814" @@ -105,6 +108,7 @@ source ./tests/drivers/list_objects/list_objects_rest.sh assert_success } +# tags: curl,ListObjectsV2,minimal-request @test "REST - ListObjectsV2 - success" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -125,6 +129,7 @@ source ./tests/drivers/list_objects/list_objects_rest.sh assert_success } +# tags: curl,ListObjects,minimal-request @test "REST - list objects v1 - no NextMarker without delimiter" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/999" @@ -154,10 +159,12 @@ source ./tests/drivers/list_objects/list_objects_rest.sh assert_success } +# tags: curl,ListObjects,delimiter,prefix @test "REST - ListObjects - delimiter" { list_objects_delimiter "1" } +# tags: curl,ListObjects,encoding-type,invalid-query @test "REST - ListObjects - invalid encoding" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1984" @@ -175,6 +182,7 @@ source ./tests/drivers/list_objects/list_objects_rest.sh assert_success } +# tags: curl,ListObjects,encoding-type @test "REST - ListObjects - encoding success" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1985" @@ -199,6 +207,7 @@ source ./tests/drivers/list_objects/list_objects_rest.sh assert_success } +# tags: curl,ListObjects,marker,max-keys @test "REST - ListObjects - marker/max-keys" { run setup_bucket_and_files_v3 "$BUCKET_ONE_NAME" 2 assert_success @@ -219,6 +228,7 @@ source ./tests/drivers/list_objects/list_objects_rest.sh assert_success } +# tags: curl,ListObjects,prefix @test "REST - ListObjects - prefix" { run setup_bucket_v3 "$BUCKET_ONE_NAME" assert_success @@ -245,6 +255,7 @@ source ./tests/drivers/list_objects/list_objects_rest.sh assert_success } +# tags: curl,ListObjectsV2,continuation-token,max-keys @test "REST - ListObjectsV2 - continuation token" { run setup_bucket_and_files_v3 "$BUCKET_ONE_NAME" 3 assert_success @@ -268,6 +279,7 @@ source ./tests/drivers/list_objects/list_objects_rest.sh assert_success } +# tags: curl,ListObjects,start-after,invalid-query @test "ListObjectsV1 - start-after - error" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/2004" @@ -286,6 +298,7 @@ source ./tests/drivers/list_objects/list_objects_rest.sh assert_success } +# tags: curl,ListObjectsV2,start-after,continuation-token @test "ListObjectsV1 - start-after - doesn't include continuation token" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/2007" @@ -303,6 +316,7 @@ source ./tests/drivers/list_objects/list_objects_rest.sh assert_success } +# tags: curl,ListObjectsV2,start-after @test "ListObjectsV2 - start-after - success" { run setup_bucket_and_files_v3 "$BUCKET_ONE_NAME" 2 assert_success @@ -320,6 +334,7 @@ source ./tests/drivers/list_objects/list_objects_rest.sh assert_success } +# tags: curl,ListObjectsV2,fetch-owner @test "ListObjectsV2 - fetch-owner" { run setup_bucket_and_files_v3 "$BUCKET_ONE_NAME" 2 assert_success @@ -338,6 +353,7 @@ source ./tests/drivers/list_objects/list_objects_rest.sh } # shellcheck disable=SC2030 +# tags: curl,ListObjectsV2,delimiter,prefix @test "ListObjectsV2 - delimiter" { list_objects_delimiter 2 } diff --git a/tests/test_rest_multipart.sh b/tests/test_rest_multipart.sh index 0db9f4ae..42d0db0c 100755 --- a/tests/test_rest_multipart.sh +++ b/tests/test_rest_multipart.sh @@ -25,6 +25,7 @@ source ./tests/drivers/complete_multipart_upload/complete_multipart_upload_rest. source ./tests/drivers/list_buckets/list_buckets_rest.sh source ./tests/drivers/upload_part/upload_part_rest.sh +# tags: curl,multipart,CreateMultipartUpload,AbortMultipartUpload @test "REST - multipart upload create then abort" { run setup_bucket_and_file_v3 "$BUCKET_ONE_NAME" assert_success @@ -34,6 +35,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: curl,multipart,CreateMultipartUpload,UploadPart,ListParts,CompleteMultipartUpload @test "REST - multipart upload create, list parts" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -59,6 +61,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: curl,multipart,CompleteMultipartUpload,invalid-header,ETag @test "REST - complete upload - invalid part" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1008" @@ -78,6 +81,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: curl,multipart,UploadPartCopy,x-amz-copy-source @test "REST - upload part copy (UploadPartCopy)" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -97,6 +101,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: curl,multipart,UploadPartCopy,partNumber,invalid-query @test "REST - UploadPartCopy w/o upload ID" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -111,6 +116,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: curl,multipart,UploadPartCopy,invalid-query @test "REST - UploadPartCopy w/o part number" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -125,6 +131,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: curl,multipart,UploadPartCopy,ETag @test "REST - UploadPartCopy - ETag is quoted" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -144,6 +151,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: curl,multipart,UploadPart,ETag @test "REST - UploadPart - ETag is quoted" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -169,6 +177,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: curl,multipart,UploadPart,invalid-query @test "REST - UploadPart w/o part number" { skip "versitygw/curl/fasthttp issue" @@ -191,6 +200,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: openssl,multipart,UploadPart,partNumber,uploadId,invalid-query @test "REST - UploadPart w/o upload ID" { skip "versitygw/curl/fasthttp issue" @@ -211,6 +221,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: curl,multipart,checksum,CreateMultipartUpload,invalid-header,x-amz-checksum-type @test "REST - multipart w/invalid checksum type" { run setup_bucket_and_file_v3 "$BUCKET_ONE_NAME" assert_success @@ -221,6 +232,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: curl,multipart,checksum,CreateMultipartUpload,invalid-header,x-amz-checksum-algorithm @test "REST - multipart w/invalid checksum algorithm" { run setup_bucket_and_file_v3 "$BUCKET_ONE_NAME" assert_success @@ -231,6 +243,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: curl,multipart,checksum,CreateMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart checksum w/crc64nvme, composite" { run setup_bucket_and_file_v3 "$BUCKET_ONE_NAME" assert_success @@ -241,6 +254,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: curl,multipart,checksum,CreateMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart checksum w/sha1, full object" { run setup_bucket_and_file_v3 "$BUCKET_ONE_NAME" assert_success @@ -251,6 +265,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: curl,multipart,checksum,CreateMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart checksum w/sha256, full object" { run setup_bucket_and_file_v3 "$BUCKET_ONE_NAME" assert_success @@ -261,6 +276,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: curl,multipart,checksum,CreateMultipartUpload,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - lowercase checksum type and algorithm" { run setup_bucket_and_file_v3 "$BUCKET_ONE_NAME" assert_success @@ -270,6 +286,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: curl,multipart,checksum,CreateMultipartUpload,UploadPart,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - full object checksum type doesn't require UploadPart checksums" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -291,6 +308,7 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_success } +# tags: unit,checksum,composite-checksum @test "sha256 - calculate composite checksum w/null byte" { run calculate_composite_checksum "sha256" "Gaq9AN6Uxmk7WaTR9TzgDhE8m8bzXrfJWReDyLoZAo8=" "GohMQZ27EDvwB3n2iDx4irfxkTQDyvpDB7NFeTYaXn8=" assert_success @@ -298,116 +316,139 @@ source ./tests/drivers/upload_part/upload_part_rest.sh assert_equal "$composite" "/UpzIA5Rft0d6bSkAlmgESdRE3vtDbo8hzAn//6Z5UU=" } +# tags: curl,multipart,checksum,CompleteMultipartUpload,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - composite - sha256" { run test_multipart_upload_with_checksum "COMPOSITE" "SHA256" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - composite - sha1" { run test_multipart_upload_with_checksum "COMPOSITE" "SHA1" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - composite - crc32" { run test_multipart_upload_with_checksum "COMPOSITE" "CRC32" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - composite - crc32c" { run test_multipart_upload_with_checksum "COMPOSITE" "CRC32C" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - full object - crc32" { run test_multipart_upload_with_checksum "FULL_OBJECT" "CRC32" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - full object - crc32c" { run test_multipart_upload_with_checksum "FULL_OBJECT" "CRC32C" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - full object - crc64nvme" { run test_multipart_upload_with_checksum "FULL_OBJECT" "CRC64NVME" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,x-amz-checksum-algorithm @test "REST - multipart - x-amz-checksum-algorithm is ignored in CompleteMultipartUpload" { run test_complete_multipart_upload_unneeded_algorithm_parameter "FULL_OBJECT" "CRC32C" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - composite - incorrect sha256" { run test_complete_multipart_upload_incorrect_checksum "COMPOSITE" "SHA256" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - composite - incorrect sha1" { run test_complete_multipart_upload_incorrect_checksum "COMPOSITE" "SHA1" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - composite - incorrect crc32" { run test_complete_multipart_upload_incorrect_checksum "COMPOSITE" "CRC32C" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - composite - incorrect crc32c" { run test_complete_multipart_upload_incorrect_checksum "COMPOSITE" "CRC32C" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - full object - incorrect crc32" { run test_complete_multipart_upload_incorrect_checksum "FULL_OBJECT" "CRC32" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - full object - incorrect crc32c" { run test_complete_multipart_upload_incorrect_checksum "FULL_OBJECT" "CRC32C" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - full object - incorrect crc64nvme" { run test_complete_multipart_upload_incorrect_checksum "FULL_OBJECT" "CRC64NVME" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - composite - invalid sha1" { run test_complete_multipart_upload_invalid_checksum "COMPOSITE" "SHA1" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - composite - invalid sha256" { run test_complete_multipart_upload_invalid_checksum "COMPOSITE" "SHA256" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - composite - invalid crc32" { run test_complete_multipart_upload_invalid_checksum "COMPOSITE" "CRC32" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - composite - invalid crc32c" { run test_complete_multipart_upload_invalid_checksum "COMPOSITE" "CRC32C" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - full object - invalid crc32" { run test_complete_multipart_upload_invalid_checksum "FULL_OBJECT" "CRC32" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - full object - invalid crc32c" { run test_complete_multipart_upload_invalid_checksum "FULL_OBJECT" "CRC32C" assert_success } +# tags: curl,multipart,checksum,CompleteMultipartUpload,invalid-header,x-amz-checksum-type,x-amz-checksum-algorithm @test "REST - multipart - full object - invalid crc64nvme" { run test_complete_multipart_upload_invalid_checksum "FULL_OBJECT" "CRC64NVME" assert_success } +# tags: curl,multipart,CompleteMultipartUpload,invalid-header,x-amz-mp-object-size @test "REST - multipart - x-amz-mp-object-size - invalid string" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success diff --git a/tests/test_rest_not_implemented.sh b/tests/test_rest_not_implemented.sh index 525b0eea..2604add5 100755 --- a/tests/test_rest_not_implemented.sh +++ b/tests/test_rest_not_implemented.sh @@ -27,35 +27,28 @@ source ./tests/setup.sh } @test "REST - GetBucketAnalyticsConfiguration - with template" { - run get_bucket_name "$BUCKET_ONE_NAME" + run setup_bucket_and_file_v3 "$BUCKET_ONE_NAME" assert_success - bucket_name=$output - - run setup_bucket_v2 "$bucket_name" - assert_success - - run get_file_name - assert_success - file_name=$output + read -r bucket_name file_name <<< "$output" run send_rest_go_command_write_response_to_file "$TEST_FILE_FOLDER/$file_name" "-bucketName" "$bucket_name" "-query" "analytics=" assert_success - run bash -c "go run ./tests/checker/main.go -dataFile $TEST_FILE_FOLDER/$file_name -batsTestFileName $BATS_TEST_FILENAME \ - -batsTestName $BATS_TEST_NAME -serverName $SERVER_NAME -matrixFile $TEMPLATE_MATRIX_FILE" + run check_rest_expected_header_error "$TEST_FILE_FOLDER/$file_name" "501" "Not Implemented" + assert_success + + run go run ./tests/checker/main.go -dataFile "$TEST_FILE_FOLDER/$file_name" -batsTestFileName "$BATS_TEST_FILENAME" \ + -batsTestName "$BATS_TEST_NAME" -serverName "$SERVER_NAME" -matrixFile "$TEMPLATE_MATRIX_FILE" assert_success } @test "REST - NotImplemented - correct Content-Type header" { - run get_bucket_name "$BUCKET_ONE_NAME" - assert_success - bucket_name=$output - - run setup_bucket_v2 "$bucket_name" + run setup_bucket_v3 "$BUCKET_ONE_NAME" assert_success + bucket_name="$output" run send_rest_go_command_check_header_key_and_value "501" "Content-Type" "application/xml" "-bucketName" "$bucket_name" \ - "-query" "analytics" + "-query" "analytics=" assert_success } @@ -232,14 +225,11 @@ source ./tests/setup.sh @test "REST - GetObjectAcl" { run get_file_name assert_success - file_name=$output + file_name="$output" - run get_bucket_name "$BUCKET_ONE_NAME" - assert_success - bucket_name="$output" - - run setup_bucket_and_add_file "$bucket_name" "$file_name" + run setup_bucket_and_file_v3 "$BUCKET_ONE_NAME" assert_success + read -r bucket_name file_name <<< "$output" run send_not_implemented_expect_failure "-bucketName" "$bucket_name" "-query" "acl=" "-method" "GET" "-objectKey" "$file_name" assert_success @@ -248,14 +238,11 @@ source ./tests/setup.sh @test "REST - PutObjectAcl" { run get_file_name assert_success - file_name=$output + file_name="$output" - run get_bucket_name "$BUCKET_ONE_NAME" - assert_success - bucket_name="$output" - - run setup_bucket_and_add_file "$bucket_name" "$file_name" + run setup_bucket_and_file_v3 "$BUCKET_ONE_NAME" assert_success + read -r bucket_name file_name <<< "$output" run send_not_implemented_expect_failure "-bucketName" "$bucket_name" "-query" "acl=" "-method" "PUT" "-objectKey" "$file_name" assert_success diff --git a/tests/test_rest_put_bucket_policy.sh b/tests/test_rest_put_bucket_policy.sh index 7741c7ed..3e2e04d9 100755 --- a/tests/test_rest_put_bucket_policy.sh +++ b/tests/test_rest_put_bucket_policy.sh @@ -31,4 +31,4 @@ source ./tests/setup.sh run put_simple_bucket_policy "$bucket_name" assert_success -} \ No newline at end of file +} diff --git a/tests/test_rest_put_bucket_tagging.sh b/tests/test_rest_put_bucket_tagging.sh index 2c315656..468cd878 100755 --- a/tests/test_rest_put_bucket_tagging.sh +++ b/tests/test_rest_put_bucket_tagging.sh @@ -22,6 +22,7 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh source ./tests/drivers/get_bucket_tagging/get_bucket_tagging_rest.sh source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh +# tags: curl, PutBucketTagging, tagging, invalid-query @test "REST PutBucketTagging - more than 50 tags" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -35,6 +36,7 @@ source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh assert_success } +# tags: curl, PutBucketTagging, tagging, invalid-query @test "REST PutBucketTagging - tag key with control character" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -48,6 +50,7 @@ source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh assert_success } +# tags: curl, PutBucketTagging, tagging, invalid-query @test "REST PutBucketTagging - duplicate tag key" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -62,6 +65,7 @@ source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh assert_success } +# tags: curl, PutBucketTagging, tagging, invalid-query @test "REST PutBucketTagging - tag value with control character" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -75,6 +79,7 @@ source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh assert_success } +# tags: curl, PutBucketTagging, tagging, invalid-query @test "REST PutBucketTagging - empty tag key" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1583" @@ -87,6 +92,7 @@ source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh assert_success } +# tags: curl, PutBucketTagging, tagging, invalid-query @test "REST PutBucketTagging - returns invalid key" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1583" @@ -99,6 +105,7 @@ source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh assert_success } +# tags: curl, PutBucketTagging, tagging @test "REST - PutBucketTagging - success" { test_key="testKey" test_value="testValue" @@ -114,6 +121,7 @@ source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh assert_success } +# tags: openssl, PutBucketTagging, tagging, chunked, x-amz-content-sha256, invalid-header @test "REST - PutBucketTagging - STREAMING-UNSIGNED-PAYLOAD-TRAILER fails" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -128,6 +136,7 @@ source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh assert_success } +# tags: curl, PutBucketTagging, tagging, invalid-query @test "REST - PutBucketTagging - no payload" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -140,6 +149,7 @@ source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh assert_success } +# tags: curl, PutBucketTagging, tagging, content-md5, invalid-header @test "REST - PutBucketTagging - invalid Content-MD5" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -154,6 +164,7 @@ source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh assert_success } +# tags: curl, PutBucketTagging, tagging, content-md5, invalid-header @test "REST - PutBucketTagging - invalid Content-MD5 - invalid Content-MD5 itself returned" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1526" @@ -169,6 +180,7 @@ source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh assert_success } +# tags: curl, PutBucketTagging, tagging, content-md5, invalid-header @test "REST - PutBucketTagging - incorrect Content-MD5" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -182,6 +194,7 @@ source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh assert_success } +# tags: curl, PutBucketTagging, tagging, content-md5, invalid-header @test "REST - PutBucketTagging - missing Content-MD5" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success diff --git a/tests/test_rest_put_bucket_versioning.sh b/tests/test_rest_put_bucket_versioning.sh index ae6b0aba..e687b374 100755 --- a/tests/test_rest_put_bucket_versioning.sh +++ b/tests/test_rest_put_bucket_versioning.sh @@ -20,6 +20,7 @@ load ./bats-assert/load source ./tests/setup.sh source ./tests/drivers/create_bucket/create_bucket_rest.sh +# tags: curl, PutBucketVersioning, versioning, invalid-query @test "REST - PutBucketVersioning - empty payload" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -31,4 +32,4 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh run send_rest_go_command_expect_error "400" "MissingRequestBodyError" "Request Body is empty" \ "-bucketName" "$bucket_name" "-method" "PUT" "-query" "versioning=" assert_success -} \ No newline at end of file +} diff --git a/tests/test_rest_put_object.sh b/tests/test_rest_put_object.sh index 03d7db23..c0d84145 100755 --- a/tests/test_rest_put_object.sh +++ b/tests/test_rest_put_object.sh @@ -30,6 +30,7 @@ source ./tests/drivers/get_object/get_object_rest.sh test_file="test_file" export RUN_USERS=true +# tags: curl, PutObject, chunked, x-amz-content-sha256, content-length @test "REST - put object w/STREAMING-AWS4-HMAC-SHA256-PAYLOAD without content length" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -42,6 +43,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, Expires, invalid-header @test "REST - PutObject - invalid 'Expires' parameter" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -54,6 +56,7 @@ export RUN_USERS=true assert_success } +# tags: user, curl, PutObject @test "REST - PutObject with user permission - admin user" { if [ "$SKIP_USERS_TESTS" == "true" ]; then skip "skipping versity-specific users tests" @@ -72,6 +75,7 @@ export RUN_USERS=true assert_success } +# tags: user, curl, PutObject @test "REST - PutObject with no permission - 'user' user" { if [ "$SKIP_USERS_TESTS" == "true" ]; then skip "skipping versity-specific users tests" @@ -89,6 +93,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, content-length, invalid-header @test "REST - put object, missing Content-Length" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1321" @@ -104,6 +109,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, x-amz-checksum-algorithm, checksum @test "REST - PutObject w/x-amz-checksum-algorithm" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -116,6 +122,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, If-None-Match, not-implemented @test "REST - PutObject - If-None-Match - no asterisk" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -129,6 +136,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, If-None-Match @test "REST - PutObject - If-None-Match - block copy" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -142,6 +150,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, If-None-Match @test "REST - PutObject - If-None-Match - success" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -155,6 +164,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, If-Match @test "REST - PutObject - If-Match - file doesn't exist on server" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -168,6 +178,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, If-Match, ETag @test "REST - PutObject - If-Match - incorrect etag" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -181,6 +192,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, If-Match, ETag @test "REST - PutObject - If-Match - correct etag" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -199,6 +211,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject @test "PutObject - metadata keys are made lowercase" { uppercase_key="CAPITAL" uppercase_value="DUMMY" @@ -218,6 +231,7 @@ export RUN_USERS=true assert_success } +# tags: user, curl, PutObject @test "REST - PutObject - user permission, bad signature" { if [ "$SKIP_USERS_TESTS" == "true" ]; then skip "skipping versitygw-specific users tests" @@ -235,6 +249,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, Expect @test "REST - PutObject - expect continue - success" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -248,6 +263,7 @@ export RUN_USERS=true assert_success } +# tags: user, curl, PutObject @test "REST - PutObject - invalid x-amz-request-payer" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -277,6 +293,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, Content-Disposition @test "REST - PutObject - content disposition" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -293,6 +310,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, object-lock, retention, x-amz-object-lock-retain-until-date, x-amz-object-lock-mode, content-md5, invalid-header @test "REST - PutObject - x-amz-object-lock-retain-until-date - invalid format" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -307,6 +325,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, object-lock, retention, x-amz-object-lock-retain-until-date, x-amz-object-lock-mode, content-md5, invalid-header @test "REST - PutObject - x-amz-object-lock-retain-until-date - earlier date" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1734" @@ -325,6 +344,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, object-lock, retention, x-amz-object-lock-mode, x-amz-object-lock-retain-until-date, content-md5, invalid-header @test "REST - PutObject - x-amz-object-lock-mode - invalid mode" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1736" @@ -347,6 +367,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, object-lock, retention, versioning, content-md5, invalid-header @test "TEST - REST - PutObject - not allowed without content-MD5 with lock configuration" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1740" @@ -370,6 +391,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, object-lock, retention, versioning, content-md5, x-amz-object-lock-mode, x-amz-object-lock-retain-until-date @test "REST - PutObject - object lock - success" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -392,6 +414,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, x-amz-acl, not-implemented @test "PutObject - x-amz-acl - not implemented" { if [ "$DIRECT" != "true" ]; then skip "skip for versitygw - see #1904" @@ -420,6 +443,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, x-amz-grant-full-control, not-implemented @test "PutObject - x-amz-grant-full-control - not implemented" { if [ "$DIRECT" != "true" ]; then skip "skip for versitygw - see #1904" @@ -428,6 +452,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, x-amz-grant-read, not-implemented @test "PutObject - x-amz-grant-read - not implemented" { if [ "$DIRECT" != "true" ]; then skip "skip for versitygw - see #1904" @@ -435,6 +460,7 @@ export RUN_USERS=true run attempt_put_object_with_specific_acl "x-amz-grant-read" assert_success } +# tags: curl, PutObject, x-amz-grant-read-acp, not-implemented @test "PutObject - x-amz-grant-read-acp - not implemented" { if [ "$DIRECT" != "true" ]; then skip "skip for versitygw - see #1904" @@ -443,6 +469,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, x-amz-grant-write-acp, not-implemented @test "PutObject - x-amz-grant-write-acp - not implemented" { if [ "$DIRECT" != "true" ]; then skip "skip for versitygw - see #1904" @@ -451,6 +478,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, object-lock, legal-hold, x-amz-object-lock-legal-hold, invalid-header @test "PutObject - x-amz-object-lock-legal-hold - invalid value" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1775" @@ -473,6 +501,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, object-lock, legal-hold, x-amz-object-lock-legal-hold, content-md5, invalid-header @test "PutObject - x-amz-object-lock-legal-hold - no Content-MD5" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1776" @@ -496,6 +525,7 @@ export RUN_USERS=true assert_success } +# tags: curl, PutObject, object-lock, legal-hold, x-amz-object-lock-legal-hold, content-md5 @test "PutObject - x-amz-object-lock-legal-hold - success" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -519,6 +549,7 @@ export RUN_USERS=true assert_success } +# tags: openssl, PutObject @test "REST - PutObject - openssl go non-file payload" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success diff --git a/tests/test_rest_put_object_legal_hold.sh b/tests/test_rest_put_object_legal_hold.sh index c36ccd72..eb961247 100755 --- a/tests/test_rest_put_object_legal_hold.sh +++ b/tests/test_rest_put_object_legal_hold.sh @@ -20,6 +20,7 @@ load ./bats-assert/load source ./tests/setup.sh source ./tests/drivers/create_bucket/create_bucket_rest.sh +# tags: curl, PutObject, PutObjectLegalHold, legal-hold, object-lock, content-md5, invalid-header @test "REST - PutObjectLegalHold - missing content-md5" { run get_file_name assert_success @@ -42,6 +43,7 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh assert_success } +# tags: curl, PutObject, PutObjectLegalHold, legal-hold, object-lock, content-md5, invalid-query @test "REST - PutObjectLegalHold w/o payload" { run get_file_name assert_success @@ -64,6 +66,7 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh assert_success } +# tags: curl, PutObject, PutObjectLegalHold, legal-hold, object-lock, content-md5 @test "REST - PutObjectLegalHold - success" { run get_file_name assert_success diff --git a/tests/test_rest_put_object_lock_config.sh b/tests/test_rest_put_object_lock_config.sh index 22babf39..ed8b5b88 100755 --- a/tests/test_rest_put_object_lock_config.sh +++ b/tests/test_rest_put_object_lock_config.sh @@ -20,6 +20,7 @@ load ./bats-assert/load source ./tests/setup.sh source ./tests/drivers/create_bucket/create_bucket_rest.sh +# tags: curl, PutObjectLockConfiguration, object-lock, content-md5, invalid-query, versioning @test "REST - PutObjectLockConfig - missing payload" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -36,6 +37,7 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh assert_success } +# tags: curl, PutObjectLockConfiguration, object-lock, retention, content-md5, invalid-query, versioning @test "REST - PutObjectLockConfig - zero day config, correct error code" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -52,6 +54,7 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh assert_success } +# tags: curl, PutObjectLockConfiguration, object-lock, retention, content-md5, versioning @test "REST - PutObjectLockConfig - default retention period works" { test_file="test_file" diff --git a/tests/test_rest_put_object_tagging.sh b/tests/test_rest_put_object_tagging.sh index 53c85f38..bb0df88f 100755 --- a/tests/test_rest_put_object_tagging.sh +++ b/tests/test_rest_put_object_tagging.sh @@ -26,6 +26,7 @@ source ./tests/setup.sh test_file="test_file" +# tags: curl, PutObjectTagging, tagging, content-md5 @test "REST - PutObjectTagging - content-md5 not required for object tagging" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -38,6 +39,7 @@ test_file="test_file" assert_success } +# tags: curl, PutObjectTagging, tagging, invalid-query @test "REST - PutObjectTagging - invalid key returns invalid key in error" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1663" @@ -53,6 +55,7 @@ test_file="test_file" assert_success } +# tags: curl, PutObjectTagging, tagging, content-md5 @test "REST - PutObjectTagging - success with content-md5" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -65,6 +68,7 @@ test_file="test_file" assert_success } +# tags: curl, PutObjectTagging, tagging, x-amz-expected-bucket-owner, invalid-header @test "REST - PutObjectTagging - mismatched bucket owner" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -75,6 +79,7 @@ test_file="test_file" assert_success } +# tags: curl, PutObjectTagging, tagging, versioning, versionId @test "REST -PutObjectTagging - older version" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "cannot change versioning status for static buckets" @@ -88,4 +93,4 @@ test_file="test_file" run tag_old_version "$bucket_name" "$test_file" assert_success -} \ No newline at end of file +} diff --git a/tests/test_rest_retention.sh b/tests/test_rest_retention.sh index 7668a2ad..59d34a29 100755 --- a/tests/test_rest_retention.sh +++ b/tests/test_rest_retention.sh @@ -22,6 +22,7 @@ source ./tests/commands/put_object_retention.sh source ./tests/drivers/create_bucket/create_bucket_rest.sh source ./tests/util/util_time.sh +# tags: curl, PutObject, PutObjectRetention, object-lock, retention, content-md5 @test "test_rest_retention" { run get_file_name assert_success @@ -49,6 +50,7 @@ source ./tests/util/util_time.sh assert_success } +# tags: curl, PutObject, PutObjectRetention, object-lock, retention, content-md5, invalid-query @test "REST - PutObjectRetention - w/o request body" { run get_file_name assert_success @@ -70,4 +72,3 @@ source ./tests/util/util_time.sh run retention_rest_without_request_body "$bucket_name" "$test_file" assert_success } - diff --git a/tests/test_rest_versioning.sh b/tests/test_rest_versioning.sh index 18707152..8fc1774e 100755 --- a/tests/test_rest_versioning.sh +++ b/tests/test_rest_versioning.sh @@ -26,6 +26,7 @@ source ./tests/util/util_rest.sh test_file="test_file" +# tags: curl, versioning, PutBucketVersioning @test "REST - check, enable, suspend versioning" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "cannot change versioning status for static buckets" @@ -53,6 +54,7 @@ test_file="test_file" assert_success } +# tags: curl, versioning, PutBucketVersioning, PutObject, ListObjectVersions @test "test_rest_versioning" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "cannot change versioning status for static buckets" @@ -83,6 +85,7 @@ test_file="test_file" assert_success } +# tags: curl, versioning, PutBucketVersioning, PutObject, DeleteObject, ListObjectVersions @test "versioning - add version, then delete and check for marker" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "cannot change versioning status for static buckets" @@ -107,6 +110,7 @@ test_file="test_file" assert_success } +# tags: curl, versioning, PutBucketVersioning, PutObject, DeleteObject, GetObject @test "versioning - retrieve after delete" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -128,6 +132,7 @@ test_file="test_file" assert_failure } +# tags: curl, versioning, PutBucketVersioning, PutObject, DeleteObject, HeadObject, object-lock @test "REST - HeadObject does not return 405 with versioning, after file deleted" { if [ "$RECREATE_BUCKETS" == "false" ] || [[ ( -z "$VERSIONING_DIR" ) && ( "$DIRECT" != "true" ) ]]; then skip "test isn't valid for this configuration" @@ -152,6 +157,7 @@ test_file="test_file" assert_success } +# tags: curl, versioning, PutBucketVersioning, PutObject, DeleteObject, HeadObject, object-lock, versionId @test "REST - HeadObject returns 405 when querying DeleteMarker" { if [ "$RECREATE_BUCKETS" == "false" ] || [[ ( -z "$VERSIONING_DIR" ) && ( "$DIRECT" != "true" ) ]]; then skip "test isn't valid for this configuration" diff --git a/tests/test_s3.sh b/tests/test_s3.sh index 9333456e..468eb886 100755 --- a/tests/test_s3.sh +++ b/tests/test_s3.sh @@ -23,16 +23,19 @@ source ./tests/drivers/file.sh source ./tests/test_common.sh # complete-multipart-upload +# tags: s3, multipart, CreateMultipartUpload, UploadPart, CompleteMultipartUpload @test "test_complete_multipart_upload" { test_common_multipart_upload "s3" } # copy-object +# tags: s3, CopyObject, x-amz-copy-source @test "test_copy_object" { test_common_copy_object "s3" } # create-bucket +# tags: s3, CreateBucket, DeleteBucket @test "test_create_delete_bucket" { test_common_create_delete_bucket "s3" } @@ -44,18 +47,22 @@ source ./tests/test_common.sh # delete-objects - tested with recursive bucket delete # get-object +# tags: s3, PutObject, GetObject @test "test_copy_get_object" { test_common_put_get_object "s3" } +# tags: s3, PutObject @test "test_put_object" { test_common_put_object_no_data "s3" } +# tags: s3, ListBuckets @test "test_list_buckets" { test_common_list_buckets "s3" } +# tags: s3, DeleteBucket @test "test_delete_bucket" { if [[ $RECREATE_BUCKETS == "false" ]]; then skip "will not test bucket deletion in static bucket test config" @@ -68,6 +75,7 @@ source ./tests/test_common.sh assert_success } +# tags: s3, ListObjects @test "test_ls_directory_object" { test_common_ls_directory_object "s3" -} \ No newline at end of file +} diff --git a/tests/test_s3_file_count.sh b/tests/test_s3_file_count.sh index e7175888..92674498 100755 --- a/tests/test_s3_file_count.sh +++ b/tests/test_s3_file_count.sh @@ -20,6 +20,7 @@ load ./bats-assert/load source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_controls_rest.sh source ./tests/test_common.sh +# tags: s3, ListObjects, max-keys @test "test_list_objects_file_count" { test_common_list_objects_file_count "s3" } diff --git a/tests/test_s3api_bucket.sh b/tests/test_s3api_bucket.sh index a1b53cf2..c4101c32 100755 --- a/tests/test_s3api_bucket.sh +++ b/tests/test_s3api_bucket.sh @@ -59,6 +59,7 @@ source ./tests/util/util_object.sh export RUN_USERS=true +# tags: s3api, CreateBucket, invalid-query @test "test_create_bucket_invalid_name" { if [[ $RECREATE_BUCKETS != "true" ]]; then return @@ -69,6 +70,7 @@ export RUN_USERS=true } # create-bucket +# tags: s3api, CreateBucket, DeleteBucket @test "test_create_delete_bucket_s3api" { test_common_create_delete_bucket "s3api" } @@ -76,6 +78,7 @@ export RUN_USERS=true # delete-bucket - test_create_delete_bucket_s3api # delete-bucket-policy +# tags: s3api, policy, GetBucketPolicy, PutBucketPolicy, DeleteBucketPolicy @test "test_get_put_delete_bucket_policy" { if [[ -n $SKIP_POLICY ]]; then skip "will not test policy actions with SKIP_POLICY set" @@ -85,6 +88,7 @@ export RUN_USERS=true # get-bucket-acl +# tags: s3api, GetBucketAcl @test "test_get_bucket_acl" { run setup_bucket "$BUCKET_ONE_NAME" assert_success @@ -94,6 +98,7 @@ export RUN_USERS=true } # get-bucket-location +# tags: s3api, GetBucketLocation @test "test_get_bucket_location" { test_common_get_bucket_location "s3api" } @@ -102,6 +107,7 @@ export RUN_USERS=true # get-bucket-tagging - test_set_get_delete_bucket_tags +# tags: s3api, HeadBucket, minimal-request @test "test_head_bucket" { run setup_bucket "$BUCKET_ONE_NAME" assert_success @@ -110,6 +116,7 @@ export RUN_USERS=true assert_success } +# tags: s3api, HeadBucket, invalid-query @test "test_head_bucket_doesnt_exist" { if [ "$RECREATE_BUCKETS" == "false" ]; then skip "skip test for static buckets" @@ -121,6 +128,7 @@ export RUN_USERS=true assert_success } +# tags: s3api, HeadBucket, invalid-query @test "test_head_bucket_invalid_name" { if head_bucket "s3api" ""; then fail "able to get bucket info for invalid name" @@ -128,15 +136,18 @@ export RUN_USERS=true } # test listing buckets on versitygw +# tags: s3api, ListBuckets, minimal-request @test "test_list_buckets" { test_common_list_buckets "s3api" } +# tags: s3api, PutBucketAcl @test "test_put_bucket_acl" { test_common_put_bucket_acl "s3api" } # delete-bucket-tagging +# tags: s3api, tagging, PutBucketTagging, GetBucketTagging, DeleteBucketTagging @test "test-set-get-delete-bucket-tags" { test_common_set_get_delete_bucket_tags "s3api" } diff --git a/tests/test_s3api_multipart.sh b/tests/test_s3api_multipart.sh index e83db3c1..e915925c 100755 --- a/tests/test_s3api_multipart.sh +++ b/tests/test_s3api_multipart.sh @@ -34,6 +34,7 @@ source ./tests/util/util_multipart_before_completion.sh export RUN_USERS=true # abort-multipart-upload +# tags: s3api, multipart, CreateMultipartUpload, AbortMultipartUpload @test "test_abort_multipart_upload" { run setup_bucket_and_large_file_v3 "$BUCKET_ONE_NAME" assert_success @@ -47,6 +48,7 @@ export RUN_USERS=true } # complete-multipart-upload +# tags: s3api, multipart, CreateMultipartUpload, UploadPart, CompleteMultipartUpload, GetObject @test "test_complete_multipart_upload" { run setup_bucket_and_large_file_v3 "$BUCKET_ONE_NAME" 20 assert_success @@ -60,6 +62,7 @@ export RUN_USERS=true } # create-multipart-upload +# tags: s3api, multipart, CreateMultipartUpload, UploadPart, CompleteMultipartUpload, tagging, legal-hold, retention, Content-Type, x-amz-meta @test "test_create_multipart_upload_properties" { run get_file_name assert_success @@ -103,6 +106,7 @@ export RUN_USERS=true assert_success } +# tags: s3api, multipart, UploadPartCopy, CompleteMultipartUpload @test "test-multipart-upload-from-bucket" { run setup_bucket_and_large_file_v3 "$BUCKET_ONE_NAME" 20 assert_success @@ -115,6 +119,7 @@ export RUN_USERS=true assert_success } +# tags: s3api, multipart, UploadPartCopy, range, invalid-header @test "test_multipart_upload_from_bucket_range_too_large" { run setup_bucket_and_large_file_v3 "$BUCKET_ONE_NAME" 20 assert_success @@ -124,6 +129,7 @@ export RUN_USERS=true assert_success } +# tags: s3api, multipart, UploadPartCopy, range @test "test_multipart_upload_from_bucket_range_valid" { run setup_bucket_and_large_file_v3 "$BUCKET_ONE_NAME" 20 assert_success @@ -134,6 +140,7 @@ export RUN_USERS=true } # test multi-part upload list parts command +# tags: s3api, multipart, CreateMultipartUpload, ListParts, AbortMultipartUpload @test "test-multipart-upload-list-parts" { local bucket_file="bucket-file" run dd if=/dev/urandom of="$TEST_FILE_FOLDER/$bucket_file" bs=5M count=1 @@ -150,6 +157,7 @@ export RUN_USERS=true } # test listing of active uploads +# tags: s3api, multipart, ListMultipartUploads @test "test-multipart-upload-list-uploads" { if [[ $RECREATE_BUCKETS == false ]]; then run abort_all_multipart_uploads "$BUCKET_ONE_NAME" @@ -164,4 +172,3 @@ export RUN_USERS=true run create_list_check_multipart_uploads "$BUCKET_ONE_NAME" "$bucket_file_one" "$bucket_file_two" assert_success } - diff --git a/tests/test_s3api_object.sh b/tests/test_s3api_object.sh index fe2f1b38..2f1e633a 100755 --- a/tests/test_s3api_object.sh +++ b/tests/test_s3api_object.sh @@ -54,10 +54,12 @@ source ./tests/test_s3api_root_inner.sh export RUN_USERS=true # copy-object +# tags: s3api, CopyObject, x-amz-copy-source @test "test_copy_object" { test_common_copy_object "s3api" } +# tags: s3api, CopyObject, minimal-request @test "test_copy_object_empty" { run copy_object_empty assert_success @@ -66,42 +68,51 @@ export RUN_USERS=true # delete-object - tested with bucket cleanup before or after tests # delete-object-tagging +# tags: s3api, DeleteObjectTagging, tagging @test "test_delete_object_tagging" { test_common_delete_object_tagging "s3api" } # delete-objects +# tags: s3api, DeleteObject @test "test_delete_objects" { test_delete_objects_s3api_root } # get-object +# tags: s3api, GetObject, range @test "test_get_object_full_range" { test_get_object_full_range_s3api_root } +# tags: s3api, GetObject, range, invalid-header @test "test_get_object_invalid_range" { test_get_object_invalid_range_s3api_root } # get-object-attributes +# tags: s3api, GetObjectAttributes @test "test_get_object_attributes" { test_get_object_attributes_s3api_root } +# tags: s3api, PutObjectLegalHold, GetObjectLegalHold, object-lock, legal-hold @test "test_get_put_object_legal_hold" { test_get_put_object_legal_hold_s3api_root } +# tags: s3api, PutObjectRetention, GetObjectRetention, object-lock, retention @test "test_get_put_object_retention" { test_get_put_object_retention_s3api_root } # test listing a bucket's objects on versitygw +# tags: s3api, ListObjects, minimal-request @test "test_list_objects" { test_common_list_objects "s3api" } +# tags: s3api, ListObjects, delimiter, prefix @test "test-list-objects-delimiter" { folder_name="two" object_name="three" @@ -119,23 +130,28 @@ export RUN_USERS=true assert_success } +# tags: s3api, PutObject @test "test_put_object" { test_put_object_s3api_root } # test adding and removing an object on versitygw +# tags: s3api, PutObject @test "test_put_object_with_data" { test_common_put_object_with_data "s3api" } +# tags: s3api, PutObject @test "test_put_object_no_data" { test_common_put_object_no_data "s3api" } +# tags: s3api, presigned-url @test "test-presigned-url-utf8-chars" { test_common_presigned_url_utf8_chars "s3api" } +# tags: s3api, PutObjectLockConfiguration, GetObjectLockConfiguration, object-lock, retention @test "test_put_object_lock_configuration" { bucket_name=$BUCKET_ONE_NAME if [[ $RECREATE_BUCKETS == "true" ]]; then @@ -155,6 +171,7 @@ export RUN_USERS=true assert_success "error getting and checking object lock config" } +# tags: s3api, PutObject, x-amz-meta @test "test_put_object_metadata" { test_key="x-test-data" test_value="test-value" @@ -174,21 +191,25 @@ export RUN_USERS=true assert_success } +# tags: s3api, retention, object-lock, x-amz-bypass-governance-retention @test "test_retention_bypass" { test_retention_bypass_s3api_root } # test v1 s3api list objects command +# tags: s3api, ListObjects @test "test-s3api-list-objects-v1" { test_s3api_list_objects_v1_s3api_root } # test v2 s3api list objects command +# tags: s3api, ListObjectsV2, list-type @test "test-s3api-list-objects-v2" { test_s3api_list_objects_v2_s3api_root } # test abilty to set and retrieve object tags +# tags: s3api, PutObjectTagging, GetObjectTagging, tagging @test "test-set-get-object-tags" { test_common_set_get_object_tags "s3api" } @@ -218,10 +239,12 @@ export RUN_USERS=true #} +# tags: s3api, ListObjects @test "test_ls_directory_object" { test_common_ls_directory_object "s3api" } +# tags: s3api, PutObject, invalid-query @test "directory objects can't contain data" { if [ "$DIRECT" == "true" ]; then skip "for direct, directory objects can contain data (though discouraged)" @@ -236,6 +259,7 @@ export RUN_USERS=true assert_output -p "Directory object contains data payload" } +# tags: s3api, CopyObject, invalid-query @test "objects containing data can't be copied to directory objects with same name" { # operation is legal (though discouraged) for direct if [ "$DIRECT" == "true" ]; then @@ -256,6 +280,7 @@ export RUN_USERS=true assert_success } +# tags: s3api, CreateMultipartUpload, multipart, invalid-query @test "directory object - create multipart upload" { run setup_bucket "$BUCKET_ONE_NAME" assert_success @@ -265,6 +290,7 @@ export RUN_USERS=true assert_output -p "Directory object contains data payload" } +# tags: s3api, retention, object-lock, x-amz-bypass-governance-retention, invalid-header @test "s3api - --bypass-governance-retention w/o bucket w/object lock fails" { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1218" @@ -281,4 +307,3 @@ export RUN_USERS=true assert_output -p "InvalidArgument" assert_output -p "x-amz-bypass-governance-retention is only applicable" } - diff --git a/tests/test_s3api_policy.sh b/tests/test_s3api_policy.sh index 83912fdc..470a8e34 100755 --- a/tests/test_s3api_policy.sh +++ b/tests/test_s3api_policy.sh @@ -44,82 +44,102 @@ if [ -n "$SKIP_POLICY" ] || [ "$SKIP_USERS_TESTS" == "true" ]; then exit 0 fi +# tags: s3api, policy, multipart, AbortMultipartUpload, PutBucketPolicy @test "test_policy_abort_multipart_upload" { test_s3api_policy_abort_multipart_upload } +# tags: s3api, policy, PutBucketPolicy, PutObject, GetObject @test "test_policy_allow_deny" { test_s3api_policy_allow_deny } +# tags: s3api, policy, PutBucketPolicy, PutObject, DeleteObject @test "test_policy_delete" { test_s3api_policy_delete } +# tags: s3api, policy, PutBucketPolicy, DeleteBucketPolicy @test "test_policy_delete_bucket_policy" { test_s3api_policy_delete_bucket_policy } +# tags: s3api, policy, PutBucketPolicy, PutObject, GetObject @test "test_policy_deny" { test_s3api_policy_deny } +# tags: s3api, policy, PutBucketPolicy, GetBucketAcl @test "test_policy_get_bucket_acl" { test_s3api_policy_get_bucket_acl } +# tags: s3api, policy, PutBucketPolicy, GetBucketPolicy @test "test_policy_get_bucket_policy" { test_s3api_policy_get_bucket_policy } +# tags: s3api, policy, PutBucketPolicy, PutBucketTagging, GetBucketTagging, tagging @test "test_policy_get_bucket_tagging" { test_s3api_policy_get_bucket_tagging } +# tags: s3api, policy, PutBucketPolicy, PutObject, GetObject @test "test_policy_get_object_file_wildcard" { test_s3api_policy_get_object_file_wildcard } +# tags: s3api, policy, PutBucketPolicy, PutObject, GetObject @test "test_policy_get_object_folder_wildcard" { test_s3api_policy_get_object_folder_wildcard } +# tags: s3api, policy, PutBucketPolicy, PutObject, GetObject @test "test_policy_get_object_specific_file" { test_s3api_policy_get_object_specific_file } +# tags: s3api, policy, PutBucketPolicy, PutObject, GetObject @test "test_policy_get_object_with_user" { test_s3api_policy_get_object_with_user } +# tags: s3api, policy, multipart, PutBucketPolicy, ListMultipartUploads @test "test_policy_list_multipart_uploads" { test_s3api_policy_list_multipart_uploads } +# tags: s3api, policy, multipart, PutBucketPolicy, ListParts @test "test_policy_list_upload_parts" { test_s3api_policy_list_upload_parts } +# tags: s3api, policy, PutBucketPolicy, PutBucketAcl @test "test_policy_put_acl" { test_s3api_policy_put_acl } +# tags: s3api, policy, PutBucketPolicy @test "test_policy_put_bucket_policy" { test_s3api_policy_put_bucket_policy } +# tags: s3api, policy, PutBucketPolicy, PutBucketTagging, tagging @test "test_policy_put_bucket_tagging" { test_s3api_policy_put_bucket_tagging } +# tags: s3api, policy, PutBucketPolicy @test "test_policy_two_principals" { test_s3api_policy_two_principals } +# tags: s3api, policy, PutBucketPolicy, PutObject @test "test_policy_put_wildcard" { test_s3api_policy_put_wildcard } +# tags: s3api, policy, PutBucketPolicy, invalid-query @test "test_put_policy_invalid_action" { test_s3api_policy_invalid_action } diff --git a/tests/test_s3cmd.sh b/tests/test_s3cmd.sh index a6b06b9a..465a7158 100755 --- a/tests/test_s3cmd.sh +++ b/tests/test_s3cmd.sh @@ -31,20 +31,24 @@ export RUN_S3CMD=true export RUN_USERS=true # complete-multipart-upload +# tags: s3cmd, multipart, CreateMultipartUpload, UploadPart, CompleteMultipartUpload @test "test_complete_multipart_upload" { test_common_multipart_upload "s3cmd" } # copy-object +# tags: s3cmd, CopyObject, x-amz-copy-source @test "test_copy_object" { test_common_copy_object "s3cmd" } # create-bucket +# tags: s3cmd, CreateBucket, DeleteBucket @test "test_create_delete_bucket" { test_common_create_delete_bucket "s3cmd" } +# tags: s3cmd, CreateBucket, invalid-query @test "test_create_bucket_invalid_name_s3cmd" { if [[ $RECREATE_BUCKETS != "true" ]]; then return @@ -58,6 +62,7 @@ export RUN_USERS=true # delete-bucket - test_create_delete_bucket # delete-bucket-policy +# tags: s3cmd, policy, GetBucketPolicy, PutBucketPolicy, DeleteBucketPolicy @test "test_get_put_delete_bucket_policy" { if [[ -n $SKIP_POLICY ]]; then skip "will not test policy actions with SKIP_POLICY set" @@ -73,6 +78,7 @@ export RUN_USERS=true # get-bucket-acl - test_put_bucket_acl # get-bucket-location +# tags: s3cmd, GetBucketLocation @test "test_get_bucket_location" { test_common_get_bucket_location "s3cmd" } @@ -80,23 +86,28 @@ export RUN_USERS=true # get-bucket-policy - test_get_put_delete_bucket_policy # get-object +# tags: s3cmd, PutObject, GetObject @test "test_put_get_object" { test_common_put_get_object "s3cmd" } +# tags: s3cmd, PutObject @test "test_put_object_with_data" { test_common_put_object_with_data "s3cmd" } +# tags: s3cmd, PutObject @test "test_put_object_no_data" { test_common_put_object_no_data "s3cmd" } +# tags: s3cmd, PutBucketAcl @test "test_put_bucket_acl" { skip "https://github.com/versity/versitygw/issues/963" test_put_bucket_acl_s3cmd } +# tags: s3cmd, PutPublicAccessBlock @test 's3cmd - can enable public ACLs for bucket' { if [ "$DIRECT" != "true" ]; then skip "https://github.com/versity/versitygw/issues/1154" @@ -109,10 +120,12 @@ export RUN_USERS=true } # test listing buckets on versitygw +# tags: s3cmd, ListBuckets, minimal-request @test "test_list_buckets_s3cmd" { test_common_list_buckets "s3cmd" } +# tags: s3cmd, ListObjects @test "test_list_objects_s3cmd" { test_common_list_objects "s3cmd" } @@ -121,6 +134,7 @@ export RUN_USERS=true # test_common_presigned_url_utf8_chars "s3cmd" #} +# tags: s3cmd, HeadBucket, minimal-request @test "test_get_bucket_info_s3cmd" { run setup_bucket "$BUCKET_ONE_NAME" assert_success @@ -130,6 +144,7 @@ export RUN_USERS=true assert_output -p "s3://$BUCKET_ONE_NAME" } +# tags: s3cmd, HeadBucket, invalid-query @test "test_get_bucket_info_doesnt_exist_s3cmd" { run setup_bucket "$BUCKET_ONE_NAME" assert_success @@ -138,6 +153,7 @@ export RUN_USERS=true assert_failure 1 } +# tags: s3cmd, ListObjects @test "test_ls_directory_object" { test_common_ls_directory_object "s3cmd" } diff --git a/tests/test_s3cmd_file_count.sh b/tests/test_s3cmd_file_count.sh index 7228489a..2a32563e 100755 --- a/tests/test_s3cmd_file_count.sh +++ b/tests/test_s3cmd_file_count.sh @@ -22,6 +22,7 @@ source ./tests/test_common.sh export RUN_S3CMD=true +# tags: s3cmd, ListObjects, max-keys @test "test_list_objects_file_count" { test_common_list_objects_file_count "s3cmd" } diff --git a/tests/test_user_aws.sh b/tests/test_user_aws.sh index 6f85cd0a..68daed63 100755 --- a/tests/test_user_aws.sh +++ b/tests/test_user_aws.sh @@ -26,14 +26,17 @@ source ./tests/drivers/user.sh export RUN_USERS=true +# tags: s3api, user @test "test_admin_user_aws" { test_admin_user "aws" } +# tags: s3api, user, invalid-request @test "test_create_user_already_exists_aws" { test_create_user_already_exists "aws" } +# tags: s3api, user, invalid-request @test "test_delete_user_no_access_key" { if [ "$SKIP_USERS_TESTS" == "true" ]; then skip "skipping versitygw-specific users tests" @@ -42,14 +45,17 @@ export RUN_USERS=true assert_failure } +# tags: s3api, user @test "test_user_user_aws" { test_user_user "aws" } +# tags: s3api, user @test "test_userplus_operation_aws" { test_userplus_operation "aws" } +# tags: s3api, user, GetObject, PutObject, ownershipControls @test "test_user_get_object" { if [ "$SKIP_USERS_TESTS" == "true" ]; then skip "skipping versitygw-specific users tests" @@ -77,6 +83,7 @@ export RUN_USERS=true assert_success } +# tags: s3api, user, GetObject, PutObject, ownershipControls @test "test_userplus_get_object" { if [ "$SKIP_USERS_TESTS" == "true" ]; then skip "skipping versitygw-specific users tests" @@ -104,6 +111,7 @@ export RUN_USERS=true assert_success } +# tags: s3api, user, DeleteObject, PutObject, ownershipControls @test "test_user_delete_object" { if [ "$SKIP_USERS_TESTS" == "true" ]; then skip "skipping versitygw-specific users tests" @@ -131,6 +139,7 @@ export RUN_USERS=true assert_success } +# tags: s3api, user, PutObject, GetObject, DeleteObject @test "test_admin_put_get_object" { if [ "$SKIP_USERS_TESTS" == "true" ]; then skip "skipping versitygw-specific users tests" @@ -162,6 +171,7 @@ export RUN_USERS=true assert_output -p "NoSuchKey" } +# tags: s3api, user, multipart, CreateMultipartUpload, ownershipControls @test "test_user_create_multipart_upload" { if [ "$SKIP_USERS_TESTS" == "true" ]; then skip "skipping versitygw-specific users tests" diff --git a/tests/test_user_s3cmd.sh b/tests/test_user_s3cmd.sh index f26685ca..afebe4b2 100755 --- a/tests/test_user_s3cmd.sh +++ b/tests/test_user_s3cmd.sh @@ -24,18 +24,22 @@ source ./tests/test_user_common.sh export RUN_S3CMD=true export RUN_USERS=true +# tags: s3cmd, user @test "test_admin_user_s3cmd" { test_admin_user "s3cmd" } +# tags: s3cmd, user, invalid-request @test "test_create_user_already_exists_s3cmd" { test_create_user_already_exists "s3cmd" } +# tags: s3cmd, user @test "test_user_user_s3cmd" { test_user_user "s3cmd" } +# tags: s3cmd, user @test "test_userplus_operation_s3cmd" { test_userplus_operation "s3cmd" } diff --git a/tests/test_xml.sh b/tests/test_xml.sh index 931d6683..83fe2378 100755 --- a/tests/test_xml.sh +++ b/tests/test_xml.sh @@ -23,6 +23,7 @@ source ./tests/drivers/params.sh source ./tests/logger.sh source ./tests/setup_unit.sh +# tags: unit @test "build_xpath_string_for_element" { run build_xpath_string_for_element assert_failure @@ -45,18 +46,21 @@ source ./tests/setup_unit.sh assert_output -p "element 'XML With Space' contains a space" } +# tags: unit @test "get_xml_data - missing params" { run get_xml_data "oneparam" assert_failure assert_output -p "requires data file, output file" } +# tags: unit @test "get_xml_data - file doesn't exist" { run get_xml_data "/nonexistent_$$" "/tmp/out" assert_failure assert_output -p "does not exist" } +# tags: unit @test "get_xml_data - no XML content" { input=$(get_file_name) printf 'HTTP/1.1 500\r\n\r\nNo XML here' > "$TEST_FILE_FOLDER/$input" @@ -65,6 +69,7 @@ source ./tests/setup_unit.sh assert_output -p "No XML declaration found" } +# tags: unit @test "get_xml_data - valid XML with declaration" { input=$(get_file_name) printf 'HTTP/1.1 200\r\n\r\nOK' > "$TEST_FILE_FOLDER/$input" @@ -72,6 +77,7 @@ source ./tests/setup_unit.sh assert_success } +# tags: unit @test "get_xml_data - valid XML without declaration" { input=$(get_file_name) printf 'HTTP/1.1 200\r\n\r\nAlsoOK' > "$TEST_FILE_FOLDER/$input" @@ -79,6 +85,7 @@ source ./tests/setup_unit.sh assert_success } +# tags: unit @test "get_xml_data - XML with extra content after root" { input=$(get_file_name) printf 'HTTP/1.1 200\r\n\r\nAgainOKextra' > "$TEST_FILE_FOLDER/$input" diff --git a/tests/util/util_object.sh b/tests/util/util_object.sh index 13f418f8..58001a44 100644 --- a/tests/util/util_object.sh +++ b/tests/util/util_object.sh @@ -246,13 +246,18 @@ put_object_rest_checksum() { if ! check_param_count_v2 "data file, bucket name, key, checksum type" 4 $#; then return 1 fi + if ! response=$(get_file_name 2>&1); then + log 2 "error getting file name: $response" + return 1 + fi + file_name="$response" # shellcheck disable=SC2097,SC2098 - if ! result=$(COMMAND_LOG="$COMMAND_LOG" DATA_FILE="$1" BUCKET_NAME="$2" OBJECT_KEY="$3" TEST_FILE_FOLDER="$TEST_FILE_FOLDER" OUTPUT_FILE="$TEST_FILE_FOLDER/result.txt" CHECKSUM_TYPE="$4" ./tests/rest_scripts/put_object.sh 2>&1); then + if ! result=$(COMMAND_LOG="$COMMAND_LOG" DATA_FILE="$1" BUCKET_NAME="$2" OBJECT_KEY="$3" TEST_FILE_FOLDER="$TEST_FILE_FOLDER" OUTPUT_FILE="$TEST_FILE_FOLDER/$file_name" CHECKSUM_TYPE="$4" ./tests/rest_scripts/put_object.sh 2>&1); then log 2 "error: $result" return 1 fi if [ "$result" != "200" ]; then - log 2 "expected response code of '200', was '$result' ($(cat "$TEST_FILE_FOLDER/result.txt"))" + log 2 "expected response code of '200', was '$result' ($(cat "$TEST_FILE_FOLDER/$file_name"))" return 1 fi return 0