mirror of
https://github.com/versity/versitygw.git
synced 2026-04-27 16:05:06 +00:00
test: convert eight or so setup operations to REST
This commit is contained in:
@@ -27,6 +27,21 @@ abort_multipart_upload() {
|
||||
return 0
|
||||
}
|
||||
|
||||
abort_multipart_upload_rest() {
|
||||
if ! check_param_count "abort_multipart_upload_rest" "bucket, key, upload ID" 3 $#; then
|
||||
return 1
|
||||
fi
|
||||
if ! result=$(COMMAND_LOG="$COMMAND_LOG" BUCKET_NAME="$1" OBJECT_KEY="$2" UPLOAD_ID="$3" OUTPUT_FILE="$TEST_FILE_FOLDER/result.txt" ./tests/rest_scripts/abort_multipart_upload.sh); then
|
||||
log 2 "error aborting multipart upload: $result"
|
||||
return 1
|
||||
fi
|
||||
if [ "$result" != "204" ]; then
|
||||
log 2 "expected '204' response, actual was '$result' (error: $(cat "$TEST_FILE_FOLDER"/result.txt)"
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
abort_multipart_upload_with_user() {
|
||||
if [ $# -ne 5 ]; then
|
||||
log 2 "'abort multipart upload' command requires bucket, key, upload ID, username, password"
|
||||
|
||||
@@ -61,7 +61,7 @@ delete_bucket_rest() {
|
||||
return 1
|
||||
fi
|
||||
if [ "$result" != "204" ]; then
|
||||
log 2 "expected '204', was '$result' ($(cat "$TEST_FILE_FOLDER/result.txt")"
|
||||
log 2 "expected '204', was '$result' ($(cat "$TEST_FILE_FOLDER/result.txt"))"
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
|
||||
@@ -38,6 +38,21 @@ delete_bucket_policy() {
|
||||
return 0
|
||||
}
|
||||
|
||||
delete_bucket_policy_rest() {
|
||||
if ! check_param_count "delete_bucket_policy_rest" "bucket" 1 $#; then
|
||||
return 1
|
||||
fi
|
||||
if ! result=$(COMMAND_LOG="$COMMAND_LOG" BUCKET_NAME="$1" OUTPUT_FILE="$TEST_FILE_FOLDER/result.txt" ./tests/rest_scripts/delete_bucket_policy.sh 2>&1); then
|
||||
log 2 "error deleting bucket policy: $result"
|
||||
return 1
|
||||
fi
|
||||
if [ "$result" != "204" ]; then
|
||||
log 2 "expected '204', was '$result' ($(cat "$TEST_FILE_FOLDER/result.txt"))"
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
delete_bucket_policy_with_user() {
|
||||
record_command "delete-bucket-policy" "client:s3api"
|
||||
if [[ $# -ne 3 ]]; then
|
||||
|
||||
@@ -45,24 +45,6 @@ delete_object() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# shellcheck disable=SC2317
|
||||
delete_object_rest() {
|
||||
if [ $# -ne 2 ]; then
|
||||
log 2 "'delete_object_rest' requires bucket name, object name"
|
||||
return 1
|
||||
fi
|
||||
if ! result=$(COMMAND_LOG="$COMMAND_LOG" BUCKET_NAME="$1" OBJECT_KEY="$2" OUTPUT_FILE="$TEST_FILE_FOLDER/result.txt" ./tests/rest_scripts/delete_object.sh 2>&1); then
|
||||
log 2 "error deleting object: $result"
|
||||
return 1
|
||||
fi
|
||||
if [ "$result" != "204" ]; then
|
||||
delete_object_error=$(cat "$TEST_FILE_FOLDER/result.txt")
|
||||
log 2 "expected '204', was '$result' ($delete_object_error)"
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
delete_object_bypass_retention() {
|
||||
if ! check_param_count "delete_object_bypass_retention" "client, bucket, key, user, password" 5 $#; then
|
||||
return 1
|
||||
@@ -83,23 +65,6 @@ delete_object_bypass_retention() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# shellcheck disable=SC2317
|
||||
delete_object_rest() {
|
||||
if ! check_param_count "delete_object_rest" "bucket, key" 2 $#; then
|
||||
return 1
|
||||
fi
|
||||
if ! result=$(COMMAND_LOG="$COMMAND_LOG" BUCKET_NAME="$1" OBJECT_KEY="$2" OUTPUT_FILE="$TEST_FILE_FOLDER/result.txt" ./tests/rest_scripts/delete_object.sh 2>&1); then
|
||||
log 2 "error deleting object: $result"
|
||||
return 1
|
||||
fi
|
||||
if [ "$result" != "204" ]; then
|
||||
delete_object_error=$(cat "$TEST_FILE_FOLDER/result.txt")
|
||||
log 2 "expected '204', was '$result' ($delete_object_error)"
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
delete_object_version() {
|
||||
if ! check_param_count "delete_object_version" "bucket, key, version ID" 3 $#; then
|
||||
return 1
|
||||
|
||||
@@ -26,6 +26,23 @@ list_multipart_uploads() {
|
||||
fi
|
||||
}
|
||||
|
||||
list_multipart_uploads_rest() {
|
||||
record_command "list_multipart_uploads_rest" "client:rest"
|
||||
if ! check_param_count "list_multipart_upload_rest" "bucket" 1 $#; then
|
||||
return 1
|
||||
fi
|
||||
if ! result=$(COMMAND_LOG="$COMMAND_LOG" BUCKET_NAME="$1" OUTPUT_FILE="$TEST_FILE_FOLDER/uploads.txt" ./tests/rest_scripts/list_multipart_uploads.sh 2>&1); then
|
||||
log 2 "error listing multipart uploads: $result"
|
||||
return 1
|
||||
fi
|
||||
uploads=$(cat "$TEST_FILE_FOLDER/uploads.txt")
|
||||
if [ "$result" != "200" ]; then
|
||||
log 2 "expected '200', was '$result' ($uploads)"
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
list_multipart_uploads_with_user() {
|
||||
record_command "list-multipart-uploads" "client:s3api"
|
||||
if [[ $# -ne 3 ]]; then
|
||||
|
||||
@@ -39,23 +39,10 @@ log() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# shellcheck disable=SC2317
|
||||
log_with_stack_ref() {
|
||||
if ! check_log_params "log_with_stack_ref" "level, message, stack reference" 3 $#; then
|
||||
return 1
|
||||
fi
|
||||
if ! log_with_stack_ref "$1" "$2" 2; then
|
||||
echo "error logging with stack ref"
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
log_with_stack_ref() {
|
||||
if [[ $# -ne 3 ]]; then
|
||||
echo "log_with_stack_ref function requires level, message, stack reference"
|
||||
return 1
|
||||
fi
|
||||
# shellcheck disable=SC2153
|
||||
if [[ $1 -gt ${LOG_LEVEL_INT:=4} ]]; then
|
||||
return 0
|
||||
|
||||
37
tests/rest_scripts/delete_bucket_policy.sh
Executable file
37
tests/rest_scripts/delete_bucket_policy.sh
Executable file
@@ -0,0 +1,37 @@
|
||||
#!/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/rest_scripts/rest.sh
|
||||
|
||||
# shellcheck disable=SC2153
|
||||
bucket_name="$BUCKET_NAME"
|
||||
|
||||
current_date_time=$(date -u +"%Y%m%dT%H%M%SZ")
|
||||
|
||||
cr_data=("DELETE" "/$bucket_name" "policy=")
|
||||
cr_data+=("host:$host")
|
||||
cr_data+=("x-amz-content-sha256:UNSIGNED-PAYLOAD" "x-amz-date:$current_date_time")
|
||||
build_canonical_request "${cr_data[@]}"
|
||||
|
||||
# shellcheck disable=SC2119
|
||||
create_canonical_hash_sts_and_signature
|
||||
|
||||
curl_command+=(curl -ks -w "\"%{http_code}\"" -X DELETE "https://$host/$bucket_name?policy"
|
||||
-H "\"Authorization: AWS4-HMAC-SHA256 Credential=$aws_access_key_id/$year_month_day/$aws_region/s3/aws4_request,SignedHeaders=$param_list,Signature=$signature\"")
|
||||
curl_command+=("${header_fields[@]}")
|
||||
curl_command+=(-o "$OUTPUT_FILE")
|
||||
# shellcheck disable=SC2154
|
||||
eval "${curl_command[*]}" 2>&1
|
||||
@@ -105,8 +105,8 @@ source ./tests/util/util_tags.sh
|
||||
|
||||
@test "REST - can set object lock enabled on existing buckets" {
|
||||
if [ "$DIRECT" != "true" ]; then
|
||||
skip "https://github.com/versity/versitygw/issues/1300"
|
||||
fi
|
||||
skip "https://github.com/versity/versitygw/issues/1300"
|
||||
fi
|
||||
run setup_bucket "$BUCKET_ONE_NAME"
|
||||
assert_success
|
||||
|
||||
@@ -120,8 +120,8 @@ source ./tests/util/util_tags.sh
|
||||
|
||||
@test "REST - cannot set object lock enabled without content-md5" {
|
||||
if [ "$DIRECT" != "true" ]; then
|
||||
skip "https://github.com/versity/versitygw/issues/1301"
|
||||
fi
|
||||
skip "https://github.com/versity/versitygw/issues/1301"
|
||||
fi
|
||||
run bucket_cleanup_if_bucket_exists "$BUCKET_ONE_NAME"
|
||||
assert_success
|
||||
|
||||
|
||||
@@ -399,24 +399,6 @@ check_ownership_rule_and_reset_acl() {
|
||||
fi
|
||||
}
|
||||
|
||||
# param: bucket name
|
||||
# return 1 for failure, 0 for success
|
||||
get_object_ownership_rule_and_update_acl() {
|
||||
if [ $# -ne 1 ]; then
|
||||
log 2 "'get_object_ownership_rule_and_update_acl' requires bucket name"
|
||||
return 1
|
||||
fi
|
||||
if ! get_object_ownership_rule "$1"; then
|
||||
log 2 "error getting object ownership rule"
|
||||
return 1
|
||||
fi
|
||||
log 5 "object ownership rule: $object_ownership_rule"
|
||||
if [[ "$object_ownership_rule" != "BucketOwnerEnforced" ]] && ! put_bucket_canned_acl "$1" "private"; then
|
||||
log 2 "error resetting bucket ACLs"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# get object acl
|
||||
# param: object path
|
||||
# export acl for success, return 1 for error
|
||||
|
||||
@@ -6,27 +6,11 @@ source ./tests/util/util_multipart_abort.sh
|
||||
source ./tests/util/util_policy.sh
|
||||
source ./tests/util/util_retention.sh
|
||||
|
||||
# recursively delete an AWS bucket
|
||||
# param: client, bucket name
|
||||
# fail if error
|
||||
delete_bucket_recursive() {
|
||||
log 6 "delete_bucket_recursive"
|
||||
if ! check_param_count "delete_bucket_recursive" "bucket name" 1 $#; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! delete_bucket_recursive_s3api "$1"; then
|
||||
log 2 "error deleting bucket recursively (s3api)"
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# restore bucket to pre-test state (or prep for deletion)
|
||||
# param: bucket name
|
||||
# return 0 on success, 1 on error
|
||||
clear_bucket_s3api() {
|
||||
log 6 "clear_bucket_s3api"
|
||||
reset_bucket() {
|
||||
log 6 "reset_bucket"
|
||||
if ! check_param_count "clear_bucket_s3api" "bucket" 1 $#; then
|
||||
return 1
|
||||
fi
|
||||
@@ -50,7 +34,7 @@ clear_bucket_s3api() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! abort_all_multipart_uploads "$1"; then
|
||||
if ! abort_all_multipart_uploads_rest "$1"; then
|
||||
log 2 "error aborting all multipart uploads"
|
||||
return 1
|
||||
fi
|
||||
@@ -60,7 +44,7 @@ clear_bucket_s3api() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! delete_bucket_policy "s3api" "$1"; then
|
||||
if ! delete_bucket_policy_rest "$1"; then
|
||||
log 2 "error deleting bucket policy"
|
||||
return 1
|
||||
fi
|
||||
@@ -79,13 +63,13 @@ clear_bucket_s3api() {
|
||||
|
||||
# params: bucket name
|
||||
# return 0 if able to delete recursively, 1 if not
|
||||
delete_bucket_recursive_s3api() {
|
||||
delete_bucket_recursive() {
|
||||
log 6 "delete_bucket_recursive_s3api"
|
||||
if ! check_param_count "delete_bucket_recursive_s3api" "bucket" 1 $#; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! clear_bucket_s3api "$1"; then
|
||||
if ! reset_bucket "$1"; then
|
||||
log 2 "error clearing bucket (s3api)"
|
||||
return 1
|
||||
fi
|
||||
@@ -97,21 +81,6 @@ delete_bucket_recursive_s3api() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# params: client, bucket name
|
||||
# return 0 on success, 1 on error
|
||||
delete_bucket_contents() {
|
||||
log 6 "delete_bucket_contents"
|
||||
if ! check_param_count "delete_bucket_contents" "bucket name" 1 $#; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! clear_bucket_s3api "$1"; then
|
||||
log 2 "error clearing bucket (s3api)"
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# check if bucket exists
|
||||
# param: bucket name
|
||||
# return 0 for true, 1 for false, 2 for error
|
||||
@@ -157,7 +126,7 @@ bucket_cleanup() {
|
||||
return 1
|
||||
fi
|
||||
if [[ $RECREATE_BUCKETS == "false" ]]; then
|
||||
if ! delete_bucket_contents "$1"; then
|
||||
if ! reset_bucket "$1"; then
|
||||
log 2 "error deleting bucket contents"
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -36,12 +36,8 @@ create_abort_multipart_upload_rest() {
|
||||
return 1
|
||||
fi
|
||||
log 5 "uploads after upload creation: $(cat "$TEST_FILE_FOLDER/uploads.txt")"
|
||||
if ! result=$(COMMAND_LOG="$COMMAND_LOG" BUCKET_NAME="$1" OBJECT_KEY="$2" UPLOAD_ID="$upload_id" OUTPUT_FILE="$TEST_FILE_FOLDER/result.txt" ./tests/rest_scripts/abort_multipart_upload.sh); then
|
||||
log 2 "error aborting multipart upload: $result"
|
||||
return 1
|
||||
fi
|
||||
if [ "$result" != "204" ]; then
|
||||
log 2 "expected '204' response, actual was '$result' (error: $(cat "$TEST_FILE_FOLDER"/result.txt)"
|
||||
if ! abort_multipart_upload_rest "$1" "$2" "$upload_id"; then
|
||||
log 2 "error aborting multipart upload"
|
||||
return 1
|
||||
fi
|
||||
log 5 "final uploads: $(cat "$TEST_FILE_FOLDER/uploads.txt")"
|
||||
@@ -93,6 +89,42 @@ abort_all_multipart_uploads() {
|
||||
done
|
||||
}
|
||||
|
||||
# param: bucket name
|
||||
# return 0 for success, 1 for error
|
||||
abort_all_multipart_uploads_rest() {
|
||||
if ! check_param_count "abort_all_multipart_uploads_rest" "bucket" 1 $#; then
|
||||
return 1
|
||||
fi
|
||||
if ! list_multipart_uploads_rest "$1"; then
|
||||
log 2 "error listing multipart uploads"
|
||||
return 1
|
||||
fi
|
||||
# shellcheck disable=SC2154
|
||||
log 5 "UPLOADS: $uploads"
|
||||
if ! upload_data=$(xmllint --xpath '//*[local-name()="Upload"]' "$TEST_FILE_FOLDER/uploads.txt" 2>&1); then
|
||||
if [[ "$upload_data" == *"XPath set is empty"* ]]; then
|
||||
return 0
|
||||
fi
|
||||
log 2 "error retrieving upload data: $upload_data"
|
||||
return 1
|
||||
fi
|
||||
for upload in $upload_data; do
|
||||
if ! key=$(echo -n "$upload" | xmllint --xpath '//*[local-name()="Key"]/text()' - 2>&1); then
|
||||
log 2 "error retrieving key: $key"
|
||||
return 1
|
||||
fi
|
||||
if ! upload_id=$(echo -n "$upload" | xmllint --xpath '//*[local-name()="UploadId"]/text()' - 2>&1); then
|
||||
log 2 "error retrieving upload ID: $upload_id"
|
||||
return 1
|
||||
fi
|
||||
log 5 "Aborting multipart upload for key: $key, UploadId: $upload_id"
|
||||
if ! abort_multipart_upload_rest "$1" "$key" "$upload_id"; then
|
||||
log 2 "error aborting multipart upload"
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# run upload, then abort it
|
||||
# params: bucket, key, local file location, number of parts to split into before uploading
|
||||
# return 0 for success, 1 for failure
|
||||
|
||||
@@ -117,7 +117,7 @@ clear_object_in_bucket() {
|
||||
object_exists() {
|
||||
log 6 "object_exists"
|
||||
if ! check_param_count "object_exists" "command type, bucket, key" 3 $#; then
|
||||
return 1
|
||||
return 2
|
||||
fi
|
||||
head_object "$1" "$2" "$3" || local head_object_result=$?
|
||||
if [[ $head_object_result -eq 2 ]]; then
|
||||
|
||||
@@ -334,7 +334,7 @@ put_and_check_policy_rest() {
|
||||
log_bucket_policy() {
|
||||
log 6 "log_bucket_policy"
|
||||
if ! check_param_count "log_bucket_policy" "bucket" 1 $#; then
|
||||
return 1
|
||||
return
|
||||
fi
|
||||
if ! get_bucket_policy "rest" "$1"; then
|
||||
log 2 "error getting bucket policy"
|
||||
|
||||
Reference in New Issue
Block a user