From 87aee2bcf8282b845aef8bd741434a5ccf7fcee2 Mon Sep 17 00:00:00 2001 From: Luke McCrone Date: Wed, 3 Apr 2024 22:57:29 -0300 Subject: [PATCH] test: bucket info, invalid name, parameter tests --- .github/workflows/system.yml | 6 +++--- tests/.env.default | 3 ++- tests/test_aws.sh | 42 +++++++++++++++++++++++++++++++++++- tests/test_mc.sh | 30 ++++++++++++++++++++++++++ tests/test_s3cmd.sh | 30 ++++++++++++++++++++++++++ tests/util.sh | 33 +++++++++++++++++++++++++--- tests/util_file.sh | 2 +- tests/versity.sh | 3 +++ 8 files changed, 140 insertions(+), 9 deletions(-) diff --git a/.github/workflows/system.yml b/.github/workflows/system.yml index f61bfb8..802c7ef 100644 --- a/.github/workflows/system.yml +++ b/.github/workflows/system.yml @@ -51,8 +51,8 @@ jobs: export WORKSPACE=$GITHUB_WORKSPACE openssl genpkey -algorithm RSA -out versitygw.pem -pkeyopt rsa_keygen_bits:2048 openssl req -new -x509 -key versitygw.pem -out cert.pem -days 365 -subj "/C=US/ST=California/L=San Francisco/O=Versity/OU=Software/CN=versity.com" - mkdir /tmp/cover - VERSITYGW_TEST_ENV=./tests/.env.default GOCOVERDIR=/tmp/cover ./tests/run_all.sh + mkdir cover + VERSITYGW_TEST_ENV=./tests/.env.default ./tests/run_all.sh #- name: Build and run, s3 backend # run: | @@ -70,4 +70,4 @@ jobs: - name: Coverage report run: | - go tool covdata percent -i=/tmp/cover + go tool covdata percent -i=cover diff --git a/tests/.env.default b/tests/.env.default index 408d9a8..1a736c8 100644 --- a/tests/.env.default +++ b/tests/.env.default @@ -12,4 +12,5 @@ KEY=$PWD/versitygw.pem S3CMD_CONFIG=./tests/s3cfg.local.default SECRETS_FILE=./tests/.secrets MC_ALIAS=versity -LOG_LEVEL=2 \ No newline at end of file +LOG_LEVEL=2 +GOCOVERDIR=$PWD/cover \ No newline at end of file diff --git a/tests/test_aws.sh b/tests/test_aws.sh index 7de90d3..1f9e022 100755 --- a/tests/test_aws.sh +++ b/tests/test_aws.sh @@ -376,4 +376,44 @@ source ./tests/test_common.sh # put_object "aws" "$test_file_folder"/"$file_name" "$BUCKET_ONE_NAME"/"$file_name" || local put_object=$? # [[ $put_object -eq 0 ]] || fail "Failed to add object to bucket" -#} \ No newline at end of file +#} + +@test "test_head_bucket" { + setup_bucket "aws" "$BUCKET_ONE_NAME" || local setup_result=$? + [[ $setup_result -eq 0 ]] || fail "error setting up bucket" + head_bucket "aws" "$BUCKET_ONE_NAME" + delete_bucket_or_contents "aws" "$BUCKET_ONE_NAME" +} + +@test "test_head_bucket_doesnt_exist" { + setup_bucket "aws" "$BUCKET_ONE_NAME" || local setup_result=$? + [[ $setup_result -eq 0 ]] || fail "error setting up bucket" + head_bucket "aws" "$BUCKET_ONE_NAME"a || local info_result=$? + [[ $info_result -eq 1 ]] || fail "bucket info for non-existent bucket returned" + [[ $bucket_info == *"404"* ]] || fail "404 not returned for non-existent bucket info" + delete_bucket_or_contents "aws" "$BUCKET_ONE_NAME" +} + +@test "test_copy_object_aws" { + + bucket_file="bucket_file" + + create_test_files "$bucket_file" || local created=$? + [[ $created -eq 0 ]] || fail "Error creating test files" + setup_bucket "aws" "$BUCKET_ONE_NAME" || local setup_result=$? + [[ $setup_result -eq 0 ]] || fail "error setting up bucket" + setup_bucket "aws" "$BUCKET_TWO_NAME" || local setup_result_two=$? + [[ $setup_result_two -eq 0 ]] || fail "Bucket two setup error" + put_object "aws" "$test_file_folder"/"$bucket_file" "$BUCKET_ONE_NAME"/"$bucket_file" || local put_object=$? + [[ $put_object -eq 0 ]] || fail "Failed to add object to bucket" + error=$(aws --no-verify-ssl s3api copy-object --copy-source "$BUCKET_ONE_NAME"/"$bucket_file" --key "$bucket_file" --bucket "$BUCKET_TWO_NAME" 2>&1) || local copy_result=$? + [[ $copy_result -eq 0 ]] || fail "Error copying file: $error" + copy_file "s3://$BUCKET_TWO_NAME"/"$bucket_file" "$test_file_folder/${bucket_file}_copy" || local put_object=$? + [[ $put_object -eq 0 ]] || fail "Failed to add object to bucket" + compare_files "$test_file_folder/$bucket_file" "$test_file_folder/${bucket_file}_copy" || local compare_result=$? + [[ $compare_result -eq 0 ]] || file "files don't match" + + delete_bucket_or_contents "aws" "$BUCKET_ONE_NAME" + delete_bucket_or_contents "aws" "$BUCKET_TWO_NAME" + delete_test_files "$bucket_file" +} \ No newline at end of file diff --git a/tests/test_mc.sh b/tests/test_mc.sh index 67a2e1e..2688912 100755 --- a/tests/test_mc.sh +++ b/tests/test_mc.sh @@ -45,3 +45,33 @@ export RUN_MC=true @test "test_list_objects_file_count" { test_common_list_objects_file_count "mc" } + +@test "test_create_bucket_invalid_name_mc" { + if [[ $RECREATE_BUCKETS != "true" ]]; then + return + fi + + create_bucket_invalid_name "mc" || local create_result=$? + [[ $create_result -eq 0 ]] || fail "Invalid name test failed" + + [[ "$bucket_create_error" == *"Bucket name cannot be empty"* ]] || fail "unexpected error: $bucket_create_error" + + delete_bucket_or_contents "mc" "$BUCKET_ONE_NAME" +} + +@test "test_get_bucket_info_mc" { + setup_bucket "mc" "$BUCKET_ONE_NAME" || local setup_result=$? + [[ $setup_result -eq 0 ]] || fail "error setting up bucket" + head_bucket "mc" "$BUCKET_ONE_NAME" + [[ $bucket_info == *"$BUCKET_ONE_NAME"* ]] || fail "failure to retrieve correct bucket info: $bucket_info" + delete_bucket_or_contents "mc" "$BUCKET_ONE_NAME" +} + +@test "test_get_bucket_info_doesnt_exist_mc" { + setup_bucket "mc" "$BUCKET_ONE_NAME" || local setup_result=$? + [[ $setup_result -eq 0 ]] || fail "error setting up bucket" + head_bucket "mc" "$BUCKET_ONE_NAME"a || local info_result=$? + [[ $info_result -eq 1 ]] || fail "bucket info for non-existent bucket returned" + [[ $bucket_info == *"does not exist"* ]] || fail "404 not returned for non-existent bucket info" + delete_bucket_or_contents "mc" "$BUCKET_ONE_NAME" +} diff --git a/tests/test_s3cmd.sh b/tests/test_s3cmd.sh index 9d8e2af..74cf5ee 100755 --- a/tests/test_s3cmd.sh +++ b/tests/test_s3cmd.sh @@ -40,3 +40,33 @@ export RUN_S3CMD=true @test "test_list_objects_file_count" { test_common_list_objects_file_count "s3cmd" } + +@test "test_create_bucket_invalid_name_s3cmd" { + if [[ $RECREATE_BUCKETS != "true" ]]; then + return + fi + + create_bucket_invalid_name "s3cmd" || local create_result=$? + [[ $create_result -eq 0 ]] || fail "Invalid name test failed" + + [[ "$bucket_create_error" == *"just the bucket name"* ]] || fail "unexpected error: $bucket_create_error" + + delete_bucket_or_contents "s3cmd" "$BUCKET_ONE_NAME" +} + +@test "test_get_bucket_info_s3cmd" { + setup_bucket "s3cmd" "$BUCKET_ONE_NAME" || local setup_result=$? + [[ $setup_result -eq 0 ]] || fail "error setting up bucket" + head_bucket "s3cmd" "$BUCKET_ONE_NAME" + [[ $bucket_info == *"s3://$BUCKET_ONE_NAME"* ]] || fail "failure to retrieve correct bucket info: $bucket_info" + delete_bucket_or_contents "s3cmd" "$BUCKET_ONE_NAME" +} + +@test "test_get_bucket_info_doesnt_exist_s3cmd" { + setup_bucket "s3cmd" "$BUCKET_ONE_NAME" || local setup_result=$? + [[ $setup_result -eq 0 ]] || fail "error setting up bucket" + head_bucket "s3cmd" "$BUCKET_ONE_NAME"a || local info_result=$? + [[ $info_result -eq 1 ]] || fail "bucket info for non-existent bucket returned" + [[ $bucket_info == *"404"* ]] || fail "404 not returned for non-existent bucket info" + delete_bucket_or_contents "s3cmd" "$BUCKET_ONE_NAME" +} diff --git a/tests/util.sh b/tests/util.sh index af8bdf9..5e0037e 100644 --- a/tests/util.sh +++ b/tests/util.sh @@ -37,11 +37,14 @@ create_bucket_invalid_name() { return 1 fi local exit_code=0 - local error if [[ $1 == "aws" ]]; then bucket_create_error=$(aws --no-verify-ssl s3 mb "s3://" 2>&1) || exit_code=$? + elif [[ $1 == 's3cmd' ]]; then + bucket_create_error=$(s3cmd "${S3CMD_OPTS[@]}" --no-check-certificate mb "s3://" 2>&1) || exit_code=$? + elif [[ $1 == 'mc' ]]; then + bucket_create_error=$(mc --insecure mb "$MC_ALIAS" 2>&1) || exit_code=$? else - echo "invalid command type $i" + echo "invalid command type $1" return 1 fi if [ $exit_code -eq 0 ]; then @@ -311,7 +314,7 @@ put_object_multiple() { local error if [[ $1 == 'aws' ]]; then # shellcheck disable=SC2086 - error=$(aws --debug --no-verify-ssl s3 cp "$(dirname "$2")" s3://"$3" --recursive --exclude="*" --include="$2" 2>&1) || exit_code=$? + error=$(aws --no-verify-ssl s3 cp "$(dirname "$2")" s3://"$3" --recursive --exclude="*" --include="$2" 2>&1) || exit_code=$? elif [[ $1 == 's3cmd' ]]; then # shellcheck disable=SC2086 error=$(s3cmd "${S3CMD_OPTS[@]}" --no-check-certificate put $2 "s3://$3/" 2>&1) || exit_code=$? @@ -982,3 +985,27 @@ create_presigned_url() { fi export presigned_url } + +head_bucket() { + if [ $# -ne 2 ]; then + echo "head bucket command missing command type, bucket name" + return 1 + fi + local exit_code=0 + local error + if [[ $1 == "aws" ]]; then + bucket_info=$(aws --no-verify-ssl s3api head-bucket --bucket "$2" 2>&1) || exit_code=$? + elif [[ $1 == "s3cmd" ]]; then + bucket_info=$(s3cmd --no-check-certificate info "s3://$2" 2>&1) || exit_code=$? + elif [[ $1 == 'mc' ]]; then + bucket_info=$(mc --insecure stat "$MC_ALIAS"/"$2" 2>&1) || exit_code=$? + else + echo "invalid command type $1" + return 1 + fi + if [ $exit_code -ne 0 ]; then + echo "error getting bucket info: $bucket_info" + return 1 + fi + export bucket_info +} diff --git a/tests/util_file.sh b/tests/util_file.sh index 8d9c71a..00cb60f 100644 --- a/tests/util_file.sh +++ b/tests/util_file.sh @@ -99,7 +99,7 @@ compare_files() { } create_test_file_folder() { - if [[ -v $TMPDIR ]]; then + if [[ -n $TMPDIR ]]; then test_file_folder=${TMPDIR}versity-gwtest else test_file_folder=$PWD/versity-gwtest diff --git a/tests/versity.sh b/tests/versity.sh index ac57954..fde0d5f 100644 --- a/tests/versity.sh +++ b/tests/versity.sh @@ -45,6 +45,9 @@ check_exe_params() { echo "RUN_VERSITYGW must be 'true' or 'false'" return 1 fi + if [[ -r $GOCOVERDIR ]]; then + export GOCOVERDIR=$GOCOVERDIR + fi if [[ $RUN_VERSITYGW == "true" ]]; then local check_result check_exe_params_versity || check_result=$?