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
@@ -0,0 +1,247 @@
1
+ description: "timeoutMS behaves correctly for tailable awaitData cursors"
2
+
3
+ schemaVersion: "1.9"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.4"
7
+
8
+ createEntities:
9
+ - client:
10
+ id: &failPointClient failPointClient
11
+ useMultipleMongoses: false
12
+ - client:
13
+ id: &client client
14
+ uriOptions:
15
+ timeoutMS: 10
16
+ useMultipleMongoses: false
17
+ observeEvents:
18
+ - commandStartedEvent
19
+ - database:
20
+ id: &database database
21
+ client: *client
22
+ databaseName: &databaseName test
23
+ - collection:
24
+ id: &collection collection
25
+ database: *database
26
+ collectionName: &collectionName coll
27
+
28
+ initialData:
29
+ - collectionName: *collectionName
30
+ databaseName: *databaseName
31
+ createOptions:
32
+ capped: true
33
+ size: 500
34
+ documents:
35
+ - { _id: 0 }
36
+ - { _id: 1 }
37
+
38
+ tests:
39
+ - description: "error if timeoutMode is cursor_lifetime"
40
+ operations:
41
+ - name: find
42
+ object: *collection
43
+ arguments:
44
+ filter: {}
45
+ timeoutMode: cursorLifetime
46
+ cursorType: tailableAwait
47
+ expectError:
48
+ isClientError: true
49
+
50
+ - description: "error if maxAwaitTimeMS is greater than timeoutMS"
51
+ operations:
52
+ - name: find
53
+ object: *collection
54
+ arguments:
55
+ filter: {}
56
+ cursorType: tailableAwait
57
+ timeoutMS: 5
58
+ maxAwaitTimeMS: 10
59
+ expectError:
60
+ isClientError: true
61
+
62
+ - description: "error if maxAwaitTimeMS is equal to timeoutMS"
63
+ operations:
64
+ - name: find
65
+ object: *collection
66
+ arguments:
67
+ filter: {}
68
+ cursorType: tailableAwait
69
+ timeoutMS: 5
70
+ maxAwaitTimeMS: 5
71
+ expectError:
72
+ isClientError: true
73
+
74
+ - description: "timeoutMS applied to find"
75
+ operations:
76
+ - name: failPoint
77
+ object: testRunner
78
+ arguments:
79
+ client: *failPointClient
80
+ failPoint:
81
+ configureFailPoint: failCommand
82
+ mode: { times: 1 }
83
+ data:
84
+ failCommands: ["find"]
85
+ blockConnection: true
86
+ blockTimeMS: 15
87
+ - name: find
88
+ object: *collection
89
+ arguments:
90
+ filter: {}
91
+ cursorType: tailableAwait
92
+ expectError:
93
+ isTimeoutError: true
94
+ expectEvents:
95
+ - client: *client
96
+ events:
97
+ - commandStartedEvent:
98
+ commandName: find
99
+ databaseName: *databaseName
100
+ command:
101
+ find: *collectionName
102
+ tailable: true
103
+ awaitData: true
104
+ maxTimeMS: { $$exists: true }
105
+
106
+ # If maxAwaitTimeMS is not set, timeoutMS should be refreshed for the getMore and the getMore should not have a
107
+ # maxTimeMS field.
108
+ - description: "timeoutMS is refreshed for getMore if maxAwaitTimeMS is not set"
109
+ operations:
110
+ - name: failPoint
111
+ object: testRunner
112
+ arguments:
113
+ client: *failPointClient
114
+ failPoint:
115
+ configureFailPoint: failCommand
116
+ mode: { times: 2 }
117
+ data:
118
+ failCommands: ["find", "getMore"]
119
+ blockConnection: true
120
+ blockTimeMS: 15
121
+ - name: createFindCursor
122
+ object: *collection
123
+ arguments:
124
+ filter: {}
125
+ cursorType: tailableAwait
126
+ timeoutMS: 29
127
+ batchSize: 1
128
+ saveResultAsEntity: &tailableCursor tailableCursor
129
+ # Iterate twice to force a getMore. The first iteration will return the document from the first batch and the
130
+ # second will do a getMore.
131
+ - name: iterateUntilDocumentOrError
132
+ object: *tailableCursor
133
+ - name: iterateUntilDocumentOrError
134
+ object: *tailableCursor
135
+ expectEvents:
136
+ - client: *client
137
+ events:
138
+ - commandStartedEvent:
139
+ commandName: find
140
+ databaseName: *databaseName
141
+ command:
142
+ find: *collectionName
143
+ tailable: true
144
+ awaitData: true
145
+ maxTimeMS: { $$exists: true }
146
+ - commandStartedEvent:
147
+ commandName: getMore
148
+ databaseName: *databaseName
149
+ command:
150
+ getMore: { $$type: ["int", "long"] }
151
+ collection: *collectionName
152
+ maxTimeMS: { $$exists: false }
153
+
154
+ # If maxAwaitTimeMS is set for the initial command, timeoutMS should still be refreshed for the getMore and the
155
+ # getMore command should have a maxTimeMS field.
156
+ - description: "timeoutMS is refreshed for getMore if maxAwaitTimeMS is set"
157
+ operations:
158
+ - name: failPoint
159
+ object: testRunner
160
+ arguments:
161
+ client: *failPointClient
162
+ failPoint:
163
+ configureFailPoint: failCommand
164
+ mode: { times: 2 }
165
+ data:
166
+ failCommands: ["find", "getMore"]
167
+ blockConnection: true
168
+ blockTimeMS: 15
169
+ - name: createFindCursor
170
+ object: *collection
171
+ arguments:
172
+ filter: {}
173
+ cursorType: tailableAwait
174
+ timeoutMS: 29
175
+ batchSize: 1
176
+ maxAwaitTimeMS: 1
177
+ saveResultAsEntity: &tailableCursor tailableCursor
178
+ # Iterate twice to force a getMore.
179
+ - name: iterateUntilDocumentOrError
180
+ object: *tailableCursor
181
+ - name: iterateUntilDocumentOrError
182
+ object: *tailableCursor
183
+ expectEvents:
184
+ - client: *client
185
+ events:
186
+ - commandStartedEvent:
187
+ commandName: find
188
+ databaseName: *databaseName
189
+ command:
190
+ find: *collectionName
191
+ tailable: true
192
+ awaitData: true
193
+ maxTimeMS: { $$exists: true }
194
+ - commandStartedEvent:
195
+ commandName: getMore
196
+ databaseName: *databaseName
197
+ command:
198
+ getMore: { $$type: ["int", "long"] }
199
+ collection: *collectionName
200
+ maxTimeMS: 1
201
+
202
+ # The timeoutMS value should be refreshed for getMore's. This is a failure test. The find inherits timeoutMS=10 from
203
+ # the collection and the getMore blocks for 15ms, causing iteration to fail with a timeout error.
204
+ - description: "timeoutMS is refreshed for getMore - failure"
205
+ operations:
206
+ - name: failPoint
207
+ object: testRunner
208
+ arguments:
209
+ client: *failPointClient
210
+ failPoint:
211
+ configureFailPoint: failCommand
212
+ mode: { times: 1 }
213
+ data:
214
+ failCommands: ["getMore"]
215
+ blockConnection: true
216
+ blockTimeMS: 15
217
+ - name: createFindCursor
218
+ object: *collection
219
+ arguments:
220
+ filter: {}
221
+ cursorType: tailableAwait
222
+ batchSize: 1
223
+ saveResultAsEntity: &tailableCursor tailableCursor
224
+ # Iterate twice to force a getMore.
225
+ - name: iterateUntilDocumentOrError
226
+ object: *tailableCursor
227
+ - name: iterateUntilDocumentOrError
228
+ object: *tailableCursor
229
+ expectError:
230
+ isTimeoutError: true
231
+ expectEvents:
232
+ - client: *client
233
+ events:
234
+ - commandStartedEvent:
235
+ commandName: find
236
+ databaseName: *databaseName
237
+ command:
238
+ find: *collectionName
239
+ tailable: true
240
+ awaitData: true
241
+ maxTimeMS: { $$exists: true }
242
+ - commandStartedEvent:
243
+ commandName: getMore
244
+ databaseName: *databaseName
245
+ command:
246
+ getMore: { $$type: ["int", "long"] }
247
+ collection: *collectionName
@@ -0,0 +1,181 @@
1
+ description: "timeoutMS behaves correctly for tailable non-awaitData cursors"
2
+
3
+ schemaVersion: "1.9"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.4"
7
+
8
+ createEntities:
9
+ - client:
10
+ id: &failPointClient failPointClient
11
+ useMultipleMongoses: false
12
+ - client:
13
+ id: &client client
14
+ uriOptions:
15
+ timeoutMS: 10
16
+ useMultipleMongoses: false
17
+ observeEvents:
18
+ - commandStartedEvent
19
+ - database:
20
+ id: &database database
21
+ client: *client
22
+ databaseName: &databaseName test
23
+ - collection:
24
+ id: &collection collection
25
+ database: *database
26
+ collectionName: &collectionName coll
27
+
28
+ initialData:
29
+ - collectionName: *collectionName
30
+ databaseName: *databaseName
31
+ createOptions:
32
+ capped: true
33
+ size: 500
34
+ documents:
35
+ - { _id: 0 }
36
+ - { _id: 1 }
37
+
38
+ tests:
39
+ - description: "error if timeoutMode is cursor_lifetime"
40
+ operations:
41
+ - name: find
42
+ object: *collection
43
+ arguments:
44
+ filter: {}
45
+ timeoutMode: cursorLifetime
46
+ cursorType: tailable
47
+ expectError:
48
+ isClientError: true
49
+
50
+ - description: "timeoutMS applied to find"
51
+ operations:
52
+ - name: failPoint
53
+ object: testRunner
54
+ arguments:
55
+ client: *failPointClient
56
+ failPoint:
57
+ configureFailPoint: failCommand
58
+ mode: { times: 1 }
59
+ data:
60
+ failCommands: ["find"]
61
+ blockConnection: true
62
+ blockTimeMS: 15
63
+ - name: find
64
+ object: *collection
65
+ arguments:
66
+ filter: {}
67
+ cursorType: tailable
68
+ expectError:
69
+ isTimeoutError: true
70
+ expectEvents:
71
+ - client: *client
72
+ events:
73
+ # Due to SERVER-51153, the find command should not contain a maxTimeMS field for tailable non-awaitData
74
+ # cursors because that would cap the lifetime of the created cursor.
75
+ - commandStartedEvent:
76
+ commandName: find
77
+ databaseName: *databaseName
78
+ command:
79
+ find: *collectionName
80
+ tailable: true
81
+ awaitData: { $$exists: false }
82
+ maxTimeMS: { $$exists: false }
83
+
84
+ # The timeoutMS option should apply separately to the initial "find" and each getMore. This is a success test. The
85
+ # find is executed with timeoutMS=20 and both find and getMore commands are configured to block for 15ms each. Neither
86
+ # exceeds the timeout so the operation succeeds.
87
+ - description: "timeoutMS is refreshed for getMore - success"
88
+ operations:
89
+ - name: failPoint
90
+ object: testRunner
91
+ arguments:
92
+ client: *failPointClient
93
+ failPoint:
94
+ configureFailPoint: failCommand
95
+ mode: { times: 2 }
96
+ data:
97
+ failCommands: ["find", "getMore"]
98
+ blockConnection: true
99
+ blockTimeMS: 15
100
+ - name: createFindCursor
101
+ object: *collection
102
+ arguments:
103
+ filter: {}
104
+ cursorType: tailable
105
+ timeoutMS: 20
106
+ batchSize: 1
107
+ saveResultAsEntity: &tailableCursor tailableCursor
108
+ # Iterate the cursor twice: the first iteration will return the document from the batch in the find and the
109
+ # second will do a getMore.
110
+ - name: iterateUntilDocumentOrError
111
+ object: *tailableCursor
112
+ - name: iterateUntilDocumentOrError
113
+ object: *tailableCursor
114
+ expectEvents:
115
+ - client: *client
116
+ events:
117
+ - commandStartedEvent:
118
+ commandName: find
119
+ databaseName: *databaseName
120
+ command:
121
+ find: *collectionName
122
+ tailable: true
123
+ awaitData: { $$exists: false }
124
+ maxTimeMS: { $$exists: false }
125
+ - commandStartedEvent:
126
+ commandName: getMore
127
+ databaseName: *databaseName
128
+ command:
129
+ getMore: { $$type: ["int", "long"] }
130
+ collection: *collectionName
131
+ maxTimeMS: { $$exists: false }
132
+
133
+ # The timeoutMS option should apply separately to the initial "find" and each getMore. This is a failure test. The
134
+ # find inherits timeoutMS=10 from the collection and the getMore command blocks for 15ms, causing iteration to fail
135
+ # with a timeout error.
136
+ - description: "timeoutMS is refreshed for getMore - failure"
137
+ operations:
138
+ - name: failPoint
139
+ object: testRunner
140
+ arguments:
141
+ client: *failPointClient
142
+ failPoint:
143
+ configureFailPoint: failCommand
144
+ mode: { times: 1 }
145
+ data:
146
+ failCommands: ["getMore"]
147
+ blockConnection: true
148
+ blockTimeMS: 15
149
+ - name: createFindCursor
150
+ object: *collection
151
+ arguments:
152
+ filter: {}
153
+ cursorType: tailable
154
+ batchSize: 1
155
+ saveResultAsEntity: &tailableCursor tailableCursor
156
+ # Iterate the cursor twice: the first iteration will return the document from the batch in the find and the
157
+ # second will do a getMore.
158
+ - name: iterateUntilDocumentOrError
159
+ object: *tailableCursor
160
+ - name: iterateUntilDocumentOrError
161
+ object: *tailableCursor
162
+ expectError:
163
+ isTimeoutError: true
164
+ expectEvents:
165
+ - client: *client
166
+ events:
167
+ - commandStartedEvent:
168
+ commandName: find
169
+ databaseName: *databaseName
170
+ command:
171
+ find: *collectionName
172
+ tailable: true
173
+ awaitData: { $$exists: false }
174
+ maxTimeMS: { $$exists: false }
175
+ - commandStartedEvent:
176
+ commandName: getMore
177
+ databaseName: *databaseName
178
+ command:
179
+ getMore: { $$type: ["int", "long"] }
180
+ collection: *collectionName
181
+ maxTimeMS: { $$exists: false }
@@ -143,14 +143,6 @@ tests:
143
143
  hosts: ~
