mongo 2.16.4 → 2.20.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 (1612) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +33 -39
  4. data/Rakefile +31 -157
  5. data/bin/mongo_console +2 -0
  6. data/lib/mongo/active_support.rb +1 -1
  7. data/lib/mongo/address/ipv4.rb +1 -1
  8. data/lib/mongo/address/ipv6.rb +1 -1
  9. data/lib/mongo/address/unix.rb +1 -1
  10. data/lib/mongo/address/validator.rb +1 -1
  11. data/lib/mongo/address.rb +1 -1
  12. data/lib/mongo/auth/aws/conversation.rb +1 -5
  13. data/lib/mongo/{operation/get_more/command.rb → auth/aws/credentials.rb} +15 -20
  14. data/lib/mongo/auth/aws/credentials_cache.rb +75 -0
  15. data/lib/mongo/auth/aws/credentials_retriever.rb +172 -37
  16. data/lib/mongo/auth/aws/request.rb +1 -3
  17. data/lib/mongo/auth/aws.rb +6 -6
  18. data/lib/mongo/auth/base.rb +9 -2
  19. data/lib/mongo/auth/conversation_base.rb +1 -1
  20. data/lib/mongo/auth/cr/conversation.rb +1 -1
  21. data/lib/mongo/auth/cr.rb +1 -1
  22. data/lib/mongo/auth/credential_cache.rb +1 -1
  23. data/lib/mongo/auth/gssapi/conversation.rb +1 -1
  24. data/lib/mongo/auth/gssapi.rb +1 -1
  25. data/lib/mongo/auth/ldap/conversation.rb +1 -1
  26. data/lib/mongo/auth/ldap.rb +1 -1
  27. data/lib/mongo/auth/roles.rb +17 -17
  28. data/lib/mongo/auth/sasl_conversation_base.rb +1 -1
  29. data/lib/mongo/auth/scram/conversation.rb +1 -1
  30. data/lib/mongo/auth/scram.rb +1 -1
  31. data/lib/mongo/auth/scram256/conversation.rb +1 -1
  32. data/lib/mongo/auth/scram256.rb +1 -1
  33. data/lib/mongo/auth/scram_conversation_base.rb +1 -1
  34. data/lib/mongo/auth/stringprep/profiles/sasl.rb +1 -1
  35. data/lib/mongo/auth/stringprep/tables.rb +1 -1
  36. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +1 -1
  37. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +2 -1
  38. data/lib/mongo/auth/stringprep.rb +1 -1
  39. data/lib/mongo/auth/user/view.rb +1 -1
  40. data/lib/mongo/auth/user.rb +1 -1
  41. data/lib/mongo/auth/x509/conversation.rb +1 -1
  42. data/lib/mongo/auth/x509.rb +1 -1
  43. data/lib/mongo/auth.rb +13 -2
  44. data/lib/mongo/background_thread.rb +1 -1
  45. data/lib/mongo/bson.rb +1 -1
  46. data/lib/mongo/bulk_write/combineable.rb +1 -1
  47. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
  48. data/lib/mongo/bulk_write/result.rb +11 -2
  49. data/lib/mongo/bulk_write/result_combiner.rb +3 -5
  50. data/lib/mongo/bulk_write/transformable.rb +1 -1
  51. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
  52. data/lib/mongo/bulk_write/validatable.rb +1 -1
  53. data/lib/mongo/bulk_write.rb +118 -30
  54. data/lib/mongo/caching_cursor.rb +1 -1
  55. data/lib/mongo/client.rb +190 -22
  56. data/lib/mongo/client_encryption.rb +215 -11
  57. data/lib/mongo/cluster/periodic_executor.rb +1 -1
  58. data/lib/mongo/cluster/reapers/cursor_reaper.rb +34 -16
  59. data/lib/mongo/cluster/reapers/socket_reaper.rb +2 -2
  60. data/lib/mongo/cluster/sdam_flow.rb +42 -15
  61. data/lib/mongo/cluster/topology/base.rb +17 -1
  62. data/lib/mongo/cluster/topology/load_balanced.rb +1 -1
  63. data/lib/mongo/cluster/topology/no_replica_set_options.rb +1 -1
  64. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +1 -1
  65. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +1 -1
  66. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  67. data/lib/mongo/cluster/topology/single.rb +1 -1
  68. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  69. data/lib/mongo/cluster/topology.rb +1 -1
  70. data/lib/mongo/cluster.rb +82 -41
  71. data/lib/mongo/cluster_time.rb +1 -1
  72. data/lib/mongo/collection/helpers.rb +43 -0
  73. data/lib/mongo/collection/queryable_encryption.rb +162 -0
  74. data/lib/mongo/collection/view/aggregation.rb +68 -17
  75. data/lib/mongo/collection/view/builder/aggregation.rb +12 -14
  76. data/lib/mongo/collection/view/builder/map_reduce.rb +2 -2
  77. data/lib/mongo/collection/view/builder.rb +1 -1
  78. data/lib/mongo/collection/view/change_stream/retryable.rb +1 -1
  79. data/lib/mongo/collection/view/change_stream.rb +69 -23
  80. data/lib/mongo/collection/view/explainable.rb +2 -2
  81. data/lib/mongo/collection/view/immutable.rb +1 -1
  82. data/lib/mongo/collection/view/iterable.rb +6 -6
  83. data/lib/mongo/collection/view/map_reduce.rb +21 -10
  84. data/lib/mongo/collection/view/readable.rb +54 -28
  85. data/lib/mongo/collection/view/writable.rb +153 -39
  86. data/lib/mongo/collection/view.rb +1 -1
  87. data/lib/mongo/collection.rb +332 -98
  88. data/lib/mongo/condition_variable.rb +58 -0
  89. data/lib/mongo/config/options.rb +63 -0
  90. data/lib/mongo/config/validators/option.rb +27 -0
  91. data/lib/mongo/config.rb +43 -0
  92. data/lib/mongo/crypt/auto_decryption_context.rb +1 -1
  93. data/lib/mongo/crypt/auto_encrypter.rb +140 -16
  94. data/lib/mongo/crypt/auto_encryption_context.rb +1 -1
  95. data/lib/mongo/crypt/binary.rb +1 -1
  96. data/lib/mongo/crypt/binding.rb +715 -152
  97. data/lib/mongo/crypt/context.rb +72 -6
  98. data/lib/mongo/crypt/data_key_context.rb +13 -105
  99. data/lib/mongo/crypt/encryption_io.rb +95 -61
  100. data/lib/mongo/crypt/explicit_decryption_context.rb +1 -1
  101. data/lib/mongo/crypt/explicit_encrypter.rb +233 -30
  102. data/lib/mongo/crypt/explicit_encryption_context.rb +76 -22
  103. data/lib/mongo/{operation/drop/command.rb → crypt/explicit_encryption_expression_context.rb} +9 -20
  104. data/lib/mongo/crypt/handle.rb +169 -87
  105. data/lib/mongo/crypt/hooks.rb +26 -3
  106. data/lib/mongo/crypt/kms/aws/credentials.rb +83 -0
  107. data/lib/mongo/crypt/kms/aws/master_document.rb +78 -0
  108. data/lib/mongo/crypt/kms/aws.rb +20 -0
  109. data/lib/mongo/crypt/kms/azure/access_token.rb +54 -0
  110. data/lib/mongo/crypt/kms/azure/credentials.rb +103 -0
  111. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +122 -0
  112. data/lib/mongo/crypt/kms/azure/master_document.rb +79 -0
  113. data/lib/mongo/crypt/kms/azure.rb +21 -0
  114. data/lib/mongo/crypt/kms/credentials.rb +96 -0
  115. data/lib/mongo/crypt/kms/gcp/credentials.rb +127 -0
  116. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +58 -0
  117. data/lib/mongo/crypt/kms/gcp/master_document.rb +99 -0
  118. data/lib/mongo/crypt/kms/gcp.rb +21 -0
  119. data/lib/mongo/crypt/kms/kmip/credentials.rb +68 -0
  120. data/lib/mongo/crypt/kms/kmip/master_document.rb +74 -0
  121. data/lib/mongo/crypt/kms/kmip.rb +19 -0
  122. data/lib/mongo/crypt/kms/local/credentials.rb +65 -0
  123. data/lib/mongo/crypt/kms/local/master_document.rb +43 -0
  124. data/lib/mongo/crypt/kms/local.rb +19 -0
  125. data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
  126. data/lib/mongo/crypt/kms.rb +122 -0
  127. data/lib/mongo/crypt/kms_context.rb +1 -1
  128. data/lib/mongo/crypt/rewrap_many_data_key_context.rb +46 -0
  129. data/lib/mongo/crypt/rewrap_many_data_key_result.rb +37 -0
  130. data/lib/mongo/crypt/status.rb +9 -3
  131. data/lib/mongo/crypt.rb +16 -1
  132. data/lib/mongo/cursor/kill_spec.rb +42 -4
  133. data/lib/mongo/cursor.rb +68 -19
  134. data/lib/mongo/database/view.rb +51 -9
  135. data/lib/mongo/database.rb +65 -21
  136. data/lib/mongo/dbref.rb +2 -106
  137. data/lib/mongo/distinguishing_semaphore.rb +2 -2
  138. data/lib/mongo/error/auth_error.rb +1 -1
  139. data/lib/mongo/error/bad_load_balancer_target.rb +1 -1
  140. data/lib/mongo/error/bulk_write_error.rb +32 -5
  141. data/lib/mongo/error/change_stream_resumable.rb +1 -1
  142. data/lib/mongo/error/client_closed.rb +24 -0
  143. data/lib/mongo/error/closed_stream.rb +1 -1
  144. data/lib/mongo/error/connection_check_out_timeout.rb +1 -1
  145. data/lib/mongo/error/connection_perished.rb +3 -1
  146. data/lib/mongo/error/connection_unavailable.rb +27 -0
  147. data/lib/mongo/error/credential_check_error.rb +1 -1
  148. data/lib/mongo/error/crypt_error.rb +1 -1
  149. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  150. data/lib/mongo/error/failed_string_prep_validation.rb +1 -1
  151. data/lib/mongo/error/file_not_found.rb +1 -1
  152. data/lib/mongo/error/handshake_error.rb +1 -1
  153. data/lib/mongo/error/insufficient_iteration_count.rb +1 -1
  154. data/lib/mongo/error/internal_driver_error.rb +1 -1
  155. data/lib/mongo/error/invalid_address.rb +1 -1
  156. data/lib/mongo/error/invalid_application_name.rb +1 -1
  157. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  158. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  159. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  160. data/lib/mongo/error/invalid_config_option.rb +21 -0
  161. data/lib/mongo/error/invalid_cursor_operation.rb +1 -1
  162. data/lib/mongo/error/invalid_database_name.rb +1 -1
  163. data/lib/mongo/error/invalid_document.rb +1 -1
  164. data/lib/mongo/error/invalid_file.rb +1 -1
  165. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  166. data/lib/mongo/error/invalid_max_connecting.rb +28 -0
  167. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  168. data/lib/mongo/error/invalid_nonce.rb +1 -1
  169. data/lib/mongo/error/invalid_read_concern.rb +1 -1
  170. data/lib/mongo/error/invalid_read_option.rb +2 -2
  171. data/lib/mongo/error/invalid_replacement_document.rb +28 -10
  172. data/lib/mongo/error/invalid_server_auth_host.rb +1 -1
  173. data/lib/mongo/error/invalid_server_auth_response.rb +1 -1
  174. data/lib/mongo/error/invalid_server_preference.rb +1 -1
  175. data/lib/mongo/error/invalid_session.rb +1 -1
  176. data/lib/mongo/error/invalid_signature.rb +1 -1
  177. data/lib/mongo/error/invalid_transaction_operation.rb +1 -1
  178. data/lib/mongo/error/invalid_txt_record.rb +1 -1
  179. data/lib/mongo/error/invalid_update_document.rb +28 -8
  180. data/lib/mongo/error/invalid_uri.rb +1 -1
  181. data/lib/mongo/error/invalid_write_concern.rb +1 -1
  182. data/lib/mongo/error/kms_error.rb +1 -1
  183. data/lib/mongo/error/labelable.rb +72 -0
  184. data/lib/mongo/error/lint_error.rb +1 -1
  185. data/lib/mongo/error/max_bson_size.rb +1 -1
  186. data/lib/mongo/error/max_message_size.rb +1 -1
  187. data/lib/mongo/error/mismatched_domain.rb +1 -1
  188. data/lib/mongo/error/missing_connection.rb +27 -0
  189. data/lib/mongo/error/missing_file_chunk.rb +9 -3
  190. data/lib/mongo/error/missing_password.rb +1 -1
  191. data/lib/mongo/error/missing_resume_token.rb +1 -1
  192. data/lib/mongo/error/missing_scram_server_signature.rb +1 -1
  193. data/lib/mongo/error/missing_service_id.rb +1 -1
  194. data/lib/mongo/error/mongocryptd_spawn_error.rb +1 -1
  195. data/lib/mongo/error/multi_index_drop.rb +1 -1
  196. data/lib/mongo/error/need_primary_server.rb +1 -1
  197. data/lib/mongo/error/no_server_available.rb +1 -1
  198. data/lib/mongo/error/no_service_connection_available.rb +1 -1
  199. data/lib/mongo/error/no_srv_records.rb +1 -1
  200. data/lib/mongo/error/notable.rb +15 -1
  201. data/lib/mongo/error/operation_failure.rb +35 -87
  202. data/lib/mongo/error/parser.rb +1 -1
  203. data/lib/mongo/{operation/create_user/command.rb → error/pool_cleared_error.rb} +17 -23
  204. data/lib/mongo/error/pool_closed_error.rb +4 -17
  205. data/lib/mongo/{operation/update_user/command.rb → error/pool_error.rb} +21 -21
  206. data/lib/mongo/{operation/drop_index/command.rb → error/pool_paused_error.rb} +17 -22
  207. data/lib/mongo/error/raise_original_error.rb +1 -1
  208. data/lib/mongo/error/read_write_retryable.rb +108 -0
  209. data/lib/mongo/error/sdam_error_detection.rb +1 -1
  210. data/lib/mongo/error/server_api_conflict.rb +1 -1
  211. data/lib/mongo/error/server_api_not_supported.rb +1 -1
  212. data/lib/mongo/error/server_certificate_revoked.rb +1 -1
  213. data/lib/mongo/{operation/get_more/legacy.rb → error/server_not_usable.rb} +13 -16
  214. data/lib/mongo/error/session_ended.rb +1 -1
  215. data/lib/mongo/error/session_not_materialized.rb +29 -0
  216. data/lib/mongo/error/sessions_not_supported.rb +1 -1
  217. data/lib/mongo/{operation/kill_cursors/legacy.rb → error/snapshot_session_invalid_server_version.rb} +9 -19
  218. data/lib/mongo/{operation/command/command.rb → error/snapshot_session_transaction_prohibited.rb} +8 -19
  219. data/lib/mongo/error/socket_error.rb +1 -1
  220. data/lib/mongo/error/socket_timeout_error.rb +1 -1
  221. data/lib/mongo/{operation/shared/op_msg_or_command.rb → error/transactions_not_supported.rb} +13 -20
  222. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  223. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  224. data/lib/mongo/error/unexpected_response.rb +1 -1
  225. data/lib/mongo/error/unknown_payload_type.rb +1 -1
  226. data/lib/mongo/error/unmet_dependency.rb +1 -1
  227. data/lib/mongo/error/unsupported_array_filters.rb +1 -1
  228. data/lib/mongo/error/unsupported_collation.rb +1 -1
  229. data/lib/mongo/error/unsupported_features.rb +1 -1
  230. data/lib/mongo/error/unsupported_message_type.rb +1 -1
  231. data/lib/mongo/error/unsupported_option.rb +1 -1
  232. data/lib/mongo/error/write_retryable.rb +1 -1
  233. data/lib/mongo/error.rb +16 -38
  234. data/lib/mongo/event/base.rb +1 -1
  235. data/lib/mongo/event/listeners.rb +1 -1
  236. data/lib/mongo/event/publisher.rb +1 -1
  237. data/lib/mongo/event/subscriber.rb +1 -1
  238. data/lib/mongo/event.rb +1 -1
  239. data/lib/mongo/grid/file/chunk.rb +3 -2
  240. data/lib/mongo/grid/file/info.rb +3 -2
  241. data/lib/mongo/grid/file.rb +1 -1
  242. data/lib/mongo/grid/fs_bucket.rb +7 -1
  243. data/lib/mongo/grid/stream/read.rb +7 -1
  244. data/lib/mongo/grid/stream/write.rb +1 -1
  245. data/lib/mongo/grid/stream.rb +1 -1
  246. data/lib/mongo/grid.rb +1 -1
  247. data/lib/mongo/id.rb +1 -1
  248. data/lib/mongo/index/view.rb +24 -8
  249. data/lib/mongo/index.rb +1 -1
  250. data/lib/mongo/lint.rb +1 -1
  251. data/lib/mongo/loggable.rb +3 -3
  252. data/lib/mongo/logger.rb +1 -1
  253. data/lib/mongo/monitoring/cmap_log_subscriber.rb +1 -1
  254. data/lib/mongo/monitoring/command_log_subscriber.rb +1 -1
  255. data/lib/mongo/monitoring/event/cmap/base.rb +1 -1
  256. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -1
  257. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +1 -1
  258. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -1
  259. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +1 -1
  260. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -1
  261. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -1
  262. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -1
  263. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +9 -2
  264. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -1
  265. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -1
  266. data/lib/mongo/monitoring/event/cmap/pool_ready.rb +67 -0
  267. data/lib/mongo/monitoring/event/cmap.rb +2 -1
  268. data/lib/mongo/monitoring/event/command_failed.rb +9 -3
  269. data/lib/mongo/monitoring/event/command_started.rb +2 -2
  270. data/lib/mongo/monitoring/event/command_succeeded.rb +10 -3
  271. data/lib/mongo/monitoring/event/secure.rb +2 -2
  272. data/lib/mongo/monitoring/event/server_closed.rb +1 -1
  273. data/lib/mongo/monitoring/event/server_description_changed.rb +1 -1
  274. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +1 -1
  275. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -1
  276. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +1 -1
  277. data/lib/mongo/monitoring/event/server_opening.rb +1 -1
  278. data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
  279. data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
  280. data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
  281. data/lib/mongo/monitoring/event.rb +1 -1
  282. data/lib/mongo/monitoring/publishable.rb +10 -6
  283. data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
  284. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
  285. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
  286. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
  287. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  288. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +1 -1
  289. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
  290. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -1
  291. data/lib/mongo/monitoring.rb +1 -1
  292. data/lib/mongo/operation/aggregate/op_msg.rb +1 -1
  293. data/lib/mongo/operation/aggregate/result.rb +1 -1
  294. data/lib/mongo/operation/aggregate.rb +2 -3
  295. data/lib/mongo/operation/collections_info/result.rb +6 -3
  296. data/lib/mongo/operation/collections_info.rb +4 -16
  297. data/lib/mongo/operation/command/op_msg.rb +7 -1
  298. data/lib/mongo/operation/command.rb +2 -3
  299. data/lib/mongo/operation/context.rb +25 -7
  300. data/lib/mongo/operation/count/op_msg.rb +5 -2
  301. data/lib/mongo/operation/count.rb +2 -3
  302. data/lib/mongo/operation/create/op_msg.rb +5 -2
  303. data/lib/mongo/operation/create.rb +2 -3
  304. data/lib/mongo/operation/create_index/op_msg.rb +3 -2
  305. data/lib/mongo/operation/create_index.rb +2 -3
  306. data/lib/mongo/operation/create_search_indexes/op_msg.rb +31 -0
  307. data/lib/mongo/operation/create_search_indexes.rb +15 -0
  308. data/lib/mongo/operation/create_user/op_msg.rb +1 -1
  309. data/lib/mongo/operation/create_user.rb +2 -3
  310. data/lib/mongo/operation/delete/bulk_result.rb +1 -1
  311. data/lib/mongo/operation/delete/op_msg.rb +4 -2
  312. data/lib/mongo/operation/delete/result.rb +1 -1
  313. data/lib/mongo/operation/delete.rb +1 -3
  314. data/lib/mongo/operation/distinct/op_msg.rb +5 -2
  315. data/lib/mongo/operation/distinct.rb +2 -3
  316. data/lib/mongo/operation/drop/op_msg.rb +1 -1
  317. data/lib/mongo/operation/drop.rb +2 -3
  318. data/lib/mongo/operation/drop_database/op_msg.rb +1 -1
  319. data/lib/mongo/operation/drop_database.rb +2 -3
  320. data/lib/mongo/operation/drop_index/op_msg.rb +6 -2
  321. data/lib/mongo/operation/drop_index.rb +2 -3
  322. data/lib/mongo/operation/drop_search_index/op_msg.rb +33 -0
  323. data/lib/mongo/operation/drop_search_index.rb +15 -0
  324. data/lib/mongo/operation/explain/op_msg.rb +1 -1
  325. data/lib/mongo/operation/explain/result.rb +1 -1
  326. data/lib/mongo/operation/explain.rb +2 -4
  327. data/lib/mongo/operation/find/builder/command.rb +2 -1
  328. data/lib/mongo/operation/find/builder/flags.rb +1 -1
  329. data/lib/mongo/operation/find/builder/modifiers.rb +1 -1
  330. data/lib/mongo/operation/find/builder.rb +1 -2
  331. data/lib/mongo/operation/find/op_msg.rb +1 -1
  332. data/lib/mongo/operation/find/result.rb +1 -1
  333. data/lib/mongo/operation/find.rb +2 -4
  334. data/lib/mongo/operation/get_more/command_builder.rb +6 -2
  335. data/lib/mongo/operation/get_more/op_msg.rb +1 -1
  336. data/lib/mongo/operation/get_more/result.rb +1 -1
  337. data/lib/mongo/operation/get_more.rb +2 -4
  338. data/lib/mongo/operation/indexes/op_msg.rb +1 -1
  339. data/lib/mongo/operation/indexes/result.rb +1 -1
  340. data/lib/mongo/operation/indexes.rb +2 -18
  341. data/lib/mongo/operation/insert/bulk_result.rb +6 -2
  342. data/lib/mongo/operation/insert/op_msg.rb +7 -4
  343. data/lib/mongo/operation/insert/result.rb +7 -4
  344. data/lib/mongo/operation/insert.rb +1 -3
  345. data/lib/mongo/operation/kill_cursors/command_builder.rb +1 -1
  346. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -1
  347. data/lib/mongo/operation/kill_cursors.rb +2 -4
  348. data/lib/mongo/operation/list_collections/op_msg.rb +5 -2
  349. data/lib/mongo/operation/list_collections/result.rb +1 -1
  350. data/lib/mongo/operation/list_collections.rb +2 -3
  351. data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
  352. data/lib/mongo/operation/map_reduce/result.rb +17 -1
  353. data/lib/mongo/operation/map_reduce.rb +2 -3
  354. data/lib/mongo/operation/op_msg_base.rb +1 -1
  355. data/lib/mongo/operation/parallel_scan/op_msg.rb +1 -1
  356. data/lib/mongo/operation/parallel_scan/result.rb +1 -1
  357. data/lib/mongo/operation/parallel_scan.rb +2 -3
  358. data/lib/mongo/operation/remove_user/op_msg.rb +1 -1
  359. data/lib/mongo/operation/remove_user.rb +2 -3
  360. data/lib/mongo/operation/result.rb +28 -6
  361. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -1
  362. data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -1
  363. data/lib/mongo/operation/shared/executable.rb +48 -13
  364. data/lib/mongo/operation/shared/executable_no_validate.rb +1 -1
  365. data/lib/mongo/operation/shared/executable_transaction_label.rb +1 -1
  366. data/lib/mongo/operation/shared/idable.rb +1 -1
  367. data/lib/mongo/operation/shared/limited.rb +1 -1
  368. data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
  369. data/lib/mongo/operation/shared/{polymorphic_operation.rb → op_msg_executable.rb} +25 -8
  370. data/lib/mongo/operation/shared/polymorphic_lookup.rb +1 -1
  371. data/lib/mongo/operation/shared/polymorphic_result.rb +1 -1
  372. data/lib/mongo/operation/shared/read_preference_supported.rb +1 -1
  373. data/lib/mongo/operation/shared/response_handling.rb +30 -31
  374. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -1
  375. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +1 -1
  376. data/lib/mongo/operation/shared/sessions_supported.rb +26 -7
  377. data/lib/mongo/operation/shared/specifiable.rb +8 -1
  378. data/lib/mongo/operation/shared/validatable.rb +1 -1
  379. data/lib/mongo/operation/shared/write.rb +19 -13
  380. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
  381. data/lib/mongo/operation/update/bulk_result.rb +1 -1
  382. data/lib/mongo/operation/update/op_msg.rb +4 -2
  383. data/lib/mongo/operation/update/result.rb +1 -1
  384. data/lib/mongo/operation/update.rb +1 -3
  385. data/lib/mongo/operation/update_search_index/op_msg.rb +34 -0
  386. data/lib/mongo/operation/update_search_index.rb +15 -0
  387. data/lib/mongo/operation/update_user/op_msg.rb +1 -1
  388. data/lib/mongo/operation/update_user.rb +2 -3
  389. data/lib/mongo/operation/users_info/op_msg.rb +1 -1
  390. data/lib/mongo/operation/users_info/result.rb +1 -1
  391. data/lib/mongo/operation/users_info.rb +2 -3
  392. data/lib/mongo/operation/write_command/op_msg.rb +1 -1
  393. data/lib/mongo/operation/write_command.rb +2 -3
  394. data/lib/mongo/operation.rb +5 -4
  395. data/lib/mongo/options/mapper.rb +1 -1
  396. data/lib/mongo/options/redacted.rb +1 -1
  397. data/lib/mongo/options.rb +1 -1
  398. data/lib/mongo/protocol/bit_vector.rb +4 -2
  399. data/lib/mongo/protocol/caching_hash.rb +52 -0
  400. data/lib/mongo/protocol/compressed.rb +1 -1
  401. data/lib/mongo/protocol/get_more.rb +1 -1
  402. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  403. data/lib/mongo/protocol/message.rb +5 -9
  404. data/lib/mongo/protocol/msg.rb +23 -2
  405. data/lib/mongo/protocol/query.rb +1 -1
  406. data/lib/mongo/protocol/registry.rb +1 -1
  407. data/lib/mongo/protocol/reply.rb +1 -1
  408. data/lib/mongo/protocol/serializers.rb +25 -18
  409. data/lib/mongo/protocol.rb +2 -4
  410. data/lib/mongo/query_cache.rb +36 -21
  411. data/lib/mongo/retryable/base_worker.rb +91 -0
  412. data/lib/mongo/retryable/read_worker.rb +297 -0
  413. data/lib/mongo/retryable/write_worker.rb +367 -0
  414. data/lib/mongo/retryable.rb +31 -454
  415. data/lib/mongo/search_index/view.rb +232 -0
  416. data/lib/mongo/semaphore.rb +2 -2
  417. data/lib/mongo/server/app_metadata/environment.rb +314 -0
  418. data/lib/mongo/server/app_metadata/platform.rb +114 -0
  419. data/lib/mongo/server/app_metadata/truncator.rb +142 -0
  420. data/lib/mongo/server/app_metadata.rb +76 -108
  421. data/lib/mongo/server/connection.rb +94 -20
  422. data/lib/mongo/server/connection_base.rb +3 -1
  423. data/lib/mongo/server/connection_common.rb +5 -2
  424. data/lib/mongo/server/connection_pool/generation_manager.rb +56 -12
  425. data/lib/mongo/server/connection_pool/populator.rb +33 -31
  426. data/lib/mongo/server/connection_pool.rb +736 -247
  427. data/lib/mongo/server/description/features.rb +7 -2
  428. data/lib/mongo/server/description/load_balancer.rb +1 -1
  429. data/lib/mongo/server/description.rb +14 -8
  430. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  431. data/lib/mongo/server/monitor/connection.rb +2 -1
  432. data/lib/mongo/server/monitor.rb +36 -20
  433. data/lib/mongo/server/pending_connection.rb +1 -1
  434. data/lib/mongo/server/push_monitor/connection.rb +1 -1
  435. data/lib/mongo/server/push_monitor.rb +14 -4
  436. data/lib/mongo/server/round_trip_time_averager.rb +1 -1
  437. data/lib/mongo/server.rb +105 -35
  438. data/lib/mongo/server_selector/base.rb +77 -8
  439. data/lib/mongo/server_selector/nearest.rb +1 -1
  440. data/lib/mongo/server_selector/primary.rb +1 -1
  441. data/lib/mongo/server_selector/primary_preferred.rb +1 -1
  442. data/lib/mongo/server_selector/secondary.rb +1 -1
  443. data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
  444. data/lib/mongo/server_selector.rb +1 -1
  445. data/lib/mongo/session/server_session/dirtyable.rb +52 -0
  446. data/lib/mongo/session/server_session.rb +4 -1
  447. data/lib/mongo/session/session_pool.rb +21 -19
  448. data/lib/mongo/session.rb +164 -37
  449. data/lib/mongo/socket/ocsp_cache.rb +3 -4
  450. data/lib/mongo/socket/ocsp_verifier.rb +5 -6
  451. data/lib/mongo/socket/ssl.rb +1 -1
  452. data/lib/mongo/socket/tcp.rb +4 -1
  453. data/lib/mongo/socket/unix.rb +1 -1
  454. data/lib/mongo/socket.rb +30 -7
  455. data/lib/mongo/srv/monitor.rb +1 -3
  456. data/lib/mongo/srv/resolver.rb +25 -4
  457. data/lib/mongo/srv/result.rb +1 -1
  458. data/lib/mongo/srv.rb +1 -1
  459. data/lib/mongo/timeout.rb +2 -2
  460. data/lib/mongo/topology_version.rb +1 -1
  461. data/lib/mongo/uri/options_mapper.rb +324 -81
  462. data/lib/mongo/uri/srv_protocol.rb +2 -2
  463. data/lib/mongo/uri.rb +61 -17
  464. data/lib/mongo/utils.rb +1 -7
  465. data/lib/mongo/version.rb +2 -2
  466. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  467. data/lib/mongo/write_concern/base.rb +1 -1
  468. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  469. data/lib/mongo/write_concern.rb +1 -1
  470. data/lib/mongo.rb +25 -1
  471. data/mongo.gemspec +10 -7
  472. data/spec/README.md +23 -5
  473. data/spec/atlas/atlas_connectivity_spec.rb +6 -10
  474. data/spec/atlas/operations_spec.rb +4 -13
  475. data/spec/faas/ruby-sam-app/Gemfile +9 -0
  476. data/spec/faas/ruby-sam-app/mongodb/Gemfile +4 -0
  477. data/spec/faas/ruby-sam-app/mongodb/app.rb +149 -0
  478. data/spec/faas/ruby-sam-app/template.yaml +48 -0
  479. data/spec/integration/auth_spec.rb +1 -1
  480. data/spec/integration/awaited_ismaster_spec.rb +1 -1
  481. data/spec/integration/aws_auth_credentials_cache_spec.rb +51 -0
  482. data/spec/integration/aws_auth_request_spec.rb +2 -2
  483. data/spec/integration/aws_credentials_retriever_spec.rb +32 -2
  484. data/spec/integration/aws_lambda_examples_spec.rb +68 -0
  485. data/spec/integration/bson_symbol_spec.rb +1 -1
  486. data/spec/integration/bulk_insert_spec.rb +1 -1
  487. data/spec/integration/bulk_write_error_message_spec.rb +33 -0
  488. data/spec/integration/bulk_write_spec.rb +17 -1
  489. data/spec/integration/change_stream_examples_spec.rb +1 -1
  490. data/spec/integration/change_stream_spec.rb +12 -6
  491. data/spec/integration/check_clean_slate_spec.rb +1 -1
  492. data/spec/integration/client_authentication_options_spec.rb +1 -1
  493. data/spec/integration/client_connectivity_spec.rb +1 -1
  494. data/spec/integration/client_construction_aws_auth_spec.rb +12 -3
  495. data/spec/integration/client_construction_spec.rb +97 -9
  496. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +10 -10
  497. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +169 -169
  498. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +1 -2
  499. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +1 -1
  500. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +41 -5
  501. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +146 -3
  502. data/spec/integration/client_side_encryption/automatic_data_encryption_keys_prose_spec.rb +153 -0
  503. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +3 -3
  504. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +3 -3
  505. data/spec/integration/client_side_encryption/client_close_spec.rb +2 -2
  506. data/spec/integration/client_side_encryption/corpus_spec.rb +75 -38
  507. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +40 -43
  508. data/spec/integration/client_side_encryption/data_key_spec.rb +98 -8
  509. data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +159 -0
  510. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +60 -1
  511. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +150 -0
  512. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +7 -7
  513. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +436 -0
  514. data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
  515. data/spec/integration/client_side_encryption/mongocryptd_prose_spec.rb +105 -0
  516. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +49 -0
  517. data/spec/integration/client_side_encryption/on_demand_azure_credentials_spec.rb +46 -0
  518. data/spec/integration/client_side_encryption/on_demand_gcp_credentials_spec.rb +47 -0
  519. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +114 -0
  520. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +536 -0
  521. data/spec/integration/client_side_encryption/rewrap_prose_spec.rb +114 -0
  522. data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +89 -0
  523. data/spec/integration/client_side_encryption/views_spec.rb +2 -2
  524. data/spec/integration/client_spec.rb +8 -3
  525. data/spec/integration/client_update_spec.rb +7 -3
  526. data/spec/integration/collection_indexes_prose_spec.rb +1 -1
  527. data/spec/integration/command_monitoring_spec.rb +1 -1
  528. data/spec/integration/command_spec.rb +2 -24
  529. data/spec/integration/connect_single_rs_name_spec.rb +1 -1
  530. data/spec/integration/connection/faas_env_spec.rb +62 -0
  531. data/spec/integration/connection_pool_populator_spec.rb +27 -7
  532. data/spec/integration/connection_spec.rb +1 -1
  533. data/spec/integration/crud_spec.rb +13 -1
  534. data/spec/integration/cursor_pinning_spec.rb +9 -5
  535. data/spec/integration/cursor_reaping_spec.rb +1 -1
  536. data/spec/integration/docs_examples_spec.rb +2 -2
  537. data/spec/integration/error_detection_spec.rb +1 -1
  538. data/spec/integration/fork_reconnect_spec.rb +17 -10
  539. data/spec/integration/get_more_spec.rb +1 -1
  540. data/spec/integration/grid_fs_bucket_spec.rb +4 -4
  541. data/spec/integration/heartbeat_events_spec.rb +1 -1
  542. data/spec/integration/map_reduce_spec.rb +5 -1
  543. data/spec/integration/mmapv1_spec.rb +1 -1
  544. data/spec/integration/mongos_pinning_spec.rb +1 -1
  545. data/spec/integration/ocsp_connectivity_spec.rb +1 -1
  546. data/spec/integration/ocsp_verifier_cache_spec.rb +1 -1
  547. data/spec/integration/ocsp_verifier_spec.rb +5 -2
  548. data/spec/integration/operation_failure_code_spec.rb +1 -1
  549. data/spec/integration/operation_failure_message_spec.rb +1 -0
  550. data/spec/integration/query_cache_spec.rb +124 -33
  551. data/spec/integration/query_cache_transactions_spec.rb +1 -1
  552. data/spec/integration/read_concern_spec.rb +1 -1
  553. data/spec/integration/read_preference_spec.rb +17 -13
  554. data/spec/integration/reconnect_spec.rb +6 -1
  555. data/spec/integration/retryable_errors_spec.rb +1 -1
  556. data/spec/integration/retryable_reads_errors_spec.rb +263 -0
  557. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +2 -2
  558. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
  559. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +1 -1
  560. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +1 -1
  561. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +1 -1
  562. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +1 -1
  563. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +1 -1
  564. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +1 -1
  565. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +1 -1
  566. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +1 -1
  567. data/spec/integration/retryable_writes/shared/supports_retries.rb +1 -1
  568. data/spec/integration/retryable_writes_errors_spec.rb +316 -2
  569. data/spec/integration/sdam_error_handling_spec.rb +65 -4
  570. data/spec/integration/sdam_events_spec.rb +1 -1
  571. data/spec/integration/sdam_prose_spec.rb +3 -3
  572. data/spec/integration/search_indexes_prose_spec.rb +168 -0
  573. data/spec/integration/secondary_reads_spec.rb +1 -0
  574. data/spec/integration/server_description_spec.rb +1 -1
  575. data/spec/integration/server_monitor_spec.rb +3 -2
  576. data/spec/integration/server_selection_spec.rb +1 -1
  577. data/spec/integration/server_selector_spec.rb +5 -3
  578. data/spec/integration/server_spec.rb +23 -26
  579. data/spec/integration/shell_examples_spec.rb +1 -1
  580. data/spec/integration/size_limit_spec.rb +5 -2
  581. data/spec/integration/snappy_compression_spec.rb +1 -1
  582. data/spec/integration/snapshot_query_examples_spec.rb +129 -0
  583. data/spec/integration/srv_monitoring_spec.rb +40 -1
  584. data/spec/integration/srv_spec.rb +4 -3
  585. data/spec/integration/ssl_uri_options_spec.rb +1 -1
  586. data/spec/integration/step_down_spec.rb +25 -7
  587. data/spec/integration/time_zone_querying_spec.rb +1 -1
  588. data/spec/integration/transaction_pinning_spec.rb +20 -6
  589. data/spec/integration/transactions_api_examples_spec.rb +1 -1
  590. data/spec/integration/transactions_examples_spec.rb +1 -1
  591. data/spec/integration/truncated_utf8_spec.rb +1 -1
  592. data/spec/integration/versioned_api_examples_spec.rb +38 -32
  593. data/spec/integration/x509_auth_spec.rb +1 -1
  594. data/spec/integration/zlib_compression_spec.rb +1 -1
  595. data/spec/integration/zstd_compression_spec.rb +1 -1
  596. data/spec/kerberos/kerberos_spec.rb +1 -1
  597. data/spec/lite_spec_helper.rb +61 -16
  598. data/spec/mongo/address/ipv4_spec.rb +1 -1
  599. data/spec/mongo/address/ipv6_spec.rb +8 -1
  600. data/spec/mongo/address/unix_spec.rb +1 -1
  601. data/spec/mongo/address/validator_spec.rb +1 -1
  602. data/spec/mongo/address_spec.rb +15 -2
  603. data/spec/mongo/auth/aws/credential_cache_spec.rb +63 -0
  604. data/spec/mongo/auth/aws/credentials_retriever_spec.rb +90 -0
  605. data/spec/mongo/auth/aws/credentials_spec.rb +46 -0
  606. data/spec/mongo/auth/aws/request_region_spec.rb +1 -1
  607. data/spec/mongo/auth/aws/request_spec.rb +1 -1
  608. data/spec/mongo/auth/cr_spec.rb +2 -22
  609. data/spec/mongo/auth/gssapi/conversation_spec.rb +1 -1
  610. data/spec/mongo/auth/invalid_mechanism_spec.rb +1 -1
  611. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  612. data/spec/mongo/auth/ldap_spec.rb +1 -1
  613. data/spec/mongo/auth/scram/conversation_spec.rb +24 -24
  614. data/spec/mongo/auth/scram256/conversation_spec.rb +21 -21
  615. data/spec/mongo/auth/scram_negotiation_spec.rb +2 -1
  616. data/spec/mongo/auth/scram_spec.rb +1 -1
  617. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +1 -1
  618. data/spec/mongo/auth/stringprep_spec.rb +1 -1
  619. data/spec/mongo/auth/user/view_spec.rb +96 -1
  620. data/spec/mongo/auth/user_spec.rb +1 -1
  621. data/spec/mongo/auth/x509/conversation_spec.rb +1 -1
  622. data/spec/mongo/auth/x509_spec.rb +1 -1
  623. data/spec/mongo/auth_spec.rb +1 -1
  624. data/spec/mongo/bson_spec.rb +1 -1
  625. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +1 -1
  626. data/spec/mongo/bulk_write/result_spec.rb +16 -2
  627. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +1 -1
  628. data/spec/mongo/bulk_write_spec.rb +142 -21
  629. data/spec/mongo/caching_cursor_spec.rb +1 -1
  630. data/spec/mongo/client_construction_spec.rb +734 -631
  631. data/spec/mongo/client_encryption_spec.rb +11 -23
  632. data/spec/mongo/client_spec.rb +389 -152
  633. data/spec/mongo/cluster/cursor_reaper_spec.rb +42 -17
  634. data/spec/mongo/cluster/periodic_executor_spec.rb +1 -1
  635. data/spec/mongo/cluster/socket_reaper_spec.rb +1 -1
  636. data/spec/mongo/cluster/topology/replica_set_spec.rb +1 -1
  637. data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
  638. data/spec/mongo/cluster/topology/single_spec.rb +1 -1
  639. data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
  640. data/spec/mongo/cluster/topology_spec.rb +1 -1
  641. data/spec/mongo/cluster_spec.rb +193 -199
  642. data/spec/mongo/cluster_time_spec.rb +1 -1
  643. data/spec/mongo/collection/view/aggregation_spec.rb +184 -84
  644. data/spec/mongo/collection/view/builder/find_command_spec.rb +1 -1
  645. data/spec/mongo/collection/view/builder/op_query_spec.rb +1 -1
  646. data/spec/mongo/collection/view/change_stream_resume_spec.rb +1 -1
  647. data/spec/mongo/collection/view/change_stream_spec.rb +3 -3
  648. data/spec/mongo/collection/view/explainable_spec.rb +3 -1
  649. data/spec/mongo/collection/view/immutable_spec.rb +1 -1
  650. data/spec/mongo/collection/view/iterable_spec.rb +1 -1
  651. data/spec/mongo/collection/view/map_reduce_spec.rb +25 -2
  652. data/spec/mongo/collection/view/readable_spec.rb +744 -2
  653. data/spec/mongo/collection/view/writable_spec.rb +145 -33
  654. data/spec/mongo/collection/view_spec.rb +1 -1
  655. data/spec/mongo/collection_crud_spec.rb +121 -15
  656. data/spec/mongo/collection_ddl_spec.rb +116 -66
  657. data/spec/mongo/collection_spec.rb +48 -2
  658. data/spec/mongo/condition_variable_spec.rb +104 -0
  659. data/spec/mongo/config/options_spec.rb +76 -0
  660. data/spec/mongo/config_spec.rb +74 -0
  661. data/spec/mongo/crypt/auto_decryption_context_spec.rb +18 -2
  662. data/spec/mongo/crypt/auto_encrypter_spec.rb +264 -6
  663. data/spec/mongo/crypt/auto_encryption_context_spec.rb +18 -2
  664. data/spec/mongo/crypt/binary_spec.rb +1 -1
  665. data/spec/mongo/crypt/binding/binary_spec.rb +1 -1
  666. data/spec/mongo/crypt/binding/context_spec.rb +68 -18
  667. data/spec/mongo/crypt/binding/helpers_spec.rb +1 -1
  668. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +18 -47
  669. data/spec/mongo/crypt/binding/status_spec.rb +1 -1
  670. data/spec/mongo/crypt/binding/version_spec.rb +48 -1
  671. data/spec/mongo/crypt/binding_unloaded_spec.rb +15 -1
  672. data/spec/mongo/crypt/data_key_context_spec.rb +43 -115
  673. data/spec/mongo/crypt/encryption_io_spec.rb +3 -1
  674. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +33 -2
  675. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +95 -2
  676. data/spec/mongo/crypt/handle_spec.rb +187 -156
  677. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +1 -1
  678. data/spec/mongo/crypt/hooks_spec.rb +30 -0
  679. data/spec/mongo/crypt/kms/azure/credentials_retriever_spec.rb +86 -0
  680. data/spec/mongo/crypt/kms/credentials_spec.rb +373 -0
  681. data/spec/mongo/crypt/kms_spec.rb +62 -0
  682. data/spec/mongo/crypt/status_spec.rb +1 -1
  683. data/spec/mongo/crypt_spec.rb +21 -0
  684. data/spec/mongo/cursor/builder/get_more_command_spec.rb +1 -1
  685. data/spec/mongo/cursor/builder/op_get_more_spec.rb +1 -1
  686. data/spec/mongo/cursor_spec.rb +148 -14
  687. data/spec/mongo/database_spec.rb +67 -2
  688. data/spec/mongo/distinguishing_semaphore_spec.rb +7 -7
  689. data/spec/mongo/error/bulk_write_error_spec.rb +1 -1
  690. data/spec/mongo/error/crypt_error_spec.rb +1 -1
  691. data/spec/mongo/error/max_bson_size_spec.rb +1 -1
  692. data/spec/mongo/error/no_server_available_spec.rb +1 -1
  693. data/spec/mongo/error/notable_spec.rb +1 -1
  694. data/spec/mongo/error/operation_failure_heavy_spec.rb +50 -1
  695. data/spec/mongo/error/operation_failure_spec.rb +1 -1
  696. data/spec/mongo/error/parser_spec.rb +1 -1
  697. data/spec/mongo/error/unsupported_option_spec.rb +1 -1
  698. data/spec/mongo/event/publisher_spec.rb +1 -1
  699. data/spec/mongo/event/subscriber_spec.rb +1 -1
  700. data/spec/mongo/grid/file/chunk_spec.rb +1 -1
  701. data/spec/mongo/grid/file/info_spec.rb +1 -1
  702. data/spec/mongo/grid/file_spec.rb +1 -1
  703. data/spec/mongo/grid/fs_bucket_spec.rb +1 -1
  704. data/spec/mongo/grid/stream/read_spec.rb +1 -1
  705. data/spec/mongo/grid/stream/write_spec.rb +1 -1
  706. data/spec/mongo/grid/stream_spec.rb +1 -1
  707. data/spec/mongo/id_spec.rb +2 -2
  708. data/spec/mongo/index/view_spec.rb +126 -1
  709. data/spec/mongo/lint_spec.rb +2 -2
  710. data/spec/mongo/logger_spec.rb +1 -1
  711. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +1 -1
  712. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +2 -2
  713. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +2 -2
  714. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +2 -2
  715. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +2 -2
  716. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +2 -2
  717. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +2 -2
  718. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +2 -2
  719. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +2 -2
  720. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +2 -2
  721. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +2 -2
  722. data/spec/mongo/monitoring/event/command_failed_spec.rb +1 -1
  723. data/spec/mongo/monitoring/event/command_started_spec.rb +1 -1
  724. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +1 -1
  725. data/spec/mongo/monitoring/event/secure_spec.rb +1 -1
  726. data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
  727. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -1
  728. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
  729. data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +1 -1
  730. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
  731. data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
  732. data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
  733. data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
  734. data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
  735. data/spec/mongo/monitoring_spec.rb +1 -1
  736. data/spec/mongo/operation/aggregate/result_spec.rb +1 -1
  737. data/spec/mongo/operation/aggregate_spec.rb +1 -1
  738. data/spec/mongo/operation/collections_info_spec.rb +1 -1
  739. data/spec/mongo/operation/command_spec.rb +1 -1
  740. data/spec/mongo/operation/create/op_msg_spec.rb +244 -0
  741. data/spec/mongo/operation/create_index_spec.rb +1 -1
  742. data/spec/mongo/operation/create_user_spec.rb +1 -1
  743. data/spec/mongo/operation/delete/bulk_spec.rb +1 -1
  744. data/spec/mongo/operation/delete/op_msg_spec.rb +14 -5
  745. data/spec/mongo/operation/delete_spec.rb +1 -31
  746. data/spec/mongo/operation/drop_index_spec.rb +1 -1
  747. data/spec/mongo/operation/find/builder/flags_spec.rb +1 -1
  748. data/spec/mongo/operation/find/builder/modifiers_spec.rb +1 -1
  749. data/spec/mongo/operation/indexes_spec.rb +1 -1
  750. data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
  751. data/spec/mongo/operation/insert/op_msg_spec.rb +19 -11
  752. data/spec/mongo/operation/insert_spec.rb +2 -34
  753. data/spec/mongo/operation/limited_spec.rb +1 -1
  754. data/spec/mongo/operation/map_reduce_spec.rb +1 -1
  755. data/spec/mongo/operation/read_preference_legacy_spec.rb +1 -1
  756. data/spec/mongo/operation/read_preference_op_msg_spec.rb +25 -2
  757. data/spec/mongo/operation/remove_user_spec.rb +1 -1
  758. data/spec/mongo/operation/result_spec.rb +21 -1
  759. data/spec/mongo/operation/specifiable_spec.rb +1 -1
  760. data/spec/mongo/operation/update/bulk_spec.rb +1 -1
  761. data/spec/mongo/operation/update/op_msg_spec.rb +14 -5
  762. data/spec/mongo/operation/update_spec.rb +1 -30
  763. data/spec/mongo/operation/update_user_spec.rb +1 -1
  764. data/spec/mongo/options/redacted_spec.rb +2 -2
  765. data/spec/mongo/protocol/caching_hash_spec.rb +37 -0
  766. data/spec/mongo/protocol/compressed_spec.rb +1 -1
  767. data/spec/mongo/protocol/get_more_spec.rb +1 -1
  768. data/spec/mongo/protocol/kill_cursors_spec.rb +1 -1
  769. data/spec/mongo/protocol/msg_spec.rb +45 -66
  770. data/spec/mongo/protocol/query_spec.rb +1 -1
  771. data/spec/mongo/protocol/registry_spec.rb +1 -1
  772. data/spec/mongo/protocol/reply_spec.rb +1 -1
  773. data/spec/mongo/query_cache_middleware_spec.rb +1 -1
  774. data/spec/mongo/query_cache_spec.rb +2 -1
  775. data/spec/mongo/retryable/write_worker_spec.rb +39 -0
  776. data/spec/mongo/retryable_spec.rb +37 -6
  777. data/spec/mongo/semaphore_spec.rb +7 -7
  778. data/spec/mongo/server/app_metadata/environment_spec.rb +344 -0
  779. data/spec/mongo/server/app_metadata/truncator_spec.rb +158 -0
  780. data/spec/mongo/server/app_metadata_spec.rb +53 -65
  781. data/spec/mongo/server/connection_auth_spec.rb +4 -2
  782. data/spec/mongo/server/connection_common_spec.rb +14 -2
  783. data/spec/mongo/server/connection_pool/populator_spec.rb +17 -3
  784. data/spec/mongo/server/connection_pool_spec.rb +567 -63
  785. data/spec/mongo/server/connection_spec.rb +71 -163
  786. data/spec/mongo/server/description/features_spec.rb +25 -1
  787. data/spec/mongo/server/description_query_methods_spec.rb +1 -1
  788. data/spec/mongo/server/description_spec.rb +1 -1
  789. data/spec/mongo/server/monitor/app_metadata_spec.rb +1 -1
  790. data/spec/mongo/server/monitor/connection_spec.rb +3 -3
  791. data/spec/mongo/server/monitor_spec.rb +6 -5
  792. data/spec/mongo/server/push_monitor_spec.rb +3 -9
  793. data/spec/mongo/server/round_trip_time_averager_spec.rb +1 -1
  794. data/spec/mongo/server_selector/nearest_spec.rb +1 -1
  795. data/spec/mongo/server_selector/primary_preferred_spec.rb +1 -1
  796. data/spec/mongo/server_selector/primary_spec.rb +1 -1
  797. data/spec/mongo/server_selector/secondary_preferred_spec.rb +1 -1
  798. data/spec/mongo/server_selector/secondary_spec.rb +1 -1
  799. data/spec/mongo/server_selector_spec.rb +137 -16
  800. data/spec/mongo/server_spec.rb +32 -5
  801. data/spec/mongo/session/server_session_spec.rb +1 -1
  802. data/spec/mongo/session/session_pool_spec.rb +2 -17
  803. data/spec/mongo/session_spec.rb +27 -7
  804. data/spec/mongo/session_transaction_spec.rb +19 -3
  805. data/spec/mongo/socket/ssl_spec.rb +45 -72
  806. data/spec/mongo/socket/tcp_spec.rb +1 -1
  807. data/spec/mongo/socket/unix_spec.rb +1 -1
  808. data/spec/mongo/socket_spec.rb +1 -1
  809. data/spec/mongo/srv/monitor_spec.rb +1 -1
  810. data/spec/mongo/srv/result_spec.rb +1 -1
  811. data/spec/mongo/timeout_spec.rb +1 -1
  812. data/spec/mongo/tls_context_hooks_spec.rb +1 -1
  813. data/spec/mongo/uri/options_mapper_spec.rb +1605 -0
  814. data/spec/mongo/uri/srv_protocol_spec.rb +263 -4
  815. data/spec/mongo/uri_option_parsing_spec.rb +1 -1
  816. data/spec/mongo/uri_spec.rb +168 -11
  817. data/spec/mongo/utils_spec.rb +1 -15
  818. data/spec/mongo/write_concern/acknowledged_spec.rb +1 -1
  819. data/spec/mongo/write_concern/unacknowledged_spec.rb +1 -1
  820. data/spec/mongo/write_concern_spec.rb +1 -1
  821. data/spec/runners/auth.rb +1 -1
  822. data/spec/runners/change_streams/outcome.rb +1 -1
  823. data/spec/runners/change_streams/spec.rb +1 -1
  824. data/spec/runners/change_streams/test.rb +1 -1
  825. data/spec/runners/cmap/verifier.rb +2 -2
  826. data/spec/runners/cmap.rb +188 -45
  827. data/spec/runners/command_monitoring.rb +1 -1
  828. data/spec/runners/connection_string.rb +9 -1
  829. data/spec/runners/crud/context.rb +1 -1
  830. data/spec/runners/crud/operation.rb +14 -5
  831. data/spec/runners/crud/outcome.rb +1 -1
  832. data/spec/runners/crud/requirement.rb +12 -7
  833. data/spec/runners/crud/spec.rb +6 -1
  834. data/spec/runners/crud/test.rb +2 -10
  835. data/spec/runners/crud/test_base.rb +2 -2
  836. data/spec/runners/crud/verifier.rb +10 -5
  837. data/spec/runners/crud.rb +2 -2
  838. data/spec/runners/gridfs.rb +1 -1
  839. data/spec/runners/read_write_concern_document.rb +1 -1
  840. data/spec/runners/sdam/verifier.rb +1 -1
  841. data/spec/runners/sdam.rb +1 -1
  842. data/spec/runners/server_selection.rb +1 -1
  843. data/spec/runners/server_selection_rtt.rb +1 -1
  844. data/spec/runners/transactions/operation.rb +15 -9
  845. data/spec/runners/transactions/spec.rb +3 -3
  846. data/spec/runners/transactions/test.rb +75 -22
  847. data/spec/runners/transactions.rb +12 -9
  848. data/spec/runners/unified/assertions.rb +162 -51
  849. data/spec/runners/unified/change_stream_operations.rb +26 -3
  850. data/spec/runners/unified/client_side_encryption_operations.rb +83 -0
  851. data/spec/runners/unified/crud_operations.rb +166 -28
  852. data/spec/runners/unified/ddl_operations.rb +152 -3
  853. data/spec/runners/unified/entity_map.rb +4 -4
  854. data/spec/runners/unified/error.rb +3 -2
  855. data/spec/runners/unified/event_subscriber.rb +9 -3
  856. data/spec/runners/unified/exceptions.rb +1 -1
  857. data/spec/runners/unified/grid_fs_operations.rb +22 -1
  858. data/spec/runners/unified/search_index_operations.rb +63 -0
  859. data/spec/runners/unified/support_operations.rb +78 -8
  860. data/spec/runners/unified/test.rb +199 -31
  861. data/spec/runners/unified/test_group.rb +1 -1
  862. data/spec/runners/unified/thread_operations.rb +73 -0
  863. data/spec/runners/unified.rb +15 -5
  864. data/spec/shared/lib/mrss/constraints.rb +10 -17
  865. data/spec/shared/lib/mrss/docker_runner.rb +30 -3
  866. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  867. data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
  868. data/spec/shared/lib/mrss/lite_constraints.rb +48 -1
  869. data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
  870. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  871. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  872. data/spec/shared/lib/mrss/utils.rb +28 -6
  873. data/spec/shared/share/Dockerfile.erb +82 -124
  874. data/spec/shared/shlib/config.sh +27 -0
  875. data/spec/shared/shlib/distro.sh +2 -1
  876. data/spec/shared/shlib/server.sh +74 -24
  877. data/spec/shared/shlib/set_env.sh +45 -30
  878. data/spec/solo/clean_exit_spec.rb +5 -7
  879. data/spec/spec_helper.rb +2 -3
  880. data/spec/spec_tests/auth_spec.rb +1 -1
  881. data/spec/spec_tests/change_streams_unified_spec.rb +2 -1
  882. data/spec/spec_tests/client_side_encryption_spec.rb +25 -2
  883. data/spec/spec_tests/client_side_encryption_unified_spec.rb +26 -0
  884. data/spec/spec_tests/cmap_spec.rb +29 -15
  885. data/spec/spec_tests/collection_management_spec.rb +1 -1
  886. data/spec/spec_tests/command_monitoring_unified_spec.rb +1 -1
  887. data/spec/spec_tests/connection_string_spec.rb +1 -1
  888. data/spec/spec_tests/crud_spec.rb +1 -11
  889. data/spec/spec_tests/crud_unified_spec.rb +1 -1
  890. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +41 -0
  891. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +103 -0
  892. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +120 -0
  893. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
  894. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1169 -0
  895. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1069 -0
  896. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +307 -0
  897. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +859 -4
  898. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
  899. data/spec/spec_tests/data/client_side_encryption/awsTemporary.yml +57 -0
  900. data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
  901. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +12 -2
  902. data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
  903. data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
  904. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
  905. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +5 -4
  906. data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
  907. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
  908. data/spec/spec_tests/data/client_side_encryption/create-and-createIndexes.yml +58 -0
  909. data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
  910. data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
  911. data/spec/spec_tests/data/client_side_encryption/explain.yml +3 -10
  912. data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
  913. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
  914. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
  915. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
  916. data/spec/spec_tests/data/client_side_encryption/fle2v2-BypassQueryAnalysis.yml +89 -0
  917. data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +82 -0
  918. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection-OldServer.yml +61 -0
  919. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +937 -0
  920. data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +66 -0
  921. data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +100 -0
  922. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +79 -0
  923. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +102 -0
  924. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +58 -0
  925. data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +200 -0
  926. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +96 -0
  927. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +89 -0
  928. data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +43 -0
  929. data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +44 -0
  930. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +241 -0
  931. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +422 -0
  932. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +182 -0
  933. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +239 -0
  934. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +235 -0
  935. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +252 -0
  936. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +1687 -0
  937. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +293 -0
  938. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +905 -0
  939. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +1684 -0
  940. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +1680 -0
  941. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +1697 -0
  942. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +329 -0
  943. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +424 -0
  944. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +226 -0
  945. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +327 -0
  946. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +319 -0
  947. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +336 -0
  948. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +913 -0
  949. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +292 -0
  950. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +518 -0
  951. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +911 -0
  952. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +907 -0
  953. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +924 -0
  954. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +325 -0
  955. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +424 -0
  956. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +224 -0
  957. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +323 -0
  958. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +319 -0
  959. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +338 -0
  960. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +241 -0
  961. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +423 -0
  962. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +182 -0
  963. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +239 -0
  964. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +235 -0
  965. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +254 -0
  966. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +241 -0
  967. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +422 -0
  968. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +182 -0
  969. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +239 -0
  970. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +235 -0
  971. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +254 -0
  972. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +43 -0
  973. data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +210 -0
  974. data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +169 -0
  975. data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
  976. data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
  977. data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
  978. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
  979. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
  980. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
  981. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +3 -1
  982. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
  983. data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
  984. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
  985. data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
  986. data/spec/spec_tests/data/client_side_encryption/unified/addKeyAltName.yml +194 -0
  987. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +67 -0
  988. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey.yml +309 -0
  989. data/spec/spec_tests/data/client_side_encryption/unified/deleteKey.yml +159 -0
  990. data/spec/spec_tests/data/client_side_encryption/unified/getKey.yml +105 -0
  991. data/spec/spec_tests/data/client_side_encryption/unified/getKeyByAltName.yml +104 -0
  992. data/spec/spec_tests/data/client_side_encryption/unified/getKeys.yml +122 -0
  993. data/spec/spec_tests/data/client_side_encryption/unified/removeKeyAltName.yml +157 -0
  994. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-decrypt_failure.yml +69 -0
  995. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-encrypt_failure.yml +122 -0
  996. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +432 -0
  997. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
  998. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
  999. data/spec/spec_tests/data/client_side_encryption/validatorAndPartialFieldExpression.yml +166 -0
  1000. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +2 -0
  1001. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +2 -0
  1002. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +2 -0
  1003. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +2 -0
  1004. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +3 -1
  1005. data/spec/spec_tests/data/cmap/pool-checkin.yml +5 -0
  1006. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +2 -0
  1007. data/spec/spec_tests/data/cmap/pool-checkout-custom-maxConnecting-is-enforced.yml +50 -0
  1008. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +2 -0
  1009. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-is-enforced.yml +81 -0
  1010. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-timeout.yml +71 -0
  1011. data/spec/spec_tests/data/cmap/pool-checkout-minPoolSize-connection-maxConnecting.yml +64 -0
  1012. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +2 -0
  1013. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +6 -0
  1014. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +8 -0
  1015. data/spec/spec_tests/data/cmap/pool-checkout-returned-connection-maxConnecting.yml +88 -0
  1016. data/spec/spec_tests/data/cmap/pool-clear-interrupting-pending-connections.yml +43 -0
  1017. data/spec/spec_tests/data/cmap/pool-clear-min-size.yml +41 -0
  1018. data/spec/spec_tests/data/cmap/pool-clear-paused.yml +18 -0
  1019. data/spec/spec_tests/data/cmap/pool-clear-ready.yml +39 -0
  1020. data/spec/spec_tests/data/cmap/pool-clear-schedule-run-interruptInUseConnections-false.yml +48 -0
  1021. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +2 -0
  1022. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +2 -0
  1023. data/spec/spec_tests/data/cmap/pool-create-min-size-error.yml +43 -0
  1024. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +9 -0
  1025. data/spec/spec_tests/data/cmap/pool-ready-ready.yml +22 -0
  1026. data/spec/spec_tests/data/cmap/pool-ready.yml +30 -0
  1027. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +2 -0
  1028. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +6 -1
  1029. data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
  1030. data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
  1031. data/spec/spec_tests/data/collection_management/modifyCollection-errorResponse.yml +59 -0
  1032. data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
  1033. data/spec/spec_tests/data/collection_management/timeseries-collection.yml +35 -0
  1034. data/spec/spec_tests/data/command_monitoring_unified/bulkWrite.yml +68 -0
  1035. data/spec/spec_tests/data/command_monitoring_unified/command.yml +50 -0
  1036. data/spec/spec_tests/data/command_monitoring_unified/deleteMany.yml +79 -0
  1037. data/spec/spec_tests/data/command_monitoring_unified/deleteOne.yml +79 -0
  1038. data/spec/spec_tests/data/command_monitoring_unified/find.yml +254 -0
  1039. data/spec/spec_tests/data/command_monitoring_unified/insertMany.yml +79 -0
  1040. data/spec/spec_tests/data/command_monitoring_unified/insertOne.yml +77 -0
  1041. data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
  1042. data/spec/spec_tests/data/command_monitoring_unified/redacted-commands.yml +8 -0
  1043. data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
  1044. data/spec/spec_tests/data/command_monitoring_unified/unacknowledgedBulkWrite.yml +55 -0
  1045. data/spec/spec_tests/data/command_monitoring_unified/updateMany.yml +87 -0
  1046. data/spec/spec_tests/data/command_monitoring_unified/updateOne.yml +118 -0
  1047. data/spec/spec_tests/data/command_monitoring_unified/writeConcernError.yml +80 -0
  1048. data/spec/spec_tests/data/connection_string/invalid-uris.yml +0 -10
  1049. data/spec/spec_tests/data/connection_string/valid-options.yml +13 -0
  1050. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +1 -1
  1051. data/spec/spec_tests/data/crud/read/count-collation.yml +1 -1
  1052. data/spec/spec_tests/data/crud/read/distinct-collation.yml +1 -1
  1053. data/spec/spec_tests/data/crud/read/find-collation.yml +1 -1
  1054. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +1 -1
  1055. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +1 -1
  1056. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +1 -1
  1057. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +1 -1
  1058. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +1 -1
  1059. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +1 -1
  1060. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +1 -1
  1061. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +1 -1
  1062. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +1 -1
  1063. data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
  1064. data/spec/spec_tests/data/crud_unified/aggregate-let.yml +138 -0
  1065. data/spec/spec_tests/data/crud_unified/aggregate-merge-errorResponse.yml +42 -0
  1066. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
  1067. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
  1068. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +155 -0
  1069. data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
  1070. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
  1071. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
  1072. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
  1073. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
  1074. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
  1075. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
  1076. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
  1077. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
  1078. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
  1079. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
  1080. data/spec/spec_tests/data/crud_unified/bulkWrite-errorResponse.yml +50 -0
  1081. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
  1082. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
  1083. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
  1084. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
  1085. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
  1086. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
  1087. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
  1088. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
  1089. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
  1090. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
  1091. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
  1092. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
  1093. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
  1094. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
  1095. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
  1096. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +151 -0
  1097. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
  1098. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
  1099. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
  1100. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
  1101. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
  1102. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
  1103. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +93 -0
  1104. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
  1105. data/spec/spec_tests/data/crud_unified/deleteOne-errorResponse.yml +46 -0
  1106. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
  1107. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
  1108. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
  1109. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
  1110. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +91 -0
  1111. data/spec/spec_tests/data/crud_unified/distinct-comment.yml +98 -0
  1112. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
  1113. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +49 -135
  1114. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
  1115. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
  1116. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
  1117. data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
  1118. data/spec/spec_tests/data/crud_unified/find-let.yml +71 -0
  1119. data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +348 -0
  1120. data/spec/spec_tests/data/crud_unified/find.yml +68 -0
  1121. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
  1122. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
  1123. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
  1124. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
  1125. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
  1126. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +86 -0
  1127. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
  1128. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
  1129. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
  1130. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
  1131. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
  1132. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
  1133. data/spec/spec_tests/data/crud_unified/findOneAndReplace-let.yml +94 -0
  1134. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
  1135. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
  1136. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-errorResponse.yml +69 -0
  1137. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
  1138. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
  1139. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
  1140. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
  1141. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-let.yml +96 -0
  1142. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
  1143. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
  1144. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
  1145. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
  1146. data/spec/spec_tests/data/crud_unified/insertOne-errorResponse.yml +46 -0
  1147. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
  1148. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
  1149. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
  1150. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
  1151. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
  1152. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
  1153. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
  1154. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
  1155. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
  1156. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
  1157. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
  1158. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
  1159. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +107 -0
  1160. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
  1161. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
  1162. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
  1163. data/spec/spec_tests/data/crud_unified/updateOne-errorResponse.yml +47 -0
  1164. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
  1165. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
  1166. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
  1167. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
  1168. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +102 -0
  1169. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
  1170. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
  1171. data/spec/spec_tests/data/gridfs_unified/delete.yml +198 -0
  1172. data/spec/spec_tests/data/gridfs_unified/download.yml +241 -0
  1173. data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +159 -0
  1174. data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +92 -0
  1175. data/spec/spec_tests/data/gridfs_unified/upload.yml +288 -0
  1176. data/spec/spec_tests/data/index_management/createSearchIndex.yml +64 -0
  1177. data/spec/spec_tests/data/index_management/createSearchIndexes.yml +86 -0
  1178. data/spec/spec_tests/data/index_management/dropSearchIndex.yml +43 -0
  1179. data/spec/spec_tests/data/index_management/listSearchIndexes.yml +91 -0
  1180. data/spec/spec_tests/data/index_management/updateSearchIndex.yml +46 -0
  1181. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/DefaultNoMaxStaleness.yml +2 -2
  1182. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +3 -3
  1183. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest.yml +3 -3
  1184. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +3 -3
  1185. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +2 -2
  1186. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +2 -2
  1187. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Secondary.yml +4 -4
  1188. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +2 -2
  1189. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +4 -4
  1190. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml +2 -2
  1191. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml +2 -2
  1192. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +3 -3
  1193. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat.yml +2 -2
  1194. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml +2 -2
  1195. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +2 -2
  1196. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +2 -2
  1197. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest.yml +3 -3
  1198. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +3 -3
  1199. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +2 -2
  1200. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +2 -2
  1201. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +2 -2
  1202. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +5 -5
  1203. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +3 -3
  1204. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +5 -5
  1205. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +3 -3
  1206. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +2 -2
  1207. data/spec/spec_tests/data/max_staleness/Sharded/SmallMaxStaleness.yml +2 -2
  1208. data/spec/spec_tests/data/max_staleness/Single/SmallMaxStaleness.yml +1 -1
  1209. data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +1 -1
  1210. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
  1211. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
  1212. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +1342 -0
  1213. data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
  1214. data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
  1215. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
  1216. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
  1217. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
  1218. data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
  1219. data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
  1220. data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
  1221. data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
  1222. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +93 -0
  1223. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +785 -0
  1224. data/spec/spec_tests/data/retryable_writes/unified/insertOne-noWritesPerformedError.yml +54 -0
  1225. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +75 -0
  1226. data/spec/spec_tests/data/run_command_unified/runCommand.yml +319 -0
  1227. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
  1228. data/spec/spec_tests/data/sdam/rs/electionId_precedence_setVersion.yml +62 -0
  1229. data/spec/spec_tests/data/sdam/rs/null_election_id-pre-6.0.yml +175 -0
  1230. data/spec/spec_tests/data/sdam/rs/null_election_id.yml +20 -18
  1231. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0-pre-6.0.yml +87 -0
  1232. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +1 -1
  1233. data/spec/spec_tests/data/sdam/rs/set_version_can_rollback.yml +101 -0
  1234. data/spec/spec_tests/data/sdam/rs/setversion_equal_max_without_electionid.yml +78 -0
  1235. data/spec/spec_tests/data/sdam/rs/setversion_greaterthan_max_without_electionid.yml +79 -0
  1236. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid-pre-6.0.yml +79 -0
  1237. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +9 -10
  1238. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid-pre-6.0.yml +117 -0
  1239. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +23 -21
  1240. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -1
  1241. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +38 -39
  1242. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +38 -39
  1243. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +1 -1
  1244. data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +1 -1
  1245. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +1 -1
  1246. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  1247. data/spec/spec_tests/data/sdam_unified/auth-error.yml +130 -0
  1248. data/spec/spec_tests/data/sdam_unified/auth-misc-command-error.yml +132 -0
  1249. data/spec/spec_tests/data/sdam_unified/auth-network-error.yml +132 -0
  1250. data/spec/spec_tests/data/sdam_unified/auth-network-timeout-error.yml +138 -0
  1251. data/spec/spec_tests/data/sdam_unified/auth-shutdown-error.yml +133 -0
  1252. data/spec/spec_tests/data/sdam_unified/cancel-server-check.yml +143 -0
  1253. data/spec/spec_tests/data/sdam_unified/connectTimeoutMS.yml +130 -0
  1254. data/spec/spec_tests/data/sdam_unified/find-network-error.yml +135 -0
  1255. data/spec/spec_tests/data/sdam_unified/find-network-timeout-error.yml +119 -0
  1256. data/spec/spec_tests/data/sdam_unified/find-shutdown-error.yml +163 -0
  1257. data/spec/spec_tests/data/sdam_unified/hello-command-error.yml +233 -0
  1258. data/spec/spec_tests/data/sdam_unified/hello-network-error.yml +228 -0
  1259. data/spec/spec_tests/data/sdam_unified/hello-timeout.yml +318 -0
  1260. data/spec/spec_tests/data/sdam_unified/insert-network-error.yml +137 -0
  1261. data/spec/spec_tests/data/sdam_unified/insert-shutdown-error.yml +162 -0
  1262. data/spec/spec_tests/data/sdam_unified/interruptInUse-pool-clear.yml +340 -0
  1263. data/spec/spec_tests/data/sdam_unified/minPoolSize-error.yml +125 -0
  1264. data/spec/spec_tests/data/sdam_unified/pool-cleared-error.yml +239 -0
  1265. data/spec/spec_tests/data/sdam_unified/rediscover-quickly-after-step-down.yml +144 -0
  1266. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +6 -5
  1267. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
  1268. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +2 -2
  1269. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +5 -4
  1270. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
  1271. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
  1272. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +11 -0
  1273. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +11 -0
  1274. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
  1275. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
  1276. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
  1277. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
  1278. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
  1279. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
  1280. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
  1281. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
  1282. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
  1283. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
  1284. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
  1285. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
  1286. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
  1287. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
  1288. data/spec/spec_tests/data/sessions_unified/driver-sessions-dirty-session-errors.yml +351 -0
  1289. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
  1290. data/spec/spec_tests/data/sessions_unified/implicit-sessions-default-causal-consistency.yml +119 -0
  1291. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +75 -0
  1292. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-server-error.yml +102 -0
  1293. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +258 -0
  1294. data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +482 -0
  1295. data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
  1296. data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
  1297. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
  1298. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -2
  1299. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
  1300. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
  1301. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
  1302. data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
  1303. data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
  1304. data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +1 -1
  1305. data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +118 -0
  1306. data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +118 -0
  1307. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor-malformed.yml +31 -0
  1308. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor.yml +31 -0
  1309. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError-malformed.yml +34 -0
  1310. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError.yml +35 -0
  1311. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
  1312. data/spec/spec_tests/data/unified/valid-pass/assertNumberConnectionsCheckedOut.yml +17 -0
  1313. data/spec/spec_tests/data/unified/valid-pass/collectionData-createOptions.yml +37 -0
  1314. data/spec/spec_tests/data/unified/valid-pass/entity-client-cmap-events.yml +40 -0
  1315. data/spec/spec_tests/data/unified/valid-pass/entity-client-storeEventsAsEntities.yml +37 -0
  1316. data/spec/spec_tests/data/unified/valid-pass/expectedError-errorResponse.yml +39 -0
  1317. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-eventType.yml +66 -0
  1318. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
  1319. data/spec/spec_tests/data/unified/valid-pass/ignoreResultAndError.yml +34 -0
  1320. data/spec/spec_tests/data/unified/valid-pass/observeSensitiveCommands.yml +255 -0
  1321. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +22 -1
  1322. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
  1323. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +19 -13
  1324. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +3 -3
  1325. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +9 -9
  1326. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +3 -4
  1327. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +1 -1
  1328. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +1 -1
  1329. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +6 -5
  1330. data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
  1331. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
  1332. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
  1333. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +4 -4
  1334. data/spec/spec_tests/gridfs_spec.rb +1 -1
  1335. data/spec/spec_tests/gridfs_unified_spec.rb +13 -0
  1336. data/spec/spec_tests/index_management_unified_spec.rb +13 -0
  1337. data/spec/spec_tests/load_balancers_spec.rb +1 -1
  1338. data/spec/spec_tests/max_staleness_spec.rb +1 -1
  1339. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
  1340. data/spec/spec_tests/read_write_concern_document_spec.rb +1 -1
  1341. data/spec/spec_tests/read_write_concern_operaton_spec.rb +1 -1
  1342. data/spec/spec_tests/retryable_reads_spec.rb +7 -2
  1343. data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
  1344. data/spec/spec_tests/retryable_writes_spec.rb +5 -2
  1345. data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
  1346. data/spec/spec_tests/run_command_unified_spec.rb +13 -0
  1347. data/spec/spec_tests/sdam_monitoring_spec.rb +1 -1
  1348. data/spec/spec_tests/sdam_spec.rb +5 -1
  1349. data/spec/spec_tests/sdam_unified_spec.rb +15 -0
  1350. data/spec/spec_tests/seed_list_discovery_spec.rb +11 -2
  1351. data/spec/spec_tests/server_selection_rtt_spec.rb +1 -1
  1352. data/spec/spec_tests/server_selection_spec.rb +1 -1
  1353. data/spec/spec_tests/sessions_unified_spec.rb +13 -0
  1354. data/spec/spec_tests/transactions_api_spec.rb +1 -1
  1355. data/spec/spec_tests/transactions_spec.rb +1 -1
  1356. data/spec/spec_tests/transactions_unified_spec.rb +1 -1
  1357. data/spec/spec_tests/unified_spec.rb +2 -2
  1358. data/spec/spec_tests/uri_options_spec.rb +1 -1
  1359. data/spec/spec_tests/versioned_api_spec.rb +1 -1
  1360. data/spec/stress/cleanup_spec.rb +1 -1
  1361. data/spec/stress/connection_pool_stress_spec.rb +1 -62
  1362. data/spec/stress/connection_pool_timing_spec.rb +12 -36
  1363. data/spec/stress/fork_reconnect_stress_spec.rb +10 -10
  1364. data/spec/stress/push_monitor_close_spec.rb +1 -1
  1365. data/spec/support/authorization.rb +2 -2
  1366. data/spec/support/aws_utils/base.rb +1 -1
  1367. data/spec/support/aws_utils/inspector.rb +1 -1
  1368. data/spec/support/aws_utils/orchestrator.rb +20 -8
  1369. data/spec/support/aws_utils/provisioner.rb +1 -1
  1370. data/spec/support/aws_utils.rb +4 -3
  1371. data/spec/support/background_thread_registry.rb +4 -14
  1372. data/spec/support/certificates/atlas-ocsp-ca.crt +67 -67
  1373. data/spec/support/certificates/atlas-ocsp.crt +103 -103
  1374. data/spec/support/certificates/retrieve-atlas-cert +40 -0
  1375. data/spec/support/client_registry.rb +6 -2
  1376. data/spec/support/client_registry_macros.rb +1 -1
  1377. data/spec/support/cluster_tools.rb +14 -9
  1378. data/spec/support/common_shortcuts.rb +52 -5
  1379. data/spec/support/constraints.rb +21 -1
  1380. data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
  1381. data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
  1382. data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
  1383. data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
  1384. data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
  1385. data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
  1386. data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
  1387. data/spec/support/crypt/corpus/corpus.json +4999 -37
  1388. data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
  1389. data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
  1390. data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
  1391. data/spec/support/crypt/encrypted_fields/encryptedFields.json +32 -0
  1392. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +30 -0
  1393. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +21 -0
  1394. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +29 -0
  1395. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +21 -0
  1396. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +30 -0
  1397. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +27 -0
  1398. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +27 -0
  1399. data/spec/support/crypt/keys/key1-document.json +30 -0
  1400. data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
  1401. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  1402. data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
  1403. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  1404. data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
  1405. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  1406. data/spec/support/crypt.rb +269 -14
  1407. data/spec/support/dns.rb +1 -1
  1408. data/spec/support/faas/app/aws_lambda/mongodb/Gemfile.lock +19 -0
  1409. data/spec/support/json_ext_formatter.rb +1 -1
  1410. data/spec/support/keyword_struct.rb +1 -1
  1411. data/spec/support/local_resource_registry.rb +1 -1
  1412. data/spec/support/macros.rb +29 -0
  1413. data/spec/support/matchers.rb +5 -5
  1414. data/spec/support/mongos_macros.rb +24 -0
  1415. data/spec/support/monitoring_ext.rb +1 -1
  1416. data/spec/support/ocsp +1 -1
  1417. data/spec/support/primary_socket.rb +1 -1
  1418. data/spec/support/recording_logger.rb +27 -0
  1419. data/spec/support/sdam_formatter_integration.rb +1 -1
  1420. data/spec/support/shared/app_metadata.rb +15 -3
  1421. data/spec/support/shared/auth_context.rb +1 -0
  1422. data/spec/support/shared/protocol.rb +1 -1
  1423. data/spec/support/shared/scram_conversation.rb +3 -2
  1424. data/spec/support/shared/server_selector.rb +1 -1
  1425. data/spec/support/shared/session.rb +14 -8
  1426. data/spec/support/spec_config.rb +133 -2
  1427. data/spec/support/spec_setup.rb +1 -1
  1428. data/spec/support/using_hash.rb +11 -2
  1429. data/spec/support/utils.rb +277 -228
  1430. data.tar.gz.sig +0 -0
  1431. metadata +1868 -1248
  1432. metadata.gz.sig +0 -0
  1433. data/lib/mongo/operation/aggregate/command.rb +0 -55
  1434. data/lib/mongo/operation/collections_info/command.rb +0 -48
  1435. data/lib/mongo/operation/count/command.rb +0 -47
  1436. data/lib/mongo/operation/create/command.rb +0 -47
  1437. data/lib/mongo/operation/create_index/command.rb +0 -61
  1438. data/lib/mongo/operation/delete/command.rb +0 -52
  1439. data/lib/mongo/operation/delete/legacy.rb +0 -64
  1440. data/lib/mongo/operation/distinct/command.rb +0 -47
  1441. data/lib/mongo/operation/drop_database/command.rb +0 -41
  1442. data/lib/mongo/operation/explain/command.rb +0 -58
  1443. data/lib/mongo/operation/explain/legacy.rb +0 -52
  1444. data/lib/mongo/operation/find/builder/legacy.rb +0 -123
  1445. data/lib/mongo/operation/find/command.rb +0 -51
  1446. data/lib/mongo/operation/find/legacy/result.rb +0 -46
  1447. data/lib/mongo/operation/find/legacy.rb +0 -52
  1448. data/lib/mongo/operation/indexes/command.rb +0 -42
  1449. data/lib/mongo/operation/indexes/legacy.rb +0 -48
  1450. data/lib/mongo/operation/insert/command.rb +0 -59
  1451. data/lib/mongo/operation/insert/legacy.rb +0 -68
  1452. data/lib/mongo/operation/kill_cursors/command.rb +0 -48
  1453. data/lib/mongo/operation/list_collections/command.rb +0 -46
  1454. data/lib/mongo/operation/map_reduce/command.rb +0 -51
  1455. data/lib/mongo/operation/parallel_scan/command.rb +0 -57
  1456. data/lib/mongo/operation/remove_user/command.rb +0 -46
  1457. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +0 -44
  1458. data/lib/mongo/operation/update/command.rb +0 -53
  1459. data/lib/mongo/operation/update/legacy/result.rb +0 -112
  1460. data/lib/mongo/operation/update/legacy.rb +0 -76
  1461. data/lib/mongo/operation/users_info/command.rb +0 -46
  1462. data/lib/mongo/operation/write_command/command.rb +0 -51
  1463. data/lib/mongo/protocol/delete.rb +0 -172
  1464. data/lib/mongo/protocol/insert.rb +0 -181
  1465. data/lib/mongo/protocol/update.rb +0 -214
  1466. data/spec/mongo/dbref_spec.rb +0 -152
  1467. data/spec/mongo/operation/delete/command_spec.rb +0 -115
  1468. data/spec/mongo/operation/find/legacy_spec.rb +0 -131
  1469. data/spec/mongo/operation/get_more_spec.rb +0 -63
  1470. data/spec/mongo/operation/insert/command_spec.rb +0 -118
  1471. data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
  1472. data/spec/mongo/operation/update/command_spec.rb +0 -122
  1473. data/spec/mongo/protocol/delete_spec.rb +0 -185
  1474. data/spec/mongo/protocol/insert_spec.rb +0 -179
  1475. data/spec/mongo/protocol/update_spec.rb +0 -204
  1476. data/spec/spec_tests/change_streams_spec.rb +0 -93
  1477. data/spec/spec_tests/command_monitoring_spec.rb +0 -71
  1478. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -101
  1479. data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +0 -1173
  1480. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
  1481. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -535
  1482. data/spec/spec_tests/data/command_monitoring/bulkWrite.yml +0 -49
  1483. data/spec/spec_tests/data/command_monitoring/command.yml +0 -61
  1484. data/spec/spec_tests/data/command_monitoring/deleteMany.yml +0 -55
  1485. data/spec/spec_tests/data/command_monitoring/deleteOne.yml +0 -55
  1486. data/spec/spec_tests/data/command_monitoring/find.yml +0 -266
  1487. data/spec/spec_tests/data/command_monitoring/insertMany.yml +0 -75
  1488. data/spec/spec_tests/data/command_monitoring/insertOne.yml +0 -51
  1489. data/spec/spec_tests/data/command_monitoring/unacknowledgedBulkWrite.yml +0 -34
  1490. data/spec/spec_tests/data/command_monitoring/updateMany.yml +0 -65
  1491. data/spec/spec_tests/data/command_monitoring/updateOne.yml +0 -90
  1492. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
  1493. data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -111
  1494. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
  1495. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
  1496. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
  1497. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
  1498. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
  1499. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
  1500. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
  1501. data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -39
  1502. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
  1503. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
  1504. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
  1505. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
  1506. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
  1507. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
  1508. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
  1509. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
  1510. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
  1511. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
  1512. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
  1513. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
  1514. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
  1515. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
  1516. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
  1517. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
  1518. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
  1519. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
  1520. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
  1521. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
  1522. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
  1523. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
  1524. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
  1525. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
  1526. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
  1527. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
  1528. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
  1529. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
  1530. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
  1531. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
  1532. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
  1533. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
  1534. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
  1535. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
  1536. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
  1537. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
  1538. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +0 -60
  1539. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +0 -146
  1540. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +0 -96
  1541. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +0 -88
  1542. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +0 -85
  1543. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +0 -118
  1544. data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +0 -160
  1545. data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +0 -158
  1546. data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +0 -225
  1547. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +0 -88
  1548. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +0 -117
  1549. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +0 -98
  1550. data/spec/spec_tests/sdam_integration_spec.rb +0 -16
  1551. data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
  1552. data/spec/support/session_registry.rb +0 -55
  1553. /data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
  1554. /data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
  1555. /data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
  1556. /data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
  1557. /data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
  1558. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
  1559. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
  1560. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
  1561. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +0 -0
  1562. /data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
  1563. /data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
  1564. /data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
  1565. /data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
  1566. /data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
  1567. /data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
  1568. /data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
  1569. /data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
  1570. /data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
  1571. /data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
  1572. /data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
  1573. /data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
  1574. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
  1575. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
  1576. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
  1577. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
  1578. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
  1579. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
  1580. /data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
  1581. /data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
  1582. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
  1583. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
  1584. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
  1585. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
  1586. /data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
  1587. /data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
  1588. /data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
  1589. /data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
  1590. /data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
  1591. /data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
  1592. /data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
  1593. /data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
  1594. /data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
  1595. /data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
  1596. /data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
  1597. /data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
  1598. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
  1599. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
  1600. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
  1601. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
  1602. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
  1603. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
  1604. /data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
  1605. /data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
  1606. /data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
  1607. /data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
  1608. /data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
  1609. /data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
  1610. /data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
  1611. /data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
  1612. /data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2020 MongoDB Inc.
