Skip to content

Commit 4dee152

Browse files
committed
test: checksum mode test
1 parent 55999ec commit 4dee152

14 files changed

+141
-74
lines changed

tests/commands/head_bucket.sh

+2-1
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,13 @@ head_bucket() {
3939
log 2 "invalid command type $1"
4040
fi
4141
if [ $exit_code -ne 0 ]; then
42-
log 2 "error getting bucket info: $bucket_info"
4342
if [[ "$bucket_info" == *"404"* ]] || [[ "$bucket_info" == *"does not exist"* ]]; then
4443
return 1
4544
fi
45+
log 2 "error getting bucket info: $bucket_info"
4646
return 2
4747
fi
48+
bucket_info="$(echo -n "$bucket_info" | grep -v "InsecureRequestWarning")"
4849
echo "$bucket_info"
4950
return 0
5051
}

tests/commands/put_bucket_acl.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ put_bucket_acl_s3api() {
2424
log 2 "put bucket acl command requires bucket name, acl file"
2525
return 1
2626
fi
27-
log 5 "bucket name: $1, acls: $2"
27+
log 5 "bucket name: $1, acls: $(cat "$2")"
2828
if ! error=$(send_command aws --no-verify-ssl s3api put-bucket-acl --bucket "$1" --access-control-policy "file://$2" 2>&1); then
2929
log 2 "error putting bucket acl: $error"
3030
return 1

tests/rest_scripts/put_object_openssl_chunked_example.sh

+9
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,15 @@ fi
322322
command+="$chunks"
323323
command="${command//$'\n'/$'\r\n'}"
324324
echo -n "$command" > "$COMMAND_FILE"
325+
if [ -n "$COMMAND_LOG" ]; then
326+
while IFS= read -r line; do
327+
if ! mask_arg_array "$line"; then
328+
return 1
329+
fi
330+
# shellcheck disable=SC2154
331+
echo "${masked_args[*]}" >> "$COMMAND_LOG"
332+
done <<< "$command"
333+
fi
325334
}
326335

327336
load_parameters

tests/test_common_acl.sh

