mongo 2.19.1 → 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 (356) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +40 -1
  3. data/Rakefile +83 -174
  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/topology/base.rb +16 -0
  13. data/lib/mongo/cluster.rb +41 -5
  14. data/lib/mongo/collection/helpers.rb +1 -1
  15. data/lib/mongo/collection/view/aggregation/behavior.rb +131 -0
  16. data/lib/mongo/collection/view/aggregation.rb +33 -99
  17. data/lib/mongo/collection/view/builder/aggregation.rb +1 -7
  18. data/lib/mongo/collection/view/change_stream.rb +80 -27
  19. data/lib/mongo/collection/view/iterable.rb +92 -60
  20. data/lib/mongo/collection/view/map_reduce.rb +25 -8
  21. data/lib/mongo/collection/view/readable.rb +79 -30
  22. data/lib/mongo/collection/view/writable.rb +109 -48
  23. data/lib/mongo/collection/view.rb +44 -3
  24. data/lib/mongo/collection.rb +185 -26
  25. data/lib/mongo/config.rb +2 -2
  26. data/lib/mongo/crypt/auto_encrypter.rb +4 -6
  27. data/lib/mongo/crypt/binding.rb +4 -4
  28. data/lib/mongo/crypt/context.rb +20 -14
  29. data/lib/mongo/crypt/encryption_io.rb +56 -26
  30. data/lib/mongo/crypt/explicit_encrypter.rb +49 -20
  31. data/lib/mongo/crypt/explicit_encryption_context.rb +17 -11
  32. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +22 -6
  33. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +29 -4
  34. data/lib/mongo/csot_timeout_holder.rb +119 -0
  35. data/lib/mongo/cursor/kill_spec.rb +5 -2
  36. data/lib/mongo/cursor/nontailable.rb +27 -0
  37. data/lib/mongo/cursor.rb +86 -24
  38. data/lib/mongo/cursor_host.rb +82 -0
  39. data/lib/mongo/database/view.rb +81 -14
  40. data/lib/mongo/database.rb +88 -18
  41. data/lib/mongo/error/operation_failure.rb +209 -204
  42. data/lib/mongo/error/server_timeout_error.rb +12 -0
  43. data/lib/mongo/error/socket_timeout_error.rb +3 -1
  44. data/lib/mongo/error/timeout_error.rb +23 -0
  45. data/lib/mongo/error/transactions_not_supported.rb +34 -0
  46. data/lib/mongo/error.rb +3 -0
  47. data/lib/mongo/grid/fs_bucket.rb +48 -9
  48. data/lib/mongo/grid/stream/read.rb +15 -1
  49. data/lib/mongo/grid/stream/write.rb +21 -4
  50. data/lib/mongo/index/view.rb +77 -16
  51. data/lib/mongo/monitoring/event/secure.rb +1 -1
  52. data/lib/mongo/operation/context.rb +40 -2
  53. data/lib/mongo/operation/create_search_indexes/op_msg.rb +31 -0
  54. data/lib/mongo/operation/create_search_indexes.rb +15 -0
  55. data/lib/mongo/operation/delete/op_msg.rb +2 -1
  56. data/lib/mongo/operation/drop_search_index/op_msg.rb +33 -0
  57. data/lib/mongo/operation/drop_search_index.rb +15 -0
  58. data/lib/mongo/operation/find/op_msg.rb +45 -0
  59. data/lib/mongo/operation/get_more/op_msg.rb +33 -0
  60. data/lib/mongo/operation/insert/op_msg.rb +3 -2
  61. data/lib/mongo/operation/insert/result.rb +4 -2
  62. data/lib/mongo/operation/list_collections/result.rb +1 -1
  63. data/lib/mongo/operation/map_reduce/result.rb +1 -1
  64. data/lib/mongo/operation/op_msg_base.rb +3 -1
  65. data/lib/mongo/operation/result.rb +26 -5
  66. data/lib/mongo/operation/shared/executable.rb +55 -28
  67. data/lib/mongo/operation/shared/op_msg_executable.rb +4 -1
  68. data/lib/mongo/operation/shared/response_handling.rb +25 -27
  69. data/lib/mongo/operation/shared/sessions_supported.rb +1 -1
  70. data/lib/mongo/operation/shared/specifiable.rb +7 -0
  71. data/lib/mongo/operation/shared/timed.rb +52 -0
  72. data/lib/mongo/operation/shared/write.rb +4 -1
  73. data/lib/mongo/operation/update/op_msg.rb +2 -1
  74. data/lib/mongo/operation/update_search_index/op_msg.rb +34 -0
  75. data/lib/mongo/operation/update_search_index.rb +15 -0
  76. data/lib/mongo/operation.rb +4 -0
  77. data/lib/mongo/protocol/message.rb +1 -4
  78. data/lib/mongo/protocol/msg.rb +2 -2
  79. data/lib/mongo/retryable/base_worker.rb +28 -3
  80. data/lib/mongo/retryable/read_worker.rb +78 -36
  81. data/lib/mongo/retryable/write_worker.rb +59 -25
  82. data/lib/mongo/retryable.rb +8 -2
  83. data/lib/mongo/search_index/view.rb +232 -0
  84. data/lib/mongo/server/app_metadata/environment.rb +64 -9
  85. data/lib/mongo/server/app_metadata.rb +5 -4
  86. data/lib/mongo/server/connection.rb +11 -5
  87. data/lib/mongo/server/connection_base.rb +22 -2
  88. data/lib/mongo/server/connection_pool.rb +32 -14
  89. data/lib/mongo/server/description/features.rb +2 -1
  90. data/lib/mongo/server/description.rb +18 -5
  91. data/lib/mongo/server/monitor.rb +7 -4
  92. data/lib/mongo/server/pending_connection.rb +25 -8
  93. data/lib/mongo/server/{round_trip_time_averager.rb → round_trip_time_calculator.rb} +25 -7
  94. data/lib/mongo/server.rb +11 -6
  95. data/lib/mongo/server_selector/base.rb +54 -12
  96. data/lib/mongo/session/server_session/dirtyable.rb +52 -0
  97. data/lib/mongo/session/server_session.rb +3 -0
  98. data/lib/mongo/session/session_pool.rb +12 -18
  99. data/lib/mongo/session.rb +110 -9
  100. data/lib/mongo/socket/ssl.rb +131 -18
  101. data/lib/mongo/socket/tcp.rb +40 -6
  102. data/lib/mongo/socket.rb +154 -25
  103. data/lib/mongo/uri/options_mapper.rb +1 -0
  104. data/lib/mongo/uri.rb +0 -4
  105. data/lib/mongo/version.rb +1 -5
  106. data/lib/mongo.rb +2 -0
  107. data/mongo.gemspec +9 -18
  108. data/spec/atlas/atlas_connectivity_spec.rb +9 -9
  109. data/spec/atlas/operations_spec.rb +5 -5
  110. data/spec/faas/ruby-sam-app/Gemfile +9 -0
  111. data/spec/faas/ruby-sam-app/mongodb/Gemfile +4 -0
  112. data/spec/faas/ruby-sam-app/mongodb/app.rb +149 -0
  113. data/spec/faas/ruby-sam-app/template.yaml +48 -0
  114. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +2 -1
  115. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +494 -487
  116. data/spec/integration/client_side_encryption/corpus_spec.rb +10 -2
  117. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +1 -1
  118. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +67 -20
  119. data/spec/integration/client_side_operations_timeout/encryption_prose_spec.rb +131 -0
  120. data/spec/integration/connection_pool_populator_spec.rb +2 -0
  121. data/spec/integration/cursor_pinning_spec.rb +15 -60
  122. data/spec/integration/cursor_reaping_spec.rb +1 -1
  123. data/spec/integration/docs_examples_spec.rb +1 -1
  124. data/spec/integration/find_options_spec.rb +227 -0
  125. data/spec/integration/operation_failure_code_spec.rb +1 -1
  126. data/spec/integration/operation_failure_message_spec.rb +3 -3
  127. data/spec/integration/retryable_errors_spec.rb +2 -2
  128. data/spec/integration/retryable_reads_errors_spec.rb +196 -31
  129. data/spec/integration/retryable_writes_errors_spec.rb +156 -0
  130. data/spec/integration/sdam_error_handling_spec.rb +4 -1
  131. data/spec/integration/search_indexes_prose_spec.rb +172 -0
  132. data/spec/integration/server_spec.rb +4 -3
  133. data/spec/integration/transactions_api_examples_spec.rb +2 -0
  134. data/spec/kerberos/kerberos_spec.rb +4 -0
  135. data/spec/lite_spec_helper.rb +34 -20
  136. data/spec/mongo/auth/user/view_spec.rb +1 -1
  137. data/spec/mongo/caching_cursor_spec.rb +1 -1
  138. data/spec/mongo/client_encryption_spec.rb +1 -0
  139. data/spec/mongo/client_spec.rb +158 -4
  140. data/spec/mongo/cluster_spec.rb +36 -0
  141. data/spec/mongo/collection/view/aggregation_spec.rb +20 -40
  142. data/spec/mongo/collection/view/change_stream_spec.rb +3 -3
  143. data/spec/mongo/collection/view/explainable_spec.rb +2 -0
  144. data/spec/mongo/collection_crud_spec.rb +2 -1
  145. data/spec/mongo/collection_spec.rb +5 -6
  146. data/spec/mongo/crypt/auto_encrypter_spec.rb +14 -12
  147. data/spec/mongo/crypt/data_key_context_spec.rb +3 -1
  148. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +2 -2
  149. data/spec/mongo/crypt/handle_spec.rb +1 -1
  150. data/spec/mongo/cursor_spec.rb +26 -9
  151. data/spec/mongo/error/operation_failure_heavy_spec.rb +2 -2
  152. data/spec/mongo/operation/context_spec.rb +79 -0
  153. data/spec/mongo/operation/create/op_msg_spec.rb +106 -110
  154. data/spec/mongo/operation/delete/op_msg_spec.rb +6 -5
  155. data/spec/mongo/operation/find/op_msg_spec.rb +66 -0
  156. data/spec/mongo/operation/get_more/op_msg_spec.rb +65 -0
  157. data/spec/mongo/operation/insert/op_msg_spec.rb +128 -131
  158. data/spec/mongo/operation/insert_spec.rb +1 -1
  159. data/spec/mongo/operation/shared/csot/examples.rb +113 -0
  160. data/spec/mongo/query_cache_spec.rb +243 -225
  161. data/spec/mongo/retryable/write_worker_spec.rb +39 -0
  162. data/spec/mongo/retryable_spec.rb +1 -0
  163. data/spec/mongo/server/app_metadata/environment_spec.rb +135 -0
  164. data/spec/mongo/server/app_metadata_spec.rb +12 -2
  165. data/spec/mongo/server/connection_spec.rb +26 -0
  166. data/spec/mongo/server/round_trip_time_calculator_spec.rb +120 -0
  167. data/spec/mongo/session/session_pool_spec.rb +1 -16
  168. data/spec/mongo/session_transaction_spec.rb +15 -0
  169. data/spec/mongo/socket/ssl_spec.rb +0 -10
  170. data/spec/mongo/uri_spec.rb +0 -9
  171. data/spec/runners/change_streams/test.rb +2 -2
  172. data/spec/runners/crud/operation.rb +1 -1
  173. data/spec/runners/crud/test.rb +0 -8
  174. data/spec/runners/crud/verifier.rb +3 -1
  175. data/spec/runners/crud.rb +1 -1
  176. data/spec/runners/transactions/operation.rb +4 -6
  177. data/spec/runners/transactions/test.rb +12 -3
  178. data/spec/runners/unified/ambiguous_operations.rb +13 -0
  179. data/spec/runners/unified/assertions.rb +20 -3
  180. data/spec/runners/unified/change_stream_operations.rb +14 -24
  181. data/spec/runners/unified/crud_operations.rb +82 -47
  182. data/spec/runners/unified/ddl_operations.rb +38 -7
  183. data/spec/runners/unified/grid_fs_operations.rb +37 -2
  184. data/spec/runners/unified/search_index_operations.rb +63 -0
  185. data/spec/runners/unified/support_operations.rb +46 -9
  186. data/spec/runners/unified/test.rb +33 -12
  187. data/spec/runners/unified.rb +1 -1
  188. data/spec/solo/clean_exit_spec.rb +2 -0
  189. data/spec/spec_helper.rb +1 -1
  190. data/spec/spec_tests/client_side_operations_timeout_spec.rb +15 -0
  191. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +3 -1
  192. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +3 -1
  193. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +3 -1
  194. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +1 -1
  195. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1 -1
  196. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1 -1
  197. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +1 -1
  198. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +2 -1
  199. data/spec/spec_tests/data/client_side_encryption/explain.yml +2 -2
  200. data/spec/spec_tests/data/client_side_encryption/fle2v2-BypassQueryAnalysis.yml +1 -0
  201. data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +1 -0
  202. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +1 -0
  203. data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +1 -0
  204. data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +1 -0
  205. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +1 -0
  206. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +1 -0
  207. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +1 -0
  208. data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +1 -0
  209. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +1 -0
  210. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +1 -0
  211. data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +1 -0
  212. data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +1 -0
  213. data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +1 -0
  214. data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +2 -1
  215. data/spec/spec_tests/data/client_side_encryption/timeoutMS.yml +67 -0
  216. data/spec/spec_tests/data/client_side_operations_timeout/bulkWrite.yml +87 -0
  217. data/spec/spec_tests/data/client_side_operations_timeout/change-streams.yml +358 -0
  218. data/spec/spec_tests/data/client_side_operations_timeout/close-cursors.yml +129 -0
  219. data/spec/spec_tests/data/client_side_operations_timeout/command-execution.yml +250 -0
  220. data/spec/spec_tests/data/client_side_operations_timeout/convenient-transactions.yml +113 -0
  221. data/spec/spec_tests/data/client_side_operations_timeout/cursors.yml +70 -0
  222. data/spec/spec_tests/data/client_side_operations_timeout/deprecated-options.yml +3982 -0
  223. data/spec/spec_tests/data/client_side_operations_timeout/error-transformations.yml +96 -0
  224. data/spec/spec_tests/data/client_side_operations_timeout/global-timeoutMS.yml +3236 -0
  225. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-advanced.yml +207 -0
  226. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-delete.yml +152 -0
  227. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-download.yml +182 -0
  228. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-find.yml +100 -0
  229. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-upload.yml +249 -0
  230. data/spec/spec_tests/data/client_side_operations_timeout/legacy-timeouts.yml +204 -0
  231. data/spec/spec_tests/data/client_side_operations_timeout/non-tailable-cursors.yml +307 -0
  232. data/spec/spec_tests/data/client_side_operations_timeout/override-collection-timeoutMS.yml +1877 -0
  233. data/spec/spec_tests/data/client_side_operations_timeout/override-operation-timeoutMS.yml +1918 -0
  234. data/spec/spec_tests/data/client_side_operations_timeout/retryability-legacy-timeouts.yml +1676 -0
  235. data/spec/spec_tests/data/client_side_operations_timeout/retryability-timeoutMS.yml +2824 -0
  236. data/spec/spec_tests/data/client_side_operations_timeout/sessions-inherit-timeoutMS.yml +168 -0
  237. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-operation-timeoutMS.yml +171 -0
  238. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-timeoutMS.yml +168 -0
  239. data/spec/spec_tests/data/client_side_operations_timeout/tailable-awaitData.yml +247 -0
  240. data/spec/spec_tests/data/client_side_operations_timeout/tailable-non-awaitData.yml +181 -0
  241. data/spec/spec_tests/data/connection_string/invalid-uris.yml +0 -10
  242. data/spec/spec_tests/data/connection_string/valid-options.yml +13 -0
  243. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +6 -0
  244. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +6 -0
  245. data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +377 -0
  246. data/spec/spec_tests/data/index_management/createSearchIndex.yml +64 -0
  247. data/spec/spec_tests/data/index_management/createSearchIndexes.yml +86 -0
  248. data/spec/spec_tests/data/index_management/dropSearchIndex.yml +43 -0
  249. data/spec/spec_tests/data/index_management/listSearchIndexes.yml +91 -0
  250. data/spec/spec_tests/data/index_management/updateSearchIndex.yml +46 -0
  251. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +3 -6
  252. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +3 -6
  253. data/spec/spec_tests/data/run_command_unified/runCommand.yml +319 -0
  254. data/spec/spec_tests/data/sessions_unified/driver-sessions-dirty-session-errors.yml +351 -0
  255. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +1 -1
  256. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +7 -7
  257. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +3 -4
  258. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +1 -1
  259. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +1 -1
  260. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -3
  261. data/spec/spec_tests/index_management_unified_spec.rb +13 -0
  262. data/spec/spec_tests/run_command_unified_spec.rb +13 -0
  263. data/spec/spec_tests/sdam_unified_spec.rb +2 -0
  264. data/spec/spec_tests/server_selection_rtt_spec.rb +6 -6
  265. data/spec/spec_tests/transactions_unified_spec.rb +2 -1
  266. data/spec/support/certificates/atlas-ocsp-ca.crt +89 -79
  267. data/spec/support/certificates/atlas-ocsp.crt +117 -122
  268. data/spec/support/certificates/retrieve-atlas-cert +1 -1
  269. data/spec/support/cluster_tools.rb +3 -3
  270. data/spec/support/common_shortcuts.rb +2 -2
  271. data/spec/support/constraints.rb +6 -0
  272. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +1 -1
  273. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +1 -1
  274. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +1 -1
  275. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +1 -1
  276. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +1 -1
  277. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +1 -1
  278. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +1 -1
  279. data/spec/support/ocsp +1 -1
  280. data/spec/support/recording_logger.rb +27 -0
  281. data/spec/support/shared/session.rb +2 -2
  282. data/spec/support/spec_config.rb +5 -0
  283. data/spec/support/spec_setup.rb +2 -2
  284. data/spec/support/utils.rb +3 -1
  285. metadata +1329 -1368
  286. checksums.yaml.gz.sig +0 -0
  287. data/spec/mongo/server/round_trip_time_averager_spec.rb +0 -48
  288. data/spec/shared/LICENSE +0 -20
  289. data/spec/shared/bin/get-mongodb-download-url +0 -17
  290. data/spec/shared/bin/s3-copy +0 -45
  291. data/spec/shared/bin/s3-upload +0 -69
  292. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  293. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  294. data/spec/shared/lib/mrss/constraints.rb +0 -378
  295. data/spec/shared/lib/mrss/docker_runner.rb +0 -295
  296. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
  297. data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
  298. data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
  299. data/spec/shared/lib/mrss/server_version_registry.rb +0 -113
  300. data/spec/shared/lib/mrss/session_registry.rb +0 -69
  301. data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
  302. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  303. data/spec/shared/lib/mrss/utils.rb +0 -37
  304. data/spec/shared/share/Dockerfile.erb +0 -330
  305. data/spec/shared/share/haproxy-1.conf +0 -16
  306. data/spec/shared/share/haproxy-2.conf +0 -17
  307. data/spec/shared/shlib/config.sh +0 -27
  308. data/spec/shared/shlib/distro.sh +0 -74
  309. data/spec/shared/shlib/server.sh +0 -416
  310. data/spec/shared/shlib/set_env.sh +0 -169
  311. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +0 -241
  312. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +0 -422
  313. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +0 -182
  314. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +0 -239
  315. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +0 -235
  316. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +0 -252
  317. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +0 -1687
  318. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +0 -293
  319. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +0 -905
  320. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +0 -1684
  321. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +0 -1680
  322. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +0 -1697
  323. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +0 -329
  324. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +0 -424
  325. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +0 -226
  326. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +0 -327
  327. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +0 -319
  328. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +0 -336
  329. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +0 -913
  330. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +0 -292
  331. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +0 -518
  332. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +0 -911
  333. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +0 -907
  334. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +0 -924
  335. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +0 -325
  336. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +0 -424
  337. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +0 -224
  338. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +0 -323
  339. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +0 -319
  340. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +0 -338
  341. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +0 -241
  342. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +0 -423
  343. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +0 -182
  344. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +0 -239
  345. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +0 -235
  346. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +0 -254
  347. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +0 -241
  348. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +0 -422
  349. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +0 -182
  350. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +0 -239
  351. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +0 -235
  352. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +0 -254
  353. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +0 -43
  354. data/spec/spec_tests/data/cmap/pool-clear-interrupt-immediately.yml +0 -49
  355. data.tar.gz.sig +0 -0
  356. metadata.gz.sig +0 -2