5
5
  #
@@ -102,11 +102,7 @@ module Mongo
102
102
  uri_options
103
103
  end
104
104
 
105
- if key == 'readConcernLevel'
106
- value = value.to_sym
107
- end
108
-
109
- #value = apply_transform(key, value, strategy[:type])
105
+ value = apply_transform(key, value, strategy[:type])
110
106
  # Sometimes the value here would be nil, for example if we are processing
111
107
  # read preference tags or auth mechanism properties and all of the
112
108
  # data within is invalid. Ignore such options.
@@ -119,7 +115,6 @@ module Mongo
119
115
  end
120
116
  end
121
117
 
122
- #p uri_options
123
118
  uri_options
124
119
  end
125
120
 
@@ -138,8 +133,51 @@ module Mongo
138
133
  v = opts[spec[:name]]
139
134
  end
140
135
  unless v.nil?
141
- if spec[:type]
142
- v = send("revert_#{spec[:type]}", v)
136
+ if type = spec[:type]
137
+ v = send("revert_#{type}", v)
138
+ end
139
+ canonical_key = URI_OPTION_CANONICAL_NAMES[uri_key]
140
+ unless canonical_key
141
+ raise ArgumentError, "Option #{uri_key} is not known"
142
+ end
143
+ rv[canonical_key] = v
144
+ end
145
+ end
146
+ # For options that default to true, remove the value if it is true.
147
+ %w(retryReads retryWrites).each do |k|
148
+ if rv[k]
149
+ rv.delete(k)
150
+ end
151
+ end
152
+ # Remove auth source when it is $external for mechanisms that default
153
+ # (or require) that auth source.
154
+ if %w(MONGODB-AWS).include?(rv['authMechanism']) && rv['authSource'] == '$external'
155
+ rv.delete('authSource')
156
+ end
157
+ # ssl and tls are aliases, remove ssl ones
158
+ rv.delete('ssl')
159
+ # TODO remove authSource if it is the same as the database,
160
+ # requires this method to know the database specified in the client.
161
+ rv
162
+ end
163
+
164
+ # Converts Ruby options provided to their representation in a URI string.
165
+ #
166
+ # @param [ Hash ] opts Ruby options to convert.
167
+ #
168
+ # @return [ Hash ] URI string hash.
169
+ def ruby_to_string(opts)
170
+ rv = {}
171
+ URI_OPTION_MAP.each do |uri_key, spec|
172
+ if spec[:group]
173
+ v = opts[spec[:group]]
174
+ v = v && v[spec[:name]]
175
+ else
176
+ v = opts[spec[:name]]
177
+ end
178
+ unless v.nil?
179
+ if type = spec[:type]
180
+ v = send("stringify_#{type}", v)
143
181
  end
