You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

245 lines
16 KiB

  1. # Running S3 Compatibility tests against SeaweedFS
  2. This is using [the tests from CephFS][s3-tests].
  3. [s3-tests]: https://github.com/ceph/s3-tests
  4. ## Prerequisites
  5. - have [Docker][docker] installed
  6. - this has been executed on Mac. On Linux, the hostname in `s3tests.conf` needs to be adjusted.
  7. [docker]: https://docs.docker.com
  8. ## Running tests
  9. To build the docker image that is used for the tests:
  10. ```console
  11. ./prepare.sh
  12. ```
  13. To execute all tests:
  14. ```console
  15. ./run.sh
  16. ```
  17. To see debug output including all commands run by the script:
  18. ```console
  19. DEBUG=y ./run.sh
  20. ```
  21. > [!WARNING]
  22. >
  23. > If your output does *not* look like the content in [`results.summary.txt`](./results.summary.txt)
  24. > and it is full of HTTP level exceptions, there is likely an error contacting the `weed` server from
  25. > the container that is runnin the S3 compatibility tests.
  26. >
  27. > There are at least a couple ways to solve this:
  28. >
  29. > - Modify your `docker` setup to ensure `host.docker.internal` is connected to your host running `weed`
  30. > - Use `--net=host` and modify `host` in `s3tests.conf` to `localhost`
  31. >
  32. > The `--net=host` solution is potentially *unsafe*, as the container running [s3-tests][s3-tests] could
  33. > visit unexpected websites or use the host-passthrough internet access maliciously.
  34. >
  35. > If you are OK with the risk of allowing `--net=host`:
  36. >
  37. > - Set `host = localhost` in `s3tests.conf`
  38. > - Set `DOCKER_NET_HOST=y` when running `run.sh`
  39. ## Most recent results
  40. See [`results.summary.txt`](./results.summary.txt) for the latest results of compatibility testing (with the caveat that `s3-tests` is pinned to [`ceph/s3-tests` @ 9a6a1e9f197fc9fb031b809d1e057635c2ff8d4e](https://github.com/ceph/s3-tests/commit/9a6a1e9f197fc9fb031b809d1e057635c2ff8d4e)).
  41. The file is reproduced below for ease of access:
  42. ```
  43. /s3-tests/virtualenv/lib/python3.6/site-packages/boto3/compat.py:88: PythonDeprecationWarning: Boto3 will no longer support Python 3.6 starting May 30, 2022. To continue receiving service updates, bug fixes, and security updates please upgrade to Python 3.7 or later. More information can be found here: https://aws.amazon.com/blogs/developer/python-support-policy-updates-for-aws-sdks-and-tools/
  44. warnings.warn(warning, PythonDeprecationWarning)
  45. s3tests_boto3.functional.test_s3.test_bucket_list_return_data ... ERROR
  46. s3tests_boto3.functional.test_s3.test_object_write_to_nonexist_bucket ... FAIL
  47. s3tests_boto3.functional.test_s3.test_object_read_not_exist ... ok
  48. s3tests_boto3.functional.test_s3.test_object_requestid_matches_header_on_error ... FAIL
  49. s3tests_boto3.functional.test_s3.test_multi_object_delete ... ok
  50. s3tests_boto3.functional.test_s3.test_multi_objectv2_delete ... ok
  51. s3tests_boto3.functional.test_s3.test_multi_object_delete_key_limit ... ok
  52. s3tests_boto3.functional.test_s3.test_multi_objectv2_delete_key_limit ... ok
  53. s3tests_boto3.functional.test_s3.test_object_head_zero_bytes ... ok
  54. s3tests_boto3.functional.test_s3.test_object_write_check_etag ... ok
  55. s3tests_boto3.functional.test_s3.test_object_write_cache_control ... ok
  56. s3tests_boto3.functional.test_s3.test_object_write_expires ... ok
  57. s3tests_boto3.functional.test_s3.test_object_write_read_update_read_delete ... ok
  58. s3tests_boto3.functional.test_s3.test_object_metadata_replaced_on_put ... ok
  59. s3tests_boto3.functional.test_s3.test_object_write_file ... ok
  60. s3tests_boto3.functional.test_s3.test_post_object_anonymous_request ... FAIL
  61. s3tests_boto3.functional.test_s3.test_post_object_authenticated_request ... FAIL
  62. s3tests_boto3.functional.test_s3.test_post_object_authenticated_no_content_type ... FAIL
  63. s3tests_boto3.functional.test_s3.test_post_object_authenticated_request_bad_access_key ... FAIL
  64. s3tests_boto3.functional.test_s3.test_post_object_set_success_code ... FAIL
  65. s3tests_boto3.functional.test_s3.test_post_object_set_invalid_success_code ... FAIL
  66. s3tests_boto3.functional.test_s3.test_post_object_upload_larger_than_chunk ... FAIL
  67. s3tests_boto3.functional.test_s3.test_post_object_set_key_from_filename ... FAIL
  68. s3tests_boto3.functional.test_s3.test_post_object_ignored_header ... FAIL
  69. s3tests_boto3.functional.test_s3.test_post_object_case_insensitive_condition_fields ... FAIL
  70. s3tests_boto3.functional.test_s3.test_post_object_escaped_field_values ... FAIL
  71. s3tests_boto3.functional.test_s3.test_post_object_success_redirect_action ... FAIL
  72. s3tests_boto3.functional.test_s3.test_post_object_invalid_signature ... FAIL
  73. s3tests_boto3.functional.test_s3.test_post_object_invalid_access_key ... FAIL
  74. s3tests_boto3.functional.test_s3.test_post_object_invalid_date_format ... ok
  75. s3tests_boto3.functional.test_s3.test_post_object_no_key_specified ... ok
  76. s3tests_boto3.functional.test_s3.test_post_object_missing_signature ... ok
  77. s3tests_boto3.functional.test_s3.test_post_object_missing_policy_condition ... FAIL
  78. s3tests_boto3.functional.test_s3.test_post_object_user_specified_header ... FAIL
  79. s3tests_boto3.functional.test_s3.test_post_object_request_missing_policy_specified_field ... FAIL
  80. s3tests_boto3.functional.test_s3.test_post_object_condition_is_case_sensitive ... ok
  81. s3tests_boto3.functional.test_s3.test_post_object_expires_is_case_sensitive ... ok
  82. s3tests_boto3.functional.test_s3.test_post_object_expired_policy ... FAIL
  83. s3tests_boto3.functional.test_s3.test_post_object_invalid_request_field_value ... FAIL
  84. s3tests_boto3.functional.test_s3.test_post_object_missing_expires_condition ... ok
  85. s3tests_boto3.functional.test_s3.test_post_object_missing_conditions_list ... ok
  86. s3tests_boto3.functional.test_s3.test_post_object_upload_size_limit_exceeded ... ok
  87. s3tests_boto3.functional.test_s3.test_post_object_missing_content_length_argument ... ok
  88. s3tests_boto3.functional.test_s3.test_post_object_invalid_content_length_argument ... ok
  89. s3tests_boto3.functional.test_s3.test_post_object_upload_size_below_minimum ... ok
  90. s3tests_boto3.functional.test_s3.test_post_object_empty_conditions ... ok
  91. s3tests_boto3.functional.test_s3.test_get_object_ifmatch_good ... ok
  92. s3tests_boto3.functional.test_s3.test_get_object_ifmatch_failed ... ok
  93. s3tests_boto3.functional.test_s3.test_get_object_ifnonematch_good ... ok
  94. s3tests_boto3.functional.test_s3.test_get_object_ifnonematch_failed ... ok
  95. s3tests_boto3.functional.test_s3.test_get_object_ifmodifiedsince_good ... ok
  96. s3tests_boto3.functional.test_s3.test_get_object_ifmodifiedsince_failed ... ok
  97. s3tests_boto3.functional.test_s3.test_get_object_ifunmodifiedsince_good ... ok
  98. s3tests_boto3.functional.test_s3.test_get_object_ifunmodifiedsince_failed ... ok
  99. s3tests_boto3.functional.test_s3.test_put_object_ifmatch_good ... ok
  100. s3tests_boto3.functional.test_s3.test_put_object_ifmatch_failed ... FAIL
  101. s3tests_boto3.functional.test_s3.test_put_object_ifmatch_overwrite_existed_good ... ok
  102. s3tests_boto3.functional.test_s3.test_put_object_ifmatch_nonexisted_failed ... FAIL
  103. s3tests_boto3.functional.test_s3.test_put_object_ifnonmatch_good ... ok
  104. s3tests_boto3.functional.test_s3.test_put_object_ifnonmatch_failed ... FAIL
  105. s3tests_boto3.functional.test_s3.test_put_object_ifnonmatch_nonexisted_good ... ok
  106. s3tests_boto3.functional.test_s3.test_put_object_ifnonmatch_overwrite_existed_failed ... FAIL
  107. s3tests_boto3.functional.test_s3.test_object_raw_get ... ok
  108. s3tests_boto3.functional.test_s3.test_object_raw_get_bucket_gone ... FAIL
  109. s3tests_boto3.functional.test_s3.test_object_delete_key_bucket_gone ... FAIL
  110. s3tests_boto3.functional.test_s3.test_object_raw_get_object_gone ... ok
  111. s3tests_boto3.functional.test_s3.test_object_raw_authenticated ... ok
  112. s3tests_boto3.functional.test_s3.test_object_raw_response_headers ... ok
  113. s3tests_boto3.functional.test_s3.test_object_raw_authenticated_bucket_acl ... ok
  114. s3tests_boto3.functional.test_s3.test_object_raw_authenticated_object_acl ... ok
  115. s3tests_boto3.functional.test_s3.test_object_raw_authenticated_bucket_gone ... FAIL
  116. s3tests_boto3.functional.test_s3.test_object_raw_authenticated_object_gone ... ok
  117. s3tests_boto3.functional.test_s3.test_object_raw_get_x_amz_expires_not_expired ... ok
  118. s3tests_boto3.functional.test_s3.test_object_raw_get_x_amz_expires_out_range_zero ... FAIL
  119. s3tests_boto3.functional.test_s3.test_object_raw_get_x_amz_expires_out_max_range ... FAIL
  120. s3tests_boto3.functional.test_s3.test_object_raw_get_x_amz_expires_out_positive_range ... FAIL
  121. s3tests_boto3.functional.test_s3.test_object_anon_put ... FAIL
  122. s3tests_boto3.functional.test_s3.test_object_anon_put_write_access ... ok
  123. s3tests_boto3.functional.test_s3.test_object_put_authenticated ... ok
  124. s3tests_boto3.functional.test_s3.test_object_raw_put_authenticated_expired ... FAIL
  125. s3tests_boto3.functional.test_s3.test_object_acl_canned_publicreadwrite ... ERROR
  126. s3tests_boto3.functional.test_s3.test_object_acl ... ERROR
  127. s3tests_boto3.functional.test_s3.test_object_acl_write ... ERROR
  128. s3tests_boto3.functional.test_s3.test_object_acl_writeacp ... ERROR
  129. s3tests_boto3.functional.test_s3.test_object_acl_read ... ERROR
  130. s3tests_boto3.functional.test_s3.test_object_acl_readacp ... ERROR
  131. s3tests_boto3.functional.test_s3.test_object_header_acl_grants ... ERROR
  132. s3tests_boto3.functional.test_s3.test_access_bucket_private_object_private ... FAIL
  133. s3tests_boto3.functional.test_s3.test_access_bucket_private_objectv2_private ... FAIL
  134. s3tests_boto3.functional.test_s3.test_access_bucket_private_object_publicread ... FAIL
  135. s3tests_boto3.functional.test_s3.test_access_bucket_private_objectv2_publicread ... FAIL
  136. s3tests_boto3.functional.test_s3.test_access_bucket_private_object_publicreadwrite ... FAIL
  137. s3tests_boto3.functional.test_s3.test_access_bucket_private_objectv2_publicreadwrite ... FAIL
  138. s3tests_boto3.functional.test_s3.test_access_bucket_publicread_object_private ... ERROR
  139. s3tests_boto3.functional.test_s3.test_access_bucket_publicread_object_publicread ... ERROR
  140. s3tests_boto3.functional.test_s3.test_access_bucket_publicread_object_publicreadwrite ... ERROR
  141. s3tests_boto3.functional.test_s3.test_access_bucket_publicreadwrite_object_private ... ERROR
  142. s3tests_boto3.functional.test_s3.test_access_bucket_publicreadwrite_object_publicread ... ERROR
  143. s3tests_boto3.functional.test_s3.test_access_bucket_publicreadwrite_object_publicreadwrite ... ERROR
  144. s3tests_boto3.functional.test_s3.test_bucket_create_special_key_names ... ok
  145. s3tests_boto3.functional.test_s3.test_object_copy_zero_size ... ok
  146. s3tests_boto3.functional.test_s3.test_object_copy_same_bucket ... ok
  147. s3tests_boto3.functional.test_s3.test_object_copy_verify_contenttype ... FAIL
  148. s3tests_boto3.functional.test_s3.test_object_copy_to_itself ... ok
  149. s3tests_boto3.functional.test_s3.test_object_copy_to_itself_with_metadata ... ok
  150. s3tests_boto3.functional.test_s3.test_object_copy_diff_bucket ... ok
  151. s3tests_boto3.functional.test_s3.test_object_copy_not_owned_bucket ... FAIL
  152. s3tests_boto3.functional.test_s3.test_object_copy_not_owned_object_bucket ... ERROR
  153. s3tests_boto3.functional.test_s3.test_object_copy_canned_acl ... ok
  154. s3tests_boto3.functional.test_s3.test_object_copy_retaining_metadata ... FAIL
  155. s3tests_boto3.functional.test_s3.test_object_copy_replacing_metadata ... ok
  156. s3tests_boto3.functional.test_s3.test_object_copy_bucket_not_found ... ok
  157. s3tests_boto3.functional.test_s3.test_object_copy_key_not_found ... ok
  158. s3tests_boto3.functional.test_s3.test_multipart_upload_empty ... ok
  159. s3tests_boto3.functional.test_s3.test_multipart_upload_small ... ERROR
  160. s3tests_boto3.functional.test_s3.test_multipart_copy_small ... ok
  161. s3tests_boto3.functional.test_s3.test_multipart_copy_invalid_range ... FAIL
  162. s3tests_boto3.functional.test_s3.test_multipart_copy_improper_range ... FAIL
  163. s3tests_boto3.functional.test_s3.test_multipart_copy_without_range ... ok
  164. s3tests_boto3.functional.test_s3.test_multipart_copy_special_names ... ok
  165. s3tests_boto3.functional.test_s3.test_multipart_upload ... ERROR
  166. s3tests_boto3.functional.test_s3.test_multipart_upload_resend_part ... ok
  167. s3tests_boto3.functional.test_s3.test_multipart_upload_size_too_small ... FAIL
  168. s3tests_boto3.functional.test_s3.test_multipart_upload_contents ... ok
  169. s3tests_boto3.functional.test_s3.test_multipart_upload_overwrite_existing_object ... ok
  170. s3tests_boto3.functional.test_s3.test_abort_multipart_upload ... ok
  171. s3tests_boto3.functional.test_s3.test_abort_multipart_upload_not_found ... ok
  172. s3tests_boto3.functional.test_s3.test_list_multipart_upload ... ok
  173. s3tests_boto3.functional.test_s3.test_multipart_upload_missing_part ... ok
  174. s3tests_boto3.functional.test_s3.test_multipart_upload_incorrect_etag ... ok
  175. s3tests_boto3.functional.test_s3.test_100_continue ... FAIL
  176. s3tests_boto3.functional.test_s3.test_atomic_read_1mb ... ok
  177. s3tests_boto3.functional.test_s3.test_atomic_read_4mb ... ok
  178. s3tests_boto3.functional.test_s3.test_atomic_read_8mb ... ok
  179. s3tests_boto3.functional.test_s3.test_atomic_write_1mb ... ok
  180. s3tests_boto3.functional.test_s3.test_atomic_write_4mb ... ok
  181. s3tests_boto3.functional.test_s3.test_atomic_write_8mb ... ok
  182. s3tests_boto3.functional.test_s3.test_atomic_dual_write_1mb ... ok
  183. s3tests_boto3.functional.test_s3.test_atomic_dual_write_4mb ... ok
  184. s3tests_boto3.functional.test_s3.test_atomic_dual_write_8mb ... ok
  185. s3tests_boto3.functional.test_s3.test_atomic_conditional_write_1mb ... ok
  186. s3tests_boto3.functional.test_s3.test_atomic_dual_conditional_write_1mb ... FAIL
  187. s3tests_boto3.functional.test_s3.test_atomic_write_bucket_gone ... ok
  188. s3tests_boto3.functional.test_s3.test_atomic_multipart_upload_write ... ok
  189. s3tests_boto3.functional.test_s3.test_multipart_resend_first_finishes_last ... ok
  190. s3tests_boto3.functional.test_s3.test_ranged_request_response_code ... ok
  191. s3tests_boto3.functional.test_s3.test_ranged_big_request_response_code ... ok
  192. s3tests_boto3.functional.test_s3.test_ranged_request_skip_leading_bytes_response_code ... ok
  193. s3tests_boto3.functional.test_s3.test_ranged_request_return_trailing_bytes_response_code ... ok
  194. s3tests_boto3.functional.test_s3.test_ranged_request_invalid_range ... ok
  195. s3tests_boto3.functional.test_s3.test_ranged_request_empty_object ... ok
  196. s3tests_boto3.functional.test_s3.test_get_obj_tagging ... ok
  197. s3tests_boto3.functional.test_s3.test_get_obj_head_tagging ... ok
  198. s3tests_boto3.functional.test_s3.test_put_max_tags ... ok
  199. s3tests_boto3.functional.test_s3.test_put_excess_tags ... ok
  200. s3tests_boto3.functional.test_s3.test_put_max_kvsize_tags ... ok
  201. s3tests_boto3.functional.test_s3.test_put_excess_key_tags ... ok
  202. s3tests_boto3.functional.test_s3.test_put_excess_val_tags ... ok
  203. s3tests_boto3.functional.test_s3.test_put_modify_tags ... ok
  204. s3tests_boto3.functional.test_s3.test_put_delete_tags ... ok
  205. s3tests_boto3.functional.test_s3.test_post_object_tags_anonymous_request ... FAIL
  206. s3tests_boto3.functional.test_s3.test_post_object_tags_authenticated_request ... FAIL
  207. s3tests_boto3.functional.test_s3.test_put_obj_with_tags ... ok
  208. s3tests_boto3.functional.test_s3.test_object_lock_multi_delete_object_with_retention ... ERROR
  209. s3tests_boto3.functional.test_s3.test_object_lock_changing_mode_from_governance_with_bypass ... ok
  210. s3tests_boto3.functional.test_s3.test_object_lock_changing_mode_from_governance_without_bypass ... FAIL
  211. s3tests_boto3.functional.test_s3.test_object_lock_changing_mode_from_compliance ... FAIL
  212. s3tests_boto3.functional.test_s3.test_copy_object_ifmatch_good ... ok
  213. s3tests_boto3.functional.test_s3.test_copy_object_ifmatch_failed ... FAIL
  214. s3tests_boto3.functional.test_s3.test_copy_object_ifnonematch_good ... FAIL
  215. s3tests_boto3.functional.test_s3.test_copy_object_ifnonematch_failed ... ok
  216. s3tests_boto3.functional.test_s3.test_object_read_unreadable ... FAIL
  217. ERROR
  218. ======================================================================
  219. ERROR: s3tests_boto3.functional.test_s3.test_bucket_list_return_data
  220. ----------------------------------------------------------------------
  221. Traceback (most recent call last):
  222. File "/s3-tests/virtualenv/lib/python3.6/site-packages/nose/case.py", line 198, in runTest
  223. self.test(*self.arg)
  224. File "/s3-tests/s3tests_boto3/functional/test_s3.py", line 1669, in test_bucket_list_return_data
  225. 'DisplayName': acl_response['Owner']['DisplayName'],
  226. KeyError: 'Owner'
  227. -------------------- >> begin captured logging << --------------------
  228. ```