144
144
  auth: ~
145
145
  options: ~
146
- -
147
- description: "Missing delimiting slash between hosts and options"
148
- uri: "mongodb://example.com?w=1"
149
- valid: false
150
- warning: ~
151
- hosts: ~
152
- auth: ~
153
- options: ~
154
146
  -
155
147
  description: "Incomplete key value pair for option"
156
148
  uri: "mongodb://example.com/?w"
@@ -257,5 +249,3 @@ tests:
257
249
  hosts: ~
258
250
  auth: ~
259
251
  options: ~
260
-
261
-
@@ -15,3 +15,16 @@ tests:
15
15
  db: "admin"
16
16
  options:
17
17
  authmechanism: "MONGODB-CR"
18
+ -
19
+ description: "Missing delimiting slash between hosts and options"
20
+ uri: "mongodb://example.com?tls=true"
21
+ valid: true
22
+ warning: false
23
+ hosts:
24
+ -
25
+ type: "hostname"
26
+ host: "example.com"
27
+ port: ~
28
+ auth: ~
29
+ options:
30
+ tls: true
@@ -5,7 +5,11 @@ schemaVersion: '1.4'
5
5
  runOnRequirements:
6
6
  # 3.6+ non-standalone is needed to utilize $readPreference in OP_MSG