144
182
  canonical_key = URI_OPTION_CANONICAL_NAMES[uri_key]
145
183
  unless canonical_key
@@ -171,9 +209,9 @@ module Mongo
171
209
  # Applies URI value transformation by either using the default cast
172
210
  # or a transformation appropriate for the given type.
173
211
  #
174
- # @param key [String] URI option name.
175
- # @param value [String] The value to be transformed.
176
- # @param type [Symbol] The transform method.
212
+ # @param [ String ] key URI option name.
213
+ # @param [ String ] value The value to be transformed.
214
+ # @param [ Symbol ] type The transform method.
177
215
  def apply_transform(key, value, type)
178
216
  if type
179
217
  send("convert_#{type}", key, value)
@@ -190,9 +228,9 @@ module Mongo
190
228
  # Specifically required to append an additional tag set
191
229
  # to the array of tag sets without overwriting the original.
192
230
  #
193
- # @param target [Hash] The destination.
194
- # @param value [Object] The value to be merged.
195
- # @param name [Symbol] The name of the option.
231
+ # @param [ Hash ] target The destination.
232
+ # @param [ Object ] value The value to be merged.
233
+ # @param [ Symbol ] name The name of the option.
196
234
  def merge_uri_option(target, value, name)
197
235
  if target.key?(name)