@@ -138,12 +138,19 @@ describe Mongo::QueryCache do
138
138
  end
139
139
 
140
140
  describe '#get' do
141
- let(:view) { double("Mongo::Collection::View") }
141
+ let(:view) do
142
+ double("Mongo::Collection::View").tap do |view|
143
+ allow(view).to receive(:client).and_return(client)
144
+ allow(view).to receive(:operation_timeouts).and_return({})
145
+ end
146
+ end
147
+
142
148
  let(:result) do
143
149
  double("Mongo::Operation::Result").tap do |result|
144
150
  allow(result).to receive(:is_a?).with(Mongo::Operation::Result).and_return(true)
145
151
  end
146
152
  end
153
+
147
154
  let(:server) { double("Mongo::Server") }
148
155
  let(:caching_cursor) { Mongo::CachingCursor.new(view, result, server) }
149
156
 
@@ -161,257 +168,268 @@ describe Mongo::QueryCache do
161
168
  allow(view).to receive(:limit) { nil }
162
169
  end
163
170
 
164
- context 'when there is no entry in the cache' do
165
- it 'returns nil' do
166
- expect(Mongo::QueryCache.get(**options)).to be_nil
167
- end
168
- end
169
-
170
- context 'when there is an entry in the cache' do
171
- before do
172
- Mongo::QueryCache.set(caching_cursor, **caching_cursor_options)
173
- end
174
-
175
- context 'when that entry has no limit' do
176
- let(:caching_cursor_options) do
177
- {
178
- namespace: 'db.coll',
179
- selector: { field: 'value' },
180
- }
181
- end
182
-
183
- let(:query_options) do
184
- caching_cursor_options.merge(limit: limit)
185
- end
186
-
187
- context 'when the query has a limit' do
188
- let(:limit) { 5 }
189
-
190
- it 'returns the caching cursor' do
191
- expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
192
- end
193
- end
194
-
195
- context 'when the query has a limit but negative' do
196
- let(:limit) { -5 }
197
-
198
- it 'returns the caching cursor' do
199
- expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
200
- end
201
- end
202
-
203
- context 'when the query has no limit' do
204
- let(:limit) { nil }
205
-
206
- it 'returns the caching cursor' do
207
- expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
208
- end
209
- end
210
-
211
- context 'when the query has a 0 limit' do
212
- let(:limit) { 0 }
213
-
214
- it 'returns the caching cursor' do
215
- expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
216
- end
217
- end
218
- end
219
-
220
- context 'when that entry has a 0 limit' do
221
- let(:caching_cursor_options) do
222
- {
223
- namespace: 'db.coll',
224
- selector: { field: 'value' },
225
- limit: 0,
226
- }
227
- end
228
-
229
- let(:query_options) do
230
- caching_cursor_options.merge(limit: limit)
231
- end
232
-
233
- before do
234
- allow(view).to receive(:limit) { 0 }
235
- end
236
-
237
- context 'when the query has a limit' do
238
- let(:limit) { 5 }
239
-
240
- it 'returns the caching cursor' do
241
- expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
242
- end
243
- end
244
-
245
- context 'when the query has a limit but negative' do
246
- let(:limit) { -5 }
247
-
248
- it 'returns the caching cursor' do
249
- expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
250
- end
251
- end
252
-
253
-
254
- context 'when the query has no limit' do
255
- let(:limit) { nil }
256
-
257
- it 'returns the caching cursor' do
258
- expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
259
- end
260
- end
261
-
262
- context 'when the query has a 0 limit' do
263
- let(:limit) { 0 }
264
-
265
- it 'returns the caching cursor' do
266
- expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
267
- end
268
- end
269
- end
270
-
271
- context 'when that entry has a limit' do
272
- let(:caching_cursor_options) do
273
- {
274
- namespace: 'db.coll',
275
- selector: { field: 'value' },
276
- limit: 5,
277
- }
278
- end
279
-
280
- let(:query_options) do
281
- caching_cursor_options.merge(limit: limit)
282
- end
283
-
171
+ [true, false].each do |load_balancer|
172
+ context "when load_balancer is #{load_balancer}" do
284
173
  before do
