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"