198
236
  if REPEATABLE_OPTIONS.include?(name)
@@ -214,11 +252,11 @@ module Mongo
214
252
 
215
253
  # Simple internal dsl to register a MongoDB URI option in the URI_OPTION_MAP.
216
254
  #
217
- # @param uri_key [String] The MongoDB URI option to register.
218
- # @param name [Symbol] The name of the option in the driver.
219
- # @param extra [Hash] Extra options.
220
- # * :group [Symbol] Nested hash where option will go.
221
- # * :type [Symbol] Name of function to transform value.
255
+ # @param [ String ] uri_key The MongoDB URI option to register.
256
+ # @param [ Symbol ] name The name of the option in the driver.
257
+ # @param [ Hash ] extra Extra options.
258
+ # * :group [ Symbol ] Nested hash where option will go.
259
+ # * :type [ Symbol ] Name of function to transform value.
222
260
  def self.uri_option(uri_key, name, **extra)
223
261
  URI_OPTION_MAP[uri_key.downcase] = { name: name }.update(extra)
224
262
  URI_OPTION_CANONICAL_NAMES[uri_key.downcase] = uri_key
@@ -247,6 +285,7 @@ module Mongo
247
285
  uri_option 'maxStalenessSeconds', :max_staleness, group: :read, type: :max_staleness