285
- allow(view).to receive(:limit) { 5 }
286
- end
287
-
288
- context 'and the new query has a smaller limit' do
289
- let(:limit) { 4 }
290
-
291
- it 'returns the caching cursor' do
292
- expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
293
- end
294
- end
295
-
296
- context 'and the new query has a smaller limit but negative' do
297
- let(:limit) { -4 }
298
-
299
- it 'returns the caching cursor' do
300
- expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
174
+ allow(server).to receive(:load_balancer?) { load_balancer }
175
+ if load_balancer
176
+ allow(result).to receive(:connection) { nil }
301
177
  end
302
178
  end
303
179
 
304
- context 'and the new query has a larger limit' do
305
- let(:limit) { 6 }
306
-
180
+ context 'when there is no entry in the cache' do
307
181
  it 'returns nil' do
308
- expect(Mongo::QueryCache.get(**query_options)).to be_nil
182
+ expect(Mongo::QueryCache.get(**options)).to be_nil
309
183
  end
310
184
  end
311
185
 
312
- context 'and the new query has a larger limit but negative' do
313
- let(:limit) { -6 }
314
-
315
- it 'returns nil' do
316
- expect(Mongo::QueryCache.get(**query_options)).to be_nil
317
- end
318
- end
319
-
320
- context 'and the new query has the same limit' do
321
- let(:limit) { 5 }
322
-
323
- it 'returns the caching cursor' do
324
- expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
325
- end
326
- end
327
-
328
- context 'and the new query has the same limit but negative' do
329
- let(:limit) { -5 }
330
-
331
- it 'returns the caching cursor' do
332
- expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
186
+ context 'when there is an entry in the cache' do
187
+ before do
188
+ Mongo::QueryCache.set(caching_cursor, **caching_cursor_options)
333
189
  end
