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
@@ -2,8 +2,12 @@
2
2
  # rubocop:todo all
3
3
 
4
4
  require 'spec_helper'
5
+ require_relative '../shared/csot/examples'
5
6
 
6
7
  describe Mongo::Operation::Create::OpMsg do
8
+ include CSOT::Examples
9
+
10
+ let(:context) { Mongo::Operation::Context.new }
7
11
 
8
12
  let(:write_concern) do
9
13
  Mongo::WriteConcern.get(w: :majority)
@@ -73,8 +77,6 @@ describe Mongo::Operation::Create::OpMsg do
73
77
  end
74
78
 
75
79
  describe '#selector' do
76
- min_server_fcv '3.6'
77
-
78
80
  it 'does not mutate user input' do
79
81
  user_input = IceNine.deep_freeze(spec.dup)
80
82
  expect do
@@ -87,158 +89,152 @@ describe Mongo::Operation::Create::OpMsg do
87
89
  # https://jira.mongodb.org/browse/RUBY-2224
88
90
  require_no_linting
89
91
 
90
- context 'when the server supports OP_MSG' do
92
+ let(:global_args) do
93
+ {
94
+ create: TEST_COLL,
95
+ writeConcern: write_concern.options,
96
+ '$db' => SpecConfig.instance.test_db,
97
+ lsid: session.session_id
98
+ }
99
+ end
100
+
101
+ let(:session) do
102
+ authorized_client.start_session
103
+ end
91
104
 
