test.sh 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. #!/bin/sh
  2. # Environment:
  3. # S3_ACCESS_KEY_ID - must be set to S3 Access Key ID
  4. # S3_SECRET_ACCESS_KEY - must be set to S3 Secret Access Key
  5. # TEST_BUCKET_PREFIX - must be set to the test bucket prefix to use
  6. # S3_COMMAND - may be set to s3 command to use, examples:
  7. # "valgrind s3"
  8. # "s3 -h" (for aws s3)
  9. # default: "s3"
  10. if [ -z "$S3_ACCESS_KEY_ID" ]; then
  11. echo "S3_ACCESS_KEY_ID required"
  12. exit -1;
  13. fi
  14. if [ -z "$S3_SECRET_ACCESS_KEY" ]; then
  15. echo "S3_SECRET_ACCESS_KEY required"
  16. exit -1;
  17. fi
  18. if [ -z "$TEST_BUCKET_PREFIX" ]; then
  19. echo "TEST_BUCKET_PREFIX required"
  20. exit -1;
  21. fi
  22. if [ -z "$S3_COMMAND" ]; then
  23. S3_COMMAND=s3
  24. fi
  25. failures=0
  26. TEST_BUCKET=${TEST_BUCKET_PREFIX}.testbucket
  27. # Create the test bucket
  28. echo "$S3_COMMAND create $TEST_BUCKET"
  29. $S3_COMMAND create $TEST_BUCKET
  30. failures=$(($failures + (($? == 0) ? 0 : 1)))
  31. # List to find it
  32. echo "$S3_COMMAND list | grep $TEST_BUCKET"
  33. $S3_COMMAND list | grep $TEST_BUCKET
  34. failures=$(($failures + (($? == 0) ? 0 : 1)))
  35. # Test it
  36. echo "$S3_COMMAND test $TEST_BUCKET"
  37. $S3_COMMAND test $TEST_BUCKET
  38. failures=$(($failures + (($? == 0) ? 0 : 1)))
  39. # List to ensure that it is empty
  40. echo "$S3_COMMAND list $TEST_BUCKET"
  41. $S3_COMMAND list $TEST_BUCKET
  42. failures=$(($failures + (($? == 0) ? 0 : 1)))
  43. # Put some data
  44. rm -f seqdata
  45. seq 1 10000 > seqdata
  46. echo "$S3_COMMAND put $TEST_BUCKET/testkey filename=seqdata noStatus=1"
  47. $S3_COMMAND put $TEST_BUCKET/testkey filename=seqdata noStatus=1
  48. failures=$(($failures + (($? == 0) ? 0 : 1)))
  49. rm -f testkey
  50. # Get the data and make sure that it matches
  51. echo "$S3_COMMAND get $TEST_BUCKET/testkey filename=testkey"
  52. $S3_COMMAND get $TEST_BUCKET/testkey filename=testkey
  53. failures=$(($failures + (($? == 0) ? 0 : 1)))
  54. diff seqdata testkey
  55. failures=$(($failures + (($? == 0) ? 0 : 1)))
  56. rm -f seqdata testkey
  57. # Delete the file
  58. echo "$S3_COMMAND delete $TEST_BUCKET/testkey"
  59. $S3_COMMAND delete $TEST_BUCKET/testkey
  60. failures=$(($failures + (($? == 0) ? 0 : 1)))
  61. # Remove the test bucket
  62. echo "$S3_COMMAND delete $TEST_BUCKET"
  63. $S3_COMMAND delete $TEST_BUCKET
  64. failures=$(($failures + (($? == 0) ? 0 : 1)))
  65. # Make sure it's not there
  66. echo "$S3_COMMAND list | grep $TEST_BUCKET"
  67. $S3_COMMAND list | grep $TEST_BUCKET
  68. failures=$(($failures + (($? == 1) ? 0 : 1)))
  69. # Now create it again
  70. echo "$S3_COMMAND create $TEST_BUCKET"
  71. $S3_COMMAND create $TEST_BUCKET
  72. failures=$(($failures + (($? == 0) ? 0 : 1)))
  73. # Put 10 files in it
  74. for i in `seq 0 9`; do
  75. echo "echo \"Hello\" | $S3_COMMAND put $TEST_BUCKET/key_$i"
  76. echo "Hello" | $S3_COMMAND put $TEST_BUCKET/key_$i
  77. failures=$(($failures + (($? == 0) ? 0 : 1)))
  78. done
  79. # List with all details
  80. echo "$S3_COMMAND list $TEST_BUCKET"
  81. $S3_COMMAND list $TEST_BUCKET
  82. failures=$(($failures + (($? == 0) ? 0 : 1)))
  83. COPY_BUCKET=${TEST_BUCKET_PREFIX}.copybucket
  84. # Create another test bucket and copy a file into it
  85. echo "$S3_COMMAND create $COPY_BUCKET"
  86. $S3_COMMAND create $COPY_BUCKET
  87. failures=$(($failures + (($? == 0) ? 0 : 1)))
  88. cat <<EOF
  89. $S3_COMMAND copy $TEST_BUCKET/key_5 $COPY_BUCKET/copykey
  90. EOF
  91. $S3_COMMAND copy $TEST_BUCKET/key_5 $COPY_BUCKET/copykey
  92. failures=$(($failures + (($? == 0) ? 0 : 1)))
  93. # List the copy bucket
  94. echo "$S3_COMMAND list $COPY_BUCKET"
  95. $S3_COMMAND list $COPY_BUCKET
  96. failures=$(($failures + (($? == 0) ? 0 : 1)))
  97. # Compare the files
  98. rm -f key_5 copykey
  99. echo "$S3_COMMAND get $TEST_BUCKET/key_5 filename=key_5"
  100. $S3_COMMAND get $TEST_BUCKET/key_5 filename=key_5
  101. failures=$(($failures + (($? == 0) ? 0 : 1)))
  102. echo "$S3_COMMAND get $COPY_BUCKET/copykey filename=copykey"
  103. $S3_COMMAND get $COPY_BUCKET/copykey filename=copykey
  104. failures=$(($failures + (($? == 0) ? 0 : 1)))
  105. diff key_5 copykey
  106. failures=$(($failures + (($? == 0) ? 0 : 1)))
  107. rm -f key_5 copykey
  108. # Delete the files
  109. for i in `seq 0 9`; do
  110. echo "$S3_COMMAND delete $TEST_BUCKET/key_$i"
  111. $S3_COMMAND delete $TEST_BUCKET/key_$i
  112. failures=$(($failures + (($? == 0) ? 0 : 1)))
  113. done
  114. echo "$S3_COMMAND delete $COPY_BUCKET/copykey"
  115. $S3_COMMAND delete $COPY_BUCKET/copykey
  116. failures=$(($failures + (($? == 0) ? 0 : 1)))
  117. # Delete the copy bucket
  118. echo "$S3_COMMAND delete $COPY_BUCKET"
  119. $S3_COMMAND delete $COPY_BUCKET
  120. failures=$(($failures + (($? == 0) ? 0 : 1)))
  121. # Now create a new zero-length file
  122. echo "$S3_COMMAND put $TEST_BUCKET/aclkey < /dev/null"
  123. $S3_COMMAND put $TEST_BUCKET/aclkey < /dev/null
  124. failures=$(($failures + (($? == 0) ? 0 : 1)))
  125. # Get the bucket acl
  126. rm -f acl
  127. echo "$S3_COMMAND getacl $TEST_BUCKET filename=acl"
  128. $S3_COMMAND getacl $TEST_BUCKET filename=acl
  129. failures=$(($failures + (($? == 0) ? 0 : 1)))
  130. # Add READ for all AWS users, and READ_ACP for everyone
  131. cat <<EOF >> acl
  132. Group Authenticated AWS Users READ
  133. EOF
  134. cat <<EOF >> acl
  135. Group All Users READ_ACP
  136. EOF
  137. echo "$S3_COMMAND setacl $TEST_BUCKET filename=acl"
  138. $S3_COMMAND setacl $TEST_BUCKET filename=acl
  139. failures=$(($failures + (($? == 0) ? 0 : 1)))
  140. # Test to make sure that it worked
  141. rm -f acl_new
  142. echo "$S3_COMMAND getacl $TEST_BUCKET filename=acl_new"
  143. $S3_COMMAND getacl $TEST_BUCKET filename=acl_new
  144. failures=$(($failures + (($? == 0) ? 0 : 1)))
  145. diff -B acl acl_new
  146. failures=$(($failures + (($? == 0) ? 0 : 1)))
  147. rm -f acl acl_new
  148. # Get the key acl
  149. rm -f acl
  150. echo "$S3_COMMAND getacl $TEST_BUCKET/aclkey filename=acl"
  151. $S3_COMMAND getacl $TEST_BUCKET/aclkey filename=acl
  152. failures=$(($failures + (($? == 0) ? 0 : 1)))
  153. # Add READ for all AWS users, and READ_ACP for everyone
  154. cat <<EOF >> acl
  155. Group Authenticated AWS Users READ
  156. EOF
  157. cat <<EOF >> acl
  158. Group All Users READ_ACP
  159. EOF
  160. echo "$S3_COMMAND setacl $TEST_BUCKET/aclkey filename=acl"
  161. $S3_COMMAND setacl $TEST_BUCKET/aclkey filename=acl
  162. failures=$(($failures + (($? == 0) ? 0 : 1)))
  163. # Test to make sure that it worked
  164. rm -f acl_new
  165. echo "$S3_COMMAND getacl $TEST_BUCKET/aclkey filename=acl_new"
  166. $S3_COMMAND getacl $TEST_BUCKET/aclkey filename=acl_new
  167. failures=$(($failures + (($? == 0) ? 0 : 1)))
  168. diff -B acl acl_new
  169. failures=$(($failures + (($? == 0) ? 0 : 1)))
  170. rm -f acl acl_new
  171. # Check multipart file upload (>15MB)
  172. dd if=/dev/zero of=mpfile bs=1024k count=30
  173. echo "$S3_COMMAND put $TEST_BUCKET/mpfile filename=mpfile"
  174. $S3_COMMAND put $TEST_BUCKET/mpfile filename=mpfile
  175. failures=$(($failures + (($? == 0) ? 0 : 1)))
  176. echo "$S3_COMMAND get $TEST_BUCKET/mpfile filename=mpfile.get"
  177. $S3_COMMAND get $TEST_BUCKET/mpfile filename=mpfile.get
  178. failures=$(($failures + (($? == 0) ? 0 : 1)))
  179. diff mpfile mpfile.get
  180. failures=$(($failures + (($? == 0) ? 0 : 1)))
  181. rm -f mpfile mpfile.get
  182. # Remove the test files
  183. echo "$S3_COMMAND delete $TEST_BUCKET/mpfile"
  184. $S3_COMMAND delete $TEST_BUCKET/mpfile
  185. failures=$(($failures + (($? == 0) ? 0 : 1)))
  186. echo "$S3_COMMAND delete $TEST_BUCKET/aclkey"
  187. $S3_COMMAND delete $TEST_BUCKET/aclkey
  188. failures=$(($failures + (($? == 0) ? 0 : 1)))
  189. echo "$S3_COMMAND delete $TEST_BUCKET"
  190. $S3_COMMAND delete $TEST_BUCKET
  191. failures=$(($failures + (($? == 0) ? 0 : 1)))
  192. if [ ${failures} = 0 ]; then
  193. echo "all tests completed successfully"
  194. else
  195. echo "tests completed with ${failures} failures"
  196. fi
  197. exit ${failures}