Files
versitygw/tests/test_rest_get_object.sh
2026-05-05 19:07:56 -03:00

201 lines
6.7 KiB
Bash
Executable File

#!/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/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" {
if [ "$DIRECT" != "true" ]; then
skip "https://github.com/versity/versitygw/issues/2075"
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
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
}