334
- end
335
-
336
- context 'and the new query has no limit' do
337
- let(:limit) { nil }
338
190
 
339
- it 'returns nil' do
340
- expect(Mongo::QueryCache.get(**query_options)).to be_nil
191
+ context 'when that entry has no limit' do
192
+ let(:caching_cursor_options) do
193
+ {
194
+ namespace: 'db.coll',
195
+ selector: { field: 'value' },
196
+ }
197
+ end
198
+
199
+ let(:query_options) do
200
+ caching_cursor_options.merge(limit: limit)
201
+ end
202
+
203
+ context 'when the query has a limit' do
204
+ let(:limit) { 5 }
205
+
206
+ it 'returns the caching cursor' do
207
+ expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
208
+ end
209
+ end
210
+
211
+ context 'when the query has a limit but negative' do
212
+ let(:limit) { -5 }
213
+
214
+ it 'returns the caching cursor' do
215
+ expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
216
+ end
217
+ end
218
+
219
+ context 'when the query has no limit' do
220
+ let(:limit) { nil }
221
+
222
+ it 'returns the caching cursor' do
223
+ expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
224
+ end
225
+ end
226
+
227
+ context 'when the query has a 0 limit' do
228
+ let(:limit) { 0 }
229
+
230
+ it 'returns the caching cursor' do
231
+ expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
232
+ end
233
+ end
341
234
  end
