mirror of
https://github.com/versity/versitygw.git
synced 2026-09-20 15:04:27 +00:00
360 lines
9.7 KiB
Bash
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
|
|
}
|