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
@@ -507,7 +507,7 @@ describe Mongo::Collection::View::ChangeStream do
507
507
  end
508
508
 
509
509
  it 'includes the max_await_time value in the formatted string' do
510
- expect(change_stream.inspect).to include({ max_await_time_ms: 10 }.to_s)
510
+ expect(change_stream.inspect).to include({ 'max_await_time_ms' => 10 }.to_s)
511
511
  end
512
512
  end
513
513
 
@@ -518,7 +518,7 @@ describe Mongo::Collection::View::ChangeStream do
518
518
  end
519
519
 
520
520
  it 'includes the batch_size value in the formatted string' do
521
- expect(change_stream.inspect).to include({ batch_size: 5 }.to_s)
521
+ expect(change_stream.inspect).to include({ 'batch_size' => 5 }.to_s)
522
522
  end
523
523
  end
524
524
 
@@ -529,7 +529,7 @@ describe Mongo::Collection::View::ChangeStream do
529
529
  end
530
530
 
531
531
  it 'includes the collation value in the formatted string' do
532
- expect(change_stream.inspect).to include({ 'collation' => { locale: 'en_US', strength: 2 } }.to_s)
532
+ expect(change_stream.inspect).to include({ 'collation' => { 'locale' => 'en_US', 'strength' => 2 } }.to_s)
533
533
  end
534
534
  end
535
535
 
@@ -42,6 +42,7 @@ describe Mongo::Collection::View::Explainable do
42
42
  max_server_version '3.0'
43
43
 
44
44
  it 'executes the explain' do
45
+ skip 'https://jira.mongodb.org/browse/RUBY-3399'
45
46
  explain[:queryPlanner][:parsedQuery].should be_a(Hash)
46
47
  end
47
48
  end
@@ -50,6 +51,7 @@ describe Mongo::Collection::View::Explainable do
50
51
  min_server_fcv '3.2'
51
52
 
52
53
  it 'executes the explain' do
54
+ skip 'https://jira.mongodb.org/browse/RUBY-3399'
53
55
  explain[:queryPlanner][:mongosPlannerVersion].should == 1
54
56
  end
55
57
  end
@@ -4,6 +4,7 @@
4
4
  require 'spec_helper'
5
5
 
6
6
  describe Mongo::Collection do
7
+ retry_test
7
8
 
8
9
  let(:subscriber) { Mrss::EventSubscriber.new }
9
10
 
@@ -2491,7 +2492,7 @@ describe Mongo::Collection do
2491
2492
  end
2492
2493
 
2493
2494
  let(:updated) do
2494
- authorized_collection.find.to_a.last
2495
+ authorized_collection.find.sort(_id: 1).to_a.last
2495
2496
  end
2496
2497
 
2497
2498
  it 'reports that a document was written' do
@@ -828,13 +828,12 @@ describe Mongo::Collection do
828
828
 
829
829
  let(:enum) { change_stream.to_enum }
830
830
 
831
+ let(:get_more) { subscriber.started_events.detect { |e| e.command['getMore'] }.command }
832
+
831
833
  it 'sets the option correctly' do
832
- expect(change_stream.instance_variable_get(:@cursor)).to receive(:get_more_operation).once.and_wrap_original do |m, *args, &block|
833
- m.call(*args).tap do |op|
834
- expect(op.max_time_ms).to eq(3000)
835
- end
836
- end
837
- enum.next
834
+ enum.try_next
835
+ expect(get_more).not_to be_nil
836
+ expect(get_more['maxTimeMS']).to be == 3000
838
837
  end
839
838
 
840
839
  it "waits the appropriate amount of time" do
@@ -58,6 +58,8 @@ describe Mongo::Crypt::AutoEncrypter do
58
58
  )
59
59
  end
60
60
 
61
+ let(:operation_context) { Mongo::Operation::Context.new }
62
+
61
63
  shared_context 'with jsonSchema validator' do
62
64
  before do
63
65
  users_collection = client.use(db_name)[collection_name]
@@ -81,14 +83,14 @@ describe Mongo::Crypt::AutoEncrypter do
81
83
  shared_examples 'a functioning auto encrypter' do
82
84
  describe '#encrypt' do
83
85
  it 'replaces the ssn field with a BSON::Binary' do
84
- result = auto_encrypter.encrypt(db_name, command)
86
+ result = auto_encrypter.encrypt(db_name, command, operation_context)
85
87
  expect(result).to eq(encrypted_command)
86
88
  end
87
89
  end