342
- end
343
235
 
344
- context 'and the new query has a 0 limit' do
345
- let(:limit) { 0 }
236
+ context 'when that entry has a 0 limit' do
237
+ let(:caching_cursor_options) do
238
+ {
239
+ namespace: 'db.coll',
240
+ selector: { field: 'value' },
241
+ limit: 0,
242
+ }
243
+ end
346
244
 
347
- it 'returns nil' do
348
- expect(Mongo::QueryCache.get(**query_options)).to be_nil
349
- end
350
- end
351
- end
352
-
353
- context 'when that entry has a negative limit' do
354
- let(:caching_cursor_options) do
355
- {
356
- namespace: 'db.coll',
357
- selector: { field: 'value' },
358
- limit: -5,
359
- }
360
- end
245
+ let(:query_options) do
246
+ caching_cursor_options.merge(limit: limit)
247
+ end
361
248
 
362
- let(:query_options) do
363
- caching_cursor_options.merge(limit: limit)
364
- end
249
+ before do
250
+ allow(view).to receive(:limit) { 0 }
251
+ end
365
252
 
366
- before do
367
- allow(view).to receive(:limit) { -5 }
368
- end
253
+ context 'when the query has a limit' do
254
+ let(:limit) { 5 }
369
255
 
370
- context 'and the new query has a smaller limit' do
371
- let(:limit) { 4 }
256
+ it 'returns the caching cursor' do
257
+ expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
258
+ end
259
+ end
372
260
 
