From 1ba370421b58e59b90eaecf58adf4f4278227871 Mon Sep 17 00:00:00 2001 From: Luke McCrone Date: Fri, 18 Apr 2025 21:53:59 -0300 Subject: [PATCH] test: more user test updates, skip removals --- .github/workflows/system.yml | 17 ++++ tests/.env.docker.default | 3 + tests/commands/put_bucket_policy.sh | 4 + tests/env.sh | 20 +++-- tests/setup.sh | 70 +++++++-------- tests/test_common_acl.sh | 18 ++-- tests/test_rest.sh | 2 +- tests/test_s3api_object.sh | 43 +++++----- tests/test_s3api_policy_bucket.sh | 127 ++++++++++++++++------------ tests/util/util_attributes.sh | 2 +- tests/util/util_object.sh | 19 +++++ tests/util/util_policy.sh | 17 +++- 12 files changed, 211 insertions(+), 131 deletions(-) diff --git a/.github/workflows/system.yml b/.github/workflows/system.yml index 815cbc1f..99cec412 100644 --- a/.github/workflows/system.yml +++ b/.github/workflows/system.yml @@ -12,66 +12,79 @@ jobs: IAM_TYPE: folder RUN_SET: "mc-non-file-count" RECREATE_BUCKETS: "true" + DELETE_BUCKETS_AFTER_TEST: "true" BACKEND: "posix" - set: "mc, posix, file count, non-static, folder IAM" IAM_TYPE: folder RUN_SET: "mc-file-count" RECREATE_BUCKETS: "true" + DELETE_BUCKETS_AFTER_TEST: "true" BACKEND: "posix" - set: "REST, posix, non-static, all, folder IAM" IAM_TYPE: folder RUN_SET: "rest" RECREATE_BUCKETS: "true" + DELETE_BUCKETS_AFTER_TEST: "true" BACKEND: "posix" - set: "s3, posix, non-file count, non-static, folder IAM" IAM_TYPE: folder RUN_SET: "s3-non-file-count" RECREATE_BUCKETS: "true" + DELETE_BUCKETS_AFTER_TEST: "true" BACKEND: "posix" - set: "s3, posix, file count, non-static, folder IAM" IAM_TYPE: folder RUN_SET: "s3-file-count" RECREATE_BUCKETS: "true" + DELETE_BUCKETS_AFTER_TEST: "true" BACKEND: "posix" - set: "s3api, posix, bucket|object|multipart, non-static, folder IAM" IAM_TYPE: folder RUN_SET: "s3api-bucket,s3api-object,s3api-multipart" RECREATE_BUCKETS: "true" + DELETE_BUCKETS_AFTER_TEST: "true" BACKEND: "posix" - set: "s3api, posix, policy, non-static, folder IAM" IAM_TYPE: folder RUN_SET: "s3api-policy" RECREATE_BUCKETS: "true" + DELETE_BUCKETS_AFTER_TEST: "true" BACKEND: "posix" - set: "s3api, posix, user, non-static, s3 IAM" IAM_TYPE: s3 RUN_SET: "s3api-user" RECREATE_BUCKETS: "true" + DELETE_BUCKETS_AFTER_TEST: "true" BACKEND: "posix" - set: "s3api, posix, bucket, static, folder IAM" IAM_TYPE: folder RUN_SET: "s3api-bucket" RECREATE_BUCKETS: "false" + DELETE_BUCKETS_AFTER_TEST: "false" BACKEND: "posix" - set: "s3api, posix, multipart, static, folder IAM" IAM_TYPE: folder RUN_SET: "s3api-multipart" RECREATE_BUCKETS: "false" + DELETE_BUCKETS_AFTER_TEST: "false" BACKEND: "posix" - set: "s3api, posix, object, static, folder IAM" IAM_TYPE: folder RUN_SET: "s3api-object" RECREATE_BUCKETS: "false" + DELETE_BUCKETS_AFTER_TEST: "false" BACKEND: "posix" - set: "s3api, posix, policy, static, folder IAM" IAM_TYPE: folder RUN_SET: "s3api-policy" RECREATE_BUCKETS: "false" + DELETE_BUCKETS_AFTER_TEST: "false" BACKEND: "posix" - set: "s3api, posix, user, static, folder IAM" IAM_TYPE: folder RUN_SET: "s3api-user" RECREATE_BUCKETS: "false" + DELETE_BUCKETS_AFTER_TEST: "false" BACKEND: "posix" # TODO fix/debug s3 gateway #- set: "s3api, s3, multipart|object, non-static, folder IAM" @@ -88,16 +101,19 @@ jobs: IAM_TYPE: folder RUN_SET: "s3cmd-file-count" RECREATE_BUCKETS: "true" + DELETE_BUCKETS_AFTER_TEST: "true" BACKEND: "posix" - set: "s3cmd, posix, non-user, non-static, folder IAM" IAM_TYPE: folder RUN_SET: "s3cmd-non-user" RECREATE_BUCKETS: "true" + DELETE_BUCKETS_AFTER_TEST: "true" BACKEND: "posix" - set: "s3cmd, posix, user, non-static, folder IAM" IAM_TYPE: folder RUN_SET: "s3cmd-user" RECREATE_BUCKETS: "true" + DELETE_BUCKETS_AFTER_TEST: "true" BACKEND: "posix" steps: - name: Check out code into the Go module directory @@ -150,6 +166,7 @@ jobs: RUN_VERSITYGW: true BACKEND: ${{ matrix.BACKEND }} RECREATE_BUCKETS: ${{ matrix.RECREATE_BUCKETS }} + DELETE_BUCKETS_AFTER_TEST: ${{ matrix.DELETE_BUCKETS_AFTER_TEST }} CERT: ${{ github.workspace }}/cert.pem KEY: ${{ github.workspace }}/versitygw.pem LOCAL_FOLDER: /tmp/gw diff --git a/tests/.env.docker.default b/tests/.env.docker.default index 2d4187a8..bd15d883 100644 --- a/tests/.env.docker.default +++ b/tests/.env.docker.default @@ -25,5 +25,8 @@ USERNAME_TWO=HIJKLMN PASSWORD_TWO=OPQRSTU TEST_FILE_FOLDER=$PWD/versity-gwtest-files RECREATE_BUCKETS=true +DELETE_BUCKETS_AFTER_TEST=true REMOVE_TEST_FILE_FOLDER=true +AUTOGENERATE_USERS=true +USER_AUTOGENERATION_PREFIX=versitygw-docker- VERSIONING_DIR=/tmp/versioning \ No newline at end of file diff --git a/tests/commands/put_bucket_policy.sh b/tests/commands/put_bucket_policy.sh index 593f5681..741b7ed1 100644 --- a/tests/commands/put_bucket_policy.sh +++ b/tests/commands/put_bucket_policy.sh @@ -37,6 +37,10 @@ put_bucket_policy() { export put_bucket_policy_error return 1 fi + # direct can take some time to take effect + if [ "$DIRECT" == "true" ]; then + sleep 10 + fi return 0 } diff --git a/tests/env.sh b/tests/env.sh index d32ba7a0..4c9da8ad 100644 --- a/tests/env.sh +++ b/tests/env.sh @@ -97,16 +97,12 @@ check_bucket_vars() { log 1 "BUCKET_TWO_NAME missing" exit 1 fi - if [ -z "$RECREATE_BUCKETS" ]; then - log 1 "RECREATE_BUCKETS missing" - exit 1 - fi if [ "$RECREATE_BUCKETS" != "true" ] && [ "$RECREATE_BUCKETS" != "false" ]; then log 1 "RECREATE_BUCKETS must be 'true' or 'false'" exit 1 fi - if [ "$RECREATE_BUCKETS" != "true" ] && [ "$RECREATE_BUCKETS" != "false" ]; then - log 1 "RECREATE_BUCKETS must be 'true' or 'false'" + if [ "$DELETE_BUCKETS_AFTER_TEST" != "true" ] && [ "$DELETE_BUCKETS_AFTER_TEST" != "false" ]; then + log 1 "DELETE_BUCKETS_AFTER_TEST must be 'true' or 'false'" exit 1 fi if [ "$RECREATE_BUCKETS" == "false" ] && [ "$DELETE_BUCKETS_AFTER_TEST" == "true" ]; then @@ -238,6 +234,18 @@ check_user_vars() { log 1 "PASSWORD_TWO missing" exit 1 fi + if [ "$AUTOGENERATE_USERS" != "true" ] && [ "$AUTOGENERATE_USERS" != "false" ]; then + log 1 "AUTOGENERATE_USERS must be 'true' or 'false'" + return 1 + fi + if [ "$AUTOGENERATE_USERS" == "true" ] && [ "$USER_AUTOGENERATION_PREFIX" == "" ]; then + log 1 "USER_AUTOGENERATION_PREFIX is required if AUTOGENERATE_USERS is 'true'" + return 1 + fi + if [ "$AUTOGENERATE_USERS" == "false" ] && [ "$CREATE_STATIC_USERS_IF_NONEXISTENT" != "true" ] && [ "$CREATE_STATIC_USERS_IF_NONEXISTENT" != "false" ]; then + log 1 "If AUTOGENERATE_USERS is 'false', 'CREATE_STATIC_USERS_IF_NONEXISTENT' must be true or false" + return 1 + fi if [[ -z "$IAM_TYPE" ]]; then export IAM_TYPE="folder" diff --git a/tests/setup.sh b/tests/setup.sh index 51424a0a..8aa22bd4 100644 --- a/tests/setup.sh +++ b/tests/setup.sh @@ -106,6 +106,42 @@ delete_temp_log_if_exists() { return 0 } +post_versity_cleanup() { + if [[ $LOG_LEVEL -ge 5 ]] || [[ -n "$TIME_LOG" ]]; then + end_time=$(date +%s) + total_time=$((end_time - start_time)) + log 4 "Total test time: $total_time" + if [[ -n "$TIME_LOG" ]]; then + echo "$BATS_TEST_NAME: ${total_time}s" >> "$TIME_LOG" + fi + fi + if [[ -n "$COVERAGE_DB" ]]; then + record_result + fi + if [[ "$BATS_TEST_COMPLETED" -ne 1 ]]; then + if [[ -e "$COMMAND_LOG" ]]; then + cat "$COMMAND_LOG" + echo "**********************************************************************************" + fi + if [[ -e "$TEST_LOG_FILE.tmp" ]]; then + echo "********************************** LOG *******************************************" + cat "$TEST_LOG_FILE.tmp" + echo "**********************************************************************************" + fi + fi + if ! delete_command_log; then + log 3 "error deleting command log" + fi + if [ -e "$TEST_LOG_FILE.tmp" ]; then + if ! error=$(cat "$TEST_LOG_FILE.tmp" >> "$TEST_LOG_FILE" 2>&1); then + log 3 "error appending temp log to main log: $error" + fi + if ! delete_temp_log_if_exists; then + log 3 "error deleting temp log" + fi + fi +} + # bats teardown function teardown() { # shellcheck disable=SC2154 @@ -135,37 +171,5 @@ teardown() { fi fi stop_versity - if [[ $LOG_LEVEL -ge 5 ]] || [[ -n "$TIME_LOG" ]]; then - end_time=$(date +%s) - total_time=$((end_time - start_time)) - log 4 "Total test time: $total_time" - if [[ -n "$TIME_LOG" ]]; then - echo "$BATS_TEST_NAME: ${total_time}s" >> "$TIME_LOG" - fi - fi - if [[ -n "$COVERAGE_DB" ]]; then - record_result - fi - if [[ "$BATS_TEST_COMPLETED" -ne 1 ]]; then - if [[ -e "$COMMAND_LOG" ]]; then - cat "$COMMAND_LOG" - echo "**********************************************************************************" - fi - if [[ -e "$TEST_LOG_FILE.tmp" ]]; then - echo "********************************** LOG *******************************************" - cat "$TEST_LOG_FILE.tmp" - echo "**********************************************************************************" - fi - fi - if ! delete_command_log; then - log 3 "error deleting command log" - fi - if [ -e "$TEST_LOG_FILE.tmp" ]; then - if ! error=$(cat "$TEST_LOG_FILE.tmp" >> "$TEST_LOG_FILE" 2>&1); then - log 2 "error appending temp log to main log: $error" - fi - if ! delete_temp_log_if_exists; then - log 2 "error deleting temp log" - fi - fi + post_versity_cleanup } diff --git a/tests/test_common_acl.sh b/tests/test_common_acl.sh index 1c63054b..7569abf2 100644 --- a/tests/test_common_acl.sh +++ b/tests/test_common_acl.sh @@ -43,6 +43,16 @@ test_put_bucket_acl_s3cmd() { assert_success } +get_grantee_type_and_id() { + if [[ $DIRECT == "true" ]]; then + grantee_type="Group" + grantee_id="http://acs.amazonaws.com/groups/global/AllUsers" + else + grantee_type="CanonicalUser" + grantee_id="$username" + fi +} + test_common_put_bucket_acl() { assert [ $# -eq 1 ] @@ -61,13 +71,7 @@ test_common_put_bucket_acl() { run create_test_files "$acl_file" assert_success - if [[ $DIRECT == "true" ]]; then - grantee_type="Group" - grantee_id="http://acs.amazonaws.com/groups/global/AllUsers" - else - grantee_type="CanonicalUser" - grantee_id="$username" - fi + get_grantee_type_and_id run setup_acl_json "$TEST_FILE_FOLDER/$acl_file" "$grantee_type" "$grantee_id" "READ" "$AWS_ACCESS_KEY_ID" assert_success diff --git a/tests/test_rest.sh b/tests/test_rest.sh index 07b032a5..fba47585 100755 --- a/tests/test_rest.sh +++ b/tests/test_rest.sh @@ -175,7 +175,7 @@ test_file="test_file" @test "REST - get object attributes" { if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1000" + skip "https://github.com/versity/versitygw/issues/1001" fi run setup_bucket_and_large_file "$BUCKET_ONE_NAME" "$test_file" assert_success diff --git a/tests/test_s3api_object.sh b/tests/test_s3api_object.sh index 278a5d3c..a9ec7f83 100755 --- a/tests/test_s3api_object.sh +++ b/tests/test_s3api_object.sh @@ -236,30 +236,25 @@ export RUN_USERS=true assert_output -p "Directory object contains data payload" } -#@test "objects containing data can't be copied to directory objects" { -# # TODO finish test after https://github.com/versity/versitygw/issues/1021 -# skip "https://github.com/versity/versitygw/issues/1021" -# test_file="a" -# -# run create_test_file "$test_file" 0 -# assert_success -# -# run setup_bucket "s3api" "$BUCKET_ONE_NAME" -# assert_success -# -# run put_object "s3api" "$TEST_FILE_FOLDER/$test_file" "$BUCKET_ONE_NAME" "$test_file" -# assert_success -# -# if ! result=$(COMMAND_LOG="$COMMAND_LOG" BUCKET_NAME="$BUCKET_ONE_NAME" OBJECT_KEY="$test_file/" COPY_SOURCE="$BUCKET_ONE_NAME/$test_file" OUTPUT_FILE="$TEST_FILE_FOLDER/result.txt" ./tests/rest_scripts/copy_object.sh); then -# log 2 "error listing multipart upload parts: $result" -# return 1 -# fi -# if [ "$result" != "400" ]; then -# log 2 "response code '$result': $(cat "$TEST_FILE_FOLDER/result.txt")" -# return 1 -# fi -# return 0 -#} +@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 + skip + fi + test_file="a" + + run create_test_file "$test_file" 0 + assert_success + + run setup_bucket "s3api" "$BUCKET_ONE_NAME" + assert_success + + run put_object "s3api" "$TEST_FILE_FOLDER/$test_file" "$BUCKET_ONE_NAME" "$test_file" + assert_success + + run attempt_copy_object_to_directory_with_same_name "$BUCKET_ONE_NAME" "$test_file" "$BUCKET_ONE_NAME/$test_file" + assert_success +} @test "directory object - create multipart upload" { run setup_bucket "s3api" "$BUCKET_ONE_NAME" diff --git a/tests/test_s3api_policy_bucket.sh b/tests/test_s3api_policy_bucket.sh index 56dd609d..182a88c8 100644 --- a/tests/test_s3api_policy_bucket.sh +++ b/tests/test_s3api_policy_bucket.sh @@ -14,31 +14,33 @@ # specific language governing permissions and limitations # under the License. +source ./tests/commands/put_public_access_block.sh source ./tests/util/util_acl.sh test_s3api_policy_delete_bucket_policy() { policy_file="policy_file" - username=$USERNAME_ONE - password=$PASSWORD_ONE run create_test_file "$policy_file" 0 assert_success - effect="Allow" - principal="$username" - action="s3:DeleteBucketPolicy" - resource="arn:aws:s3:::$BUCKET_ONE_NAME" - - run setup_user "$username" "$password" "user" - assert_success - run setup_bucket "s3api" "$BUCKET_ONE_NAME" assert_success + run setup_user_v2 "user" 1 "$BUCKET_ONE_NAME" + assert_success + user_id=${lines[0]} + username=${lines[1]} + password=${lines[2]} + + effect="Allow" + principal="$user_id" + action="s3:DeleteBucketPolicy" + resource="arn:aws:s3:::$BUCKET_ONE_NAME" + run delete_bucket_policy_with_user "$BUCKET_ONE_NAME" "$username" "$password" assert_failure - run setup_policy_with_single_statement "$TEST_FILE_FOLDER/$policy_file" "dummy" "$effect" "$principal" "$action" "$resource" + run setup_policy_with_single_statement "$TEST_FILE_FOLDER/$policy_file" "2012-10-17" "$effect" "$principal" "$action" "$resource" assert_success run put_bucket_policy "s3api" "$BUCKET_ONE_NAME" "$TEST_FILE_FOLDER/$policy_file" @@ -56,21 +58,24 @@ test_s3api_policy_get_bucket_acl() { run create_test_file "$policy_file" 0 assert_success - effect="Allow" - principal="$username" - action="s3:GetBucketAcl" - resource="arn:aws:s3:::$BUCKET_ONE_NAME" - - run setup_user "$username" "$password" "user" - assert_success - run setup_bucket "s3api" "$BUCKET_ONE_NAME" assert_success + run setup_user_v2 "user" 1 "$BUCKET_ONE_NAME" + assert_success + user_id=${lines[0]} + username=${lines[1]} + password=${lines[2]} + + effect="Allow" + principal="$user_id" + action="s3:GetBucketAcl" + resource="arn:aws:s3:::$BUCKET_ONE_NAME" + run get_bucket_acl_with_user "$BUCKET_ONE_NAME" "$username" "$password" assert_failure - run setup_policy_with_single_statement "$TEST_FILE_FOLDER/$policy_file" "dummy" "$effect" "$principal" "$action" "$resource" + run setup_policy_with_single_statement "$TEST_FILE_FOLDER/$policy_file" "2012-10-17" "$effect" "$principal" "$action" "$resource" assert_success run put_bucket_policy "s3api" "$BUCKET_ONE_NAME" "$TEST_FILE_FOLDER/$policy_file" @@ -82,24 +87,25 @@ test_s3api_policy_get_bucket_acl() { test_s3api_policy_get_bucket_policy() { policy_file="policy_file" - username=$USERNAME_ONE - password=$PASSWORD_ONE run create_test_file "$policy_file" assert_success - effect="Allow" - principal="$username" - action="s3:GetBucketPolicy" - resource="arn:aws:s3:::$BUCKET_ONE_NAME" - - run setup_user "$username" "$password" "user" - assert_success - run setup_bucket "s3api" "$BUCKET_ONE_NAME" assert_success - run setup_policy_with_single_statement "$TEST_FILE_FOLDER/$policy_file" "dummy" "$effect" "$principal" "$action" "$resource" + run setup_user_v2 "user" 1 "$BUCKET_ONE_NAME" + assert_success + user_id=${lines[0]} + username=${lines[1]} + password=${lines[2]} + + effect="Allow" + principal="$user_id" + action="s3:GetBucketPolicy" + resource="arn:aws:s3:::$BUCKET_ONE_NAME" + + run setup_policy_with_single_statement "$TEST_FILE_FOLDER/$policy_file" "2012-10-17" "$effect" "$principal" "$action" "$resource" assert_success run get_bucket_policy_with_user "$BUCKET_ONE_NAME" "$username" "$password" @@ -124,22 +130,25 @@ test_s3api_policy_get_bucket_tagging() { run setup_bucket "s3api" "$BUCKET_ONE_NAME" assert_success - run setup_user "$USERNAME_ONE" "$PASSWORD_ONE" "user" - assert_success "error creating user '$USERNAME_ONE'" + run setup_user_v2 "user" 1 "$BUCKET_ONE_NAME" + assert_success + user_id=${lines[0]} + username=${lines[1]} + password=${lines[2]} - run setup_policy_with_single_statement "$TEST_FILE_FOLDER/$policy_file" "2012-10-17" "Allow" "$USERNAME_ONE" "s3:GetBucketTagging" "arn:aws:s3:::$BUCKET_ONE_NAME" + run setup_policy_with_single_statement "$TEST_FILE_FOLDER/$policy_file" "2012-10-17" "Allow" "$user_id" "s3:GetBucketTagging" "arn:aws:s3:::$BUCKET_ONE_NAME" assert_success "error setting up policy" run put_bucket_tagging "s3api" "$BUCKET_ONE_NAME" "$tag_key" "$tag_value" assert_success "unable to put bucket tagging" - run get_bucket_tagging_with_user "$USERNAME_ONE" "$PASSWORD_ONE" "$BUCKET_ONE_NAME" + run get_bucket_tagging_with_user "$username" "$password" "$BUCKET_ONE_NAME" assert_failure run put_bucket_policy "s3api" "$BUCKET_ONE_NAME" "$TEST_FILE_FOLDER/$policy_file" assert_success "error putting policy" - run get_and_check_bucket_tags_with_user "$USERNAME_ONE" "$PASSWORD_ONE" "$BUCKET_ONE_NAME" "$tag_key" "$tag_value" + run get_and_check_bucket_tags_with_user "$username" "$password" "$BUCKET_ONE_NAME" "$tag_key" "$tag_value" assert_success "get and check bucket tags failed" } @@ -158,10 +167,13 @@ test_s3api_policy_put_acl() { run put_bucket_ownership_controls "$BUCKET_ONE_NAME" "BucketOwnerPreferred" assert_success - run setup_user "$username" "$password" "user" + run setup_user_v2 "user" 1 "$BUCKET_ONE_NAME" assert_success + user_id=${lines[0]} + username=${lines[1]} + password=${lines[2]} - run setup_policy_with_single_statement "$TEST_FILE_FOLDER/$policy_file" "2012-10-17" "Allow" "$username" "s3:PutBucketAcl" "arn:aws:s3:::$BUCKET_ONE_NAME" + run setup_policy_with_single_statement "$TEST_FILE_FOLDER/$policy_file" "2012-10-17" "Allow" "$user_id" "s3:PutBucketAcl" "arn:aws:s3:::$BUCKET_ONE_NAME" assert_success if [[ $DIRECT == "true" ]]; then run put_public_access_block_enable_public_acls "$BUCKET_ONE_NAME" @@ -181,24 +193,25 @@ test_s3api_policy_put_acl() { test_s3api_policy_put_bucket_policy() { policy_file="policy_file" policy_file_two="policy_file_two" - username=$USERNAME_ONE - password=$PASSWORD_ONE run create_test_file "$policy_file" 0 assert_success - effect="Allow" - principal="$username" - action="s3:PutBucketPolicy" - resource="arn:aws:s3:::$BUCKET_ONE_NAME" - - run setup_user "$username" "$password" "user" - assert_success - run setup_bucket "s3api" "$BUCKET_ONE_NAME" assert_success - run setup_policy_with_single_statement "$TEST_FILE_FOLDER/$policy_file" "dummy" "$effect" "$principal" "$action" "$resource" + run setup_user_v2 "user" 1 "$BUCKET_ONE_NAME" + assert_success + user_id=${lines[0]} + username=${lines[1]} + password=${lines[2]} + + effect="Allow" + principal="$user_id" + action="s3:PutBucketPolicy" + resource="arn:aws:s3:::$BUCKET_ONE_NAME" + + run setup_policy_with_single_statement "$TEST_FILE_FOLDER/$policy_file" "2012-10-17" "$effect" "$principal" "$action" "$resource" assert_success run put_bucket_policy_with_user "$BUCKET_ONE_NAME" "$TEST_FILE_FOLDER/$policy_file" "$username" "$password" @@ -207,7 +220,7 @@ test_s3api_policy_put_bucket_policy() { run put_bucket_policy "s3api" "$BUCKET_ONE_NAME" "$TEST_FILE_FOLDER/$policy_file" assert_success - run setup_policy_with_single_statement "$TEST_FILE_FOLDER/$policy_file_two" "dummy" "$effect" "$principal" "s3:GetBucketPolicy" "$resource" + run setup_policy_with_single_statement "$TEST_FILE_FOLDER/$policy_file_two" "2012-10-17" "$effect" "$principal" "s3:GetBucketPolicy" "$resource" assert_success run put_bucket_policy_with_user "$BUCKET_ONE_NAME" "$TEST_FILE_FOLDER/$policy_file_two" "$username" "$password" @@ -226,16 +239,20 @@ test_s3api_policy_put_bucket_tagging() { assert_success "error creating test files" run setup_bucket "s3api" "$BUCKET_ONE_NAME" assert_success "error setting up bucket" - run setup_user "$USERNAME_ONE" "$PASSWORD_ONE" "user" - assert_success "error setting up user" - run setup_policy_with_single_statement "$TEST_FILE_FOLDER/$policy_file" "2012-10-17" "Allow" "$USERNAME_ONE" "s3:PutBucketTagging" "arn:aws:s3:::$BUCKET_ONE_NAME" + run setup_user_v2 "user" 1 "$BUCKET_ONE_NAME" + assert_success + user_id=${lines[0]} + username=${lines[1]} + password=${lines[2]} + + run setup_policy_with_single_statement "$TEST_FILE_FOLDER/$policy_file" "2012-10-17" "Allow" "$user_id" "s3:PutBucketTagging" "arn:aws:s3:::$BUCKET_ONE_NAME" assert_success "error setting up policy" - run put_bucket_tagging_with_user "$BUCKET_ONE_NAME" "$tag_key" "$tag_value" "$USERNAME_ONE" "$PASSWORD_ONE" + run put_bucket_tagging_with_user "$BUCKET_ONE_NAME" "$tag_key" "$tag_value" "$username" "$password" assert_failure run put_bucket_policy "s3api" "$BUCKET_ONE_NAME" "$TEST_FILE_FOLDER/$policy_file" assert_success "error putting policy" - run put_bucket_tagging_with_user "$BUCKET_ONE_NAME" "$tag_key" "$tag_value" "$USERNAME_ONE" "$PASSWORD_ONE" + run put_bucket_tagging_with_user "$BUCKET_ONE_NAME" "$tag_key" "$tag_value" "$username" "$password" assert_success "unable to put bucket tagging despite user permissions" run get_and_check_bucket_tags "$BUCKET_ONE_NAME" "$tag_key" "$tag_value" diff --git a/tests/util/util_attributes.sh b/tests/util/util_attributes.sh index c456c99a..60053271 100644 --- a/tests/util/util_attributes.sh +++ b/tests/util/util_attributes.sh @@ -55,7 +55,7 @@ check_attributes_after_upload() { log 2 "unexpected parts count, expected 4, was $parts_count" return 1 fi - return 1 + return 0 } check_attributes_invalid_param() { diff --git a/tests/util/util_object.sh b/tests/util/util_object.sh index 68128eb6..7fde80d3 100644 --- a/tests/util/util_object.sh +++ b/tests/util/util_object.sh @@ -484,3 +484,22 @@ put_object_rest_check_expires_header() { fi return 0 } + +attempt_copy_object_to_directory_with_same_name() { + if [ $# -ne 3 ]; then + log 2 "'attempt_copy_object_to_directory_with_same_name' requires bucket name, key name, copy source" + return 1 + fi + if ! result=$(COMMAND_LOG="$COMMAND_LOG" BUCKET_NAME="$1" OBJECT_KEY="$2/" COPY_SOURCE="$3" OUTPUT_FILE="$TEST_FILE_FOLDER/result.txt" ./tests/rest_scripts/copy_object.sh); then + log 2 "error copying object: $result" + return 1 + fi + if [ "$result" != "409" ]; then + log 2 "expected '409', was '$result'" + return 1 + fi + if ! check_xml_error_contains "$TEST_FILE_FOLDER/result.txt" "ObjectParentIsFile" "Object parent already exists as a file"; then + log 2 "error checking XML" + return 1 + fi +} diff --git a/tests/util/util_policy.sh b/tests/util/util_policy.sh index 5a3f4ba0..9760961f 100644 --- a/tests/util/util_policy.sh +++ b/tests/util/util_policy.sh @@ -288,15 +288,24 @@ get_and_compare_policy_with_file() { log 2 "'get_and_compare_policies' requires bucket, username, password, filename" return 1 fi + # shellcheck disable=SC2002 + if ! sorted_original=$(cat "$4" | jq -S 2>&1); then + log 2 "error sorting original policy: $sorted_original" + return 1 + fi + log 5 "after sort: $sorted_original" if ! get_bucket_policy_with_user "$1" "$2" "$3"; then log 2 "error getting bucket policy" return 1 fi # shellcheck disable=SC2154 - echo -n "$bucket_policy" > "$4-copy" - log 5 "ORIG: $(cat "$4")" - log 5 "COPY: $(cat "$4-copy")" - if ! compare_files "$4" "$4-copy"; then + if ! sorted_copy=$(echo -n "$bucket_policy" | jq -S 2>&1); then + log 2 "error sorting copy: $sorted_copy" + return 1 + fi + log 5 "ORIG: $sorted_original" + log 5 "COPY: $sorted_copy" + if ! compare_files <(echo -n "$sorted_original") <(echo -n "$sorted_copy"); then log 2 "policies not equal" return 1 fi