88
90
 
89
91
  describe '#decrypt' do
90
92
  it 'returns the unencrypted document' do
91
- result = auto_encrypter.decrypt(encrypted_command)
93
+ result = auto_encrypter.decrypt(encrypted_command, operation_context)
92
94
  expect(result).to eq(command)
93
95
  end
94
96
  end
@@ -329,14 +331,14 @@ describe Mongo::Crypt::AutoEncrypter do
329
331
 
330
332
  describe '#encrypt' do
331
333
  it 'does not perform encryption' do
332
- result = auto_encrypter.encrypt(db_name, command)
334
+ result = auto_encrypter.encrypt(db_name, command, operation_context)
333
335
  expect(result).to eq(command)
334
336
  end
335
337
  end
336
338
 
337
339
  describe '#decrypt' do
338
340
  it 'still performs decryption' do
339
- result = auto_encrypter.decrypt(encrypted_command)
341
+ result = auto_encrypter.decrypt(encrypted_command, operation_context)
340
342
  expect(result).to eq(command)
341
343
  end
342
344
  end
@@ -347,14 +349,14 @@ describe Mongo::Crypt::AutoEncrypter do
347
349
 
348
350
  describe '#encrypt' do
349
351
  it 'does not perform encryption' do
350
- result = auto_encrypter.encrypt(db_name, command)
352
+ result = auto_encrypter.encrypt(db_name, command, operation_context)
351
353
  expect(result).to eq(command)
352
354
  end
353
355
  end
354
356
 
355
357
  describe '#decrypt' do
356
358
  it 'still performs decryption' do
357
- result = auto_encrypter.decrypt(encrypted_command)
359
+ result = auto_encrypter.decrypt(encrypted_command, operation_context)
358
360
  expect(result).to eq(command)
359
361
  end
360
362
  end
@@ -365,14 +367,14 @@ describe Mongo::Crypt::AutoEncrypter do
365
367
 
366
368
  describe '#encrypt' do
367
369
  it 'does not perform encryption' do
368
- result = auto_encrypter.encrypt(db_name, command)
370
+ result = auto_encrypter.encrypt(db_name, command, operation_context)
369
371
  expect(result).to eq(command)
370
372
  end
371
373
  end
372
374
 
373
375
  describe '#decrypt' do
374
376
  it 'still performs decryption' do
375
- result = auto_encrypter.decrypt(encrypted_command)
377
+ result = auto_encrypter.decrypt(encrypted_command, operation_context)
376
378
  expect(result).to eq(command)
377
379
  end
378
380
  end
@@ -383,14 +385,14 @@ describe Mongo::Crypt::AutoEncrypter do
383
385
 
384
386
  describe '#encrypt' do
385
387
  it 'does not perform encryption' do
386
- result = auto_encrypter.encrypt(db_name, command)
388
+ result = auto_encrypter.encrypt(db_name, command, operation_context)
387
389
  expect(result).to eq(command)
388
390
  end
389
391
  end
390
392
 
391
393
  describe '#decrypt' do
392
394
  it 'still performs decryption' do
393
- result = auto_encrypter.decrypt(encrypted_command)
395
+ result = auto_encrypter.decrypt(encrypted_command, operation_context)
394
396
  expect(result).to eq(command)
395
397
  end
396
398
  end
@@ -401,14 +403,14 @@ describe Mongo::Crypt::AutoEncrypter do
401
403
 
402
404
  describe '#encrypt' do
403
405
  it 'does not perform encryption' do
404
- result = auto_encrypter.encrypt(db_name, command)
406
+ result = auto_encrypter.encrypt(db_name, command, operation_context)
405
407
  expect(result).to eq(command)
406
408
  end
407
409
  end
408
410
 
409
411
  describe '#decrypt' do
410
412
  it 'still performs decryption' do
411
- result = auto_encrypter.decrypt(encrypted_command)
413
+ result = auto_encrypter.decrypt(encrypted_command, operation_context)
412
414
  expect(result).to eq(command)
413
415
  end
414
416
  end
@@ -136,8 +136,10 @@ describe Mongo::Crypt::DataKeyContext do
136
136
  )
137
137
  end
138
138
 
139
+ let(:operation_context) { Mongo::Operation::Context.new }
140
+
139
141
  it 'creates a data key' do
140
- expect(context.run_state_machine).to be_a_kind_of(Hash)
142
+ expect(context.run_state_machine(operation_context)).to be_a_kind_of(Hash)
141
143
  end