248
286
 
249
287
  # Pool options
288
+ uri_option 'maxConnecting', :max_connecting, type: :integer
250
289
  uri_option 'minPoolSize', :min_pool_size, type: :integer
251
290
  uri_option 'maxPoolSize', :max_pool_size, type: :integer
252
291
  uri_option 'waitQueueTimeoutMS', :wait_queue_timeout, type: :ms
@@ -269,6 +308,8 @@ module Mongo
269
308
  uri_option 'directConnection', :direct_connection, type: :bool
270
309
  uri_option 'connect', :connect, type: :symbol
271
310
  uri_option 'loadBalanced', :load_balanced, type: :bool
311
+ uri_option 'srvMaxHosts', :srv_max_hosts, type: :integer
312
+ uri_option 'srvServiceName', :srv_service_name
272
313
 
273
314
  # Auth Options
274
315
  uri_option 'authSource', :auth_source
@@ -288,14 +329,14 @@ module Mongo
288
329
  # Returns true for 'true', false for 'false', otherwise nil.
289
330
  #
290
331
  # @param [ String ] name Name of the URI option being processed.
291
- # @param value [ String ] URI option value.
332
+ # @param [ String | true | false ] value URI option value.
292
333
  #
293
334
  # @return [ true | false | nil ] Converted value.
