Files
versity-versitygw/tests/test_rest_get_object.sh
T
dualfroz 86ff18f8c1 fix: reject unknown response-* query parameters in GetObject and HeadObject
getobject and headobject silently ignored any response-* query parameter outside the six overridable headers. they now return 400 InvalidArgument naming the parameter and its value, like s3, and the rest tests skipped for this issue are enabled.

Fixes #2075
2026-10-07 19:40:28 +02:00

199 lines
6.7 KiB
Bash

#!/usr/bin/env bats
# Copyright 2026 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.
load ./bats-support/load
load ./bats-assert/load
source ./tests/commands/get_object.sh
source ./tests/drivers/complete_multipart_upload/complete_multipart_upload_rest.sh
source ./tests/drivers/create_bucket/create_bucket_rest.sh
source ./tests/drivers/create_multipart_upload/create_multipart_upload_rest.sh
source ./tests/setup.sh
# tags: curl,GetObject,HeadObject,range
@test "REST - range download and compare" {
run get_file_name
assert_success
test_file="$output"
run get_bucket_name "$BUCKET_ONE_NAME"
assert_success
bucket_name="$output"
run setup_bucket_and_large_file_v2 "$bucket_name" "$test_file"
assert_success
run put_object "rest" "$TEST_FILE_FOLDER/$test_file" "$bucket_name" "$test_file"
assert_success
download_chunk_size="2000000"
run download_and_compare_file "$TEST_FILE_FOLDER/$test_file" "$bucket_name" "$test_file" "$TEST_FILE_FOLDER/$test_file-copy" "$download_chunk_size"
assert_success
}
# tags: curl,PutObject,GetObject,special-chars,encoding
@test "REST - put, get object, encoded name" {
run get_bucket_name "$BUCKET_ONE_NAME"
assert_success
bucket_name="$output"
file_name=" \"<>\\^\`{}|+&?%"
run setup_bucket_and_file_v2 "$bucket_name" "$file_name"
assert_success
run put_object_rest_special_chars "$TEST_FILE_FOLDER/$file_name" "$bucket_name" "$file_name/$file_name"
assert_success
run list_check_single_object "$bucket_name" "$file_name/$file_name"
assert_success
run get_object_rest_special_chars "$bucket_name" "$file_name/$file_name" "$TEST_FILE_FOLDER/${file_name}-copy"
assert_success
run compare_files "$TEST_FILE_FOLDER/$file_name" "$TEST_FILE_FOLDER/${file_name}-copy"
assert_success
run delete_object_rest "$bucket_name" "$file_name/$file_name"
assert_success
}
# tags: curl,GetObject,invalid-header,x-amz-content-sha256
@test "REST - GetObject w/invalid payload type" {
run get_file_name
assert_success
test_file="$output"
run get_bucket_name "$BUCKET_ONE_NAME"
assert_success
bucket_name="$output"
run setup_bucket_and_file_v2 "$bucket_name" "$test_file"
assert_success
run get_object_rest_with_invalid_streaming_type "$bucket_name" "$test_file"
assert_success
}
# tags: curl,GetObject,partNumber,invalid-header
@test "REST - GetObject - part number 2 w/o multipart upload" {
run setup_bucket_and_file_v3 "$BUCKET_ONE_NAME"
assert_success
read -r bucket_name file_name <<< "$output"
run put_object_rest "$TEST_FILE_FOLDER/$file_name" "$bucket_name" "$file_name"
assert_success
run send_rest_go_command_expect_error "416" "InvalidPartNumber" "not satisfiable" "-bucketName" "$bucket_name" "-objectKey" "$file_name" "-query" "partNumber=2"
assert_success
}
# tags: curl,GetObject,partNumber,range,Content-Range
@test "REST - GetObject - part number 1 returns 206, Content-Range header" {
if [ "$DIRECT" != "true" ]; then
skip "https://github.com/versity/versitygw/issues/2074"
fi
run setup_bucket_and_file_v3 "$BUCKET_ONE_NAME"
assert_success
read -r bucket_name file_name <<< "$output"
run put_object_rest "$TEST_FILE_FOLDER/$file_name" "$bucket_name" "$file_name"
assert_success
run send_rest_go_command_callback "206" "check_for_header_key_and_value" "-bucketName" "$bucket_name" "-objectKey" "$file_name" "-query" "partNumber=1" \
"--" "Content-Range" "bytes 0-9/10"
assert_success
}
# tags: curl,GetObject,invalid-header,response-headers
@test "REST - GetObject - response query - invalid response type" {
run setup_bucket_and_file_v3 "$BUCKET_ONE_NAME"
assert_success
read -r bucket_name file_name <<< "$output"
run put_object_rest "$TEST_FILE_FOLDER/$file_name" "$bucket_name" "$file_name"
assert_success
local bad_response_query="response-gibberish"
run send_rest_go_command_expect_error "400" "InvalidArgument" "$bad_response_query is not in the set of overridable response headers" \
"-bucketName" "$bucket_name" "-objectKey" "$file_name" "-query" "$bad_response_query=dummy"
assert_success
}
# tags: curl,GetObject,response-cache-control,response-headers
@test "REST - GetObject - response-cache-control" {
run test_get_object_with_custom_content_header "cache-control" "dummy"
assert_success
}
# tags: curl,GetObject,response-content-disposition,response-headers
@test "REST - GetObject - response-content-disposition" {
run test_get_object_with_custom_content_header "content-disposition" "dummy"
assert_success
}
# tags: curl,GetObject,response-content-encoding,response-headers
@test "REST - GetObject - response-content-encoding" {
run test_get_object_with_custom_content_header "content-encoding" "dummy"
assert_success
}
# tags: curl,GetObject,response-content-language,response-headers
@test "REST - GetObject - response-content-language" {
run test_get_object_with_custom_content_header "content-language" "dummy"
assert_success
}
# tags: curl,GetObject,response-content-type,response-headers
@test "REST - GetObject - response-content-type" {
run test_get_object_with_custom_content_header "content-type" "dummy"
assert_success
}
# tags: curl,GetObject,response-expires,response-headers
@test "REST - GetObject - response-expires" {
run test_get_object_with_custom_content_header "expires" "dummy+ one"
assert_success
}
# tags: curl,GetObject,multipart,partNumber
@test "REST - GetObject - partNumber w/multipart" {
run setup_bucket_and_large_file_v3 "$BUCKET_ONE_NAME" 8
assert_success
read -r bucket_name test_file <<< "$output"
run split_file_irregular "$TEST_FILE_FOLDER/$test_file" 5242880
assert_success
read -r part_one part_two <<< "$output"
log 5 "part one: $part_one, part two: $part_two"
run perform_multipart_upload_rest_variable_parts "$bucket_name" "$test_file" "$part_one" "$part_two"
assert_success
run get_file_size "$part_one"
assert_success
part_size="$output"
run get_file_size "$TEST_FILE_FOLDER/$test_file"
assert_success
file_size="$output"
run send_get_object_with_part_number_validate_response "$bucket_name" "$test_file" "1" "$part_one" "$file_size" "$part_size"
assert_success
run send_get_object_with_part_number_validate_response "$bucket_name" "$test_file" "2" "$part_two" "$file_size" "$part_size"
assert_success
}