mongo 2.20.0 → 2.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +40 -1
  3. data/Rakefile +59 -23
  4. data/lib/mongo/address.rb +22 -3
  5. data/lib/mongo/auth/aws/credentials_retriever.rb +70 -17
  6. data/lib/mongo/auth/base.rb +1 -1
  7. data/lib/mongo/bulk_write.rb +35 -2
  8. data/lib/mongo/client.rb +38 -6
  9. data/lib/mongo/client_encryption.rb +6 -3
  10. data/lib/mongo/cluster/reapers/cursor_reaper.rb +6 -1
  11. data/lib/mongo/cluster/sdam_flow.rb +20 -7
  12. data/lib/mongo/cluster.rb +14 -4
  13. data/lib/mongo/collection/helpers.rb +1 -1
  14. data/lib/mongo/collection/view/aggregation/behavior.rb +131 -0
  15. data/lib/mongo/collection/view/aggregation.rb +33 -99
  16. data/lib/mongo/collection/view/builder/aggregation.rb +1 -7
  17. data/lib/mongo/collection/view/change_stream.rb +80 -27
  18. data/lib/mongo/collection/view/iterable.rb +76 -60
  19. data/lib/mongo/collection/view/map_reduce.rb +25 -8
  20. data/lib/mongo/collection/view/readable.rb +79 -30
  21. data/lib/mongo/collection/view/writable.rb +109 -48
  22. data/lib/mongo/collection/view.rb +43 -3
  23. data/lib/mongo/collection.rb +158 -23
  24. data/lib/mongo/config.rb +2 -2
  25. data/lib/mongo/crypt/auto_encrypter.rb +4 -6
  26. data/lib/mongo/crypt/binding.rb +4 -4
  27. data/lib/mongo/crypt/context.rb +20 -14
  28. data/lib/mongo/crypt/encryption_io.rb +56 -26
  29. data/lib/mongo/crypt/explicit_encrypter.rb +49 -20
  30. data/lib/mongo/crypt/explicit_encryption_context.rb +17 -11
  31. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +22 -6
  32. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +29 -4
  33. data/lib/mongo/csot_timeout_holder.rb +119 -0
  34. data/lib/mongo/cursor/kill_spec.rb +5 -2
  35. data/lib/mongo/cursor/nontailable.rb +27 -0
  36. data/lib/mongo/cursor.rb +86 -24
  37. data/lib/mongo/cursor_host.rb +82 -0
  38. data/lib/mongo/database/view.rb +81 -14
  39. data/lib/mongo/database.rb +88 -18
  40. data/lib/mongo/error/operation_failure.rb +209 -204
  41. data/lib/mongo/error/server_timeout_error.rb +12 -0
  42. data/lib/mongo/error/socket_timeout_error.rb +3 -1
  43. data/lib/mongo/error/timeout_error.rb +23 -0
  44. data/lib/mongo/error.rb +2 -0
  45. data/lib/mongo/grid/fs_bucket.rb +45 -12
  46. data/lib/mongo/grid/stream/read.rb +15 -1
  47. data/lib/mongo/grid/stream/write.rb +21 -4
  48. data/lib/mongo/index/view.rb +77 -16
  49. data/lib/mongo/operation/context.rb +40 -2
  50. data/lib/mongo/operation/create_search_indexes/op_msg.rb +2 -2
  51. data/lib/mongo/operation/delete/op_msg.rb +2 -1
  52. data/lib/mongo/operation/drop_search_index/op_msg.rb +2 -2
  53. data/lib/mongo/operation/find/op_msg.rb +45 -0
  54. data/lib/mongo/operation/get_more/op_msg.rb +33 -0
  55. data/lib/mongo/operation/insert/op_msg.rb +3 -2
  56. data/lib/mongo/operation/insert/result.rb +4 -2
  57. data/lib/mongo/operation/list_collections/result.rb +1 -1
  58. data/lib/mongo/operation/map_reduce/result.rb +1 -1
  59. data/lib/mongo/operation/op_msg_base.rb +3 -1
  60. data/lib/mongo/operation/result.rb +26 -5
  61. data/lib/mongo/operation/shared/executable.rb +12 -1
  62. data/lib/mongo/operation/shared/op_msg_executable.rb +4 -1
  63. data/lib/mongo/operation/shared/response_handling.rb +3 -3
  64. data/lib/mongo/operation/shared/sessions_supported.rb +1 -1
  65. data/lib/mongo/operation/shared/timed.rb +52 -0
  66. data/lib/mongo/operation/shared/write.rb +4 -1
  67. data/lib/mongo/operation/update/op_msg.rb +2 -1
  68. data/lib/mongo/operation/update_search_index/op_msg.rb +2 -2
  69. data/lib/mongo/operation.rb +1 -0
  70. data/lib/mongo/protocol/message.rb +1 -4
  71. data/lib/mongo/protocol/msg.rb +2 -2
  72. data/lib/mongo/retryable/base_worker.rb +28 -3
  73. data/lib/mongo/retryable/read_worker.rb +76 -35
  74. data/lib/mongo/retryable/write_worker.rb +53 -22
  75. data/lib/mongo/retryable.rb +8 -2
  76. data/lib/mongo/server/connection.rb +11 -5
  77. data/lib/mongo/server/connection_base.rb +22 -2
  78. data/lib/mongo/server/connection_pool.rb +32 -14
  79. data/lib/mongo/server/description/features.rb +1 -1
  80. data/lib/mongo/server/description.rb +18 -5
  81. data/lib/mongo/server/monitor.rb +7 -4
  82. data/lib/mongo/server/pending_connection.rb +25 -8
  83. data/lib/mongo/server/{round_trip_time_averager.rb → round_trip_time_calculator.rb} +25 -7
  84. data/lib/mongo/server.rb +11 -6
  85. data/lib/mongo/server_selector/base.rb +25 -9
  86. data/lib/mongo/session.rb +78 -9
  87. data/lib/mongo/socket/ssl.rb +131 -18
  88. data/lib/mongo/socket/tcp.rb +40 -6
  89. data/lib/mongo/socket.rb +154 -25
  90. data/lib/mongo/uri/options_mapper.rb +1 -0
  91. data/lib/mongo/version.rb +1 -5
  92. data/lib/mongo.rb +1 -0
  93. data/mongo.gemspec +8 -11
  94. data/spec/atlas/atlas_connectivity_spec.rb +4 -0
  95. data/spec/atlas/operations_spec.rb +4 -0
  96. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +2 -1
  97. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +494 -487
  98. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +1 -1
  99. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +67 -20
  100. data/spec/integration/client_side_operations_timeout/encryption_prose_spec.rb +131 -0
  101. data/spec/integration/connection_pool_populator_spec.rb +2 -0
  102. data/spec/integration/cursor_pinning_spec.rb +15 -60
  103. data/spec/integration/cursor_reaping_spec.rb +1 -1
  104. data/spec/integration/docs_examples_spec.rb +1 -1
  105. data/spec/integration/operation_failure_code_spec.rb +1 -1
  106. data/spec/integration/operation_failure_message_spec.rb +3 -3
  107. data/spec/integration/retryable_errors_spec.rb +2 -2
  108. data/spec/integration/retryable_reads_errors_spec.rb +35 -23
  109. data/spec/integration/sdam_error_handling_spec.rb +4 -1
  110. data/spec/integration/search_indexes_prose_spec.rb +4 -0
  111. data/spec/integration/server_spec.rb +4 -3
  112. data/spec/integration/transactions_api_examples_spec.rb +2 -0
  113. data/spec/kerberos/kerberos_spec.rb +4 -0
  114. data/spec/lite_spec_helper.rb +3 -11
  115. data/spec/mongo/auth/user/view_spec.rb +1 -1
  116. data/spec/mongo/caching_cursor_spec.rb +1 -1
  117. data/spec/mongo/client_encryption_spec.rb +1 -0
  118. data/spec/mongo/client_spec.rb +158 -4
  119. data/spec/mongo/collection/view/aggregation_spec.rb +14 -39
  120. data/spec/mongo/collection/view/change_stream_spec.rb +3 -3
  121. data/spec/mongo/collection_crud_spec.rb +1 -0
  122. data/spec/mongo/collection_spec.rb +5 -6
  123. data/spec/mongo/crypt/auto_encrypter_spec.rb +14 -12
  124. data/spec/mongo/crypt/data_key_context_spec.rb +3 -1
  125. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +2 -2
  126. data/spec/mongo/crypt/handle_spec.rb +1 -1
  127. data/spec/mongo/cursor_spec.rb +26 -9
  128. data/spec/mongo/error/operation_failure_heavy_spec.rb +2 -2
  129. data/spec/mongo/operation/context_spec.rb +79 -0
  130. data/spec/mongo/operation/create/op_msg_spec.rb +106 -110
  131. data/spec/mongo/operation/delete/op_msg_spec.rb +6 -5
  132. data/spec/mongo/operation/find/op_msg_spec.rb +66 -0
  133. data/spec/mongo/operation/get_more/op_msg_spec.rb +65 -0
  134. data/spec/mongo/operation/insert/op_msg_spec.rb +128 -131
  135. data/spec/mongo/operation/shared/csot/examples.rb +113 -0
  136. data/spec/mongo/query_cache_spec.rb +243 -225
  137. data/spec/mongo/retryable_spec.rb +1 -0
  138. data/spec/mongo/server/connection_spec.rb +22 -0
  139. data/spec/mongo/server/round_trip_time_calculator_spec.rb +120 -0
  140. data/spec/mongo/socket/ssl_spec.rb +0 -10
  141. data/spec/runners/change_streams/test.rb +2 -2
  142. data/spec/runners/crud/operation.rb +1 -1
  143. data/spec/runners/crud/verifier.rb +3 -1
  144. data/spec/runners/transactions/operation.rb +4 -6
  145. data/spec/runners/unified/ambiguous_operations.rb +13 -0
  146. data/spec/runners/unified/assertions.rb +4 -0
  147. data/spec/runners/unified/change_stream_operations.rb +14 -24
  148. data/spec/runners/unified/crud_operations.rb +82 -59
  149. data/spec/runners/unified/ddl_operations.rb +38 -7
  150. data/spec/runners/unified/grid_fs_operations.rb +37 -2
  151. data/spec/runners/unified/support_operations.rb +43 -4
  152. data/spec/runners/unified/test.rb +22 -10
  153. data/spec/runners/unified.rb +1 -1
  154. data/spec/solo/clean_exit_spec.rb +2 -0
  155. data/spec/spec_tests/client_side_operations_timeout_spec.rb +15 -0
  156. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +3 -1
  157. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +3 -1
  158. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +3 -1
  159. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +1 -1
  160. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1 -1
  161. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1 -1
  162. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +1 -1
  163. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +2 -1
  164. data/spec/spec_tests/data/client_side_encryption/fle2v2-BypassQueryAnalysis.yml +1 -0
  165. data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +1 -0
  166. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +1 -0
  167. data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +1 -0
  168. data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +1 -0
  169. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +1 -0
  170. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +1 -0
  171. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +1 -0
  172. data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +1 -0
  173. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +1 -0
  174. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +1 -0
  175. data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +1 -0
  176. data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +1 -0
  177. data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +1 -0
  178. data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +2 -1
  179. data/spec/spec_tests/data/client_side_encryption/timeoutMS.yml +67 -0
  180. data/spec/spec_tests/data/client_side_operations_timeout/bulkWrite.yml +87 -0
  181. data/spec/spec_tests/data/client_side_operations_timeout/change-streams.yml +358 -0
  182. data/spec/spec_tests/data/client_side_operations_timeout/close-cursors.yml +129 -0
  183. data/spec/spec_tests/data/client_side_operations_timeout/command-execution.yml +250 -0
  184. data/spec/spec_tests/data/client_side_operations_timeout/convenient-transactions.yml +113 -0
  185. data/spec/spec_tests/data/client_side_operations_timeout/cursors.yml +70 -0
  186. data/spec/spec_tests/data/client_side_operations_timeout/deprecated-options.yml +3982 -0
  187. data/spec/spec_tests/data/client_side_operations_timeout/error-transformations.yml +96 -0
  188. data/spec/spec_tests/data/client_side_operations_timeout/global-timeoutMS.yml +3236 -0
  189. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-advanced.yml +207 -0
  190. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-delete.yml +152 -0
  191. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-download.yml +182 -0
  192. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-find.yml +100 -0
  193. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-upload.yml +249 -0
  194. data/spec/spec_tests/data/client_side_operations_timeout/legacy-timeouts.yml +204 -0
  195. data/spec/spec_tests/data/client_side_operations_timeout/non-tailable-cursors.yml +307 -0
  196. data/spec/spec_tests/data/client_side_operations_timeout/override-collection-timeoutMS.yml +1877 -0
  197. data/spec/spec_tests/data/client_side_operations_timeout/override-operation-timeoutMS.yml +1918 -0
  198. data/spec/spec_tests/data/client_side_operations_timeout/retryability-legacy-timeouts.yml +1676 -0
  199. data/spec/spec_tests/data/client_side_operations_timeout/retryability-timeoutMS.yml +2824 -0
  200. data/spec/spec_tests/data/client_side_operations_timeout/sessions-inherit-timeoutMS.yml +168 -0
  201. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-operation-timeoutMS.yml +171 -0
  202. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-timeoutMS.yml +168 -0
  203. data/spec/spec_tests/data/client_side_operations_timeout/tailable-awaitData.yml +247 -0
  204. data/spec/spec_tests/data/client_side_operations_timeout/tailable-non-awaitData.yml +181 -0
  205. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +6 -0
  206. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +6 -0
  207. data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +29 -0
  208. data/spec/spec_tests/server_selection_rtt_spec.rb +6 -6
  209. data/spec/spec_tests/transactions_unified_spec.rb +2 -1
  210. data/spec/support/certificates/atlas-ocsp-ca.crt +89 -79
  211. data/spec/support/certificates/atlas-ocsp.crt +117 -122
  212. data/spec/support/certificates/retrieve-atlas-cert +1 -1
  213. data/spec/support/cluster_tools.rb +3 -3
  214. data/spec/support/common_shortcuts.rb +2 -2
  215. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +1 -1
  216. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +1 -1
  217. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +1 -1
  218. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +1 -1
  219. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +1 -1
  220. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +1 -1
  221. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +1 -1
  222. data/spec/support/shared/session.rb +2 -2
  223. data/spec/support/spec_setup.rb +2 -2
  224. data/spec/support/utils.rb +3 -1
  225. metadata +88 -173
  226. checksums.yaml.gz.sig +0 -0
  227. data/spec/mongo/server/round_trip_time_averager_spec.rb +0 -48
  228. data/spec/shared/LICENSE +0 -20
  229. data/spec/shared/bin/get-mongodb-download-url +0 -17
  230. data/spec/shared/bin/s3-copy +0 -45
  231. data/spec/shared/bin/s3-upload +0 -69
  232. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  233. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  234. data/spec/shared/lib/mrss/constraints.rb +0 -378
  235. data/spec/shared/lib/mrss/docker_runner.rb +0 -298
  236. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
  237. data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
  238. data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
  239. data/spec/shared/lib/mrss/server_version_registry.rb +0 -113
  240. data/spec/shared/lib/mrss/session_registry.rb +0 -69
  241. data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
  242. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  243. data/spec/shared/lib/mrss/utils.rb +0 -37
  244. data/spec/shared/share/Dockerfile.erb +0 -281
  245. data/spec/shared/share/haproxy-1.conf +0 -16
  246. data/spec/shared/share/haproxy-2.conf +0 -17
  247. data/spec/shared/shlib/config.sh +0 -27
  248. data/spec/shared/shlib/distro.sh +0 -74
  249. data/spec/shared/shlib/server.sh +0 -417
  250. data/spec/shared/shlib/set_env.sh +0 -146
  251. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +0 -241
  252. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +0 -422
  253. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +0 -182
  254. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +0 -239
  255. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +0 -235
  256. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +0 -252
  257. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +0 -1687
  258. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +0 -293
  259. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +0 -905
  260. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +0 -1684
  261. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +0 -1680
  262. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +0 -1697
  263. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +0 -329
  264. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +0 -424
  265. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +0 -226
  266. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +0 -327
  267. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +0 -319
  268. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +0 -336
  269. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +0 -913
  270. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +0 -292
  271. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +0 -518
  272. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +0 -911
  273. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +0 -907
  274. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +0 -924
  275. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +0 -325
  276. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +0 -424
  277. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +0 -224
  278. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +0 -323
  279. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +0 -319
  280. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +0 -338
  281. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +0 -241
  282. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +0 -423
  283. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +0 -182
  284. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +0 -239
  285. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +0 -235
  286. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +0 -254
  287. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +0 -241
  288. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +0 -422
  289. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +0 -182
  290. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +0 -239
  291. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +0 -235
  292. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +0 -254
  293. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +0 -43
  294. data/spec/support/faas/app/aws_lambda/mongodb/Gemfile.lock +0 -19
  295. data.tar.gz.sig +0 -0
  296. metadata.gz.sig +0 -3
