#!/usr/bin/env bats # Copyright 2024 Versity Software # This file is licensed under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http:#www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. load ./bats-support/load load ./bats-assert/load source ./tests/commands/get_object_lock_configuration.sh source ./tests/commands/head_bucket.sh source ./tests/commands/list_buckets.sh source ./tests/drivers/create_bucket/create_bucket_rest.sh source ./tests/drivers/get_bucket_ownership_controls/get_bucket_ownership_controls_rest.sh source ./tests/drivers/get_bucket_tagging/get_bucket_tagging_rest.sh source ./tests/drivers/head_bucket/head_bucket_s3api.sh source ./tests/drivers/list_buckets/list_buckets_rest.sh source ./tests/drivers/put_bucket_ownership_controls/put_bucket_ownership_controls_rest.sh source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh source ./tests/logger.sh source ./tests/setup.sh source ./tests/util/util_lock_config.sh source ./tests/util/util_public_access_block.sh 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 bucket_name="$output" run setup_bucket_v2 "$bucket_name" assert_success run head_bucket_rest "$bucket_name" assert_success } # tags: curl,minimal-request,GetBucketTagging @test "REST - bucket tagging - no tags" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" run setup_bucket_v2 "$bucket_name" assert_success run verify_no_bucket_tags_rest "$bucket_name" assert_success } # tags: curl,minimal-request,GetBucketOwnershipControls,PutBucketOwnershipControls @test "REST - get, put bucket ownership controls" { run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" run setup_bucket_v2 "$bucket_name" assert_success run get_and_check_ownership_controls "$bucket_name" "BucketOwnerEnforced" assert_success run put_bucket_ownership_controls_rest "$bucket_name" "BucketOwnerPreferred" assert_success run get_and_check_ownership_controls "$bucket_name" "BucketOwnerPreferred" 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" fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" run setup_bucket_v2 "$bucket_name" assert_success run check_no_object_lock_config_rest "$bucket_name" assert_success run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_two_name="$output" run setup_bucket_object_lock_enabled_v2 "$bucket_two_name" assert_success run check_object_lock_config_enabled_rest "$bucket_two_name" 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 bucket_name="$output" run setup_bucket_v2 "$bucket_name" assert_success run put_bucket_versioning_rest "$bucket_name" "Enabled" assert_success # this enables object lock without a specific retention policy run remove_retention_policy_rest "$bucket_name" 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 bucket_name="$output" run setup_bucket_object_lock_enabled_v2 "$bucket_name" assert_success # this enables object lock without a specific retention policy run put_object_lock_config_without_content_md5 "$bucket_name" 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" fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" run setup_bucket_v2 "$bucket_name" assert_success run get_and_check_no_policy_error "$bucket_name" assert_success } # tags: curl,PutBucketPolicy,user @test "REST - put policy" { if [ "$SKIP_USERS_TESTS" == "true" ]; then skip "skip versitygw-specific users tests" fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" run setup_bucket_v2 "$bucket_name" assert_success run setup_user_versitygw_or_direct "$USERNAME_ONE" "$PASSWORD_ONE" "user" "$bucket_name" assert_success log 5 "username: ${lines[1]}" log 5 "password: ${lines[2]}" sleep 5 run setup_policy_with_single_statement "$TEST_FILE_FOLDER/policy_file.txt" "2012-10-17" "Allow" "$USERNAME_ONE" "s3:PutBucketTagging" "arn:aws:s3:::$bucket_name" assert_success run put_and_check_policy_rest "$bucket_name" "$TEST_FILE_FOLDER/policy_file.txt" "Allow" "$USERNAME_ONE" "s3:PutBucketTagging" "arn:aws:s3:::$bucket_name" 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" fi run delete_object_empty_bucket_check_error assert_success }