373
- it 'returns the caching cursor' do
374
- expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
375
- end
376
- end
261
+ context 'when the query has a limit but negative' do
262
+ let(:limit) { -5 }
377
263
 
378
- context 'and the new query has a larger limit' do
379
- let(:limit) { 6 }
264
+ it 'returns the caching cursor' do
265
+ expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
266
+ end
267
+ end
380
268
 
381
- it 'returns nil' do
382
- expect(Mongo::QueryCache.get(**query_options)).to be_nil
383
- end
384
- end
385
269
 
386
- context 'and the new query has the same negative limit' do
387
- let(:limit) { -5 }
270
+ context 'when the query has no limit' do
271
+ let(:limit) { nil }
388
272
 
389
- it 'returns the caching cursor' do
390
- expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
391
- end
392
- end
273
+ it 'returns the caching cursor' do
274
+ expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
275
+ end
276
+ end
393
277
 
394
- context 'and the new query has the same positive limit' do
395
- let(:limit) { 5 }
278
+ context 'when the query has a 0 limit' do
279
+ let(:limit) { 0 }
396
280
 
397
- it 'returns the caching cursor' do
398
- expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
281
+ it 'returns the caching cursor' do
282
+ expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
283
+ end
284
+ end
399
285
  end
400
- end
401
-
402
- context 'and the new query has no limit' do
403
- let(:limit) { nil }
404
286
 