+5-6
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,14 @@ test_put_bucket_acl_s3cmd() {
4646
test_common_put_bucket_acl() {
4747
assert [ $# -eq 1 ]
4848

49-
run setup_bucket "$1" "$BUCKET_ONE_NAME"
49+
run setup_bucket_and_user "$BUCKET_ONE_NAME" "$USERNAME_ONE" "$PASSWORD_ONE" "user"
5050
assert_success
51+
# shellcheck disable=SC2154
52+
username="${lines[${#lines[@]}-2]}"
5153

5254
run put_bucket_ownership_controls "$BUCKET_ONE_NAME" "BucketOwnerPreferred"
5355
assert_success
5456

55-
run setup_user "$USERNAME_ONE" "$PASSWORD_ONE" "user"
56-
assert_success
57-
5857
run get_check_acl_id "$1" "$BUCKET_ONE_NAME"
5958
assert_success
6059

@@ -67,7 +66,7 @@ test_common_put_bucket_acl() {
6766
grantee_id="http://acs.amazonaws.com/groups/global/AllUsers"
6867
else
6968
grantee_type="CanonicalUser"
70-
grantee_id="$USERNAME_ONE"
69+
grantee_id="$username"
7170
fi
7271
run setup_acl_json "$TEST_FILE_FOLDER/$acl_file" "$grantee_type" "$grantee_id" "READ" "$AWS_ACCESS_KEY_ID"
7372
assert_success
@@ -79,7 +78,7 @@ test_common_put_bucket_acl() {
7978
run get_check_acl_after_first_put "$1" "$BUCKET_ONE_NAME"
8079
assert_success
8180

82-
run setup_acl_json "$TEST_FILE_FOLDER/$acl_file" "CanonicalUser" "$USERNAME_ONE" "FULL_CONTROL" "$AWS_ACCESS_KEY_ID"
81+
run setup_acl_json "$TEST_FILE_FOLDER/$acl_file" "CanonicalUser" "$username" "FULL_CONTROL" "$AWS_ACCESS_KEY_ID"
8382
assert_success
8483

8584
run put_bucket_acl_s3api "$BUCKET_ONE_NAME" "$TEST_FILE_FOLDER"/"$acl_file"

tests/test_rest_checksum.sh

+11
Original file line numberDiff line numberDiff line change
@@ -130,3 +130,14 @@ test_file="test_file"
130130
run add_correct_checksum "sha1"
131131
assert_success
132132
}
133+
134+
@test "REST - attempt to get checksum without checksum mode" {
135+
run setup_bucket_and_file "$BUCKET_ONE_NAME" "$test_file"
136+
assert_success
137+
138+
run add_correct_checksum "sha256"
139+
assert_success
140+
141+
run head_object_without_and_with_checksum "$BUCKET_ONE_NAME" "$test_file"
142+
assert_success
143+
}

tests/test_rest_chunked.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ source ./tests/util/util_setup.sh
3838

3939
@test "REST - chunked upload, signature error" {
4040
if [ "$DIRECT" != "true" ]; then
41-
skip "https://github.com/versity/versitygw/issues/1056 - gibberish at end"
41+
skip "https://github.com/versity/versitygw/issues/1123"
4242
fi
4343
run setup_bucket "s3api" "$BUCKET_ONE_NAME"
4444
assert_success

tests/test_s3cmd.sh

-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,6 @@ export RUN_USERS=true
125125

126126
run head_bucket "s3cmd" "$BUCKET_ONE_NAME"a
127127
assert_failure 1
128-
assert_output -p "404"
129128
}
130129

131130
@test "test_ls_directory_object" {

tests/test_user_common.sh

+39-62
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ source ./tests/setup.sh
1818
source ./tests/util/util_create_bucket.sh
1919
source ./tests/util/util_list_buckets.sh
2020
source ./tests/util/util_object.sh
21+
source ./tests/util/util_setup.sh
2122
source ./tests/util/util_users.sh
2223
source ./tests/commands/list_buckets.sh
2324

@@ -59,72 +60,58 @@ test_admin_user() {
5960

6061
run change_bucket_owner "$admin_username" "$admin_password" "$BUCKET_TWO_NAME" "$user_username"
6162
assert_success
62-
63-
delete_user "$user_username"
64-
delete_user "$admin_username"
6563
}
6664

6765
test_create_user_already_exists() {
68-
if [[ $# -ne 1 ]]; then
69-
fail "test admin user command requires command type"
70-
fi
66+
assert [ $# -eq 1 ]
7167

7268
username="$USERNAME_ONE"
7369
password="$PASSWORD_ONE"
7470

75-
run setup_user "$username" "123456" "admin"
76-
assert_success "error setting up user"
77-
78-
if create_user "$username" "123456" "admin"; then
79-
fail "'user already exists' error not returned"
80-
fi
71+
run setup_user "$username" "$password" "admin"
72+
assert_success
8173

82-
delete_user "$username"
74+
run create_user_versitygw "$username" "$password" "admin"
75+
assert_failure
8376
}
8477

8578
test_user_user() {
79+
if [ "$RECREATE_BUCKETS" == "false" ]; then
80+
skip
81+
fi
82+
8683
if [[ $# -ne 1 ]]; then
8784
fail "test admin user command requires command type"
8885
fi
8986

9087
username="$USERNAME_ONE"
9188
password="$PASSWORD_ONE"
9289

93-
setup_user "$username" "$password" "user" || fail "error setting up user"
94-
bucket_cleanup_if_bucket_exists "s3api" "versity-gwtest-user-bucket"
95-
96-
run setup_bucket "s3api" "$BUCKET_ONE_NAME"
90+
run setup_bucket_and_user "$BUCKET_ONE_NAME" "$username" "$password" "user"
9791
assert_success
9892

99-
if create_bucket_with_user "s3api" "versity-gwtest-user-bucket" "$username" "$password"; then
100-
fail "creating bucket with 'user' account failed to return error"
93+
if [ "$RECREATE_BUCKETS" == "true" ]; then
94+
run bucket_cleanup_if_bucket_exists "s3api" "$BUCKET_TWO_NAME"
95+
assert_success
96+
run create_bucket "s3api" "$BUCKET_TWO_NAME"
97+
assert_success
98+
else
99+
run change_bucket_owner "$AWS_ACCESS_KEY_ID" "$AWS_SECRET_ACCESS_KEY" "$BUCKET_TWO_NAME" "$AWS_ACCESS_KEY_ID"
100+
assert_success
101101
fi
102-
# shellcheck disable=SC2154
103-
[[ $error == *"Access Denied"* ]] || fail "error message '$error' doesn't contain 'Access Denied'"
104102

105-
create_bucket "s3api" "versity-gwtest-user-bucket" || fail "error creating bucket"
103+
run change_bucket_owner "$AWS_ACCESS_KEY_ID" "$AWS_SECRET_ACCESS_KEY" "$BUCKET_TWO_NAME" "$username"
104+
assert_success
106105

107-
change_bucket_owner "$AWS_ACCESS_KEY_ID" "$AWS_SECRET_ACCESS_KEY" "versity-gwtest-user-bucket" "$username" || fail "error changing bucket owner"
108-
if change_bucket_owner "$username" "$password" "versity-gwtest-user-bucket" "admin"; then
109-
fail "user shouldn't be able to change bucket owner"
110-
fi
106+
run change_bucket_owner "$username" "$password" "$BUCKET_TWO_NAME" "admin"
107+
assert_failure
108+
assert_output -p "AccessDenied"
111109

112-
list_buckets_with_user "s3api" "$username" "$password" || fail "error listing buckets with user '$username'"
113-
bucket_found=false
114-
for bucket in "${bucket_array[@]}"; do
115-
if [ "$bucket" == "$BUCKET_ONE_NAME" ]; then
116-
fail "$BUCKET_ONE_NAME shouldn't show up in 'user' bucket list"
117-
elif [ "$bucket" == "versity-gwtest-user-bucket" ]; then
118-
bucket_found=true
119-
fi
120-
done
121-
if [ $bucket_found == false ]; then
122-
fail "user-owned bucket not found in user list"
123-
fi
110+
run list_and_check_buckets_omit_without_permission "$username" "$password" "$BUCKET_ONE_NAME" "$BUCKET_TWO_NAME"
111+
assert_success
124112

125113
run delete_bucket "s3api" "versity-gwtest-user-bucket"
126114
assert_success "failed to delete bucket"
127-
delete_user "$username"
128115
}
129116

130117
test_userplus_operation() {
@@ -135,32 +122,22 @@ test_userplus_operation() {
135122
username="$USERNAME_ONE"
136123
password="$PASSWORD_ONE"
137124

138-
bucket_cleanup_if_bucket_exists "s3api" "versity-gwtest-userplus-bucket"
139-
setup_user "$username" "$password" "userplus" || fail "error creating user '$username'"
140-
141-
run setup_bucket "s3api" "$BUCKET_ONE_NAME"
125+
run setup_bucket_and_user "$BUCKET_ONE_NAME" "$username" "$password" "userplus"
142126
assert_success
143127

144-
create_bucket_with_user "s3api" "versity-gwtest-userplus-bucket" "$username" "$password" || fail "error creating bucket with user '$username'"
145-
146-
list_buckets_with_user "s3api" "$username" "$password" || fail "error listing buckets with user '$username'"
147-
bucket_found=false
148-
for bucket in "${bucket_array[@]}"; do
149-
if [ "$bucket" == "$BUCKET_ONE_NAME" ]; then
150-
fail "$BUCKET_ONE_NAME shouldn't show up in 'userplus' bucket list"
151-
elif [ "$bucket" == "versity-gwtest-userplus-bucket" ]; then
152-
bucket_found=true
153-
fi
154-
done
155-
if [ $bucket_found == false ]; then
156-
fail "userplus-owned bucket not found in user list"
128+
if [ "$RECREATE_BUCKETS" == "true" ]; then
129+
run bucket_cleanup_if_bucket_exists "s3api" "$BUCKET_TWO_NAME"
130+
assert_success
131+
run create_bucket_with_user "s3api" "$BUCKET_TWO_NAME" "$username" "$password"
132+
assert_success
133+
else
134+
run change_bucket_owner "$AWS_ACCESS_KEY_ID" "$AWS_SECRET_ACCESS_KEY" "$BUCKET_TWO_NAME" "$username"
135+
assert_success
157136
fi
158137

159-
if change_bucket_owner "$username" "$password" "versity-gwtest-userplus-bucket" "admin"; then
160-
fail "userplus shouldn't be able to change bucket owner"
161-
fi
138+
run list_and_check_buckets_omit_without_permission "$username" "$password" "$BUCKET_ONE_NAME" "$BUCKET_TWO_NAME"
139+
assert_success
162140

163-
run delete_bucket "s3api" "versity-gwtest-admin-bucket"
164-
assert_success "failed to delete bucket"
165-
delete_user "$username"
141+
run change_bucket_owner "$username" "$password" "$BUCKET_TWO_NAME" "admin"
142+
assert_failure
166143
}

tests/util/util_acl.sh

+2
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ get_check_acl_id() {
102102
log 2 "error getting canonical ID: $canonical_id"
103103
return 1
104104
fi
105+
canonical_id="$(echo -n "$canonical_id" | grep -v "InsecureRequestWarning" | sed "s/\"//g")"
106+
log 5 "canonical ID: $canonical_id"
105107
if [[ $id != "$canonical_id" ]]; then
106108
log 2 "acl ID doesn't match AWS key or canonical ID"
107109
return 1

tests/util/util_chunked_upload.sh

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ attempt_chunked_upload_with_bad_first_signature() {
2121
log 2 "'attempt_chunked_upload_with_bad_first_signature' requires data file, bucket name, key"
2222
return 1
2323
fi
24-
if ! result=$(AWS_ACCESS_KEY_ID="$AWS_ACCESS_KEY_ID" \
24+
if ! result=$(COMMAND_LOG="$COMMAND_LOG" \
25+
AWS_ACCESS_KEY_ID="$AWS_ACCESS_KEY_ID" \
2526
AWS_SECRET_ACCESS_KEY="$AWS_SECRET_ACCESS_KEY" \
2627
AWS_ENDPOINT_URL="$AWS_ENDPOINT_URL" \
2728
DATA_FILE="$1" \

tests/util/util_head_object.sh

+26
Original file line numberDiff line numberDiff line change
@@ -166,3 +166,29 @@ check_checksum_rest_crc32() {
166166
fi
167167
return 0
168168
}
169+
170+
head_object_without_and_with_checksum() {
171+
if [ $# -ne 2 ]; then
172+
log 2 "'head_object_without_checksum' requires bucket, file"
173+
return 1
174+
fi
175+
if ! result=$(OUTPUT_FILE="$TEST_FILE_FOLDER/result.txt" COMMAND_LOG="$COMMAND_LOG" BUCKET_NAME="$1" OBJECT_KEY="$2" ./tests/rest_scripts/head_object.sh); then
176+
log 2 "error getting result: $result"
177+
return 1
178+
fi
179+
head_checksum=$(grep -i "x-amz-checksum-sha256" "$TEST_FILE_FOLDER/result.txt" | awk '{print $2}' | sed 's/\r$//')
180+
if [ "$head_checksum" != "" ]; then
181+
log 2 "head checksum shouldn't be returned, is $head_checksum"
182+
return 1
183+
fi
184+
if ! result=$(OUTPUT_FILE="$TEST_FILE_FOLDER/result.txt" COMMAND_LOG="$COMMAND_LOG" BUCKET_NAME="$1" OBJECT_KEY="$2" CHECKSUM="true" ./tests/rest_scripts/head_object.sh); then
185+
log 2 "error getting result: $result"
186+
return 1
187+
fi
188+
head_checksum=$(grep -i "x-amz-checksum-sha256" "$TEST_FILE_FOLDER/result.txt" | awk '{print $2}' | sed 's/\r$//')
189+
if [ "$head_checksum" == "" ]; then
190+
log 2 "head checksum should be returned"
191+
return 1
192+
fi
193+
return 0
194+
}

tests/util/util_list_buckets.sh

+25
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,29 @@ list_and_check_buckets() {
7979
return 1
8080
fi
8181
return 0
82+
}
83+
84+
list_and_check_buckets_omit_without_permission() {
85+
if [ $# -ne 4 ]; then
86+
log 2 "'list_and_check_buckets_with_user' requires username, password, non-visible bucket, visible bucket"
87+
return 1
88+
fi
89+
if ! list_buckets_with_user "s3api" "$1" "$2"; then
90+
log 2 "error listing buckets with user '$1'"
91+
return 1
92+
fi
93+
bucket_found=false
94+
for bucket in "${bucket_array[@]}"; do
95+
if [ "$bucket" == "$3" ]; then
96+
log 2 "bucket '$3' shouldn't show up in user '$1' bucket list"
97+
return 1
98+
elif [ "$bucket" == "$4" ]; then
99+
bucket_found=true
100+
fi
101+
done
102+
if [ $bucket_found == false ]; then
103+
log 2 "user-owned bucket '$4' not found in user list"
104+
return 1
105+
fi
106+
return 0
82107
}

tests/util/util_setup.sh

+17
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,20 @@ setup_bucket_and_large_file() {
4343
fi
4444
return 0
4545
}
46+
47+
setup_bucket_and_user() {
48+
if [ $# -ne 4 ]; then
49+
log 2 "'setup_bucket_and_user' requires bucket name, username, password, user type"
50+
return 1
51+
fi
52+
if ! setup_bucket "s3api" "$1"; then
53+
log 2 "error setting up bucket"
54+
return 1
55+
fi
56+
if ! result=$(setup_user_versitygw_or_direct "$2" "$3" "$4" "$1"); then
57+
log 2 "error setting up user"
58+
return 1
59+
fi
60+
echo "$result"
61+
return 0
62+
}

tests/util/util_users.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ create_user_if_nonexistent() {
100100
log 5 "user $1 already exists"
101101
return 0
102102
fi
103-
create_user "$1" "$2" "$3"
103+
setup_user_versitygw_or_direct "$1" "$2" "$3" "$BUCKET_ONE_NAME"
104104
return $?
105105
}
106106

0 commit comments

Comments
 (0)