142
144
  end
143
145
  end
@@ -139,7 +139,7 @@ describe Mongo::Crypt::ExplicitEncryptionContext do
139
139
  value,
140
140
  options.merge(query_type: "equality")
141
141
  )
142
- end.to raise_error(ArgumentError, /query_type is allowed only for "Indexed" or "RangePreview" algorithm/)
142
+ end.to raise_error(ArgumentError, /query_type is allowed only for "Indexed" or "Range" algorithm/)
143
143
  end
144
144
  end
145
145
 
@@ -154,7 +154,7 @@ describe Mongo::Crypt::ExplicitEncryptionContext do
154
154
  value,
155
155
  options.merge(contention_factor: 10)
156
156
  )
157
- end.to raise_error(ArgumentError, /contention_factor is allowed only for "Indexed" or "RangePreview" algorithm/)
157
+ end.to raise_error(ArgumentError, /contention_factor is allowed only for "Indexed" or "Range" algorithm/)
158
158
  end
159
159
  end
160
160
 
@@ -188,7 +188,7 @@ describe Mongo::Crypt::Handle do
188
188
  end
189
189
 
190
190
  it 'raises an exception' do
191
- expect { handle }.to raise_error(Mongo::Error::CryptError, 'local key must be 96 bytes (libmongocrypt error code 1)')
191
+ expect { handle }.to raise_error(Mongo::Error::CryptError, /local key must be 96 bytes \(libmongocrypt error code 1\)/)
192
192
  end
193
193
  end
194
194
 
@@ -8,6 +8,10 @@ describe Mongo::Cursor do
8
8
  authorized_client['cursor_spec_collection']
9
9
  end
10
10
 
11
+ let(:context) do
12
+ Mongo::Operation::Context.new(client: authorized_client)
13
+ end
14
+
11
15
  before do
12
16
  authorized_collection.drop
13
17
  end
@@ -18,7 +22,7 @@ describe Mongo::Cursor do
18
22
  end
19
23
 
20
24
  let(:reply) do
21
- view.send(:send_initial_query, server)
25
+ view.send(:send_initial_query, server, context)
22
26
  end
23
27
 
24
28
  let(:cursor) do
@@ -118,7 +122,7 @@ describe Mongo::Cursor do
118
122
  end
119
123
 
120
124
  let(:reply) do
121
- view.send(:send_initial_query, server)
125
+ view.send(:send_initial_query, server, context)
122
126
  end
123
127
 
124
128
  let(:cursor) do
@@ -170,7 +174,11 @@ describe Mongo::Cursor do
170
174
 
171
175
  before do
172
176
  expect(cursor).to receive(:get_more_operation).and_return(op).ordered
173
- expect(op).to receive(:execute).and_raise(Mongo::Error::SocketError).ordered
177
+ if SpecConfig.instance.connect_options[:connect] == :load_balanced
178
+ expect(op).to receive(:execute_with_connection).and_raise(Mongo::Error::SocketError).ordered
179
+ else
180
+ expect(op).to receive(:execute).and_raise(Mongo::Error::SocketError).ordered
181
+ end
174
182
  end
175
183
 
176
184
  it 'raises the error' do
@@ -617,6 +625,9 @@ describe Mongo::Cursor do
617
625
  allow(reply).to receive(:connection_description).and_return(conn_desc)
618
626
  allow(reply).to receive(:cursor_id).and_return(42)
619
627
  allow(reply).to receive(:connection_global_id).and_return(1)
628
+ if SpecConfig.instance.connect_options[:connect] == :load_balanced
629
+ allow(reply).to receive(:connection).and_return(nil)
630
+ end
620
631
  end
621
632
  end
622
633
 
@@ -645,7 +656,7 @@ describe Mongo::Cursor do
645
656
  end
646
657
 
647
658
  let(:reply) do
648
- view.send(:send_initial_query, authorized_primary)
659
+ view.send(:send_initial_query, authorized_primary, context)
649
660
  end
650
661
 
651
662
  let(:cursor) do
@@ -721,7 +732,7 @@ describe Mongo::Cursor do
721
732
  end
722
733
 
723
734
  let(:reply) do
724
- view.send(:send_initial_query, server)
735
+ view.send(:send_initial_query, server, context)
725
736
  end
726
737
 
727
738
  let(:cursor) do
@@ -770,10 +781,16 @@ describe Mongo::Cursor do
770
781
 
771
782
  it 'does not raise an error' do
772
783
  cursor