7
7
  - minServerVersion: "3.6"
8
+ # https://jira.mongodb.org/browse/DRIVERS-291
9
+ maxServerVersion: "7.99"
8
10
  topologies: [ replicaset, sharded, load-balanced ]
11
+ # SERVER-90047: failures against latest server necessitate adding this for now
12
+ maxServerVersion: "8.0.0"
9
13
 
10
14
  _yamlAnchors:
11
15
  readConcern: &readConcern
@@ -59,6 +63,8 @@ tests:
59
63
  - description: "Aggregate with $out includes read preference for 5.0+ server"
60
64
  runOnRequirements:
61
65
  - minServerVersion: "5.0"
66
+ # https://jira.mongodb.org/browse/RUBY-3539
67
+ maxServerVersion: "7.99"
62
68
  serverless: "forbid"
63
69
  operations:
64
70
  - object: *collection0
@@ -7,8 +7,12 @@ runOnRequirements:
7
7
  # Serverless does not support $listLocalSessions and $currentOp stages, and
8
8
  # mongos does not allow combining them with $out or $merge.
9
9
  - minServerVersion: "3.6"
10
+ # https://jira.mongodb.org/browse/DRIVERS-291
11
+ maxServerVersion: "7.99"
10
12
  topologies: [ replicaset ]
11
13
  serverless: forbid
14
+ # SERVER-90047: failures against latest server necessitate adding this for now
15
+ maxServerVersion: "8.0.0"
12
16
 
13
17
  _yamlAnchors:
14
18
  readConcern: &readConcern
@@ -52,6 +56,8 @@ tests:
52
56
  - description: "Database-level aggregate with $out includes read preference for 5.0+ server"
53
57
  runOnRequirements:
54
58
  - minServerVersion: "5.0"
59
+ # https://jira.mongodb.org/browse/RUBY-3539
60
+ maxServerVersion: "7.99"
55
61
  serverless: "forbid"
56
62
  operations:
57
63
  - object: *database0