Files
versity-versitygw/tests/test_rest_head_object.sh
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

151 lines
5.4 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/setup.sh
source ./tests/drivers/create_bucket/create_bucket_rest.sh
source ./tests/drivers/create_multipart_upload/create_multipart_upload_rest.sh
source ./tests/drivers/complete_multipart_upload/complete_multipart_upload_rest.sh
source ./tests/drivers/get_object_attributes/get_object_attributes_rest.sh
source ./tests/drivers/string.sh
# tags: curl,HeadObject,GetObjectAttributes,ETag,x-amz-object-attributes
@test "REST - head object" {
run setup_bucket_and_add_file_v3 "$BUCKET_ONE_NAME"
assert_success
read -r bucket_name file_name <<< "$output"
run get_etag_rest "$bucket_name" "$file_name"
assert_success
expected_etag=$output
run check_etag_attribute_rest "$bucket_name" "$file_name" "$expected_etag"
assert_success
}
# tags: curl,HeadObject,Content-Type
@test "REST - HeadObject - default Content-Type is binary/octet-stream" {
run setup_bucket_and_add_file_v3 "$BUCKET_ONE_NAME"
assert_success
read -r bucket_name file_name <<< "$output"
run head_object_check_header_key_and_value "$bucket_name" "$file_name" "Content-Type" "binary/octet-stream"
assert_success
}
# tags: curl,HeadObject,partNumber,invalid-query
@test "REST - HeadObject - letter partNumber" {
run setup_bucket_and_add_file_v3 "$BUCKET_ONE_NAME"
assert_success
read -r bucket_name file_name <<< "$output"
run send_rest_go_command "400" "-method" "HEAD" "-query" "partNumber=abc" "-objectKey" "$file_name" "-bucketName" "$bucket_name"
assert_success
}
# tags: curl,HeadObject,partNumber,invalid-query
@test "REST - HeadObject - invalid partNumber" {
run setup_bucket_and_add_file_v3 "$BUCKET_ONE_NAME"
assert_success
read -r bucket_name file_name <<< "$output"
run send_rest_go_command "416" "-method" "HEAD" "-query" "partNumber=2" "-objectKey" "$file_name" "-bucketName" "$bucket_name"
assert_success
}
# tags: curl,HeadObject,partNumber,multipart
@test "REST - HeadObject - valid partNumbers" {
file_mb=8
run setup_bucket_and_large_file_v3 "$BUCKET_ONE_NAME" "$file_mb"
assert_success
read -r bucket_name test_file <<< "$output"
file_bytes=$((file_mb*1024*1024))
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_one="$output"
run get_file_size "$part_one"
assert_success
part_size_two="$output"
run send_rest_go_command_callback "206" "check_header_partial_content_response" "-bucketName" "$bucket_name" "-objectKey" "$test_file" \
"-method" "HEAD" "-query" "partNumber=1" "--" "1" "$file_bytes" "$part_size_one"
assert_success
run send_rest_go_command_callback "206" "check_header_partial_content_response" "-bucketName" "$bucket_name" "-objectKey" "$test_file" \
"-method" "HEAD" "-query" "partNumber=2" "--" "2" "$file_bytes" "$part_size_two"
assert_success
}
# tags: curl,HeadObject,invalid-query
@test "REST - HeadObject - invalid request header type" {
run setup_bucket_and_add_file_v3 "$BUCKET_ONE_NAME"
assert_success
read -r bucket_name file_name <<< "$output"
run send_rest_go_command "400" "-bucketName" "$bucket_name" "-objectKey" "$file_name" \
"-method" "HEAD" "-query" "response-invalid=invalid"
assert_success
}
# tags: curl,HeadObject,response-cache-control,response-content-disposition,response-content-encoding,response-content-language,response-content-type,response-expires
@test "REST - HeadObject - response queries" {
run setup_bucket_and_add_file_v3 "$BUCKET_ONE_NAME"
assert_success
read -r bucket_name file_name <<< "$output"
query_suffixes=("cache-control" "content-disposition" "content-encoding" "content-language" "content-type" "expires")
for suffix in "${query_suffixes[@]}"; do
run generate_random_string 20 40
assert_success
value=$output
log 5 "value: $value"
run send_rest_go_command_callback "200" "check_for_header_key_and_value" "-bucketName" "$bucket_name" "-objectKey" "$file_name" \
"-method" "HEAD" "-query" "response-$suffix=$value" "--" "$suffix" "$value"
assert_success
done
}
@test "REST - quick compare" {
run setup_bucket_and_large_file_v3 "$BUCKET_ONE_NAME" 5
assert_success
read -r bucket_name file_name <<< "$output"
run put_object_rest "$TEST_FILE_FOLDER/$file_name" "$bucket_name" "$file_name"
assert_success
export QUICK_COMPARE_SIZE=1000000
run check_quick_compare "$TEST_FILE_FOLDER/$file_name" "$bucket_name" "$file_name"
assert_success
export QUICK_COMPARE_SIZE=10000000
run check_quick_compare "$TEST_FILE_FOLDER/$file_name" "$bucket_name" "$file_name"
assert_failure 2
}