test: attributes, object locking, legal hold, retention

This commit is contained in:
Luke McCrone
2024-05-22 15:54:24 -03:00
parent 99a84abdba
commit ea7d020ec8
19 changed files with 467 additions and 67 deletions
+14 -1
View File
@@ -25,4 +25,17 @@ copy_object() {
return 1
fi
return 0
}
}
copy_object_empty() {
error=$(aws --no-verify-ssl s3api copy-object 2>&1) || local result=$?
if [[ $result -eq 0 ]]; then
log 2 "copy object with empty parameters returned no error"
return 1
fi
if [[ $error != *"the following arguments are required: --bucket, --copy-source, --key" ]]; then
log 2 "copy object with no params returned mismatching error: $error"
return 1
fi
return 0
}
+15
View File
@@ -29,3 +29,18 @@ create_bucket() {
fi
return 0
}
create_bucket_object_lock_enabled() {
if [ $# -ne 1 ]; then
log 2 "create bucket missing bucket name"
return 1
fi
local exit_code=0
error=$(aws --no-verify-ssl s3api create-bucket --bucket "$1" 2>&1 --object-lock-enabled-for-bucket) || local exit_code=$?
if [ $exit_code -ne 0 ]; then
log 2 "error creating bucket: $error"
return 1
fi
return 0
}
+28 -3
View File
@@ -2,7 +2,7 @@
delete_object() {
if [ $# -ne 3 ]; then
echo "delete object command requires command type, bucket, key"
log 2 "delete object command requires command type, bucket, key"
return 1
fi
local exit_code=0
@@ -16,11 +16,36 @@ delete_object() {
elif [[ $1 == 'mc' ]]; then
error=$(mc --insecure rm "$MC_ALIAS/$2/$3" 2>&1) || exit_code=$?
else
echo "invalid command type $1"
log 2 "invalid command type $1"
return 1
fi
log 5 "delete object exit code: $exit_code"
if [ $exit_code -ne 0 ]; then
log 2 "error deleting object: $error"
return 1
fi
return 0
}
delete_object_with_user() {
if [ $# -ne 5 ]; then
log 2 "delete object with user command requires command type, bucket, key, access ID, secret key"
return 1
fi
local exit_code=0
if [[ $1 == 's3' ]]; then
error=$(AWS_ACCESS_KEY_ID="$4" AWS_SECRET_ACCESS_KEY="$5" aws --no-verify-ssl s3 rm "s3://$2/$3" 2>&1) || exit_code=$?
elif [[ $1 == 's3api' ]] || [[ $1 == 'aws' ]]; then
error=$(AWS_ACCESS_KEY_ID="$4" AWS_SECRET_ACCESS_KEY="$5" aws --no-verify-ssl s3api delete-object --bucket "$2" --key "$3" 2>&1) || exit_code=$?
elif [[ $1 == 's3cmd' ]]; then
error=$(s3cmd "${S3CMD_OPTS[@]}" --no-check-certificate rm --access_key="$4" --secret_key="$5" "s3://$2/$3" 2>&1) || exit_code=$?
else
log 2 "command 'delete object with user' not implemented for '$1'"
return 1
fi
if [ $exit_code -ne 0 ]; then
echo "error deleting object: $error"
log 2 "error deleting object: $error"
export error
return 1
fi
return 0
+17
View File
@@ -0,0 +1,17 @@
#!/usr/bin/env bash
get_object_attributes() {
if [[ $# -ne 2 ]]; then
log 2 "'get object attributes' command requires bucket, key"
return 1
fi
attributes=$(aws --no-verify-ssl s3api get-object-attributes --bucket "$1" --key "$2" --object-attributes "ObjectSize" 2>&1) || local get_result=$?
if [[ $get_result -ne 0 ]]; then
log 2 "error getting object attributes: $attributes"
return 1
fi
attributes=$(echo "$attributes" | grep -v "InsecureRequestWarning")
log 5 "$attributes"
export attributes
return 0
}
+15
View File
@@ -0,0 +1,15 @@
#!/usr/bin/env bash
get_object_legal_hold() {
if [[ $# -ne 2 ]]; then
log 2 "'get object legal hold' command requires bucket, key"
return 1
fi
legal_hold=$(aws --no-verify-ssl s3api get-object-legal-hold --bucket "$1" --key "$2" 2>&1) || local get_result=$?
if [[ $get_result -ne 0 ]]; then
log 2 "error getting object legal hold: $legal_hold"
return 1
fi
export legal_hold
return 0
}
@@ -0,0 +1,15 @@
#!/usr/bin/env bash
get_object_lock_configuration() {
if [[ $# -ne 1 ]]; then
log 2 "'get object lock configuration' command missing bucket name"
return 1
fi
lock_config=$(aws --no-verify-ssl s3api get-object-lock-configuration --bucket "$1") || local get_result=$?
if [[ $get_result -ne 0 ]]; then
log 2 "error obtaining lock config: $lock_config"
return 1
fi
export lock_config
return 0
}
+15
View File
@@ -0,0 +1,15 @@
#!/usr/bin/env bash
get_object_retention() {
if [[ $# -ne 2 ]]; then
log 2 "'get object retention' command requires bucket, key"
return 1
fi
retention=$(aws --no-verify-ssl s3api get-object-retention --bucket "$1" --key "$2" 2>&1) || local get_result=$?
if [[ $get_result -ne 0 ]]; then
log 2 "error getting object retention: $retention"
return 1
fi
export retention
return 0
}
+15
View File
@@ -0,0 +1,15 @@
#!/usr/bin/env bash
list_object_versions() {
if [[ $# -ne 1 ]]; then
log 2 "'list object versions' command requires bucket name"
return 1
fi
versions=$(aws --no-verify-ssl s3api list-object-versions --bucket "$1") || local list_result=$?
if [[ $list_result -ne 0 ]]; then
log 2 "error listing object versions: $versions"
return 1
fi
export versions
return 0
}
+25 -4
View File
@@ -2,7 +2,7 @@
put_object() {
if [ $# -ne 4 ]; then
echo "put object command requires command type, source, destination bucket, destination key"
log 2 "put object command requires command type, source, destination bucket, destination key"
return 1
fi
local exit_code=0
@@ -16,13 +16,34 @@ put_object() {
elif [[ $1 == 'mc' ]]; then
error=$(mc --insecure put "$2" "$MC_ALIAS/$3/$4" 2>&1) || exit_code=$?
else
echo "'put object' command not implemented for '$1'"
log 2 "'put object' command not implemented for '$1'"
return 1
fi
log 5 "put object exit code: $exit_code"
if [ $exit_code -ne 0 ]; then
echo "error putting object into bucket: $error"
log 2 "error putting object into bucket: $error"
return 1
fi
return 0
}
}
put_object_with_user() {
if [ $# -ne 6 ]; then
log 2 "put object command requires command type, source, destination bucket, destination key, aws ID, aws secret key"
return 1
fi
local exit_code=0
if [[ $1 == 's3api' ]] || [[ $1 == 'aws' ]]; then
error=$(AWS_ACCESS_KEY_ID="$5" AWS_SECRET_ACCESS_KEY="$6" aws --no-verify-ssl s3api put-object --body "$2" --bucket "$3" --key "$4" 2>&1) || exit_code=$?
else
log 2 "'put object with user' command not implemented for '$1'"
return 1
fi
log 5 "put object exit code: $exit_code"
if [ $exit_code -ne 0 ]; then
log 2 "error putting object into bucket: $error"
export error
return 1
fi
return 0
}
+15
View File
@@ -0,0 +1,15 @@
#!/usr/bin/env bash
put_object_legal_hold() {
if [[ $# -ne 3 ]]; then
log 2 "'put object legal hold' command requires bucket, key, hold status ('ON' or 'OFF')"
return 1
fi
local error=""
error=$(aws --no-verify-ssl s3api put-object-legal-hold --bucket "$1" --key "$2" --legal-hold "{\"Status\": \"$3\"}" 2>&1) || local put_hold_result=$?
if [[ $put_hold_result -ne 0 ]]; then
log 2 "error putting object legal hold: $error"
return 1
fi
return 0
}
+14
View File
@@ -0,0 +1,14 @@
#!/usr/bin/env bash
put_object_retention() {
if [[ $# -ne 4 ]]; then
log 2 "'put object retention' command requires bucket, key, retention mode, retention date"
return 1
fi
error=$(aws --no-verify-ssl s3api put-object-retention --bucket "$1" --key "$2" --retention "{\"Mode\": \"$3\", \"RetainUntilDate\": \"$4\"}" 2>&1) || local put_result=$?
if [[ $put_result -ne 0 ]]; then
log 2 "error putting object retention: $error"
return 1
fi
return 0
}
+20
View File
@@ -0,0 +1,20 @@
#!/usr/bin/env bash
select_object_content() {
if [[ $# -ne 7 ]]; then
log 2 "'select object content' command requires bucket, key, expression, expression type, input serialization, output serialization, outfile"
return 1
fi
error=$(aws --no-verify-ssl s3api select-object-content \
--bucket "$1" \
--key "$2" \
--expression "$3" \
--expression-type "$4" \
--input-serialization "$5" \
--output-serialization "$6" "$7" 2>&1) || local select_result=$?
if [[ $select_result -ne 0 ]]; then
log 2 "error selecting object content: $error"
return 1
fi
return 0
}