294
335
  def convert_bool(name, value)
295
336
  case value
296
- when "true", 'TRUE'
337
+ when true, "true", 'TRUE'
297
338
  true
298
- when "false", 'FALSE'
339
+ when false, "false", 'FALSE'
299
340
  false
300
341
  else
301
342
  log_warn("invalid boolean option for #{name}: #{value}")
@@ -303,31 +344,64 @@ module Mongo
303
344
  end
304
345
  end
305
346
 
347
+ # Reverts a boolean type.
348
+ #
349
+ # @param [ true | false | nil ] value The boolean to revert.
350
+ #
351
+ # @return [ true | false | nil ] The passed value.
306
352
  def revert_bool(value)
307
353
  value
308
354
  end
309
355
 
356
+ # Stringifies a boolean type.
357
+ #
358
+ # @param [ true | false | nil ] value The boolean.
359
+ #
360
+ # @return [ String | nil ] The string.
361
+ def stringify_bool(value)
362
+ revert_bool(value)&.to_s
363
+ end
364
+
310
365
  # Converts the value into a boolean and returns it wrapped in an array.
311
366
  #
312
- # @param name [ String ] Name of the URI option being processed.
313
- # @param value [ String ] URI option value.
367
+ # @param [ String ] name Name of the URI option being processed.
368
+ # @param [ String ] value URI option value.
314
369
  #
