123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- #!/bin/sh
- # Environment:
- # S3_ACCESS_KEY_ID - must be set to S3 Access Key ID
- # S3_SECRET_ACCESS_KEY - must be set to S3 Secret Access Key
- # TEST_BUCKET_PREFIX - must be set to the test bucket prefix to use
- # S3_COMMAND - may be set to s3 command to use, examples:
- # "valgrind s3"
- # "s3 -h" (for aws s3)
- # default: "s3"
- if [ -z "$S3_ACCESS_KEY_ID" ]; then
- echo "S3_ACCESS_KEY_ID required"
- exit -1;
- fi
- if [ -z "$S3_SECRET_ACCESS_KEY" ]; then
- echo "S3_SECRET_ACCESS_KEY required"
- exit -1;
- fi
- if [ -z "$TEST_BUCKET_PREFIX" ]; then
- echo "TEST_BUCKET_PREFIX required"
- exit -1;
- fi
- if [ -z "$S3_COMMAND" ]; then
- S3_COMMAND=s3
- fi
- failures=0
- TEST_BUCKET=${TEST_BUCKET_PREFIX}.testbucket
- # Create the test bucket
- echo "$S3_COMMAND create $TEST_BUCKET"
- $S3_COMMAND create $TEST_BUCKET
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- # List to find it
- echo "$S3_COMMAND list | grep $TEST_BUCKET"
- $S3_COMMAND list | grep $TEST_BUCKET
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- # Test it
- echo "$S3_COMMAND test $TEST_BUCKET"
- $S3_COMMAND test $TEST_BUCKET
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- # List to ensure that it is empty
- echo "$S3_COMMAND list $TEST_BUCKET"
- $S3_COMMAND list $TEST_BUCKET
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- # Put some data
- rm -f seqdata
- seq 1 10000 > seqdata
- echo "$S3_COMMAND put $TEST_BUCKET/testkey filename=seqdata noStatus=1"
- $S3_COMMAND put $TEST_BUCKET/testkey filename=seqdata noStatus=1
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- rm -f testkey
- # Get the data and make sure that it matches
- echo "$S3_COMMAND get $TEST_BUCKET/testkey filename=testkey"
- $S3_COMMAND get $TEST_BUCKET/testkey filename=testkey
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- diff seqdata testkey
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- rm -f seqdata testkey
- # Delete the file
- echo "$S3_COMMAND delete $TEST_BUCKET/testkey"
- $S3_COMMAND delete $TEST_BUCKET/testkey
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- # Remove the test bucket
- echo "$S3_COMMAND delete $TEST_BUCKET"
- $S3_COMMAND delete $TEST_BUCKET
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- # Make sure it's not there
- echo "$S3_COMMAND list | grep $TEST_BUCKET"
- $S3_COMMAND list | grep $TEST_BUCKET
- failures=$(($failures + (($? == 1) ? 0 : 1)))
- # Now create it again
- echo "$S3_COMMAND create $TEST_BUCKET"
- $S3_COMMAND create $TEST_BUCKET
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- # Put 10 files in it
- for i in `seq 0 9`; do
- echo "echo \"Hello\" | $S3_COMMAND put $TEST_BUCKET/key_$i"
- echo "Hello" | $S3_COMMAND put $TEST_BUCKET/key_$i
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- done
- # List with all details
- echo "$S3_COMMAND list $TEST_BUCKET"
- $S3_COMMAND list $TEST_BUCKET
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- COPY_BUCKET=${TEST_BUCKET_PREFIX}.copybucket
- # Create another test bucket and copy a file into it
- echo "$S3_COMMAND create $COPY_BUCKET"
- $S3_COMMAND create $COPY_BUCKET
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- cat <<EOF
- $S3_COMMAND copy $TEST_BUCKET/key_5 $COPY_BUCKET/copykey
- EOF
- $S3_COMMAND copy $TEST_BUCKET/key_5 $COPY_BUCKET/copykey
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- # List the copy bucket
- echo "$S3_COMMAND list $COPY_BUCKET"
- $S3_COMMAND list $COPY_BUCKET
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- # Compare the files
- rm -f key_5 copykey
- echo "$S3_COMMAND get $TEST_BUCKET/key_5 filename=key_5"
- $S3_COMMAND get $TEST_BUCKET/key_5 filename=key_5
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- echo "$S3_COMMAND get $COPY_BUCKET/copykey filename=copykey"
- $S3_COMMAND get $COPY_BUCKET/copykey filename=copykey
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- diff key_5 copykey
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- rm -f key_5 copykey
- # Delete the files
- for i in `seq 0 9`; do
- echo "$S3_COMMAND delete $TEST_BUCKET/key_$i"
- $S3_COMMAND delete $TEST_BUCKET/key_$i
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- done
- echo "$S3_COMMAND delete $COPY_BUCKET/copykey"
- $S3_COMMAND delete $COPY_BUCKET/copykey
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- # Delete the copy bucket
- echo "$S3_COMMAND delete $COPY_BUCKET"
- $S3_COMMAND delete $COPY_BUCKET
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- # Now create a new zero-length file
- echo "$S3_COMMAND put $TEST_BUCKET/aclkey < /dev/null"
- $S3_COMMAND put $TEST_BUCKET/aclkey < /dev/null
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- # Get the bucket acl
- rm -f acl
- echo "$S3_COMMAND getacl $TEST_BUCKET filename=acl"
- $S3_COMMAND getacl $TEST_BUCKET filename=acl
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- # Add READ for all AWS users, and READ_ACP for everyone
- cat <<EOF >> acl
- Group Authenticated AWS Users READ
- EOF
- cat <<EOF >> acl
- Group All Users READ_ACP
- EOF
- echo "$S3_COMMAND setacl $TEST_BUCKET filename=acl"
- $S3_COMMAND setacl $TEST_BUCKET filename=acl
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- # Test to make sure that it worked
- rm -f acl_new
- echo "$S3_COMMAND getacl $TEST_BUCKET filename=acl_new"
- $S3_COMMAND getacl $TEST_BUCKET filename=acl_new
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- diff -B acl acl_new
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- rm -f acl acl_new
- # Get the key acl
- rm -f acl
- echo "$S3_COMMAND getacl $TEST_BUCKET/aclkey filename=acl"
- $S3_COMMAND getacl $TEST_BUCKET/aclkey filename=acl
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- # Add READ for all AWS users, and READ_ACP for everyone
- cat <<EOF >> acl
- Group Authenticated AWS Users READ
- EOF
- cat <<EOF >> acl
- Group All Users READ_ACP
- EOF
- echo "$S3_COMMAND setacl $TEST_BUCKET/aclkey filename=acl"
- $S3_COMMAND setacl $TEST_BUCKET/aclkey filename=acl
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- # Test to make sure that it worked
- rm -f acl_new
- echo "$S3_COMMAND getacl $TEST_BUCKET/aclkey filename=acl_new"
- $S3_COMMAND getacl $TEST_BUCKET/aclkey filename=acl_new
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- diff -B acl acl_new
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- rm -f acl acl_new
- # Check multipart file upload (>15MB)
- dd if=/dev/zero of=mpfile bs=1024k count=30
- echo "$S3_COMMAND put $TEST_BUCKET/mpfile filename=mpfile"
- $S3_COMMAND put $TEST_BUCKET/mpfile filename=mpfile
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- echo "$S3_COMMAND get $TEST_BUCKET/mpfile filename=mpfile.get"
- $S3_COMMAND get $TEST_BUCKET/mpfile filename=mpfile.get
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- diff mpfile mpfile.get
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- rm -f mpfile mpfile.get
- # Remove the test files
- echo "$S3_COMMAND delete $TEST_BUCKET/mpfile"
- $S3_COMMAND delete $TEST_BUCKET/mpfile
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- echo "$S3_COMMAND delete $TEST_BUCKET/aclkey"
- $S3_COMMAND delete $TEST_BUCKET/aclkey
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- echo "$S3_COMMAND delete $TEST_BUCKET"
- $S3_COMMAND delete $TEST_BUCKET
- failures=$(($failures + (($? == 0) ? 0 : 1)))
- if [ ${failures} = 0 ]; then
- echo "all tests completed successfully"
- else
- echo "tests completed with ${failures} failures"
- fi
- exit ${failures}
|