ACCEPTANCE_TESTS.rst 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. S3 Acceptance Tests
  2. ===================
  3. List of all of the various scenarios that need to be handled in implementing
  4. a S3 transfer manager.
  5. Upload Tests
  6. ------------
  7. General
  8. ~~~~~~~
  9. * [x] Upload single nonmultipart file
  10. * [x] Upload single multipart file
  11. * [x] Upload multiple nonmultipart files
  12. * [x] Upload multiple multipart files
  13. * [x] Failed/cancelled multipart upload is aborted and leaves no orphaned parts especially for:
  14. * [x] Failure of ``UploadPart``
  15. * [x] Failure of ``CompleteMultipartUpload``
  16. * [x] Failure unrelated to making an API call during upload such as read failure
  17. * [ ] Ctrl-C of any upload does not hang and the wait time is ``avg(transfer_time_iter_chunk) * some_margin``
  18. * [ ] Upload empty file
  19. * [ ] Upload nonseekable nonmultipart binary stream
  20. * [ ] Upload nonseekable multipart binary stream
  21. Region
  22. ~~~~~~
  23. * [ ] Provide no or incorrect region for sig4 and be able to redirect request in fewest amount of calls as possible for multipart upload.
  24. Validation
  25. ~~~~~~~~~~
  26. * [ ] Before upload, validate upload size of file is less than 5 TB.
  27. * [ ] Before upload, modify chunksize to an acceptable size when needed:
  28. * [ ] Make chunksize 5 MB when the provided chunksize is less
  29. * [ ] Make chunksize 5 GB when the provided chunksize is more
  30. * [ ] Increase chunksize till the maximum number of parts for multipart upload is less than or equal to 10,000 parts
  31. * [ ] Before upload, ensure upload is nonmultipart if the file size is less than 5 MB no matter the provided multipart threshold.
  32. Extra Parameters
  33. ~~~~~~~~~~~~~~~~
  34. * [ ] Upload multipart and nonmultipart file with any of the following properties:
  35. * [x] ACL's
  36. * [x] CacheControl
  37. * [x] ContentDisposition
  38. * [x] ContentEncoding
  39. * [x] ContentLanguage
  40. * [x] ContentType
  41. * [x] Expires
  42. * [x] Metadata
  43. * [x] Grants
  44. * [x] StorageClass
  45. * [x] SSE (including KMS)
  46. * [ ] Website Redirect
  47. * [x] Upload multipart and nonmultipart file with a sse-c key
  48. * [x] Upload multipart and nonmultipart file with requester pays
  49. Performance
  50. ~~~~~~~~~~~
  51. * [ ] Maximum memory usage does not grow linearly with linearly increasing file size for any upload.
  52. * [ ] Maximum memory usage does not grow linearly with linearly increasing number of uploads.
  53. Download Tests
  54. --------------
  55. General
  56. ~~~~~~~
  57. * [x] Download single nonmultipart object
  58. * [x] Download single multipart object
  59. * [x] Download multiple nonmultipart objects
  60. * [x] Download multiple multipart objects
  61. * [x] Download of any object is written to temporary file and renamed to final filename once the object is completely downloaded
  62. * [x] Failed downloads of any object cleans up temporary file
  63. * [x] Provide a transfer size for any download in lieu of using HeadObject
  64. * [ ] Ctrl-C of any download does not hang and the wait time is ``avg(transfer_time_iter_chunk) * some_margin``
  65. * [ ] Download nonmultipart object as nonseekable binary stream
  66. * [ ] Download multipart object as nonseekable binary stream
  67. Region
  68. ~~~~~~
  69. * [ ] Provide no or incorrect region for sig4 and be able to redirect request in fewest amount of calls as possible for multipart download.
  70. Retry Logic
  71. ~~~~~~~~~~~
  72. * [x] Retry on connection related errors when downloading data
  73. * [ ] Compare MD5 to ``ETag`` and retry for mismatches if all following scenarios are met:
  74. * If MD5 is available
  75. * Response does not have a ``ServerSideEncryption`` header equal to ``aws:kms``
  76. * Response does not have ``SSECustomerAlgorithm``
  77. * ``ETag`` does not have ``-`` in its value indicating a multipart transfer
  78. Extra Parameters
  79. ~~~~~~~~~~~~~~~~
  80. * [x] Download an object of a specific version
  81. * [x] Download an object encrypted with sse-c
  82. * [x] Download an object using requester pays
  83. Performance
  84. ~~~~~~~~~~~
  85. * [ ] Maximum memory usage does not grow linearly with linearly increasing file size for any download.
  86. * [ ] Maximum memory usage does not grow linearly with linearly increasing number of downloads.
  87. Copy Tests
  88. ----------
  89. General
  90. ~~~~~~~
  91. * [x] Copy single nonmultipart object
  92. * [x] Copy single multipart object
  93. * [x] Copy multiple nonmultipart objects
  94. * [x] Copy multiple multipart objects
  95. * [x] Provide a transfer size for any copy in lieu of using HeadObject.
  96. * [x] Failed/cancelled multipart copy is aborted and leaves no orphaned parts
  97. * [ ] Ctrl-C of any copy does not hang and the wait time is ``avg(transfer_time_iter_chunk) * some_margin``
  98. Region
  99. ~~~~~~
  100. * [ ] Provide no or incorrect region for sig4 and be able to redirect request in fewest amount of calls as possible for multipart copy.
  101. Validation
  102. ~~~~~~~~~~
  103. * [ ] Before copy, modify chunksize to an acceptable size when needed:
  104. * [ ] Make chunksize 5 MB when the provided chunksize is less
  105. * [ ] Make chunksize 5 GB when the provided chunksize is more
  106. * [ ] Increase chunksize till the maximum number of parts for multipart copy is less than or equal to 10,000 parts
  107. * [ ] Before copy, ensure copy is nonmultipart if the file size is less than 5 MB no matter the provided multipart threshold.
  108. Extra Parameters
  109. ~~~~~~~~~~~~~~~~
  110. * [ ] Copy multipart and nonmultipart file with any of the following properties:
  111. * [x] ACL's
  112. * [x] CacheControl
  113. * [x] ContentDisposition
  114. * [x] ContentEncoding
  115. * [x] ContentLanguage
  116. * [x] ContentType
  117. * [x] Expires
  118. * [x] Metadata
  119. * [x] Grants
  120. * [x] StorageClass
  121. * [x] SSE (including KMS)
  122. * [ ] Website Redirect
  123. * [x] Copy multipart and nonmultipart copies with copy source parameters:
  124. * [x] CopySourceIfMatch
  125. * [x] CopySourceIfModifiedSince
  126. * [x] CopySourceIfNoneMatch
  127. * [x] CopySourceIfUnmodifiedSince
  128. * [x] Copy nonmultipart object with metadata directive and do not use metadata directive for multipart object
  129. * [x] Copy multipart and nonmultipart objects of a specific version
  130. * [x] Copy multipart and nonmultipart objects using requester pays
  131. * [x] Copy multipart and nonmultipart objects using a sse-c key
  132. * [x] Copy multipart and nonmultipart objects using a copy source sse-c key
  133. * [x] Copy multipart and nonmultipart objects using a copy source sse-c key and sse-c key
  134. Cross-Bucket
  135. ~~~~~~~~~~~~
  136. * [ ] Copy single nonmultipart object across sigv4 regions
  137. * [ ] Copy single multipart object across sigv4 regions