315
- # @return [ Array<true | false> ] The boolean value parsed and wraped
370
+ # @return [ Array<true | false> | nil ] The boolean value parsed and wraped
316
371
  # in an array.
317
372
  def convert_repeated_bool(name, value)
318
373
  [convert_bool(name, value)]
319
374
  end
320
375
 
376
+ # Reverts a repeated boolean type.
377
+ #
378
+ # @param [ Array<true | false> | true | false | nil ] value The repeated boolean to revert.
379
+ #
380
+ # @return [ Array<true | false> | true | false | nil ] The passed value.
321
381
  def revert_repeated_bool(value)
322
382
  value
323
383
  end
324
384
 
385
+ # Stringifies a repeated boolean type.
386
+ #
387
+ # @param [ Array<true | false> | nil ] value The repeated boolean.
388
+ #
389
+ # @return [ Array<true | false> | nil ] The string.
390
+ def stringify_repeated_bool(value)
391
+ rep = revert_repeated_bool(value)
392
+ if rep&.is_a?(Array)
393
+ rep.join(",")
394
+ else
395
+ rep
396
+ end
397
+ end
398
+
325
399
  # Parses a boolean value and returns its inverse.
326
400
  #
327
401
  # @param [ String ] name Name of the URI option being processed.
328
- # @param value [ String ] The URI option value.
402
+ # @param [ String | true | false ] value The URI option value.
329
403
  #
330
- # @return [ true | false | nil ] The inverse of the boolean value parsed out, otherwise nil
404
+ # @return [ true | false | nil ] The inverse of the boolean value parsed out, otherwise nil
331
405
  # (and a warning will be logged).
332
406
  def convert_inverse_bool(name, value)
333
407
  b = convert_bool(name, value)
@@ -339,20 +413,34 @@ module Mongo
339
413
  end
340
414
  end
341
415
 
416
+ # Reverts and inverts a boolean type.
417
+ #
418
+ # @param [ true | false | nil ] value The boolean to revert and invert.
419
+ #
420
+ # @return [ true | false | nil ] The inverted boolean.
342
421
  def revert_inverse_bool(value)
343
- !value
422
+ value.nil? ? nil : !value
344
423
  end
345
424
 
346
- # Converts +value+ into an integer.
425
+ # Inverts and stringifies a boolean.
426
+ #
427
+ # @param [ true | false | nil ] value The boolean.
428
+ #
429
+ # @return [ String | nil ] The string.
430
+ def stringify_inverse_bool(value)
431
+ revert_inverse_bool(value)&.to_s
432
+ end
433
+
434
+ # Converts +value+ into an integer. Only converts positive integers.
347
435
  #
348
436
  # If the value is not a valid integer, warns and returns nil.
349
437
  #
350
438
  # @param [ String ] name Name of the URI option being processed.
351
- # @param value [ String ] URI option value.
439
+ # @param [ String | Integer ] value URI option value.
352
440
  #
353
441
  # @return [ nil | Integer ] Converted value.
354
442
  def convert_integer(name, value)
355
- unless /\A\d+\z/ =~ value
443
+ if value.is_a?(String) && /\A\d+\z/ !~ value
356
444
  log_warn("#{value} is not a valid integer for #{name}")
357
445
  return nil
358
446
  end
@@ -360,78 +448,143 @@ module Mongo
360
448
  value.to_i
361
449
  end
362
450
 
451
+ # Reverts an integer.
452
+ #
453
+ # @param [ Integer | nil ] value The integer.
454
+ #
455
+ # @return [ Integer | nil ] The passed value.
363
456
  def revert_integer(value)
364
457
  value
365
458
  end
366
459
 
460
+ # Stringifies an integer.
461
+ #
462
+ # @param [ Integer | nil ] value The integer.
463
+ #
464
+ # @return [ String | nil ] The string.
465
+ def stringify_integer(value)
466
+ revert_integer(value)&.to_s
467
+ end
468
+
367
469
  # Ruby's convention is to provide timeouts in seconds, not milliseconds and
368
470
  # to use fractions where more precision is necessary. The connection string
369
471
  # options are always in MS so we provide an easy conversion type.
370
472
  #
371
473
  # @param [ String ] name Name of the URI option being processed.
372
- # @param [ Integer ] value The millisecond value.
474
+ # @param [ String | Integer | Float ] value The millisecond value.
373
475
  #
374
476
  # @return [ Float ] The seconds value.
375
477
  #
376
478
  # @since 2.0.0
377
479
  def convert_ms(name, value)
