Files
versitygw/tests/drivers/create_bucket/create_bucket_rest.sh
T

360 lines
9.7 KiB
Bash

#!/usr/bin/env bash
# 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.
source ./tests/drivers/delete_bucket/delete_bucket_rest.sh
source ./tests/drivers/get_bucket_acl/get_bucket_acl_rest.sh
source ./tests/drivers/get_object/get_object_rest.sh
source ./tests/drivers/list_objects/list_objects_rest.sh
source ./tests/drivers/put_bucket_acl/put_bucket_acl_rest.sh
source ./tests/drivers/put_object/put_object_rest.sh
source ./tests/drivers/user.sh
setup_and_create_bucket_and_check_acl() {
if [ "$RECREATE_BUCKETS" == "false" ]; then
skip "skip bucket create tests for static buckets"
fi
if ! check_param_count_v2 "grant env val" 1 $#; then
return 1
fi
if ! bucket_cleanup_if_bucket_exists "$BUCKET_ONE_NAME"; then
log 2 "error cleaning up bucket"
return 1
fi
if ! create_versitygw_acl_user_or_get_direct_user "$USERNAME_ONE" "$PASSWORD_ONE"; then
log 2 "error creating user"
return 1
fi
if [ "$DIRECT" == "true" ]; then
# shellcheck disable=SC2154
id="id=$user_canonical_id"
else
id="$user_canonical_id"
fi
log 5 "owner: $AWS_ACCESS_KEY_ID"
# shellcheck disable=SC2154
log 5 "username=$username, password=$password"
envs="$1=$id OBJECT_OWNERSHIP=BucketOwnerPreferred"
log 5 "envs: $envs"
if ! bucket_name=$(get_bucket_name "$BUCKET_ONE_NAME" 2>&1); then
log 2 "error retrieving bucket name: $bucket_name"
return 1
fi
# shellcheck disable=SC2154
if ! create_bucket_and_check_acl "$bucket_name" "$envs" "$username" "$password" "$user_canonical_id" "$owner_canonical_id"; then
log 2 "error creating bucket and checking ACL"
return 1
fi
return 0
}
create_bucket_and_check_acl() {
if ! check_param_count_v2 "bucket name, env vars, username, password, user canonical ID, owner canonical ID" 6 $#; then
return 1
fi
if ! create_bucket_rest_expect_success "$1" "$2"; then
log 2 "error creating bucket"
return 1
fi
# cross-account changes take more time to propagate
if [ "$DIRECT" == "true" ]; then
sleep 10
fi
if ! create_test_file "test_file"; then
log 2 "error creating file"
return 1
fi
local read_acp=false
local read=false
local write_acp=false
local write=false
if [[ "$2" == *"GRANT_FULL_CONTROL="* ]]; then
read_acp=true
read=true
write_acp=true
write=true
elif [[ "$2" == *"GRANT_READ_ACP="* ]]; then
read_acp=true
elif [[ "$2" == *"GRANT_READ="* ]]; then
read=true
elif [[ "$2" == *"GRANT_WRITE_ACP="* ]]; then
write_acp=true
elif [[ "$2" == *"GRANT_WRITE="* ]]; then
write=true
fi
if ! get_bucket_acl_success_or_access_denied "$1" "$3" "$4" "$read_acp"; then
log 2 "get ACL permissions mismatch"
return 1
fi
if ! put_object_success_or_access_denied "$3" "$4" "$TEST_FILE_FOLDER/test_file" "$1" "test_file" "$write"; then
log 2 "put object permissions mismatch"
return 1
fi
if ! list_objects_success_or_access_denied "$3" "$4" "$1" "test_file" "$read"; then
log 2 "list objects permissions mismatch"
return 1
fi
if ! setup_acl "$TEST_FILE_FOLDER/acl-file.txt" "CanonicalUser" "$5" "READ" "$6"; then
log 2 "error setting up ACL"
return 1
fi
log 5 "acl file: $(cat "$TEST_FILE_FOLDER/acl-file.txt")"
if ! put_bucket_acl_success_or_access_denied "$1" "$TEST_FILE_FOLDER/acl-file.txt" "$3" "$4" "$write_acp"; then
log 2 "put ACL permissions mismatch"
return 1
fi
return 0
}
get_bucket_prefix() {
if ! check_param_count_v2 "bucket prefix or name" 1 $#; then
return 1
fi
local prefix
if [ "$RECREATE_BUCKETS" == "true" ]; then
# remove buckets with suffix
prefix="$1-"
else
prefix="$1"
fi
echo "$prefix"
return 0
}
setup_bucket_v2() {
log 6 "setup_bucket_v2 '$1'"
if ! check_param_count_v2 "bucket prefix or name" 1 $#; then
return 1
fi
if ! prefix=$(get_bucket_prefix "$1" 2>&1); then
log 2 "error getting prefix: $prefix"
return 1
fi
log 5 "bucket prefix: $prefix"
if ! bucket_cleanup_if_bucket_exists_v2 "$prefix"; then
log 2 "error cleaning up bucket(s), if it/they exist(s)"
return 1
fi
if [ "$RECREATE_BUCKETS" == "false" ]; then
return 0
fi
if ! create_bucket_rest_expect_success "$1" ""; then
log 2 "error creating bucket '$1'"
return 1
fi
return 0
}
setup_bucket_v3() {
if ! check_param_count_v2 "bucket env var" 1 $#; then
return 1
fi
if ! error=$(bucket_cleanup_if_bucket_exists_v2 "$1" 2>&1); then
log 2 "error cleaning up bucket(s), if it/they exist(s): '$error'"
return 1
fi
if [ "$RECREATE_BUCKETS" == "false" ]; then
echo "$1"
return 0
else
if ! bucket_name=$(get_bucket_name "$1" 2>&1); then
log 2 "error getting bucket name: $bucket_name"
return 1
fi
if ! error=$(create_bucket_rest_expect_success "$bucket_name" "" 2>&1); then
log 2 "error creating bucket named '$bucket_name': $error"
return 1
fi
fi
echo "$bucket_name"
return 0
}
# params: client, bucket name(s)
# return 0 for success, 1 for failure
setup_buckets() {
if ! check_param_count_gt "minimum of 1 bucket name" 1 $#; then
return 1
fi
for name in "$@"; do
if ! setup_bucket "$name"; then
log 2 "error setting up bucket $name"
return 1
fi
done
return 0
}
setup_buckets_v2() {
if ! check_param_count_gt "minimum of 1 bucket name" 1 $#; then
return 1
fi
for name in "$@"; do
if ! setup_bucket_v2 "$name"; then
log 2 "error setting up bucket $name"
return 1
fi
done
return 0
}
setup_buckets_v3() {
if ! check_param_count_gt "minimum of 1 bucket env var" 1 $#; then
return 1
fi
local buckets=()
for name in "$@"; do
if ! bucket=$(setup_bucket_v3 "$name" 2>&1); then
log 2 "error setting up bucket '$name': $bucket"
return 1
fi
buckets+=("$bucket")
done
echo "${buckets[*]}"
return 0
}
get_bucket_name() {
if ! check_param_count_v2 "bucket" 1 $#; then
return 1
fi
if [ "$RECREATE_BUCKETS" == "false" ]; then
echo "$1"
return 0
fi
if ! uuid=$(uuidgen 2>&1); then
log 2 "error getting UUID: $uuid"
return 1
fi
local bucket_name
bucket_name="$1-${uuid,,}"
bucket_name_trimmed="${bucket_name:0:63}"
echo "${bucket_name_trimmed%-}"
return 0
}
setup_bucket_object_lock_enabled_v2() {
if ! check_param_count_v2 "bucket" 1 $#; then
return 1
fi
if ! prefix=$(get_bucket_prefix "$1" 2>&1); then
log 2 "error getting prefix: $prefix"
return 1
fi
if ! bucket_cleanup_if_bucket_exists_v2 "$prefix"; then
log 2 "error cleaning up bucket"
return 1
fi
if [ "$RECREATE_BUCKETS" == "true" ]; then
if ! create_bucket_object_lock_enabled "$1"; then
log 2 "error creating bucket '$1' with object lock enabled"
return 1
fi
fi
return 0
}
setup_bucket_object_lock_enabled() {
if ! check_param_count "setup_bucket_object_lock_enabled" "bucket" 1 $#; then
return 1
fi
if ! bucket_cleanup_if_bucket_exists "$1"; then
log 2 "error cleaning up bucket"
return 1
fi
# in static bucket config, bucket will still exist
if ! bucket_exists "$1"; then
if ! create_bucket_object_lock_enabled "$1"; then
log 2 "error creating bucket with object lock enabled"
return 1
fi
fi
return 0
}
send_curl_command_create_bucket_expect_error() {
if ! check_param_count_gt "response code, error code, message, params" 4 $#; then
return 1
fi
if ! send_curl_command_create_bucket_expect_error_callback "$1" "$2" "$3" "" "${@:4}"; then
log 2 "error sending curl create bucket command"
return 1
fi
return 0
}
send_curl_command_create_bucket_expect_error_callback() {
if ! check_param_count_gt "response code, error code, message, callback, params" 5 $#; then
return 1
fi
if ! bucket_name=$(get_bucket_name "$BUCKET_ONE_NAME" 2>&1); then
log 2 "error getting bucket name from '$BUCKET_ONE_NAME': $bucket_name"
return 1
fi
if ! send_rest_go_command_expect_error_callback "$1" "$2" "$3" "$4" "-bucketName" "$bucket_name" "-commandType" "createBucket" "${@:5}"; then
log 2 "error sending rest go command"
return 1
fi
return 0
}
send_invalid_location_constraint_check_error() {
if ! check_param_count_v2 "invalid param" 1 $#; then
return 1
fi
invalid_location_constraint="$1"
if ! send_curl_command_create_bucket_expect_error_callback "400" "InvalidLocationConstraint" "The specified location-constraint is not valid" \
"check_location_constraint_param" "-locationConstraint" "$invalid_location_constraint"; then
log 2 "error sending curl command and checking callback"
return 1
fi
return 0
}
check_location_constraint_param() {
if ! check_param_count_v2 "file" 1 $#; then
return 1
fi
if ! check_error_parameter "$1" "LocationConstraint" "$invalid_location_constraint"; then
log 2 "location constraint mismatch"
return 1
fi
return 0
}
create_bucket_and_run_command() {
if ! check_param_count_gt "bucket, command, params" 2 $#; then
return 1
fi
if ! bucket_name=$(get_bucket_name "$1" 2>&1); then
log 2 "error creating bucket '$1': $bucket_name"
return 1
fi
if ! setup_bucket "$bucket_name"; then
log 2 "error setting up bucket"
return 1
fi
if ! "$2" "$bucket_name" "${@:3}"; then
log 2 "error running command on bucket"
return 1
fi
return 0
}