@@ -0,0 +1,207 @@
1
+ description: "timeoutMS behaves correctly for advanced GridFS API operations"
2
+
3
+ schemaVersion: "1.9"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.4"
7
+ serverless: forbid # GridFS ops can be slow on serverless.
8
+
9
+ createEntities:
10
+ - client:
11
+ id: &failPointClient failPointClient
12
+ useMultipleMongoses: false
13
+ - client:
14
+ id: &client client
15
+ uriOptions:
16
+ timeoutMS: 75
17
+ useMultipleMongoses: false
18
+ observeEvents:
19
+ - commandStartedEvent
20
+ - database:
21
+ id: &database database
22
+ client: *client
23
+ databaseName: &databaseName test
24
+ - bucket:
25
+ id: &bucket bucket
26
+ database: *database
27
+ - collection:
28
+ id: &filesCollection filesCollection
29
+ database: *database
30
+ collectionName: &filesCollectionName fs.files
31
+ - collection:
32
+ id: &chunksCollection chunksCollection
33
+ database: *database
34
+ collectionName: &chunksCollectionName fs.chunks
35
+
36
+ initialData:
37
+ - collectionName: *filesCollectionName
38
+ databaseName: *databaseName
39
+ documents:
40
+ - _id: &fileDocumentId { $oid: "000000000000000000000005" }
41
+ length: 8
42
+ chunkSize: 4
43
+ uploadDate: { $date: "1970-01-01T00:00:00.000Z" }
44
+ filename: "length-8"
45
+ contentType: "application/octet-stream"
46
+ aliases: []
47
+ metadata: {}
48
+ - collectionName: *chunksCollectionName
49
+ databaseName: *databaseName
50
+ documents:
51
+ - _id: { $oid: "000000000000000000000005" }
52
+ files_id: *fileDocumentId
53
+ n: 0
54
+ data: { $binary: { base64: "ESIzRA==", subType: "00" } } # hex: 11223344
55
+ - _id: { $oid: "000000000000000000000006" }
56
+ files_id: *fileDocumentId
57
+ n: 1
58
+ data: { $binary: { base64: "ESIzRA==", subType: "00" } } # hex: 11223344
59
+
60
+ tests:
61
+ # Tests for the "rename" operation.
62
+ # Ruby driver does not support rename for GridFS bucket
63
+
64
+ # - description: "timeoutMS can be overridden for a rename"
65
+ # operations:
66
+ # - name: failPoint
67
+ # object: testRunner
68
+ # arguments:
69
+ # client: *failPointClient
70
+ # failPoint:
71
+ # configureFailPoint: failCommand
72
+ # mode: { times: 1 }
73
+ # data:
74
+ # failCommands: ["update"]
75
+ # blockConnection: true
76
+ # blockTimeMS: 100
77
+ # - name: rename
78
+ # object: *bucket
79
+ # arguments:
80
+ # id: *fileDocumentId
81
+ # newFilename: "foo"
82
+ # timeoutMS: 2000 # The client timeoutMS is 75ms and the operation blocks for 100ms, so 2000ms should let it succeed.
83
+ # expectEvents:
84
+ # - client: *client
85
+ # events:
86
+ # - commandStartedEvent:
87
+ # commandName: update
88
+ # databaseName: *databaseName
89
+ # command:
90
+ # update: *filesCollectionName
91
+ # maxTimeMS: { $$type: ["int", "long"] }
92
+
93
+ # - description: "timeoutMS applied to update during a rename"
94
+ # operations:
95
+ # - name: failPoint
96
+ # object: testRunner
97
+ # arguments:
98
+ # client: *failPointClient
99
+ # failPoint:
100
+ # configureFailPoint: failCommand
101
+ # mode: { times: 1 }
102
+ # data:
103
+ # failCommands: ["update"]
104
+ # blockConnection: true
105
+ # blockTimeMS: 100
106
+ # - name: rename
107
+ # object: *bucket
108
+ # arguments:
109
+ # id: *fileDocumentId
110
+ # newFilename: "foo"
111
+ # expectError:
112
+ # isTimeoutError: true
113
+ # expectEvents:
114
+ # - client: *client
115
+ # events:
116
+ # - commandStartedEvent:
117
+ # commandName: update
118
+ # databaseName: *databaseName
119
+ # command:
120
+ # update: *filesCollectionName
121
+ # maxTimeMS: { $$type: ["int", "long"] }
122
+
123
+ # Tests for the "drop" operation. Any tests that might result in multiple commands being sent do not have expectEvents
124
+ # assertions as these assertions reduce test robustness and can cause flaky failures.
125
+
126
+ - description: "timeoutMS can be overridden for drop"
127
+ operations:
128
+ - name: failPoint
129
+ object: testRunner
130
+ arguments:
131
+ client: *failPointClient
132
+ failPoint:
133
+ configureFailPoint: failCommand
134
+ mode: { times: 1 }
135
+ data:
136
+ failCommands: ["drop"]
137
+ blockConnection: true
138
+ blockTimeMS: 100
139
+ - name: drop
140
+ object: *bucket
141
+ arguments:
142
+ timeoutMS: 2000 # The client timeoutMS is 75ms and the operation blocks for 100ms, so 2000ms should let it succeed.
143
+
144
+ - description: "timeoutMS applied to files collection drop"
145
+ operations:
146
+ - name: failPoint
147
+ object: testRunner
148
+ arguments:
149
+ client: *failPointClient
150
+ failPoint:
151
+ configureFailPoint: failCommand
152
+ mode: { times: 1 }
153
+ data:
154
+ failCommands: ["drop"]
155
+ blockConnection: true
156
+ blockTimeMS: 100
157
+ - name: drop
158
+ object: *bucket
159
+ expectError:
160
+ isTimeoutError: true
161
+ expectEvents:
162
+ - client: *client
163
+ events:
164
+ - commandStartedEvent:
165
+ commandName: drop
166
+ databaseName: *databaseName
167
+ command:
168
+ drop: *filesCollectionName
169
+ maxTimeMS: { $$type: ["int", "long"] }
170
+
171
+ - description: "timeoutMS applied to chunks collection drop"
172
+ operations:
173
+ - name: failPoint
174
+ object: testRunner
175
+ arguments:
176
+ client: *failPointClient
177
+ failPoint:
178
+ configureFailPoint: failCommand
179
+ mode:
180
+ # Skip the drop for the files collection.
181
+ skip: 1
182
+ data:
183
+ failCommands: ["drop"]
184
+ blockConnection: true
185
+ blockTimeMS: 100
186
+ - name: drop
187
+ object: *bucket
188
+ expectError:
189
+ isTimeoutError: true
190
+
191
+ - description: "timeoutMS applied to drop as a whole, not individual parts"
192
+ operations:
193
+ - name: failPoint
194
+ object: testRunner
195
+ arguments:
196
+ client: *failPointClient
197
+ failPoint:
198
+ configureFailPoint: failCommand
199
+ mode: { times: 2 }
200
+ data:
201
+ failCommands: ["drop"]
202
+ blockConnection: true
203
+ blockTimeMS: 50
204
+ - name: drop
205
+ object: *bucket
206
+ expectError:
207
+ isTimeoutError: true
@@ -0,0 +1,152 @@
1
+ description: "timeoutMS behaves correctly for GridFS delete operations"
2
+
3
+ schemaVersion: "1.9"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.4"
7
+ serverless: forbid # GridFS ops can be slow on serverless.
8
+
9
+ createEntities:
10
+ - client:
11
+ id: &failPointClient failPointClient
12
+ useMultipleMongoses: false
13
+ - client:
14
+ id: &client client
15
+ uriOptions:
16
+ timeoutMS: 75
17
+ useMultipleMongoses: false
18
+ observeEvents:
19
+ - commandStartedEvent
20
+ - database:
21
+ id: &database database
22
+ client: *client
23
+ databaseName: &databaseName test
24
+ - bucket:
25
+ id: &bucket bucket
26
+ database: *database
27
+ - collection:
28
+ id: &filesCollection filesCollection
29
+ database: *database
30
+ collectionName: &filesCollectionName fs.files
31
+ - collection:
32
+ id: &chunksCollection chunksCollection
33
+ database: *database
34
+ collectionName: &chunksCollectionName fs.chunks
35
+
36
+ initialData:
37
+ - collectionName: *filesCollectionName
38
+ databaseName: *databaseName
39
+ documents:
40
+ - _id: &fileDocumentId { $oid: "000000000000000000000005" }
41
+ length: 8
42
+ chunkSize: 4
43
+ uploadDate: { $date: "1970-01-01T00:00:00.000Z" }
44
+ filename: "length-8"
45
+ contentType: "application/octet-stream"
46
+ aliases: []
47
+ metadata: {}
48
+ - collectionName: *chunksCollectionName
49
+ databaseName: *databaseName
50
+ documents:
51
+ - _id: { $oid: "000000000000000000000005" }
52
+ files_id: *fileDocumentId
53
+ n: 0
54
+ data: { $binary: { base64: "ESIzRA==", subType: "00" } } # hex: 11223344
55
+ - _id: { $oid: "000000000000000000000006" }
56
+ files_id: *fileDocumentId
57
+ n: 1
58
+ data: { $binary: { base64: "ESIzRA==", subType: "00" } } # hex: 11223344
59
+
60
+ tests:
61
+ - description: "timeoutMS can be overridden for delete"
62
+ operations:
63
+ - name: failPoint
64
+ object: testRunner
65
+ arguments:
66
+ client: *failPointClient
67
+ failPoint:
68
+ configureFailPoint: failCommand
69
+ mode: { times: 1 }
70
+ data:
71
+ failCommands: ["delete"]
72
+ blockConnection: true
73
+ blockTimeMS: 100
74
+ - name: delete
75
+ object: *bucket
76
+ arguments:
77
+ id: *fileDocumentId
78
+ timeoutMS: 1000 # The client timeoutMS is 75ms and the operation blocks for 100ms, so 1000ms should let it succeed.
79
+
80
+ - description: "timeoutMS applied to delete against the files collection"
81
+ operations:
82
+ - name: failPoint
83
+ object: testRunner
84
+ arguments:
85
+ client: *failPointClient
86
+ failPoint:
87
+ configureFailPoint: failCommand
88
+ mode: { times: 1 }
89
+ data:
90
+ failCommands: ["delete"]
91
+ blockConnection: true
92
+ blockTimeMS: 100
93
+ - name: delete
94
+ object: *bucket
95
+ arguments:
96
+ id: *fileDocumentId
97
+ expectError:
98
+ isTimeoutError: true
99
+ expectEvents:
100
+ - client: *client
101
+ events:
102
+ - commandStartedEvent:
103
+ commandName: delete
104
+ databaseName: *databaseName
105
+ command:
106
+ delete: *filesCollectionName
107
+ maxTimeMS: { $$type: ["int", "long"] }
108
+
109
+ - description: "timeoutMS applied to delete against the chunks collection"
110
+ operations:
111
+ - name: failPoint
112
+ object: testRunner
113
+ arguments:
114
+ client: *failPointClient
115
+ failPoint:
116
+ configureFailPoint: failCommand
117
+ mode:
118
+ # The first "delete" will be against the files collection, so we skip it.
119
+ skip: 1
120
+ data:
121
+ failCommands: ["delete"]
122
+ blockConnection: true
123
+ blockTimeMS: 100
124
+ - name: delete
125
+ object: *bucket
126
+ arguments:
127
+ id: *fileDocumentId
128
+ expectError:
129
+ isTimeoutError: true
130
+
131
+ # Test that drivers are not refreshing the timeout between commands. We test this by blocking both "delete" commands
132
+ # for 50ms each. The delete should inherit timeoutMS=75 from the client/database and the server takes over 75ms
133
+ # total, so the operation should fail.
134
+ - description: "timeoutMS applied to entire delete, not individual parts"
135
+ operations:
136
+ - name: failPoint
137
+ object: testRunner
138
+ arguments:
139
+ client: *failPointClient
140
+ failPoint:
141
+ configureFailPoint: failCommand
142
+ mode: { times: 2 }
143
+ data:
144
+ failCommands: ["delete"]
145
+ blockConnection: true
146
+ blockTimeMS: 50
147
+ - name: delete
148
+ object: *bucket
149
+ arguments:
150
+ id: *fileDocumentId
151
+ expectError:
152
+ isTimeoutError: true
@@ -0,0 +1,182 @@
1
+ description: "timeoutMS behaves correctly for GridFS download operations"
2
+
3
+ schemaVersion: "1.9"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.4"
7
+ serverless: forbid # GridFS ops can be slow on serverless.
8
+
9
+ createEntities:
10
+ - client:
11
+ id: &failPointClient failPointClient
12
+ useMultipleMongoses: false
13
+ - client:
14
+ id: &client client
15
+ uriOptions:
16
+ timeoutMS: 75
17
+ useMultipleMongoses: false
18
+ observeEvents:
19
+ - commandStartedEvent
20
+ - database:
21
+ id: &database database
22
+ client: *client
23
+ databaseName: &databaseName test
24
+ - bucket:
25
+ id: &bucket bucket
26
+ database: *database
27
+ - collection:
28
+ id: &filesCollection filesCollection
29
+ database: *database
30
+ collectionName: &filesCollectionName fs.files
31
+ - collection:
32
+ id: &chunksCollection chunksCollection
33
+ database: *database
34
+ collectionName: &chunksCollectionName fs.chunks
35
+
36
+ initialData:
37
+ - collectionName: *filesCollectionName
38
+ databaseName: *databaseName
39
+ documents:
40
+ - _id: &fileDocumentId { $oid: "000000000000000000000005" }
41
+ length: 8
42
+ chunkSize: 4
43
+ uploadDate: { $date: "1970-01-01T00:00:00.000Z" }
44
+ filename: "length-8"
45
+ contentType: "application/octet-stream"
46
+ aliases: []
47
+ metadata: {}
48
+ - collectionName: *chunksCollectionName
49
+ databaseName: *databaseName
50
+ documents:
51
+ - _id: { $oid: "000000000000000000000005" }
52
+ files_id: *fileDocumentId
53
+ n: 0
54
+ data: { $binary: { base64: "ESIzRA==", subType: "00" } } # hex: 11223344
55
+ - _id: { $oid: "000000000000000000000006" }
56
+ files_id: *fileDocumentId
57
+ n: 1
58
+ data: { $binary: { base64: "ESIzRA==", subType: "00" } } # hex: 11223344
59
+
60
+ tests:
61
+ - description: "timeoutMS can be overridden for download"
62
+ operations:
63
+ - name: failPoint
64
+ object: testRunner
65
+ arguments:
66
+ client: *failPointClient
67
+ failPoint:
68
+ configureFailPoint: failCommand
69
+ mode: { times: 1 }
70
+ data:
71
+ failCommands: ["find"]
72
+ blockConnection: true
73
+ blockTimeMS: 100
74
+ - name: download
75
+ object: *bucket
76
+ arguments:
77
+ id: *fileDocumentId
78
+ timeoutMS: 1000 # The client timeoutMS is 75ms and the operation blocks for 100ms, so 1000ms should let it succeed.
79
+
80
+ - description: "timeoutMS applied to find to get files document"
81
+ operations:
82
+ - name: failPoint
83
+ object: testRunner
84
+ arguments:
85
+ client: *failPointClient
86
+ failPoint:
87
+ configureFailPoint: failCommand
88
+ mode: { times: 1 }
89
+ data:
90
+ failCommands: ["find"]
91
+ blockConnection: true
92
+ blockTimeMS: 100
93
+ - name: download
94
+ object: *bucket
95
+ arguments:
96
+ id: *fileDocumentId
97
+ expectError:
98
+ isTimeoutError: true
99
+ expectEvents:
100
+ - client: *client
101
+ events:
102
+ - commandStartedEvent:
103
+ commandName: find
104
+ databaseName: *databaseName
105
+ command:
106
+ find: *filesCollectionName
107
+ maxTimeMS: { $$type: ["int", "long"] }
108
+
109
+ - description: "timeoutMS applied to find to get chunks"
110
+ operations:
111
+ - name: failPoint
112
+ object: testRunner
113
+ arguments:
114
+ client: *failPointClient
115
+ failPoint:
116
+ configureFailPoint: failCommand
117
+ mode:
118
+ # The first "find" will be against the files collection, so we skip it.
119
+ skip: 1
120
+ data:
121
+ failCommands: ["find"]
122
+ blockConnection: true
123
+ blockTimeMS: 100
124
+ - name: download
125
+ object: *bucket
126
+ arguments:
127
+ id: *fileDocumentId
128
+ expectError:
129
+ isTimeoutError: true
130
+ expectEvents:
131
+ - client: *client
132
+ events:
133
+ - commandStartedEvent:
134
+ commandName: find
135
+ databaseName: *databaseName
136
+ command:
137
+ find: *filesCollectionName
138
+ maxTimeMS: { $$type: ["int", "long"] }
139
+ - commandStartedEvent:
140
+ commandName: find
141
+ databaseName: *databaseName
142
+ command:
143
+ find: *chunksCollectionName
144
+ maxTimeMS: { $$type: ["int", "long"] }
145
+
146
+ # Test that drivers are not refreshing the timeout between commands. We test this by blocking both "find" commands
147
+ # for 50ms each. The download should inherit timeoutMS=75 from the client/database and the server takes over 75ms
148
+ # total, so the operation should fail.
149
+ - description: "timeoutMS applied to entire download, not individual parts"
150
+ operations:
151
+ - name: failPoint
152
+ object: testRunner
153
+ arguments:
154
+ client: *failPointClient
155
+ failPoint:
156
+ configureFailPoint: failCommand
157
+ mode: { times: 2 }
158
+ data:
159
+ failCommands: ["find"]
160
+ blockConnection: true
161
+ blockTimeMS: 50
162
+ - name: download
163
+ object: *bucket
164
+ arguments:
165
+ id: *fileDocumentId
166
+ expectError:
167
+ isTimeoutError: true
168
+ expectEvents:
169
+ - client: *client
170
+ events:
171
+ - commandStartedEvent:
172
+ commandName: find
173
+ databaseName: *databaseName
174
+ command:
175
+ find: *filesCollectionName
176
+ maxTimeMS: { $$type: ["int", "long"] }
177
+ - commandStartedEvent:
178
+ commandName: find
179
+ databaseName: *databaseName
180
+ command:
181
+ find: *chunksCollectionName
182
+ maxTimeMS: { $$type: ["int", "long"] }
@@ -0,0 +1,100 @@
1
+ description: "timeoutMS behaves correctly for GridFS find operations"
2
+
3
+ schemaVersion: "1.9"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.4"
7
+ serverless: forbid # GridFS ops can be slow on serverless.
8
+
9
+ createEntities:
10
+ - client:
11
+ id: &failPointClient failPointClient
12
+ useMultipleMongoses: false
13
+ - client:
14
+ id: &client client
15
+ uriOptions:
16
+ timeoutMS: 75
17
+ useMultipleMongoses: false
18
+ observeEvents:
19
+ - commandStartedEvent
20
+ - database:
21
+ id: &database database
22
+ client: *client
23
+ databaseName: &databaseName test
24
+ - bucket:
25
+ id: &bucket bucket
26
+ database: *database
27
+ - collection:
28
+ id: &filesCollection filesCollection
29
+ database: *database
30
+ collectionName: &filesCollectionName fs.files
31
+ - collection:
32
+ id: &chunksCollection chunksCollection
33
+ database: *database
34
+ collectionName: &chunksCollectionName fs.chunks
35
+
36
+ initialData:
37
+ - collectionName: *filesCollectionName
38
+ databaseName: *databaseName
39
+ documents: []
40
+ - collectionName: *chunksCollectionName
41
+ databaseName: *databaseName
42
+ documents: []
43
+
44
+ tests:
45
+ - description: "timeoutMS can be overridden for a find"
46
+ operations:
47
+ - name: failPoint
48
+ object: testRunner
49
+ arguments:
50
+ client: *failPointClient
51
+ failPoint:
52
+ configureFailPoint: failCommand
53
+ mode: { times: 1 }
54
+ data:
55
+ failCommands: ["find"]
56
+ blockConnection: true
57
+ blockTimeMS: 100
58
+ - name: find
59
+ object: *bucket
60
+ arguments:
61
+ filter: {}
62
+ timeoutMS: 1000 # The client timeoutMS is 75ms and the operation blocks for 100ms, so 1000ms should let it succeed.
63
+ expectEvents:
64
+ - client: *client
65
+ events:
66
+ - commandStartedEvent:
67
+ commandName: find
68
+ databaseName: *databaseName
69
+ command:
70
+ find: *filesCollectionName
71
+ maxTimeMS: { $$type: ["int", "long"] }
72
+
73
+ - description: "timeoutMS applied to find command"
74
+ operations:
75
+ - name: failPoint
76
+ object: testRunner
77
+ arguments:
78
+ client: *failPointClient
79
+ failPoint:
80
+ configureFailPoint: failCommand
81
+ mode: { times: 1 }
82
+ data:
83
+ failCommands: ["find"]
84
+ blockConnection: true
85
+ blockTimeMS: 100
86
+ - name: find
87
+ object: *bucket
88
+ arguments:
89
+ filter: {}
90
+ expectError:
91
+ isTimeoutError: true
92
+ expectEvents:
93
+ - client: *client
94
+ events:
95
+ - commandStartedEvent:
96
+ commandName: find
97
+ databaseName: *databaseName
98
+ command:
99
+ find: *filesCollectionName
100
+ maxTimeMS: { $$type: ["int", "long"] }