378
- unless /\A-?\d+(\.\d+)?\z/ =~ value
379
- log_warn("Invalid ms value for #{name}: #{value}")
380
- return nil
381
- end
382
-
383
- if value[0] == '-'
384
- log_warn("#{name} cannot be a negative number")
385
- return nil
480
+ case value
481
+ when String
482
+ if /\A-?\d+(\.\d+)?\z/ !~ value
483
+ log_warn("Invalid ms value for #{name}: #{value}")
484
+ return nil
485
+ end
486
+ if value.to_s[0] == '-'
487
+ log_warn("#{name} cannot be a negative number")
488
+ return nil
489
+ end
490
+ when Integer, Float
491
+ if value < 0
492
+ log_warn("#{name} cannot be a negative number")
493
+ return nil
494
+ end
495
+ else
496
+ raise ArgumentError, "Can only convert Strings, Integers, or Floats to ms. Given: #{value.class}"
386
497
  end
387
498
 
388
499
  value.to_f / 1000
389
500
  end
390
501
 
502
+ # Reverts an ms.
503
+ #
504
+ # @param [ Float ] value The float.
505
+ #
506
+ # @return [ Integer ] The number multiplied by 1000 as an integer.
391
507
  def revert_ms(value)
392
508
  (value * 1000).round
393
509
  end
394
510
 
511
+ # Stringifies an ms.
512
+ #
513
+ # @param [ Float ] value The float.
514
+ #
515
+ # @return [ String ] The string.
516
+ def stringify_ms(value)
517
+ revert_ms(value).to_s
518
+ end
519
+
395
520
  # Converts +value+ into a symbol.
396
521
  #
397
522
  # @param [ String ] name Name of the URI option being processed.
398
- # @param value [ String ] URI option value.
523
+ # @param [ String | Symbol ] value URI option value.
399
524
  #
400
525
  # @return [ Symbol ] Converted value.
401
526
  def convert_symbol(name, value)
402
527
  value.to_sym
403
528
  end
404
529
 
530
+ # Reverts a symbol.
531
+ #
532
+ # @param [ Symbol ] value The symbol.
533
+ #
534
+ # @return [ String ] The passed value as a string.
405
535
  def revert_symbol(value)
406
536
  value.to_s
407
537
  end
538
+ alias :stringify_symbol :revert_symbol
408
539
 
409
540
  # Extract values from the string and put them into an array.
410
541
  #
411
542
  # @param [ String ] name Name of the URI option being processed.
412
543
  # @param [ String ] value The string to build an array from.
413
544
  #
414
- # @return [ Array ] The array built from the string.
545
+ # @return [ Array<String> ] The array built from the string.
415
546
  def convert_array(name, value)
416
547
  value.split(',')
417
548
  end
418
549
 
550
+ # Reverts an array.
551
+ #
552
+ # @param [ Array<String> ] value An array of strings.
553
+ #
554
+ # @return [ Array<String> ] The passed value.
419
555
  def revert_array(value)
420
556
  value
421
557
  end
422
558
 
559
+ # Stringifies an array.
560
+ #
561
+ # @param [ Array<String> ] value An array of strings.
562
+ #
563
+ # @return [ String ] The array joined by commas.
564
+ def stringify_array(value)
565
+ value.join(',')
566
+ end
567
+
423
568
  # Authentication mechanism transformation.
424
569
  #
425
570
  # @param [ String ] name Name of the URI option being processed.
426
- # @param value [String] The authentication mechanism.
571
+ # @param [ String ] value The authentication mechanism.
427
572
  #
428
- # @return [Symbol] The transformed authentication mechanism.
573
+ # @return [ Symbol ] The transformed authentication mechanism.
429
574
  def convert_auth_mech(name, value)
430
- (AUTH_MECH_MAP[value.upcase] || value).tap do |mech|
431
- log_warn("#{value} is not a valid auth mechanism") unless mech
575
+ auth_mech = AUTH_MECH_MAP[value.upcase]
576
+ (auth_mech || value).tap do |mech|
577
+ log_warn("#{value} is not a valid auth mechanism") unless auth_mech
432
578
  end
433
579
  end
434
580
 
581
+ # Reverts auth mechanism.
582
+ #
583
+ # @param [ Symbol ] value The auth mechanism.
584
+ #
585
+ # @return [ String ] The auth mechanism as a string.
586
+ #
587
+ # @raise [ ArgumentError ] if its an invalid auth mechanism.
435
588
  def revert_auth_mech(value)
436
589
  found = AUTH_MECH_MAP.detect do |k, v|
437
590
  v == value
@@ -443,12 +596,21 @@ module Mongo
443
596
  end
444
597
  end
445
598
 
599
+ # Stringifies auth mechanism.
600
+ #
601
+ # @param [ Symbol ] value The auth mechanism.
602
+ #
603
+ # @return [ String | nil ] The auth mechanism as a string.
604
+ def stringify_auth_mech(value)
605
+ revert_auth_mech(value) rescue nil
606
+ end
607
+
446
608
  # Auth mechanism properties extractor.
447
609
  #
448
610
  # @param [ String ] name Name of the URI option being processed.
449
- # @param value [ String ] The auth mechanism properties string.
611
+ # @param [ String ] value The auth mechanism properties string.
450
612
  #
451
- # @return [ Hash ] The auth mechanism properties hash.
613
+ # @return [ Hash | nil ] The auth mechanism properties hash.
452
614
  def convert_auth_mech_props(name, value)
453
615
  properties = hash_extractor('authMechanismProperties', value)
454
616
  if properties
@@ -461,62 +623,101 @@ module Mongo
461
623
  properties
462
624
  end
463
625
 
626
+ # Reverts auth mechanism properties.
627
+ #
628
+ # @param [ Hash | nil ] value The auth mech properties.
629
+ #
630
+ # @return [ Hash | nil ] The passed value.
464
631
  def revert_auth_mech_props(value)
465
632
  value
466
633
  end
467
634
 
635
+ # Stringifies auth mechanism properties.
636
+ #
637
+ # @param [ Hash | nil ] value The auth mech properties.
638
+ #
639
+ # @return [ String | nil ] The string.
640
+ def stringify_auth_mech_props(value)
641
+ return if value.nil?
642
+ value.map { |k, v| "#{k}:#{v}" }.join(',')
643
+ end
644
+
468
645
  # Parses the max staleness value, which must be either "0" or an integer
469
646
  # greater or equal to 90.
470
647
  #
471
648
  # @param [ String ] name Name of the URI option being processed.
472
- # @param value [ String ] The max staleness string.
649
+ # @param [ String | Integer ] value The max staleness string.
473
650
  #
474
651
  # @return [ Integer | nil ] The max staleness integer parsed out if it is valid, otherwise nil
475
652
  # (and a warning will be logged).
476
653
  def convert_max_staleness(name, value)
477
- if /\A-?\d+\z/ =~ value
478
- int = value.to_i
654
+ int = if value.is_a?(String) && /\A-?\d+\z/ =~ value
655
+ value.to_i
656
+ elsif value.is_a?(Integer)
657
+ value
658
+ end
479
659
 
480
- if int == -1
481
- int = nil
482
- end
660
+ if int.nil?
661
+ log_warn("Invalid max staleness value: #{value}")
662
+ return nil
663
+ end
483
664
 
484
- if int && (int >= 0 && int < 90 || int < 0)
485
- log_warn("max staleness should be either 0 or greater than 90: #{value}")
486
- int = nil
487
- end
665
+ if int == -1
666
+ int = nil
667
+ end
488
668
 
489
- return int
669
+ if int && (int > 0 && int < 90 || int < 0)
670
+ log_warn("max staleness should be either 0 or greater than 90: #{value}")
671
+ int = nil
490
672
  end
491
673
 
492
- log_warn("Invalid max staleness value: #{value}")
493
- nil
674
+ int
494
675
  end
495
676
 
677
+ # Reverts max staleness.
678
+ #
679
+ # @param [ Integer | nil ] value The max staleness.
680
+ #
681
+ # @return [ Integer | nil ] The passed value.
496
682
  def revert_max_staleness(value)
497
683
  value
498
684
  end
499
685
 
686
+ # Stringifies max staleness.
687
+ #
688
+ # @param [ Integer | nil ] value The max staleness.
689
+ #
690
+ # @return [ String | nil ] The string.
691
+ def stringify_max_staleness(value)
692
+ revert_max_staleness(value)&.to_s
693
+ end
694
+
500
695
  # Read preference mode transformation.
501
696
  #
502
697
  # @param [ String ] name Name of the URI option being processed.
503
- # @param value [String] The read mode string value.
698
+ # @param [ String ] value The read mode string value.
504
699
  #
505
- # @return [Symbol] The read mode symbol.
700
+ # @return [ Symbol | String ] The read mode.
506
701
  def convert_read_mode(name, value)
507
702
  READ_MODE_MAP[value.downcase] || value
508
703
  end
509
704
 
705
+ # Reverts read mode.
706
+ #
707
+ # @param [ Symbol | String ] value The read mode.
708
+ #
709
+ # @return [ String ] The read mode as a string.
510
710
  def revert_read_mode(value)
511
711
  value.to_s.gsub(/_(\w)/) { $1.upcase }
512
712
  end
713
+ alias :stringify_read_mode :revert_read_mode
513
714
 
514
715
  # Read preference tags transformation.
515
716
  #
516
717
  # @param [ String ] name Name of the URI option being processed.
517
- # @param value [String] The string representing tag set.
718
+ # @param [ String ] value The string representing tag set.
518
719
  #
519
- # @return [Array<Hash>] Array with tag set.
720
+ # @return [ Array<Hash> | nil ] Array with tag set.
520
721
  def convert_read_tags(name, value)
521
722
  converted = convert_read_set(name, value)
522
723
  if converted
@@ -526,16 +727,30 @@ module Mongo
526
727
  end
527
728
  end
528
729
 
730
+ # Reverts read tags.
731
+ #
732
+ # @param [ Array<Hash> | nil ] value The read tags.
733
+ #
734
+ # @return [ Array<Hash> | nil ] The passed value.
529
735
  def revert_read_tags(value)
530
736
  value
531
737
  end
532
738
 
739
+ # Stringifies read tags.
740
+ #
741
+ # @param [ Array<Hash> | nil ] value The read tags.
742
+ #
743
+ # @return [ String | nil ] The joined string of read tags.
744
+ def stringify_read_tags(value)
745
+ value&.map { |ar| ar.map { |k, v| "#{k}:#{v}" }.join(',') }
746
+ end
747
+
533
748
  # Read preference tag set extractor.
534
749
  #
535
750
  # @param [ String ] name Name of the URI option being processed.
536
- # @param value [String] The tag set string.
751
+ # @param [ String ] value The tag set string.
537
752
  #
538
- # @return [Hash] The tag set hash.
753
+ # @return [ Hash ] The tag set hash.
539
754
  def convert_read_set(name, value)
540
755
  hash_extractor('readPreferenceTags', value)
541
756
  end
@@ -547,7 +762,7 @@ module Mongo
547
762
  # Otherwise returns the string +value+ unchanged.
548
763
  #
549
764
  # @param [ String ] name Name of the URI option being processed.
550
- # @param value [ String ] URI option value.
765
+ # @param [ String | Integer ] value URI option value.
551
766
  #
552
767
  # @return [ Integer | Symbol | String ] Converted value.
553
768
  def convert_w(name, value)
@@ -561,6 +776,11 @@ module Mongo
561
776
  end
562
777
  end
563
778
 
779
+ # Reverts write concern.
780
+ #
781
+ # @param [ Integer | Symbol | String ] value The write concern.
782
+ #
783
+ # @return [ Integer | String ] The write concern as a string.
564
784
  def revert_w(value)
565
785
  case value
566
786
  when Symbol
@@ -570,34 +790,59 @@ module Mongo
570
790
  end
571
791
  end
572
792
 
793
+ # Stringifies write concern.
794
+ #
795
+ # @param [ Integer | Symbol | String ] value The write concern.
796
+ #
797
+ # @return [ String ] The write concern as a string.
798
+ def stringify_w(value)
799
+ revert_w(value)&.to_s
800
+ end
801
+
573
802
  # Parses the zlib compression level.
574
803
  #
575
804
  # @param [ String ] name Name of the URI option being processed.
576
- # @param value [ String ] The zlib compression level string.
805
+ # @param [ String | Integer ] value The zlib compression level string.
577
806
  #
578
807
  # @return [ Integer | nil ] The compression level value if it is between -1 and 9 (inclusive),
579
808
  # otherwise nil (and a warning will be logged).
580
809
  def convert_zlib_compression_level(name, value)
581
- if /\A-?\d+\z/ =~ value
582
- i = value.to_i
583
-
584
- if i >= -1 && i <= 9
585
- return i
586
- end
810
+ i = if value.is_a?(String) && /\A-?\d+\z/ =~ value
811
+ value.to_i
812
+ elsif value.is_a?(Integer)
813
+ value
587
814
  end
588
815
 
589
- log_warn("#{value} is not a valid zlibCompressionLevel")
590
- nil
816
+ if i && (i >= -1 && i <= 9)
817
+ i
818
+ else
819
+ log_warn("#{value} is not a valid zlibCompressionLevel")
820
+ nil
821
+ end
591
822
  end
592
823
 
824
+ # Reverts zlib compression level
825
+ #
826
+ # @param [ Integer | nil ] value The write concern.
827
+ #
828
+ # @return [ Integer | nil ] The passed value.
593
829
  def revert_zlib_compression_level(value)
594
830
  value
595
831
  end
596
832
 
833
+ # Stringifies zlib compression level
834
+ #
835
+ # @param [ Integer | nil ] value The write concern.
836
+ #
837
+ # @return [ String | nil ] The string.
838
+ def stringify_zlib_compression_level(value)
839
+ revert_zlib_compression_level(value)&.to_s
840
+ end
841
+
597
842
  # Extract values from the string and put them into a nested hash.
598
843
  #
599
844
  # @param [ String ] name Name of the URI option being processed.
600
- # @param value [ String ] The string to build a hash from.
845
+ # @param [ String ] value The string to build a hash from.
601
846
  #
602
847
  # @return [ Hash ] The hash built from the string.
603
848
  def hash_extractor(name, value)
@@ -617,8 +862,6 @@ module Mongo
617
862
  h
618
863
  end
619
864
  end
620
-
621
865
  end
622
-
623
866
  end
624
867
  end