405
- it 'returns nil' do
406
- expect(Mongo::QueryCache.get(**query_options)).to be_nil
287
+ context 'when that entry has a limit' do
288
+ let(:caching_cursor_options) do
289
+ {
290
+ namespace: 'db.coll',
291
+ selector: { field: 'value' },
292
+ limit: 5,
293
+ }
294
+ end
295
+
296
+ let(:query_options) do
297
+ caching_cursor_options.merge(limit: limit)
298
+ end
299
+
300
+ before do
301
+ allow(view).to receive(:limit) { 5 }
302
+ end
303
+
304
+ context 'and the new query has a smaller limit' do
305
+ let(:limit) { 4 }
306
+
307
+ it 'returns the caching cursor' do
308
+ expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
309
+ end
310
+ end
311
+
312
+ context 'and the new query has a smaller limit but negative' do
313
+ let(:limit) { -4 }
314
+
315
+ it 'returns the caching cursor' do
316
+ expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
317
+ end
318
+ end
319
+
320
+ context 'and the new query has a larger limit' do
321
+ let(:limit) { 6 }
322
+
323
+ it 'returns nil' do
324
+ expect(Mongo::QueryCache.get(**query_options)).to be_nil
325
+ end
326
+ end
327
+
328
+ context 'and the new query has a larger limit but negative' do
329
+ let(:limit) { -6 }
330
+
331
+ it 'returns nil' do
332
+ expect(Mongo::QueryCache.get(**query_options)).to be_nil
333
+ end
334
+ end
335
+
336
+ context 'and the new query has the same limit' do
337
+ let(:limit) { 5 }
338
+
339
+ it 'returns the caching cursor' do
340
+ expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
341
+ end
342
+ end
343
+
344
+ context 'and the new query has the same limit but negative' do
345
+ let(:limit) { -5 }
346
+
347
+ it 'returns the caching cursor' do
348
+ expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
349
+ end
350
+ end
351
+
352
+ context 'and the new query has no limit' do
353
+ let(:limit) { nil }
354
+
355
+ it 'returns nil' do
356
+ expect(Mongo::QueryCache.get(**query_options)).to be_nil
357
+ end
358
+ end
359
+
360
+ context 'and the new query has a 0 limit' do
361
+ let(:limit) { 0 }
362
+
363
+ it 'returns nil' do
364
+ expect(Mongo::QueryCache.get(**query_options)).to be_nil
365
+ end
366
+ end
407
367
  end