773
- server.with_connection do |conn|
774
- expect(conn).to receive(:deliver)
775
- .at_least(:once)
776
- .and_raise(Mongo::Error::SocketError, "test error")
784
+ if SpecConfig.instance.connect_options[:connect] == :load_balanced
785
+ expect(cursor.connection).to receive(:deliver)
786
+ .at_least(:once)
787
+ .and_raise(Mongo::Error::SocketError, "test error")
788
+ else
789
+ server.with_connection do |conn|
790
+ expect(conn).to receive(:deliver)
791
+ .at_least(:once)
792
+ .and_raise(Mongo::Error::SocketError, "test error")
793
+ end
777
794
  end
778
795
  expect do
779
796
  cursor.close
@@ -39,7 +39,7 @@ describe Mongo::Error::OperationFailure do
39
39
 
40
40
  begin
41
41
  authorized_client['foo'].insert_one(test: 1)
42
- rescue Mongo::Error::OperationFailure => exc
42
+ rescue Mongo::Error::OperationFailure::Family => exc
43
43
  expect(exc.details).to eq(exc.document['writeConcernError']['errInfo'])
44
44
  expect(exc.server_message).to eq(exc.document['writeConcernError']['errmsg'])
45
45
  expect(exc.code).to eq(exc.document['writeConcernError']['code'])
@@ -90,7 +90,7 @@ describe Mongo::Error::OperationFailure do
90
90
  it 'succeeds and prints the error' do
91
91
  begin
92
92
  collection.insert_one({x: 1})
93
- rescue Mongo::Error::OperationFailure => e
93
+ rescue Mongo::Error::OperationFailure::Family => e
94
94
  insert_events = subscriber.succeeded_events.select { |e| e.command_name == "insert" }
95
95
  expect(insert_events.length).to eq 1
96
96
  expect(e.message).to match(/\[#{e.code}(:.*)?\].+ -- .+/)
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'lite_spec_helper'
4
+
5
+ describe Mongo::Operation::Context do
6
+ describe '#initialize' do
7
+ context 'when timeout_ms is negative' do
8
+ it 'raises an error' do
9
+ expect do
10
+ described_class.new(operation_timeouts: { operation_timeout_ms: -1 })
11
+ end.to raise_error ArgumentError, /must be a non-negative integer/
12
+ end
13
+ end
14
+ end
15
+
16
+ describe '#deadline' do
17
+ let(:context) { described_class.new(operation_timeouts: { operation_timeout_ms: timeout_ms }) }
18
+
19
+ context 'when timeout_ms is nil' do
20
+ let(:timeout_ms) { nil }
21
+
22
+ it 'returns nil' do
23
+ expect(context.deadline).to be_nil
24
+ end
25
+ end
26
+
27
+ context 'when timeout_ms is zero' do
28
+ let(:timeout_ms) { 0 }
29
+
30
+ it 'returns nil' do
31
+ expect(context.deadline).to eq(0)
32
+ end
33
+ end
34
+
35
+ context 'when timeout_ms is positive' do
36
+ before do
37
+ allow(Mongo::Utils).to receive(:monotonic_time).and_return(100.0)
38
+ end
39
+
40
+ let(:timeout_ms) { 10_000 }
41
+
42
+ it 'calculates the deadline' do
43
+ expect(context.deadline).to eq(110)
44
+ end
45
+ end
46
+ end
47
+
48
+ describe '#remaining_timeout_ms' do
49
+ let(:context) { described_class.new(operation_timeouts: { operation_timeout_ms: timeout_ms }) }
50
+
51
+ context 'when timeout_ms is nil' do
52
+ let(:timeout_ms) { nil }
53
+
54
+ it 'returns nil' do
55
+ expect(context.remaining_timeout_ms).to be_nil
56
+ end
57
+ end
58
+
59
+ context 'when timeout_ms is zero' do
60
+ let(:timeout_ms) { 0 }
61
+
62
+ it 'returns nil' do
63
+ expect(context.remaining_timeout_ms).to be_nil
64
+ end
65
+ end
66
+
67
+ context 'when timeout_ms is positive' do
68
+ before do
69
+ allow(Mongo::Utils).to receive(:monotonic_time).and_return(100.0, 105.0)
70
+ end
71
+
72
+ let(:timeout_ms) { 10_000 }
73
+
74
+ it 'calculates the remaining time' do
75
+ expect(context.remaining_timeout_ms).to eq(5_000)
76
+ end
77
+ end
78
+ end
79
+ end