92
- let(:global_args) do
93
- {
94
- create: TEST_COLL,
95
- writeConcern: write_concern.options,
96
- '$db' => SpecConfig.instance.test_db,
97
- lsid: session.session_id
98
- }
105
+ context 'when the topology is replica set or sharded' do
106
+ require_topology :replica_set, :sharded
107
+
108
+ let(:expected_global_args) do
109
+ global_args.merge(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
99
110
  end
100
111
 
101
- let(:session) do
102
- authorized_client.start_session
112
+ it 'creates the correct OP_MSG message' do
113
+ authorized_client.command(ping:1)
114
+ expect(Mongo::Protocol::Msg).to receive(:new).with([], {}, expected_global_args)
115
+ op.send(:message, connection)
103
116
  end
117
+ end
104
118
 
105
- context 'when the topology is replica set or sharded' do
106
- min_server_fcv '3.6'
107
- require_topology :replica_set, :sharded
119
+ context 'when the topology is standalone' do
120
+ require_topology :single
108
121
 
109
- let(:expected_global_args) do
110
- global_args.merge(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
111
- end
122
+ let(:expected_global_args) do
123
+ global_args
124
+ end
112
125
 
113
- it 'creates the correct OP_MSG message' do
114
- authorized_client.command(ping:1)
115
- expect(Mongo::Protocol::Msg).to receive(:new).with([], {}, expected_global_args)
116
- op.send(:message, connection)
117
- end
126
+ it 'creates the correct OP_MSG message' do
127
+ authorized_client.command(ping:1)
128
+ expect(Mongo::Protocol::Msg).to receive(:new).with([], {}, expected_global_args)
129
+ op.send(:message, connection)
118
130
  end
119
131
 
120
- context 'when the topology is standalone' do
121
- min_server_fcv '3.6'
122
- require_topology :single
132
+ context 'when an implicit session is created and the topology is then updated and the server does not support sessions' do
133
+ # Mocks on features are incompatible with linting
134
+ require_no_linting
123
135
 
124
136
  let(:expected_global_args) do
125
- global_args
126
- end
127
-
128
- it 'creates the correct OP_MSG message' do
129
- authorized_client.command(ping:1)
130
- expect(Mongo::Protocol::Msg).to receive(:new).with([], {}, expected_global_args)
131
- op.send(:message, connection)
132
- end
133
-
134
- context 'when an implicit session is created and the topology is then updated and the server does not support sessions' do
135
- # Mocks on features are incompatible with linting
136
- require_no_linting
137
-
138
- let(:expected_global_args) do
139
- global_args.dup.tap do |args|
140
- args.delete(:lsid)
141
- end
137
+ global_args.dup.tap do |args|
138
+ args.delete(:lsid)
142
139
  end
140
+ end
143
141
 
144
- let(:session) do
145
- Mongo::Session.new(nil, authorized_client, implicit: true).tap do |session|
146
- allow(session).to receive(:session_id).and_return(42)
147
- session.should be_implicit
148
- end
142
+ let(:session) do
143
+ Mongo::Session.new(nil, authorized_client, implicit: true).tap do |session|
144
+ allow(session).to receive(:session_id).and_return(42)
145
+ session.should be_implicit
149
146
  end
147
+ end
150
148
 
151
- it 'creates the correct OP_MSG message' do
152
- RSpec::Mocks.with_temporary_scope do
153
- expect(connection.features).to receive(:sessions_enabled?).and_return(false)
149
+ it 'creates the correct OP_MSG message' do
150
+ RSpec::Mocks.with_temporary_scope do
151
+ expect(connection.features).to receive(:sessions_enabled?).and_return(false)
154
152
 
155
- expect(expected_global_args[:session]).to be nil
156
- expect(Mongo::Protocol::Msg).to receive(:new).with([], {}, expected_global_args)
157
- op.send(:message, connection)
158
- end
153
+ expect(expected_global_args[:session]).to be nil
154
+ expect(Mongo::Protocol::Msg).to receive(:new).with([], {}, expected_global_args)
155
+ op.send(:message, connection)
159
156
  end
160
157
  end
161
158
  end
159
+ end
162
160
 
163
- context 'when the write concern is 0' do
161
+ context 'when the write concern is 0' do
164
162
 
165
- let(:write_concern) do
166
- Mongo::WriteConcern.get(w: 0)
167
- end
163
+ let(:write_concern) do
164
+ Mongo::WriteConcern.get(w: 0)
165
+ end
168
166
 
169
- context 'when the session is implicit' do
167
+ context 'when the session is implicit' do
170
168
 
171
- let(:session) do
172
- Mongo::Session.new(nil, authorized_client, implicit: true).tap do |session|
173
- allow(session).to receive(:session_id).and_return(42)
174
- session.should be_implicit
175
- end
169
+ let(:session) do
170
+ Mongo::Session.new(nil, authorized_client, implicit: true).tap do |session|
171
+ allow(session).to receive(:session_id).and_return(42)
172
+ session.should be_implicit
176
173
  end
174
+ end
177
175
 
178
- context 'when the topology is replica set or sharded' do
179
- min_server_fcv '3.6'
180
- require_topology :replica_set, :sharded
176
+ context 'when the topology is replica set or sharded' do
177
+ require_topology :replica_set, :sharded
181
178
 
182
- let(:expected_global_args) do
183
- global_args.dup.tap do |args|
184
- args.delete(:lsid)
185
- args.merge!(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
186
- end
179
+ let(:expected_global_args) do
180
+ global_args.dup.tap do |args|
181
+ args.delete(:lsid)
182
+ args.merge!(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
187
183
  end
184
+ end
188
185
 
189
- it 'does not send a session id in the command' do
190
- authorized_client.command(ping:1)
191
- expect(Mongo::Protocol::Msg).to receive(:new).with([:more_to_come], {}, expected_global_args)
192
- op.send(:message, connection)
193
- end
186
+ it 'does not send a session id in the command' do
187
+ authorized_client.command(ping:1)
188
+ expect(Mongo::Protocol::Msg).to receive(:new).with([:more_to_come], {}, expected_global_args)
189
+ op.send(:message, connection)
194
190
  end
191
+ end
195
192
 
196
- context 'when the topology is standalone' do
197
- min_server_fcv '3.6'
198
- require_topology :single
193
+ context 'when the topology is standalone' do
194
+ require_topology :single
199
195
 
200
- let(:expected_global_args) do
201
- global_args.dup.tap do |args|
202
- args.delete(:lsid)
203
- end
196
+ let(:expected_global_args) do
197
+ global_args.dup.tap do |args|
198
+ args.delete(:lsid)
204
199
  end
200
+ end
205
201
 
206
- it 'creates the correct OP_MSG message' do
207
- authorized_client.command(ping:1)
208
- expect(Mongo::Protocol::Msg).to receive(:new).with([:more_to_come], {}, expected_global_args)
209
- op.send(:message, connection)
210
- end
202
+ it 'creates the correct OP_MSG message' do
203
+ authorized_client.command(ping:1)
204
+ expect(Mongo::Protocol::Msg).to receive(:new).with([:more_to_come], {}, expected_global_args)
205
+ op.send(:message, connection)
211
206
  end
212
207
  end
208
+ end
213
209
 
214
- context 'when the session is explicit' do
215
- min_server_fcv '3.6'
216
- require_topology :replica_set, :sharded
210
+ context 'when the session is explicit' do
211
+ require_topology :replica_set, :sharded
217
212
 
218
- let(:session) do
219
- authorized_client.start_session
220
- end
213
+ let(:session) do
214
+ authorized_client.start_session
215
+ end
221
216
 
222
- before do
223
- session.should_not be_implicit
224
- end
217
+ before do
218
+ session.should_not be_implicit
219
+ end
225
220
 
226
- let(:expected_global_args) do
227
- global_args.dup.tap do |args|
228
- args.delete(:lsid)
229
- args.merge!(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
230
- end
221
+ let(:expected_global_args) do
222
+ global_args.dup.tap do |args|
223
+ args.delete(:lsid)
224
+ args.merge!(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
231
225
  end
226
+ end
232
227
 
233
- it 'does not send a session id in the command' do
234
- authorized_client.command(ping:1)
235
- RSpec::Mocks.with_temporary_scope do
236
- expect(Mongo::Protocol::Msg).to receive(:new).with([:more_to_come], {}, expected_global_args)
237
- op.send(:message, connection)
238
- end
228
+ it 'does not send a session id in the command' do
229
+ authorized_client.command(ping:1)
230
+ RSpec::Mocks.with_temporary_scope do
231
+ expect(Mongo::Protocol::Msg).to receive(:new).with([:more_to_come], {}, expected_global_args)
232
+ op.send(:message, connection)
239
233
  end
240
234
  end
241
235
  end
242
236
  end
243
237
  end
238
+
239
+ it_behaves_like 'a CSOT-compliant OpMsg subclass'
244
240
  end
@@ -2,8 +2,12 @@
2
2
  # rubocop:todo all
3
3
 
4
4
  require 'spec_helper'
5
+ require_relative '../shared/csot/examples'
5
6
 
6
7
  describe Mongo::Operation::Delete::OpMsg do
8
+ include CSOT::Examples
9
+
10
+ let(:context) { Mongo::Operation::Context.new }
7
11
 
8
12
  let(:write_concern) do
9
13
  Mongo::WriteConcern.get(w: :majority)
@@ -125,7 +129,6 @@ describe Mongo::Operation::Delete::OpMsg do
125
129
  end
126
130
 
127
131
  context 'when the topology is replica set or sharded' do
128
- min_server_fcv '3.6'
129
132
  require_topology :replica_set, :sharded
130
133
 
131
134
  let(:expected_global_args) do
@@ -140,7 +143,6 @@ describe Mongo::Operation::Delete::OpMsg do
140
143
  end
141
144
 
142
145
  context 'when the topology is standalone' do
143
- min_server_fcv '3.6'
144
146
  require_topology :single
145
147
 
146
148
  let(:expected_global_args) do
@@ -198,7 +200,6 @@ describe Mongo::Operation::Delete::OpMsg do
198
200
  end
199
201
 
200
202
  context 'when the topology is replica set or sharded' do
201
- min_server_fcv '3.6'
202
203
  require_topology :replica_set, :sharded
203
204
 
204
205
  let(:expected_global_args) do
@@ -216,7 +217,6 @@ describe Mongo::Operation::Delete::OpMsg do
216
217
  end
217
218
 
218
219
  context 'when the topology is standalone' do
219
- min_server_fcv '3.6'
220
220
  require_topology :single
221
221
 
222
222
  let(:expected_global_args) do
@@ -234,7 +234,6 @@ describe Mongo::Operation::Delete::OpMsg do
234
234
  end
235
235
 
236
236
  context 'when the session is explicit' do
237
- min_server_fcv '3.6'
238
237
  require_topology :replica_set, :sharded
239
238
 
240
239
  let(:session) do
@@ -263,4 +262,6 @@ describe Mongo::Operation::Delete::OpMsg do
263
262
  end
264
263
  end
265
264
  end
265
+
266
+ it_behaves_like 'a CSOT-compliant OpMsg subclass'
266
267
  end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require_relative '../shared/csot/examples'
5
+
6
+ describe Mongo::Operation::Find::OpMsg do
7
+ include CSOT::Examples
8
+
9
+ let(:spec) do
10
+ { coll_name: 'coll_name',
11
+ filter: {},
12
+ db_name: 'db_name' }
13
+ end
14
+
15
+ let(:op) { described_class.new(spec) }
16
+
17
+ context 'when it is a CSOT-compliant OpMsg' do
18
+ include_examples 'mock CSOT environment'
19
+
20
+ context 'when no timeout_ms set' do
21
+ it 'does not set maxTimeMS' do
22
+ expect(body.key?(:maxTimeMS)).to be false
23
+ end
24
+ end
25
+
26
+ context 'when timeout_ms is set' do
27
+ let(:remaining_timeout_sec) { 3 }
28
+
29
+ context 'when cursor is non-tailable' do
30
+ let(:cursor_type) { nil }
31
+
32
+ context 'when timeout_mode is cursor_lifetime' do
33
+ let(:timeout_mode) { :cursor_lifetime }
34
+
35
+ it 'sets maxTimeMS' do
36
+ expect(body[:maxTimeMS]).to be == 3_000
37
+ end
38
+ end
39
+
40
+ context 'when timeout_mode is iteration' do
41
+ let(:timeout_mode) { :iteration }
42
+
43
+ it 'omits maxTimeMS' do
44
+ expect(body[:maxTimeMS]).to be_nil
45
+ end
46
+ end
47
+ end
48
+
49
+ context 'when cursor is tailable' do
50
+ let(:cursor_type) { :tailable }
51
+
52
+ it 'omits maxTimeMS' do
53
+ expect(body[:maxTimeMS]).to be_nil
54
+ end
55
+ end
56
+
57
+ context 'when cursor is tailable_await' do
58
+ let(:cursor_type) { :tailable_await }
59
+
60
+ it 'sets maxTimeMS' do
61
+ expect(body[:maxTimeMS]).to be == 3_000
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require_relative '../shared/csot/examples'
5
+
6
+ describe Mongo::Operation::GetMore::OpMsg do
7
+ include CSOT::Examples
8
+
9
+ let(:spec) do
10
+ {
11
+ options: {},
12
+ db_name: 'db_name',
13
+ coll_name: 'coll_name',
14
+ cursor_id: 1_234_567_890,
15
+ }
16
+ end
17
+
18
+ let(:op) { described_class.new(spec) }
19
+
20
+ context 'when it is a CSOT-compliant OpMsg' do
21
+ include_examples 'mock CSOT environment'
22
+
23
+ context 'when no timeout_ms set' do
24
+ it 'does not set maxTimeMS' do
25
+ expect(body.key?(:maxTimeMS)).to be false
26
+ end
27
+ end
28
+
29
+ context 'when timeout_ms is set' do
30
+ let(:remaining_timeout_sec) { 3 }
31
+
32
+ context 'when cursor is non-tailable' do
33
+ it 'omits maxTimeMS' do
34
+ expect(body[:maxTimeMS]).to be_nil
35
+ end
36
+ end
37
+
38
+ context 'when cursor is tailable' do
39
+ let(:cursor_type) { :tailable }
40
+
41
+ it 'omits maxTimeMS' do
42
+ expect(body[:maxTimeMS]).to be_nil
43
+ end
44
+ end
45
+
46
+ context 'when cursor is tailable_await' do
47
+ let(:cursor_type) { :tailable_await }
48
+
49
+ context 'when max_await_time_ms is omitted' do
50
+ it 'omits maxTimeMS' do
51
+ expect(body[:maxTimeMS]).to be_nil
52
+ end
53
+ end
54
+
55
+ context 'when max_await_time_ms is given' do
56
+ let(:max_await_time_ms) { 1_234 }
57
+
58
+ it 'sets maxTimeMS' do
59
+ expect(body[:maxTimeMS]).to be == 1_234
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end