408
- end
409
-
410
- context 'and the new query has a 0 limit' do
411
- let(:limit) { 0 }
412
368
 
413
- it 'returns nil' do
414
- expect(Mongo::QueryCache.get(**query_options)).to be_nil
369
+ context 'when that entry has a negative limit' do
370
+ let(:caching_cursor_options) do
371
+ {
372
+ namespace: 'db.coll',
373
+ selector: { field: 'value' },
374
+ limit: -5,
375
+ }
376
+ end
377
+
378
+ let(:query_options) do
379
+ caching_cursor_options.merge(limit: limit)
380
+ end
381
+
382
+ before do
383
+ allow(view).to receive(:limit) { -5 }
384
+ end
385
+
386
+ context 'and the new query has a smaller limit' do
387
+ let(:limit) { 4 }
388
+
389
+ it 'returns the caching cursor' do
390
+ expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
391
+ end
392
+ end
393
+
394
+ context 'and the new query has a larger limit' do
395
+ let(:limit) { 6 }
396
+
397
+ it 'returns nil' do
398
+ expect(Mongo::QueryCache.get(**query_options)).to be_nil
399
+ end
400
+ end
401
+
402
+ context 'and the new query has the same negative limit' do
403
+ let(:limit) { -5 }
404
+
405
+ it 'returns the caching cursor' do
406
+ expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
407
+ end
408
+ end
409
+
410
+ context 'and the new query has the same positive limit' do
411
+ let(:limit) { 5 }
412
+
413
+ it 'returns the caching cursor' do
414
+ expect(Mongo::QueryCache.get(**query_options)).to eq(caching_cursor)
415
+ end
416
+ end
417
+
418
+ context 'and the new query has no limit' do
419
+ let(:limit) { nil }
420
+
421
+ it 'returns nil' do
422
+ expect(Mongo::QueryCache.get(**query_options)).to be_nil
423
+ end
424
+ end
425
+
426
+ context 'and the new query has a 0 limit' do
427
+ let(:limit) { 0 }
428
+
429
+ it 'returns nil' do
430
+ expect(Mongo::QueryCache.get(**query_options)).to be_nil
431
+ end
432
+ end
415
433
  end
416
434
  end
417
435
  end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Mongo::Retryable::WriteWorker do
6
+ describe '#nro_write_with_retry' do
7
+ context 'when session is nil' do
8
+ let(:retryable) do
9
+ authorized_client['write_worker_test']
10
+ end
11
+
12
+ let(:write_concern) do
13
+ Mongo::WriteConcern.get(w: 0)
14
+ end
15
+
16
+ let(:write_worker) do
17
+ described_class.new(retryable)
18
+ end
19
+
20
+ let(:context) do
21
+ instance_double(Mongo::Operation::Context).tap do |context|
22
+ allow(context).to receive(:session).and_return(nil)
23
+ end
24
+ end
25
+
26
+ before do
27
+ # We avoid actual execution of the operation to speed up and simplify
28
+ # the spec.
29
+ allow(write_worker).to receive(:legacy_write_with_retry).and_return(nil)
30
+ end
31
+
32
+ it 'does not raise' do
33
+ expect do
34
+ write_worker.nro_write_with_retry(write_concern, context: context)
35
+ end.not_to raise_error
36
+ end
37
+ end
38
+ end
39
+ end
@@ -76,6 +76,7 @@ class ModernRetryableTestConsumer < LegacyRetryableTestConsumer
76
76
  allow(session).to receive(:pinned_connection_global_id)
77
77
  allow(session).to receive(:starting_transaction?).and_return(false)
78
78
  allow(session).to receive(:materialize)
79
+ allow(session).to receive(:with_transaction_deadline).and_return(nil)
79
80
  end
80
81
  end
81
82