diff --git a/.github/workflows/skips.yml b/.github/workflows/skips.yml new file mode 100644 index 0000000..8868229 --- /dev/null +++ b/.github/workflows/skips.yml @@ -0,0 +1,84 @@ +name: skips check +permissions: {} +on: workflow_dispatch +jobs: + skip-ticket-check: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + + - name: Fail if any skip descriptions are empty or point to closed issues/PRs + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + set -euo pipefail + + # Find uncommented lines with "skip " (ignore lines whose first non-space char is #) + mapfile -t MATCHES < <( + git ls-files 'tests/test_*.sh' \ + | xargs -r grep -nE '^[[:space:]]*[^#][[:space:]]*skip[[:space:]]*$' \ + || true + ) + + if [ ${#MATCHES[@]} -ne 0 ]; then + echo "${#MATCHES[@]} skip(s) lack a description" + printf ' - %s\n' "${MATCHES[@]}" + exit 1 + fi + + mapfile -t MATCHES < <( + git ls-files 'tests/test_*.sh' \ + | xargs -r grep -nE '^[[:space:]]*[^#][[:space:]]*skip[[:space:]]*"https://github.com' \ + || true + ) + + urls=() + for m in "${MATCHES[@]}"; do + # Extract first GitHub issue/PR URL on the line: + # supports /issues/123 and /pull/123 (with or without extra suffix) + url="$(echo "$m" | grep -oE 'https://github\.com/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+/(issues|pull)/[0-9]+' | head -n1 || true)" + if [ -n "$url" ]; then + urls+=("$url") + fi + done + + if [ ${#urls[@]} -eq 0 ]; then + echo "Found skip lines, but no recognizable GitHub issue/PR URLs." + exit 0 + fi + + echo "Found skip ticket URLs:" + printf ' - %s\n' "${urls[@]}" + + closed=() + + for url in "${urls[@]}"; do + # Parse owner/repo and number from URL + # url format: https://github.com/OWNER/REPO/issues/123 or /pull/123 + path="${url#https://github.com/}" + owner="$(echo "$path" | cut -d/ -f1)" + repo="$(echo "$path" | cut -d/ -f2)" + num="$(echo "$path" | cut -d/ -f4)" + + # Issues API works for both issues and PRs; state=open/closed + state="$(curl -fsSL \ + -H "Authorization: Bearer $GH_TOKEN" \ + -H "Accept: application/vnd.github+json" \ + "https://api.github.com/repos/$owner/$repo/issues/$num" \ + | python -c "import sys,json; print(json.load(sys.stdin).get('state',''))")" + + echo "$url -> $state" + if [ "$state" = "closed" ]; then + closed+=("$url") + fi + done + + if [ ${#closed[@]} -gt 0 ]; then + echo "::error::Closed tickets referenced by uncommented skip URLs:" + printf '::error:: - %s\n' "${closed[@]}" + exit 1 + fi + + echo "All referenced tickets are open. ✅" \ No newline at end of file diff --git a/tests/drivers/complete_multipart_upload/complete_multipart_upload_rest.sh b/tests/drivers/complete_multipart_upload/complete_multipart_upload_rest.sh index 145c7f3..5ca9177 100644 --- a/tests/drivers/complete_multipart_upload/complete_multipart_upload_rest.sh +++ b/tests/drivers/complete_multipart_upload/complete_multipart_upload_rest.sh @@ -76,12 +76,10 @@ calculate_composite_checksum() { fi log 5 "checksums: ${*:2}" for checksum in ${@:2}; do - if ! binary_checksum=$(echo -n "$checksum" | base64 -d 2>&1); then - log 2 "error calculating binary checksum: $binary_checksum" + if ! printf '%s' "$checksum" | base64 -d >> "$TEST_FILE_FOLDER/all_checksums.bin"; then + log 2 "error calculating binary checksum and adding to file" return 1 fi - log 5 "binary checksum: $binary_checksum" - printf "%s" "$binary_checksum" | cat >> "$TEST_FILE_FOLDER/all_checksums.bin" done if [ "$1" == "sha256" ]; then composite=$(openssl dgst -sha256 -binary "$TEST_FILE_FOLDER/all_checksums.bin" | base64) @@ -96,6 +94,7 @@ calculate_composite_checksum() { fi fi log 5 "composite: $composite" + echo "$composite" } test_multipart_upload_with_checksum() { diff --git a/tests/drivers/openssl.sh b/tests/drivers/openssl.sh index e60cfb2..dda43ad 100644 --- a/tests/drivers/openssl.sh +++ b/tests/drivers/openssl.sh @@ -118,7 +118,8 @@ send_openssl_go_command_expect_error() { if ! check_param_count_gt "expected HTTP code, expected error code, expected message, params" 4 $#; then return 1 fi - if ! result=$(go run "./tests/rest_scripts/generateCommand.go" "-awsAccessKeyId" "$AWS_ACCESS_KEY_ID" "-awsSecretAccessKey" "$AWS_SECRET_ACCESS_KEY" "-url" "$AWS_ENDPOINT_URL" "-client" "openssl" "-filePath" "$TEST_FILE_FOLDER/openssl_command.txt" "${@:4}" 2>&1); then + if ! result=$(go run "./tests/rest_scripts/generateCommand.go" "-awsAccessKeyId" "$AWS_ACCESS_KEY_ID" "-awsSecretAccessKey" \ + "$AWS_SECRET_ACCESS_KEY" "-url" "$AWS_ENDPOINT_URL" "-awsRegion" "$AWS_REGION" "-client" "openssl" "-filePath" "$TEST_FILE_FOLDER/openssl_command.txt" "${@:4}" 2>&1); then log 2 "error sending go command and checking error: $result" return 1 fi @@ -133,8 +134,8 @@ send_openssl_go_command() { if ! check_param_count_gt "expected HTTP code, params" 2 $#; then return 1 fi - if ! go run "./tests/rest_scripts/generateCommand.go" "-awsAccessKeyId" "$AWS_ACCESS_KEY_ID" "-awsSecretAccessKey" "$AWS_SECRET_ACCESS_KEY" "-awsRegion" "$AWS_REGION" "-url" "$AWS_ENDPOINT_URL" "-client" "openssl" "-filePath" "$TEST_FILE_FOLDER/openssl_command.txt" "${@:2}"; then - log 2 "error sending go command and checking error" + if ! result=$(go run "./tests/rest_scripts/generateCommand.go" "-awsAccessKeyId" "$AWS_ACCESS_KEY_ID" "-awsSecretAccessKey" "$AWS_SECRET_ACCESS_KEY" "-awsRegion" "$AWS_REGION" "-url" "$AWS_ENDPOINT_URL" "-client" "openssl" "-filePath" "$TEST_FILE_FOLDER/openssl_command.txt" "${@:2}" 2>&1); then + log 2 "error sending go command and checking error: $result" return 1 fi if ! result=$(send_via_openssl_and_check_code "$TEST_FILE_FOLDER/openssl_command.txt" "$1" 2>&1); then @@ -148,8 +149,9 @@ send_openssl_go_command_check_header() { if ! check_param_count_gt "expected HTTP code, header key, value, params" 4 $#; then return 1 fi - if ! go run "./tests/rest_scripts/generateCommand.go" "-awsAccessKeyId" "$AWS_ACCESS_KEY_ID" "-awsSecretAccessKey" "$AWS_SECRET_ACCESS_KEY" "-url" "$AWS_ENDPOINT_URL" "-client" "openssl" "-filePath" "$TEST_FILE_FOLDER/openssl_command.txt" "${@:4}"; then - log 2 "error sending go command and checking error" + if ! result=$(go run "./tests/rest_scripts/generateCommand.go" "-awsAccessKeyId" "$AWS_ACCESS_KEY_ID" "-awsSecretAccessKey" "$AWS_SECRET_ACCESS_KEY" \ + "-awsRegion" "$AWS_REGION" "-url" "$AWS_ENDPOINT_URL" "-client" "openssl" "-filePath" "$TEST_FILE_FOLDER/openssl_command.txt" "${@:4}" 2>&1); then + log 2 "error sending go command and checking error: $result" return 1 fi if ! send_via_openssl_and_check_code_header "$TEST_FILE_FOLDER/openssl_command.txt" "$1" "$2" "$3"; then diff --git a/tests/rest_scripts/command/s3Command.go b/tests/rest_scripts/command/s3Command.go index a37ec58..7228d05 100644 --- a/tests/rest_scripts/command/s3Command.go +++ b/tests/rest_scripts/command/s3Command.go @@ -245,7 +245,7 @@ func (s *S3Command) addHeaderValues() error { } sort.Slice(s.headerValues, func(i, j int) bool { - return s.headerValues[i][0] < s.headerValues[j][0] + return strings.ToLower(s.headerValues[i][0]) < strings.ToLower(s.headerValues[j][0]) }) return nil } diff --git a/tests/rest_scripts/command/streamingUnsignedPayloadTrailer.go b/tests/rest_scripts/command/streamingUnsignedPayloadTrailer.go index e8dabbe..b98715b 100644 --- a/tests/rest_scripts/command/streamingUnsignedPayloadTrailer.go +++ b/tests/rest_scripts/command/streamingUnsignedPayloadTrailer.go @@ -50,7 +50,7 @@ func (s *StreamingUnsignedPayloadWithTrailer) GetContentLength() (int64, error) if s.omitTrailer { trailerLength = 4 } else if s.omitTrailerKey { - trailerLength = 1 + checksumValueLength + 4 + trailerLength = 3 + checksumValueLength + 4 } else { trailerLength = 2 + int64(len(s.checksumHeader)) + 1 + checksumValueLength + 4 } diff --git a/tests/test_rest_bucket.sh b/tests/test_rest_bucket.sh index 8d8e651..b2765b5 100755 --- a/tests/test_rest_bucket.sh +++ b/tests/test_rest_bucket.sh @@ -105,9 +105,6 @@ export RUN_USERS=true } @test "REST - can set object lock enabled on existing buckets" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1300" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -124,9 +121,6 @@ export RUN_USERS=true } @test "REST - cannot set object lock enabled without content-md5" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1301" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -156,7 +150,7 @@ export RUN_USERS=true @test "REST - put policy" { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skip versitygw-specific users tests" fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -186,63 +180,3 @@ export RUN_USERS=true run delete_object_empty_bucket_check_error assert_success } - -@test "REST - PutBucketTagging - no payload" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1521" - fi - run get_bucket_name "$BUCKET_ONE_NAME" - assert_success - bucket_name="$output" - - run setup_bucket_v2 "$bucket_name" - assert_success - - run send_rest_go_command_expect_error "400" "InvalidRequest" "Missing required header" "-bucketName" "$bucket_name" "-query" "tagging=" "-method" "PUT" - assert_success -} - -@test "REST - PutBucketTagging - invalid Content-MD5" { - run get_bucket_name "$BUCKET_ONE_NAME" - assert_success - bucket_name="$output" - - run setup_bucket_v2 "$bucket_name" - assert_success - - run send_rest_go_command_expect_error "400" "InvalidDigest" "you specified" "-bucketName" "$bucket_name" "-query" "tagging=" "-method" "PUT" \ - "-customContentMD5" "dummy" \ - "-payload" "keyvalue" - assert_success -} - -@test "REST - PutBucketTagging - invalid Content-MD5 - invalid Content-MD5 itself returned" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1526" - fi - run get_bucket_name "$BUCKET_ONE_NAME" - assert_success - bucket_name="$output" - - run setup_bucket "$bucket_name" - assert_success - - run send_put_bucket_tagging_command_check_invalid_content_md5 "$bucket_name" - assert_success -} - -@test "REST - PutBucketTagging - incorrect Content-MD5" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1525" - fi - run get_bucket_name "$BUCKET_ONE_NAME" - assert_success - bucket_name="$output" - - run setup_bucket "$bucket_name" - assert_success - - run send_rest_go_command_expect_error "400" "BadDigest" "did not match" "-bucketName" "$bucket_name" "-query" "tagging=" "-method" "PUT" "-incorrectContentMD5" \ - "-payload" "keyvalue" - assert_success -} diff --git a/tests/test_rest_delete_bucket.sh b/tests/test_rest_delete_bucket.sh index ceadab3..4b68e72 100755 --- a/tests/test_rest_delete_bucket.sh +++ b/tests/test_rest_delete_bucket.sh @@ -83,9 +83,6 @@ source ./tests/drivers/put_object/put_object_rest.sh } @test "REST - DeleteBucket - invalid x-amz-expected-bucket-owner" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1428" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -93,14 +90,21 @@ source ./tests/drivers/put_object/put_object_rest.sh run setup_bucket "$bucket_name" assert_success - run send_rest_go_command_expect_error "400" "InvalidBucketOwnerAWSAccountID" "value of the expected bucket owner" "-method" "DELETE" "-bucketName" "$bucket_name" "-signedParams" "x-amz-expected-bucket-owner:01234567890" + if [ "$DIRECT" == "true" ]; then + expected_http_code="400" + expected_error_code="InvalidBucketOwnerAWSAccountID" + expected_error="value of the expected bucket owner" + else + expected_http_code="403" + expected_error_code="AccessDenied" + expected_error="Access Denied" + fi + run send_rest_go_command_expect_error "$expected_http_code" "$expected_error_code" "$expected_error" "-method" "DELETE" \ + "-bucketName" "$bucket_name" "-signedParams" "x-amz-expected-bucket-owner:a" assert_success } @test "REST - DeleteBucket - incorrect x-amz-expected-bucket-owner" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1428" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" diff --git a/tests/test_rest_delete_bucket_ownership_controls.sh b/tests/test_rest_delete_bucket_ownership_controls.sh index c6b1381..c73cbef 100755 --- a/tests/test_rest_delete_bucket_ownership_controls.sh +++ b/tests/test_rest_delete_bucket_ownership_controls.sh @@ -26,7 +26,7 @@ export RUN_USERS=true @test "REST - DeleteBucketOwnershipControls - lack permission" { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skip versitygw-specific users tests" fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -46,7 +46,7 @@ export RUN_USERS=true @test "REST - DeleteBucketOwnershipControls - invalid username" { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skip versitygw-specific users tests" fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success diff --git a/tests/test_rest_delete_bucket_tagging.sh b/tests/test_rest_delete_bucket_tagging.sh index bb5ab59..1832102 100755 --- a/tests/test_rest_delete_bucket_tagging.sh +++ b/tests/test_rest_delete_bucket_tagging.sh @@ -28,7 +28,7 @@ export RUN_USERS=true @test "REST - DeleteBucketTagging - lack permission" { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skip versitygw-specific users tests" fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success diff --git a/tests/test_rest_head_bucket.sh b/tests/test_rest_head_bucket.sh index fe88a3a..5849f1d 100755 --- a/tests/test_rest_head_bucket.sh +++ b/tests/test_rest_head_bucket.sh @@ -21,9 +21,6 @@ source ./tests/setup.sh source ./tests/drivers/create_bucket/create_bucket_rest.sh @test "REST - HeadBucket - mismatched owner" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1428" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -36,10 +33,6 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh } @test "REST - HeadBucket - invalid owner" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1428" - fi - run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -47,7 +40,14 @@ source ./tests/drivers/create_bucket/create_bucket_rest.sh run setup_bucket "$bucket_name" assert_success - run head_bucket_rest_expect_error "$bucket_name" "EXPECTED_OWNER=01234567890" "400" "Bad Request" + if [ "$DIRECT" == "true" ]; then + http_code=400 + error_code="Bad Request" + else + http_code=403 + error_code="Forbidden" + fi + run head_bucket_rest_expect_error "$bucket_name" "EXPECTED_OWNER=01234567890" "$http_code" "$error_code" assert_success } diff --git a/tests/test_rest_list_buckets.sh b/tests/test_rest_list_buckets.sh index aba5738..a7e00f9 100755 --- a/tests/test_rest_list_buckets.sh +++ b/tests/test_rest_list_buckets.sh @@ -45,10 +45,6 @@ export RUN_USERS=true @test "REST - deformed message" { test_file="test_file" - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1364" - fi - echo -en "abcdefg\r\n\r\n" > "$TEST_FILE_FOLDER/deformed.txt" run send_via_openssl_check_code_error_contains "$TEST_FILE_FOLDER/deformed.txt" 400 "BadRequest" "An error occurred when parsing the HTTP request." assert_success @@ -56,7 +52,7 @@ export RUN_USERS=true @test "REST - invalid authorization scheme" { if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1512" + skip "https://github.com/versity/versitygw/issues/1705" fi run list_buckets_check_authorization_scheme_error assert_success @@ -64,7 +60,7 @@ export RUN_USERS=true @test "REST - very invalid credential string" { if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1513" + skip "https://github.com/versity/versitygw/issues/1706" fi run send_rest_go_command_expect_error "400" "AuthorizationHeaderMalformed" "the Credential is mal-formed" "-incorrectCredential" "Credentials" assert_success @@ -77,7 +73,7 @@ export RUN_USERS=true @test "REST - invalid year/month/day" { if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1513" + skip "https://github.com/versity/versitygw/issues/1706" fi run send_rest_go_command_expect_error "400" "AuthorizationHeaderMalformed" "incorrect date format" "-invalidYearMonthDay" assert_success @@ -93,7 +89,7 @@ export RUN_USERS=true @test "REST - invalid region" { if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1513" + skip "https://github.com/versity/versitygw/issues/1706" fi run send_rest_go_command_expect_error "400" "AuthorizationHeaderMalformed" "the region 'us-eest-1' is wrong" "-awsRegion" "us-eest-1" assert_success @@ -101,7 +97,7 @@ export RUN_USERS=true @test "REST - invalid service name" { if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1513" + skip "https://github.com/versity/versitygw/issues/1706" fi run send_rest_go_command_expect_error "400" "AuthorizationHeaderMalformed" "incorrect service" "-serviceName" "s2" assert_success @@ -191,10 +187,10 @@ export RUN_USERS=true @test "REST - ListBuckets - correct buckets show up" { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skip versitygw-specific users tests" fi if [ "$DIRECT" == "true" ]; then - skip + skip "https://github.com/versity/versitygw/issues/1704" fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success diff --git a/tests/test_rest_multipart.sh b/tests/test_rest_multipart.sh index 466271f..f149721 100755 --- a/tests/test_rest_multipart.sh +++ b/tests/test_rest_multipart.sh @@ -232,9 +232,6 @@ test_file="test_file" } @test "REST - multipart checksum w/sha256, full object" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1329" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -279,34 +276,29 @@ test_file="test_file" assert_success } +@test "sha256 - calculate composite checksum w/null byte" { + run calculate_composite_checksum "sha256" "Gaq9AN6Uxmk7WaTR9TzgDhE8m8bzXrfJWReDyLoZAo8=" "GohMQZ27EDvwB3n2iDx4irfxkTQDyvpDB7NFeTYaXn8=" + assert_success + composite=$output + assert_equal "$composite" "/UpzIA5Rft0d6bSkAlmgESdRE3vtDbo8hzAn//6Z5UU=" +} + @test "REST - multipart - composite - sha256" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1359" - fi run test_multipart_upload_with_checksum "$BUCKET_ONE_NAME" "$test_file" "COMPOSITE" "SHA256" assert_success } @test "REST - multipart - composite - sha1" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1359" - fi run test_multipart_upload_with_checksum "$BUCKET_ONE_NAME" "$test_file" "COMPOSITE" "SHA1" assert_success } @test "REST - multipart - composite - crc32" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1359" - fi run test_multipart_upload_with_checksum "$BUCKET_ONE_NAME" "$test_file" "COMPOSITE" "CRC32" assert_success } @test "REST - multipart - composite - crc32c" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1359" - fi run test_multipart_upload_with_checksum "$BUCKET_ONE_NAME" "$test_file" "COMPOSITE" "CRC32C" assert_success } @@ -332,33 +324,21 @@ test_file="test_file" } @test "REST - multipart - composite - incorrect sha256" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1359" - fi run test_complete_multipart_upload_incorrect_checksum "$BUCKET_ONE_NAME" "$test_file" "COMPOSITE" "SHA256" assert_success } @test "REST - multipart - composite - incorrect sha1" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1359" - fi run test_complete_multipart_upload_incorrect_checksum "$BUCKET_ONE_NAME" "$test_file" "COMPOSITE" "SHA1" assert_success } @test "REST - multipart - composite - incorrect crc32" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1359" - fi run test_complete_multipart_upload_incorrect_checksum "$BUCKET_ONE_NAME" "$test_file" "COMPOSITE" "CRC32C" assert_success } @test "REST - multipart - composite - incorrect crc32c" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1359" - fi run test_complete_multipart_upload_incorrect_checksum "$BUCKET_ONE_NAME" "$test_file" "COMPOSITE" "CRC32C" assert_success } diff --git a/tests/test_rest_not_implemented.sh b/tests/test_rest_not_implemented.sh index 80ce7d8..d848caa 100755 --- a/tests/test_rest_not_implemented.sh +++ b/tests/test_rest_not_implemented.sh @@ -17,6 +17,7 @@ load ./bats-support/load load ./bats-assert/load +source ./tests/drivers/create_bucket/create_bucket_rest.sh source ./tests/drivers/not_implemented/not_implemented_rest.sh source ./tests/setup.sh @@ -185,12 +186,6 @@ source ./tests/setup.sh assert_success } -@test "REST - GetBucketPolicyStatus" { - skip "https://github.com/versity/versitygw/issues/1454" - run test_not_implemented_expect_failure "$BUCKET_ONE_NAME" "policyStatus=" "GET" - assert_success -} - @test "REST - GetBucketRequestPayment" { run test_not_implemented_expect_failure "$BUCKET_ONE_NAME" "requestPayment=" "GET" assert_success diff --git a/tests/test_rest_put_bucket_tagging.sh b/tests/test_rest_put_bucket_tagging.sh index 664a7f5..2c31565 100755 --- a/tests/test_rest_put_bucket_tagging.sh +++ b/tests/test_rest_put_bucket_tagging.sh @@ -36,9 +36,6 @@ source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh } @test "REST PutBucketTagging - tag key with control character" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1579" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -66,9 +63,6 @@ source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh } @test "REST PutBucketTagging - tag value with control character" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1579" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -121,9 +115,6 @@ source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh } @test "REST - PutBucketTagging - STREAMING-UNSIGNED-PAYLOAD-TRAILER fails" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1601" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -132,8 +123,74 @@ source ./tests/drivers/put_bucket_tagging/put_bucket_tagging_rest.sh assert_success run send_openssl_go_command_expect_error "400" "InvalidRequest" "The value of x-amz-content-sha256 header is invalid" \ - "-client" "openssl" "-commandType" "putBucketTagging" "-bucketName" "$bucket_name" "-payload" "abcdefg" \ - "-debug" "-logFile" "tagging.log" \ + "-client" "openssl" "-commandType" "putBucketTagging" "-bucketName" "$bucket_name" "-payload" "abcdefg" "-checksumType" "sha256" \ "-payloadType" "STREAMING-UNSIGNED-PAYLOAD-TRAILER" "-chunkSize" "8192" "-tagKey" "key" "-tagValue" "value" assert_success } + +@test "REST - PutBucketTagging - no payload" { + run get_bucket_name "$BUCKET_ONE_NAME" + assert_success + bucket_name="$output" + + run setup_bucket_v2 "$bucket_name" + assert_success + + run send_rest_go_command_expect_error "400" "MissingRequestBodyError" "Request Body is empty" "-bucketName" "$bucket_name" "-query" "tagging=" "-method" "PUT" "-contentMD5" + assert_success +} + +@test "REST - PutBucketTagging - invalid Content-MD5" { + run get_bucket_name "$BUCKET_ONE_NAME" + assert_success + bucket_name="$output" + + run setup_bucket_v2 "$bucket_name" + assert_success + + run send_rest_go_command_expect_error "400" "InvalidDigest" "you specified" "-bucketName" "$bucket_name" "-query" "tagging=" "-method" "PUT" \ + "-customContentMD5" "dummy" \ + "-payload" "keyvalue" + assert_success +} + +@test "REST - PutBucketTagging - invalid Content-MD5 - invalid Content-MD5 itself returned" { + if [ "$DIRECT" != "true" ]; then + skip "https://github.com/versity/versitygw/issues/1526" + fi + run get_bucket_name "$BUCKET_ONE_NAME" + assert_success + bucket_name="$output" + + run setup_bucket "$bucket_name" + assert_success + + run send_put_bucket_tagging_command_check_invalid_content_md5 "$bucket_name" + assert_success +} + +@test "REST - PutBucketTagging - incorrect Content-MD5" { + run get_bucket_name "$BUCKET_ONE_NAME" + assert_success + bucket_name="$output" + + run setup_bucket "$bucket_name" + assert_success + + run send_rest_go_command_expect_error "400" "BadDigest" "did not match" "-bucketName" "$bucket_name" "-query" "tagging=" "-method" "PUT" "-incorrectContentMD5" \ + "-payload" "keyvalue" + assert_success +} + +@test "REST - PutBucketTagging - missing Content-MD5" { + run get_bucket_name "$BUCKET_ONE_NAME" + assert_success + bucket_name="$output" + + run setup_bucket_v2 "$bucket_name" + assert_success + + run send_rest_go_command_expect_error "400" "InvalidRequest" "Missing required header for this request" "-bucketName" "$bucket_name" "-query" "tagging=" "-method" "PUT" \ + "-payload" "keyvalue" + assert_success +} diff --git a/tests/test_rest_put_object.sh b/tests/test_rest_put_object.sh index bdbde12..f0c29e8 100755 --- a/tests/test_rest_put_object.sh +++ b/tests/test_rest_put_object.sh @@ -115,7 +115,7 @@ export RUN_USERS=true @test "REST - PutObject - If-None-Match - no asterisk" { if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/821" + skip "https://github.com/versity/versitygw/issues/1708" fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -125,13 +125,13 @@ export RUN_USERS=true assert_success run send_rest_go_command_expect_error "501" "NotImplemented" "not implemented" "-bucketName" "$bucket_name" "-objectKey" "$test_file" "-method" "PUT" "-payloadFile" "$TEST_FILE_FOLDER/$test_file" \ - "-signedParams" "if-none-match:true" + "-signedParams" "If-None-Match:true" assert_success } @test "REST - PutObject - If-None-Match - block copy" { if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/821" + skip "https://github.com/versity/versitygw/issues/1708" fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -141,14 +141,11 @@ export RUN_USERS=true assert_success run send_rest_go_command_expect_error "412" "PreconditionFailed" "did not hold" "-bucketName" "$bucket_name" "-objectKey" "$test_file" "-method" "PUT" "-payloadFile" "$TEST_FILE_FOLDER/$test_file" \ - "-signedParams" "if-none-match:*" + "-signedParams" "If-None-Match:*" assert_success } @test "REST - PutObject - If-None-Match - success" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/821" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -163,7 +160,7 @@ export RUN_USERS=true @test "REST - PutObject - If-Match - file doesn't exist on server" { if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/821" + skip "https://github.com/versity/versitygw/issues/1709" fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -178,9 +175,6 @@ export RUN_USERS=true } @test "REST - PutObject - If-Match - incorrect etag" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/821" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -195,7 +189,7 @@ export RUN_USERS=true @test "REST - PutObject - If-Match - correct etag" { if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/821" + skip "https://github.com/versity/versitygw/issues/1710" fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -235,7 +229,7 @@ export RUN_USERS=true @test "REST - PutObject - user permission, bad signature" { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skipping versitygw-specific users tests" fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -252,7 +246,7 @@ export RUN_USERS=true @test "REST - PutObject - expect continue - success" { if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1517" + skip "https://github.com/versity/versitygw/issues/1707" fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success @@ -262,14 +256,11 @@ export RUN_USERS=true assert_success run send_rest_go_command "200" "-bucketName" "$bucket_name" "-objectKey" "$test_file" "-method" "PUT" "-payloadFile" "$TEST_FILE_FOLDER/$test_file" \ - "-signedParams" "Expect:100-continue" "-debug" "-logFile" "tagging.log" + "-signedParams" "Expect:100-continue" assert_success } @test "REST - PutObject - STREAMING-UNSIGNED-PAYLOAD-TRAILER, x-amz-trailer of crc32, trailer missing" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1600" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -285,9 +276,6 @@ export RUN_USERS=true } @test "REST - PutObject - STREAMING-UNSIGNED-PAYLOAD-TRAILER - 200 header returns correct checksum type" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1607" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -304,9 +292,6 @@ export RUN_USERS=true } @test "REST - PutObject - STREAMING-UNSIGNED-PAYLOAD-TRAILER - success (sha1)" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1607" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -326,9 +311,6 @@ export RUN_USERS=true } @test "REST - PutObject - STREAMING-UNSIGNED-PAYLOAD-TRAILER - success (crc32)" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1607" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -348,9 +330,6 @@ export RUN_USERS=true } @test "REST - PutObject - STREAMING-UNSIGNED-PAYLOAD-TRAILER - success (crc32c)" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1607" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -410,9 +389,6 @@ export RUN_USERS=true } @test "REST - PutObject - STREAMING-UNSIGNED-PAYLOAD-TRAILER, x-amz-trailer of crc32, trailer key missing" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1626" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" @@ -428,9 +404,6 @@ export RUN_USERS=true } @test "REST - PutObject - STREAMING-UNSIGNED-PAYLOAD-TRAILER - default crc64nvme" { - if [ "$DIRECT" != "true" ]; then - skip "https://github.com/versity/versitygw/issues/1632" - fi run get_bucket_name "$BUCKET_ONE_NAME" assert_success bucket_name="$output" diff --git a/tests/test_s3api_root_inner.sh b/tests/test_s3api_root_inner.sh index 3ca022a..2216e29 100755 --- a/tests/test_s3api_root_inner.sh +++ b/tests/test_s3api_root_inner.sh @@ -106,7 +106,7 @@ test_get_object_attributes_s3api_root() { test_get_put_object_legal_hold_s3api_root() { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skipping versitygw-specific users tests" fi bucket_file="bucket_file" username=$USERNAME_ONE @@ -140,7 +140,7 @@ test_get_put_object_legal_hold_s3api_root() { test_get_put_object_retention_s3api_root() { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skipping versitygw-specific users tests" fi bucket_file="bucket_file" username=$USERNAME_ONE @@ -175,7 +175,7 @@ test_get_put_object_retention_s3api_root() { test_retention_bypass_s3api_root() { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skipping versitygw-specific users tests" fi bucket_file="bucket_file" username=$USERNAME_ONE diff --git a/tests/test_user_aws.sh b/tests/test_user_aws.sh index 12c8eb0..6f85cd0 100755 --- a/tests/test_user_aws.sh +++ b/tests/test_user_aws.sh @@ -36,7 +36,7 @@ export RUN_USERS=true @test "test_delete_user_no_access_key" { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skipping versitygw-specific users tests" fi run delete_user "" assert_failure @@ -52,7 +52,7 @@ export RUN_USERS=true @test "test_user_get_object" { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skipping versitygw-specific users tests" fi test_file="test_file" @@ -79,7 +79,7 @@ export RUN_USERS=true @test "test_userplus_get_object" { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skipping versitygw-specific users tests" fi test_file="test_file" @@ -106,7 +106,7 @@ export RUN_USERS=true @test "test_user_delete_object" { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skipping versitygw-specific users tests" fi test_file="test_file" @@ -133,7 +133,7 @@ export RUN_USERS=true @test "test_admin_put_get_object" { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skipping versitygw-specific users tests" fi test_file="test_file" @@ -164,7 +164,7 @@ export RUN_USERS=true @test "test_user_create_multipart_upload" { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skipping versitygw-specific users tests" fi test_file="test_file" diff --git a/tests/test_user_common.sh b/tests/test_user_common.sh index 7c2e644..367bdec 100755 --- a/tests/test_user_common.sh +++ b/tests/test_user_common.sh @@ -23,7 +23,7 @@ source ./tests/commands/list_buckets.sh test_admin_user() { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skipping versitygw-specific users tests" fi admin_username="$USERNAME_ONE" admin_password="$PASSWORD_ONE" @@ -62,7 +62,7 @@ test_admin_user() { test_create_user_already_exists() { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skipping versitygw-specific users tests" fi username="$USERNAME_ONE" password="$PASSWORD_ONE" @@ -76,7 +76,7 @@ test_create_user_already_exists() { test_user_user() { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skipping versitygw-specific users tests" fi if [ "$RECREATE_BUCKETS" == "false" ]; then skip "test not valid for static buckets" @@ -115,7 +115,7 @@ test_user_user() { test_userplus_operation() { if [ "$SKIP_USERS_TESTS" == "true" ]; then - skip + skip "skipping versitygw-specific users tests" fi username="$USERNAME_ONE" password="$PASSWORD_ONE"