mongo 2.13.1 → 2.19.1

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 (1899) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +36 -39
  4. data/Rakefile +49 -20
  5. data/bin/mongo_console +2 -0
  6. data/lib/mongo/active_support.rb +3 -0
  7. data/lib/mongo/address/ipv4.rb +4 -1
  8. data/lib/mongo/address/ipv6.rb +4 -1
  9. data/lib/mongo/address/unix.rb +3 -0
  10. data/lib/mongo/address/validator.rb +3 -0
  11. data/lib/mongo/address.rb +4 -1
  12. data/lib/mongo/auth/aws/conversation.rb +4 -8
  13. data/lib/mongo/auth/aws/credentials.rb +38 -0
  14. data/lib/mongo/auth/aws/credentials_cache.rb +75 -0
  15. data/lib/mongo/auth/aws/credentials_retriever.rb +174 -36
  16. data/lib/mongo/auth/aws/request.rb +3 -2
  17. data/lib/mongo/auth/aws.rb +8 -5
  18. data/lib/mongo/auth/base.rb +25 -9
  19. data/lib/mongo/auth/conversation_base.rb +35 -0
  20. data/lib/mongo/auth/cr/conversation.rb +9 -29
  21. data/lib/mongo/auth/cr.rb +3 -0
  22. data/lib/mongo/auth/credential_cache.rb +3 -0
  23. data/lib/mongo/auth/gssapi/conversation.rb +7 -15
  24. data/lib/mongo/auth/gssapi.rb +3 -0
  25. data/lib/mongo/auth/ldap/conversation.rb +6 -14
  26. data/lib/mongo/auth/ldap.rb +3 -0
  27. data/lib/mongo/auth/roles.rb +19 -16
  28. data/lib/mongo/auth/sasl_conversation_base.rb +4 -13
  29. data/lib/mongo/auth/scram/conversation.rb +3 -0
  30. data/lib/mongo/auth/scram.rb +5 -2
  31. data/lib/mongo/auth/scram256/conversation.rb +3 -0
  32. data/lib/mongo/auth/scram256.rb +3 -0
  33. data/lib/mongo/auth/scram_conversation_base.rb +10 -34
  34. data/lib/mongo/auth/stringprep/profiles/sasl.rb +3 -0
  35. data/lib/mongo/auth/stringprep/tables.rb +3 -0
  36. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +2 -2
  37. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +2 -1
  38. data/lib/mongo/auth/stringprep.rb +4 -1
  39. data/lib/mongo/auth/user/view.rb +19 -9
  40. data/lib/mongo/auth/user.rb +3 -0
  41. data/lib/mongo/auth/x509/conversation.rb +7 -25
  42. data/lib/mongo/auth/x509.rb +3 -0
  43. data/lib/mongo/auth.rb +16 -2
  44. data/lib/mongo/background_thread.rb +16 -2
  45. data/lib/mongo/bson.rb +3 -0
  46. data/lib/mongo/bulk_write/combineable.rb +3 -0
  47. data/lib/mongo/bulk_write/ordered_combiner.rb +3 -0
  48. data/lib/mongo/bulk_write/result.rb +13 -1
  49. data/lib/mongo/bulk_write/result_combiner.rb +5 -4
  50. data/lib/mongo/bulk_write/transformable.rb +3 -0
  51. data/lib/mongo/bulk_write/unordered_combiner.rb +3 -0
  52. data/lib/mongo/bulk_write/validatable.rb +3 -0
  53. data/lib/mongo/bulk_write.rb +156 -45
  54. data/lib/mongo/caching_cursor.rb +77 -0
  55. data/lib/mongo/client.rb +367 -41
  56. data/lib/mongo/client_encryption.rb +217 -10
  57. data/lib/mongo/cluster/periodic_executor.rb +7 -3
  58. data/lib/mongo/cluster/reapers/cursor_reaper.rb +101 -43
  59. data/lib/mongo/cluster/reapers/socket_reaper.rb +4 -1
  60. data/lib/mongo/cluster/sdam_flow.rb +67 -17
  61. data/lib/mongo/cluster/topology/base.rb +16 -9
  62. data/lib/mongo/cluster/topology/load_balanced.rb +102 -0
  63. data/lib/mongo/cluster/topology/no_replica_set_options.rb +3 -0
  64. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +3 -0
  65. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +3 -0
  66. data/lib/mongo/cluster/topology/sharded.rb +3 -0
  67. data/lib/mongo/cluster/topology/single.rb +4 -1
  68. data/lib/mongo/cluster/topology/unknown.rb +3 -0
  69. data/lib/mongo/cluster/topology.rb +31 -8
  70. data/lib/mongo/cluster.rb +210 -116
  71. data/lib/mongo/cluster_time.rb +3 -0
  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 +94 -24
  75. data/lib/mongo/collection/view/builder/aggregation.rb +19 -17
  76. data/lib/mongo/collection/view/builder/map_reduce.rb +18 -49
  77. data/lib/mongo/collection/view/builder.rb +3 -4
  78. data/lib/mongo/collection/view/change_stream/retryable.rb +3 -0
  79. data/lib/mongo/collection/view/change_stream.rb +71 -22
  80. data/lib/mongo/collection/view/explainable.rb +30 -8
  81. data/lib/mongo/collection/view/immutable.rb +3 -0
  82. data/lib/mongo/collection/view/iterable.rb +121 -24
  83. data/lib/mongo/collection/view/map_reduce.rb +76 -25
  84. data/lib/mongo/collection/view/readable.rb +147 -67
  85. data/lib/mongo/collection/view/writable.rb +296 -162
  86. data/lib/mongo/collection/view.rb +42 -41
  87. data/lib/mongo/collection.rb +356 -89
  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 +3 -0
  93. data/lib/mongo/crypt/auto_encrypter.rb +142 -15
  94. data/lib/mongo/crypt/auto_encryption_context.rb +3 -0
  95. data/lib/mongo/crypt/binary.rb +3 -0
  96. data/lib/mongo/crypt/binding.rb +717 -151
  97. data/lib/mongo/crypt/context.rb +74 -5
  98. data/lib/mongo/crypt/data_key_context.rb +15 -104
  99. data/lib/mongo/crypt/encryption_io.rb +101 -64
  100. data/lib/mongo/crypt/explicit_decryption_context.rb +3 -0
  101. data/lib/mongo/crypt/explicit_encrypter.rb +235 -29
  102. data/lib/mongo/crypt/explicit_encryption_context.rb +78 -21
  103. data/lib/mongo/crypt/explicit_encryption_expression_context.rb +30 -0
  104. data/lib/mongo/crypt/handle.rb +171 -86
  105. data/lib/mongo/crypt/hooks.rb +28 -2
  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 +3 -0
  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 +11 -2
  131. data/lib/mongo/crypt.rb +18 -0
  132. data/lib/mongo/cursor/kill_spec.rb +76 -0
  133. data/lib/mongo/cursor.rb +150 -43
  134. data/lib/mongo/database/view.rb +55 -10
  135. data/lib/mongo/database.rb +95 -25
  136. data/lib/mongo/dbref.rb +4 -105
  137. data/lib/mongo/distinguishing_semaphore.rb +4 -1
  138. data/lib/mongo/error/auth_error.rb +3 -0
  139. data/lib/mongo/error/bad_load_balancer_target.rb +26 -0
  140. data/lib/mongo/error/bulk_write_error.rb +49 -5
  141. data/lib/mongo/error/change_stream_resumable.rb +3 -0
  142. data/lib/mongo/error/client_closed.rb +24 -0
  143. data/lib/mongo/error/closed_stream.rb +3 -0
  144. data/lib/mongo/error/connection_check_out_timeout.rb +3 -0
  145. data/lib/mongo/error/connection_perished.rb +5 -0
  146. data/lib/mongo/error/connection_unavailable.rb +27 -0
  147. data/lib/mongo/error/credential_check_error.rb +3 -0
  148. data/lib/mongo/error/crypt_error.rb +3 -0
  149. data/lib/mongo/error/extra_file_chunk.rb +3 -0
  150. data/lib/mongo/error/failed_string_prep_validation.rb +3 -0
  151. data/lib/mongo/error/file_not_found.rb +3 -0
  152. data/lib/mongo/error/handshake_error.rb +3 -0
  153. data/lib/mongo/error/insufficient_iteration_count.rb +3 -0
  154. data/lib/mongo/error/internal_driver_error.rb +25 -0
  155. data/lib/mongo/error/invalid_address.rb +3 -0
  156. data/lib/mongo/error/invalid_application_name.rb +3 -0
  157. data/lib/mongo/error/invalid_bulk_operation.rb +3 -0
  158. data/lib/mongo/error/invalid_bulk_operation_type.rb +3 -0
  159. data/lib/mongo/error/invalid_collection_name.rb +3 -0
  160. data/lib/mongo/error/invalid_config_option.rb +21 -0
  161. data/lib/mongo/error/invalid_cursor_operation.rb +3 -0
  162. data/lib/mongo/error/invalid_database_name.rb +3 -0
  163. data/lib/mongo/error/invalid_document.rb +3 -0
  164. data/lib/mongo/error/invalid_file.rb +3 -0
  165. data/lib/mongo/error/invalid_file_revision.rb +3 -0
  166. data/lib/mongo/error/invalid_max_connecting.rb +28 -0
  167. data/lib/mongo/error/invalid_min_pool_size.rb +3 -0
  168. data/lib/mongo/error/invalid_nonce.rb +3 -0
  169. data/lib/mongo/error/invalid_read_concern.rb +31 -0
  170. data/lib/mongo/error/invalid_read_option.rb +4 -1
  171. data/lib/mongo/error/invalid_replacement_document.rb +30 -9
  172. data/lib/mongo/error/invalid_server_auth_host.rb +3 -0
  173. data/lib/mongo/error/invalid_server_auth_response.rb +3 -0
  174. data/lib/mongo/error/invalid_server_preference.rb +3 -0
  175. data/lib/mongo/error/invalid_session.rb +3 -0
  176. data/lib/mongo/error/invalid_signature.rb +3 -0
  177. data/lib/mongo/error/invalid_transaction_operation.rb +3 -0
  178. data/lib/mongo/error/invalid_txt_record.rb +3 -0
  179. data/lib/mongo/error/invalid_update_document.rb +30 -7
  180. data/lib/mongo/error/invalid_uri.rb +3 -0
  181. data/lib/mongo/error/invalid_write_concern.rb +3 -0
  182. data/lib/mongo/error/kms_error.rb +3 -0
  183. data/lib/mongo/error/labelable.rb +72 -0
  184. data/lib/mongo/error/lint_error.rb +3 -0
  185. data/lib/mongo/error/max_bson_size.rb +3 -0
  186. data/lib/mongo/error/max_message_size.rb +3 -0
  187. data/lib/mongo/error/mismatched_domain.rb +3 -0
  188. data/lib/mongo/error/missing_connection.rb +27 -0
  189. data/lib/mongo/error/missing_file_chunk.rb +11 -2
  190. data/lib/mongo/error/missing_password.rb +3 -0
  191. data/lib/mongo/error/missing_resume_token.rb +3 -0
  192. data/lib/mongo/error/missing_scram_server_signature.rb +3 -0
  193. data/lib/mongo/error/missing_service_id.rb +26 -0
  194. data/lib/mongo/error/mongocryptd_spawn_error.rb +3 -0
  195. data/lib/mongo/error/multi_index_drop.rb +3 -0
  196. data/lib/mongo/error/need_primary_server.rb +3 -0
  197. data/lib/mongo/error/no_server_available.rb +3 -0
  198. data/lib/mongo/error/no_service_connection_available.rb +49 -0
  199. data/lib/mongo/error/no_srv_records.rb +3 -0
  200. data/lib/mongo/error/notable.rb +24 -0
  201. data/lib/mongo/error/operation_failure.rb +57 -87
  202. data/lib/mongo/error/parser.rb +69 -13
  203. data/lib/mongo/error/pool_cleared_error.rb +40 -0
  204. data/lib/mongo/error/pool_closed_error.rb +6 -16
  205. data/lib/mongo/error/pool_error.rb +45 -0
  206. data/lib/mongo/error/pool_paused_error.rb +40 -0
  207. data/lib/mongo/error/raise_original_error.rb +3 -0
  208. data/lib/mongo/error/read_write_retryable.rb +108 -0
  209. data/lib/mongo/error/sdam_error_detection.rb +16 -5
  210. data/lib/mongo/error/server_api_conflict.rb +26 -0
  211. data/lib/mongo/error/server_api_not_supported.rb +27 -0
  212. data/lib/mongo/error/server_certificate_revoked.rb +25 -0
  213. data/lib/mongo/error/server_not_usable.rb +36 -0
  214. data/lib/mongo/error/session_ended.rb +3 -0
  215. data/lib/mongo/error/session_not_materialized.rb +29 -0
  216. data/lib/mongo/error/sessions_not_supported.rb +3 -0
  217. data/lib/mongo/error/snapshot_session_invalid_server_version.rb +31 -0
  218. data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +30 -0
  219. data/lib/mongo/error/socket_error.rb +3 -0
  220. data/lib/mongo/error/socket_timeout_error.rb +3 -0
  221. data/lib/mongo/error/unchangeable_collection_option.rb +3 -0
  222. data/lib/mongo/error/unexpected_chunk_length.rb +3 -0
  223. data/lib/mongo/error/unexpected_response.rb +3 -0
  224. data/lib/mongo/error/unknown_payload_type.rb +3 -0
  225. data/lib/mongo/error/unmet_dependency.rb +24 -0
  226. data/lib/mongo/error/unsupported_array_filters.rb +3 -0
  227. data/lib/mongo/error/unsupported_collation.rb +3 -0
  228. data/lib/mongo/error/unsupported_features.rb +3 -0
  229. data/lib/mongo/error/unsupported_message_type.rb +3 -0
  230. data/lib/mongo/error/unsupported_option.rb +17 -12
  231. data/lib/mongo/error/write_retryable.rb +3 -0
  232. data/lib/mongo/error.rb +31 -38
  233. data/lib/mongo/event/base.rb +3 -0
  234. data/lib/mongo/event/listeners.rb +3 -0
  235. data/lib/mongo/event/publisher.rb +3 -0
  236. data/lib/mongo/event/subscriber.rb +3 -0
  237. data/lib/mongo/event.rb +3 -0
  238. data/lib/mongo/grid/file/chunk.rb +6 -2
  239. data/lib/mongo/grid/file/info.rb +5 -1
  240. data/lib/mongo/grid/file.rb +3 -0
  241. data/lib/mongo/grid/fs_bucket.rb +86 -46
  242. data/lib/mongo/grid/stream/read.rb +28 -7
  243. data/lib/mongo/grid/stream/write.rb +3 -0
  244. data/lib/mongo/grid/stream.rb +3 -0
  245. data/lib/mongo/grid.rb +3 -0
  246. data/lib/mongo/id.rb +10 -5
  247. data/lib/mongo/index/view.rb +68 -58
  248. data/lib/mongo/index.rb +3 -0
  249. data/lib/mongo/lint.rb +5 -1
  250. data/lib/mongo/loggable.rb +5 -2
  251. data/lib/mongo/logger.rb +6 -3
  252. data/lib/mongo/monitoring/cmap_log_subscriber.rb +3 -0
  253. data/lib/mongo/monitoring/command_log_subscriber.rb +3 -0
  254. data/lib/mongo/monitoring/event/cmap/base.rb +3 -0
  255. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +3 -0
  256. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +3 -0
  257. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +3 -0
  258. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +3 -0
  259. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +3 -0
  260. data/lib/mongo/monitoring/event/cmap/connection_created.rb +3 -0
  261. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +3 -0
  262. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +17 -4
  263. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +3 -0
  264. data/lib/mongo/monitoring/event/cmap/pool_created.rb +3 -0
  265. data/lib/mongo/monitoring/event/cmap/pool_ready.rb +67 -0
  266. data/lib/mongo/monitoring/event/cmap.rb +4 -0
  267. data/lib/mongo/monitoring/event/command_failed.rb +38 -5
  268. data/lib/mongo/monitoring/event/command_started.rb +23 -3
  269. data/lib/mongo/monitoring/event/command_succeeded.rb +36 -3
  270. data/lib/mongo/monitoring/event/secure.rb +39 -5
  271. data/lib/mongo/monitoring/event/server_closed.rb +3 -0
  272. data/lib/mongo/monitoring/event/server_description_changed.rb +4 -1
  273. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +32 -18
  274. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +3 -0
  275. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +30 -16
  276. data/lib/mongo/monitoring/event/server_opening.rb +3 -0
  277. data/lib/mongo/monitoring/event/topology_changed.rb +3 -0
  278. data/lib/mongo/monitoring/event/topology_closed.rb +3 -0
  279. data/lib/mongo/monitoring/event/topology_opening.rb +3 -0
  280. data/lib/mongo/monitoring/event.rb +3 -0
  281. data/lib/mongo/monitoring/publishable.rb +38 -12
  282. data/lib/mongo/monitoring/sdam_log_subscriber.rb +3 -0
  283. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +3 -0
  284. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +3 -0
  285. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +3 -0
  286. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +3 -0
  287. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +3 -0
  288. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +3 -0
  289. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +3 -0
  290. data/lib/mongo/monitoring.rb +20 -8
  291. data/lib/mongo/operation/aggregate/op_msg.rb +3 -0
  292. data/lib/mongo/operation/aggregate/result.rb +12 -8
  293. data/lib/mongo/operation/aggregate.rb +4 -2
  294. data/lib/mongo/operation/collections_info/result.rb +24 -1
  295. data/lib/mongo/operation/collections_info.rb +10 -2
  296. data/lib/mongo/operation/command/op_msg.rb +9 -0
  297. data/lib/mongo/operation/command.rb +4 -2
  298. data/lib/mongo/operation/context.rb +138 -0
  299. data/lib/mongo/operation/count/op_msg.rb +12 -0
  300. data/lib/mongo/operation/count.rb +4 -2
  301. data/lib/mongo/operation/create/op_msg.rb +13 -0
  302. data/lib/mongo/operation/create.rb +4 -2
  303. data/lib/mongo/operation/create_index/op_msg.rb +21 -4
  304. data/lib/mongo/operation/create_index.rb +4 -2
  305. data/lib/mongo/operation/create_user/op_msg.rb +3 -0
  306. data/lib/mongo/operation/create_user.rb +4 -2
  307. data/lib/mongo/operation/delete/bulk_result.rb +5 -0
  308. data/lib/mongo/operation/delete/op_msg.rb +13 -1
  309. data/lib/mongo/operation/delete/result.rb +6 -0
  310. data/lib/mongo/operation/delete.rb +3 -2
  311. data/lib/mongo/operation/distinct/op_msg.rb +13 -0
  312. data/lib/mongo/operation/distinct.rb +4 -2
  313. data/lib/mongo/operation/drop/op_msg.rb +3 -0
  314. data/lib/mongo/operation/drop.rb +4 -2
  315. data/lib/mongo/operation/drop_database/op_msg.rb +3 -0
  316. data/lib/mongo/operation/drop_database.rb +4 -2
  317. data/lib/mongo/operation/drop_index/op_msg.rb +8 -1
  318. data/lib/mongo/operation/drop_index.rb +4 -2
  319. data/lib/mongo/operation/explain/op_msg.rb +17 -0
  320. data/lib/mongo/operation/explain/result.rb +6 -0
  321. data/lib/mongo/operation/explain.rb +4 -3
  322. data/lib/mongo/operation/find/builder/command.rb +111 -0
  323. data/lib/mongo/operation/find/builder/flags.rb +61 -0
  324. data/lib/mongo/operation/find/builder/modifiers.rb +89 -0
  325. data/lib/mongo/operation/find/builder.rb +20 -0
  326. data/lib/mongo/operation/find/op_msg.rb +15 -0
  327. data/lib/mongo/operation/find/result.rb +16 -0
  328. data/lib/mongo/operation/find.rb +5 -3
  329. data/lib/mongo/operation/get_more/command_builder.rb +42 -0
  330. data/lib/mongo/operation/get_more/op_msg.rb +4 -0
  331. data/lib/mongo/operation/get_more/result.rb +6 -0
  332. data/lib/mongo/operation/get_more.rb +5 -3
  333. data/lib/mongo/operation/indexes/op_msg.rb +3 -0
  334. data/lib/mongo/operation/indexes/result.rb +8 -0
  335. data/lib/mongo/operation/indexes.rb +4 -3
  336. data/lib/mongo/operation/insert/bulk_result.rb +13 -1
  337. data/lib/mongo/operation/insert/op_msg.rb +11 -5
  338. data/lib/mongo/operation/insert/result.rb +14 -3
  339. data/lib/mongo/operation/insert.rb +3 -2
  340. data/lib/mongo/operation/kill_cursors/command_builder.rb +35 -0
  341. data/lib/mongo/operation/kill_cursors/op_msg.rb +13 -0
  342. data/lib/mongo/operation/kill_cursors.rb +5 -3
  343. data/lib/mongo/operation/list_collections/op_msg.rb +7 -1
  344. data/lib/mongo/operation/list_collections/result.rb +12 -1
  345. data/lib/mongo/operation/list_collections.rb +4 -2
  346. data/lib/mongo/operation/map_reduce/op_msg.rb +4 -1
  347. data/lib/mongo/operation/map_reduce/result.rb +29 -0
  348. data/lib/mongo/operation/map_reduce.rb +4 -2
  349. data/lib/mongo/operation/op_msg_base.rb +3 -0
  350. data/lib/mongo/operation/parallel_scan/op_msg.rb +3 -0
  351. data/lib/mongo/operation/parallel_scan/result.rb +7 -0
  352. data/lib/mongo/operation/parallel_scan.rb +4 -2
  353. data/lib/mongo/operation/remove_user/op_msg.rb +3 -0
  354. data/lib/mongo/operation/remove_user.rb +4 -2
  355. data/lib/mongo/operation/result.rb +67 -11
  356. data/lib/mongo/operation/shared/bypass_document_validation.rb +4 -0
  357. data/lib/mongo/operation/shared/causal_consistency_supported.rb +4 -0
  358. data/lib/mongo/operation/shared/executable.rb +61 -17
  359. data/lib/mongo/operation/shared/executable_no_validate.rb +5 -2
  360. data/lib/mongo/operation/shared/executable_transaction_label.rb +3 -0
  361. data/lib/mongo/operation/shared/idable.rb +5 -1
  362. data/lib/mongo/operation/shared/limited.rb +4 -0
  363. data/lib/mongo/operation/shared/object_id_generator.rb +4 -0
  364. data/lib/mongo/operation/shared/op_msg_executable.rb +59 -0
  365. data/lib/mongo/operation/shared/polymorphic_lookup.rb +3 -0
  366. data/lib/mongo/operation/shared/polymorphic_result.rb +3 -0
  367. data/lib/mongo/operation/shared/read_preference_supported.rb +44 -37
  368. data/lib/mongo/operation/shared/response_handling.rb +32 -27
  369. data/lib/mongo/operation/shared/result/aggregatable.rb +4 -0
  370. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +3 -0
  371. data/lib/mongo/operation/shared/sessions_supported.rb +55 -20
  372. data/lib/mongo/operation/shared/specifiable.rb +15 -29
  373. data/lib/mongo/operation/shared/validatable.rb +87 -0
  374. data/lib/mongo/operation/shared/write.rb +28 -28
  375. data/lib/mongo/operation/shared/write_concern_supported.rb +4 -0
  376. data/lib/mongo/operation/update/bulk_result.rb +3 -0
  377. data/lib/mongo/operation/update/op_msg.rb +12 -4
  378. data/lib/mongo/operation/update/result.rb +11 -0
  379. data/lib/mongo/operation/update.rb +3 -2
  380. data/lib/mongo/operation/update_user/op_msg.rb +3 -0
  381. data/lib/mongo/operation/update_user.rb +4 -2
  382. data/lib/mongo/operation/users_info/op_msg.rb +3 -0
  383. data/lib/mongo/operation/users_info/result.rb +6 -0
  384. data/lib/mongo/operation/users_info.rb +4 -2
  385. data/lib/mongo/operation/write_command/op_msg.rb +43 -0
  386. data/lib/mongo/operation/write_command.rb +31 -0
  387. data/lib/mongo/operation.rb +17 -4
  388. data/lib/mongo/options/mapper.rb +3 -0
  389. data/lib/mongo/options/redacted.rb +3 -0
  390. data/lib/mongo/options.rb +3 -0
  391. data/lib/mongo/protocol/bit_vector.rb +6 -1
  392. data/lib/mongo/protocol/caching_hash.rb +52 -0
  393. data/lib/mongo/protocol/compressed.rb +54 -5
  394. data/lib/mongo/protocol/get_more.rb +3 -0
  395. data/lib/mongo/protocol/kill_cursors.rb +3 -0
  396. data/lib/mongo/protocol/message.rb +27 -10
  397. data/lib/mongo/protocol/msg.rb +61 -17
  398. data/lib/mongo/protocol/query.rb +53 -32
  399. data/lib/mongo/protocol/registry.rb +3 -0
  400. data/lib/mongo/protocol/reply.rb +3 -0
  401. data/lib/mongo/protocol/serializers.rb +27 -17
  402. data/lib/mongo/protocol.rb +4 -3
  403. data/lib/mongo/query_cache.rb +300 -0
  404. data/lib/mongo/retryable/base_worker.rb +91 -0
  405. data/lib/mongo/retryable/read_worker.rb +296 -0
  406. data/lib/mongo/retryable/write_worker.rb +364 -0
  407. data/lib/mongo/retryable.rb +33 -446
  408. data/lib/mongo/semaphore.rb +4 -1
  409. data/lib/mongo/server/app_metadata/environment.rb +259 -0
  410. data/lib/mongo/server/app_metadata/platform.rb +114 -0
  411. data/lib/mongo/server/app_metadata/truncator.rb +142 -0
  412. data/lib/mongo/server/app_metadata.rb +117 -94
  413. data/lib/mongo/server/connection.rb +126 -22
  414. data/lib/mongo/server/connection_base.rb +49 -21
  415. data/lib/mongo/server/connection_common.rb +76 -3
  416. data/lib/mongo/server/connection_pool/generation_manager.rb +115 -0
  417. data/lib/mongo/server/connection_pool/populator.rb +35 -30
  418. data/lib/mongo/server/connection_pool.rb +776 -206
  419. data/lib/mongo/server/description/features.rb +34 -25
  420. data/lib/mongo/server/description/load_balancer.rb +33 -0
  421. data/lib/mongo/server/description.rb +126 -17
  422. data/lib/mongo/server/monitor/app_metadata.rb +4 -1
  423. data/lib/mongo/server/monitor/connection.rb +66 -50
  424. data/lib/mongo/server/monitor.rb +62 -32
  425. data/lib/mongo/server/pending_connection.rb +77 -44
  426. data/lib/mongo/server/push_monitor/connection.rb +3 -0
  427. data/lib/mongo/server/push_monitor.rb +54 -20
  428. data/lib/mongo/server/round_trip_time_averager.rb +6 -3
  429. data/lib/mongo/server.rb +197 -67
  430. data/lib/mongo/server_selector/base.rb +65 -11
  431. data/lib/mongo/server_selector/nearest.rb +6 -4
  432. data/lib/mongo/server_selector/primary.rb +6 -4
  433. data/lib/mongo/server_selector/primary_preferred.rb +6 -4
  434. data/lib/mongo/server_selector/secondary.rb +6 -4
  435. data/lib/mongo/server_selector/secondary_preferred.rb +8 -11
  436. data/lib/mongo/server_selector.rb +3 -0
  437. data/lib/mongo/session/server_session.rb +3 -0
  438. data/lib/mongo/session/session_pool.rb +26 -2
  439. data/lib/mongo/session.rb +164 -38
  440. data/lib/mongo/socket/ocsp_cache.rb +99 -0
  441. data/lib/mongo/socket/ocsp_verifier.rb +344 -0
  442. data/lib/mongo/socket/ssl.rb +56 -24
  443. data/lib/mongo/socket/tcp.rb +6 -0
  444. data/lib/mongo/socket/unix.rb +3 -0
  445. data/lib/mongo/socket.rb +71 -16
  446. data/lib/mongo/srv/monitor.rb +10 -26
  447. data/lib/mongo/srv/resolver.rb +41 -13
  448. data/lib/mongo/srv/result.rb +3 -0
  449. data/lib/mongo/srv.rb +3 -0
  450. data/lib/mongo/timeout.rb +6 -1
  451. data/lib/mongo/topology_version.rb +4 -1
  452. data/lib/mongo/uri/options_mapper.rb +867 -0
  453. data/lib/mongo/uri/srv_protocol.rb +13 -11
  454. data/lib/mongo/uri.rb +100 -400
  455. data/lib/mongo/utils.rb +44 -1
  456. data/lib/mongo/version.rb +4 -1
  457. data/lib/mongo/write_concern/acknowledged.rb +3 -0
  458. data/lib/mongo/write_concern/base.rb +3 -0
  459. data/lib/mongo/write_concern/unacknowledged.rb +3 -0
  460. data/lib/mongo/write_concern.rb +3 -0
  461. data/lib/mongo.rb +58 -0
  462. data/mongo.gemspec +16 -7
  463. data/spec/NOTES.aws-auth.md +12 -7
  464. data/spec/README.md +106 -3
  465. data/spec/atlas/atlas_connectivity_spec.rb +3 -0
  466. data/spec/atlas/operations_spec.rb +5 -7
  467. data/spec/integration/auth_spec.rb +58 -15
  468. data/spec/integration/awaited_ismaster_spec.rb +9 -6
  469. data/spec/integration/aws_auth_credentials_cache_spec.rb +51 -0
  470. data/spec/integration/aws_auth_request_spec.rb +4 -1
  471. data/spec/integration/aws_credentials_retriever_spec.rb +34 -1
  472. data/spec/integration/aws_lambda_examples_spec.rb +68 -0
  473. data/spec/integration/bson_symbol_spec.rb +8 -3
  474. data/spec/integration/bulk_insert_spec.rb +3 -0
  475. data/spec/integration/bulk_write_error_message_spec.rb +74 -0
  476. data/spec/integration/bulk_write_spec.rb +67 -0
  477. data/spec/integration/change_stream_examples_spec.rb +3 -0
  478. data/spec/integration/change_stream_spec.rb +18 -9
  479. data/spec/integration/check_clean_slate_spec.rb +3 -0
  480. data/spec/integration/client_authentication_options_spec.rb +76 -36
  481. data/spec/integration/client_connectivity_spec.rb +4 -1
  482. data/spec/integration/client_construction_aws_auth_spec.rb +14 -2
  483. data/spec/integration/client_construction_spec.rb +153 -8
  484. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +13 -10
  485. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +172 -169
  486. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +3 -1
  487. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +3 -0
  488. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +43 -4
  489. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +148 -2
  490. data/spec/integration/client_side_encryption/automatic_data_encryption_keys_prose_spec.rb +153 -0
  491. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +6 -3
  492. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +6 -3
  493. data/spec/integration/client_side_encryption/client_close_spec.rb +4 -1
  494. data/spec/integration/client_side_encryption/corpus_spec.rb +67 -35
  495. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +42 -42
  496. data/spec/integration/client_side_encryption/data_key_spec.rb +101 -8
  497. data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +159 -0
  498. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +62 -0
  499. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +150 -0
  500. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +9 -6
  501. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +436 -0
  502. data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
  503. data/spec/integration/client_side_encryption/mongocryptd_prose_spec.rb +105 -0
  504. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +49 -0
  505. data/spec/integration/client_side_encryption/on_demand_azure_credentials_spec.rb +46 -0
  506. data/spec/integration/client_side_encryption/on_demand_gcp_credentials_spec.rb +47 -0
  507. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +114 -0
  508. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +536 -0
  509. data/spec/integration/client_side_encryption/rewrap_prose_spec.rb +114 -0
  510. data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +89 -0
  511. data/spec/integration/client_side_encryption/views_spec.rb +4 -1
  512. data/spec/integration/client_spec.rb +14 -4
  513. data/spec/integration/client_update_spec.rb +9 -2
  514. data/spec/integration/collection_indexes_prose_spec.rb +3 -0
  515. data/spec/integration/command_monitoring_spec.rb +64 -26
  516. data/spec/integration/command_spec.rb +5 -24
  517. data/spec/integration/connect_single_rs_name_spec.rb +6 -3
  518. data/spec/integration/connection/faas_env_spec.rb +62 -0
  519. data/spec/integration/connection_pool_populator_spec.rb +33 -8
  520. data/spec/integration/connection_spec.rb +58 -36
  521. data/spec/integration/crud_spec.rb +217 -1
  522. data/spec/integration/cursor_pinning_spec.rb +125 -0
  523. data/spec/integration/cursor_reaping_spec.rb +62 -19
  524. data/spec/integration/docs_examples_spec.rb +12 -2
  525. data/spec/integration/error_detection_spec.rb +3 -0
  526. data/spec/integration/fork_reconnect_spec.rb +73 -9
  527. data/spec/integration/get_more_spec.rb +4 -1
  528. data/spec/integration/grid_fs_bucket_spec.rb +7 -4
  529. data/spec/integration/heartbeat_events_spec.rb +8 -5
  530. data/spec/integration/map_reduce_spec.rb +81 -0
  531. data/spec/integration/mmapv1_spec.rb +3 -0
  532. data/spec/integration/mongos_pinning_spec.rb +3 -0
  533. data/spec/integration/ocsp_connectivity_spec.rb +29 -0
  534. data/spec/integration/ocsp_verifier_cache_spec.rb +191 -0
  535. data/spec/integration/ocsp_verifier_spec.rb +358 -0
  536. data/spec/integration/operation_failure_code_spec.rb +4 -1
  537. data/spec/integration/operation_failure_message_spec.rb +91 -0
  538. data/spec/integration/query_cache_spec.rb +1343 -0
  539. data/spec/integration/query_cache_transactions_spec.rb +193 -0
  540. data/spec/integration/read_concern_spec.rb +4 -1
  541. data/spec/integration/read_preference_spec.rb +20 -13
  542. data/spec/integration/reconnect_spec.rb +39 -13
  543. data/spec/integration/retryable_errors_spec.rb +4 -1
  544. data/spec/integration/retryable_reads_errors_spec.rb +110 -0
  545. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +5 -2
  546. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +5 -1
  547. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +3 -0
  548. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +3 -0
  549. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +3 -0
  550. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +5 -0
  551. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +3 -0
  552. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +3 -0
  553. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +3 -0
  554. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +3 -0
  555. data/spec/integration/retryable_writes/shared/supports_retries.rb +3 -0
  556. data/spec/integration/retryable_writes_errors_spec.rb +162 -1
  557. data/spec/integration/sdam_error_handling_spec.rb +159 -8
  558. data/spec/integration/sdam_events_spec.rb +94 -31
  559. data/spec/integration/sdam_prose_spec.rb +7 -4
  560. data/spec/integration/secondary_reads_spec.rb +103 -0
  561. data/spec/integration/server_description_spec.rb +3 -0
  562. data/spec/integration/server_monitor_spec.rb +7 -2
  563. data/spec/integration/server_selection_spec.rb +39 -0
  564. data/spec/integration/server_selector_spec.rb +29 -7
  565. data/spec/integration/server_spec.rb +27 -25
  566. data/spec/integration/shell_examples_spec.rb +3 -0
  567. data/spec/integration/size_limit_spec.rb +7 -1
  568. data/spec/integration/snappy_compression_spec.rb +28 -0
  569. data/spec/integration/snapshot_query_examples_spec.rb +129 -0
  570. data/spec/integration/srv_monitoring_spec.rb +82 -5
  571. data/spec/integration/srv_spec.rb +60 -0
  572. data/spec/integration/ssl_uri_options_spec.rb +3 -0
  573. data/spec/integration/step_down_spec.rb +28 -7
  574. data/spec/integration/time_zone_querying_spec.rb +3 -0
  575. data/spec/integration/transaction_pinning_spec.rb +134 -0
  576. data/spec/integration/transactions_api_examples_spec.rb +3 -0
  577. data/spec/integration/transactions_examples_spec.rb +26 -7
  578. data/spec/integration/truncated_utf8_spec.rb +26 -0
  579. data/spec/integration/versioned_api_examples_spec.rb +120 -0
  580. data/spec/integration/x509_auth_spec.rb +5 -2
  581. data/spec/integration/zlib_compression_spec.rb +4 -1
  582. data/spec/integration/zstd_compression_spec.rb +29 -0
  583. data/spec/kerberos/kerberos_spec.rb +3 -0
  584. data/spec/lite_spec_helper.rb +59 -16
  585. data/spec/mongo/address/ipv4_spec.rb +3 -0
  586. data/spec/mongo/address/ipv6_spec.rb +10 -0
  587. data/spec/mongo/address/unix_spec.rb +4 -0
  588. data/spec/mongo/address/validator_spec.rb +3 -0
  589. data/spec/mongo/address_spec.rb +33 -13
  590. data/spec/mongo/auth/aws/credential_cache_spec.rb +63 -0
  591. data/spec/mongo/auth/aws/credentials_retriever_spec.rb +90 -0
  592. data/spec/mongo/auth/aws/credentials_spec.rb +46 -0
  593. data/spec/mongo/auth/aws/request_region_spec.rb +3 -0
  594. data/spec/mongo/auth/aws/request_spec.rb +3 -0
  595. data/spec/mongo/auth/cr_spec.rb +6 -24
  596. data/spec/mongo/auth/gssapi/conversation_spec.rb +3 -0
  597. data/spec/mongo/auth/invalid_mechanism_spec.rb +3 -0
  598. data/spec/mongo/auth/ldap/conversation_spec.rb +4 -1
  599. data/spec/mongo/auth/ldap_spec.rb +10 -4
  600. data/spec/mongo/auth/scram/conversation_spec.rb +26 -23
  601. data/spec/mongo/auth/scram256/conversation_spec.rb +23 -20
  602. data/spec/mongo/auth/scram_negotiation_spec.rb +5 -1
  603. data/spec/mongo/auth/scram_spec.rb +5 -3
  604. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +3 -0
  605. data/spec/mongo/auth/stringprep_spec.rb +3 -0
  606. data/spec/mongo/auth/user/view_spec.rb +99 -1
  607. data/spec/mongo/auth/user_spec.rb +4 -1
  608. data/spec/mongo/auth/x509/conversation_spec.rb +6 -3
  609. data/spec/mongo/auth/x509_spec.rb +5 -3
  610. data/spec/mongo/auth_spec.rb +3 -0
  611. data/spec/mongo/bson_spec.rb +3 -0
  612. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +3 -0
  613. data/spec/mongo/bulk_write/result_spec.rb +18 -1
  614. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +3 -0
  615. data/spec/mongo/bulk_write_spec.rb +149 -25
  616. data/spec/mongo/caching_cursor_spec.rb +73 -0
  617. data/spec/mongo/client_construction_spec.rb +1112 -546
  618. data/spec/mongo/client_encryption_spec.rb +27 -30
  619. data/spec/mongo/client_spec.rb +445 -139
  620. data/spec/mongo/cluster/cursor_reaper_spec.rb +66 -23
  621. data/spec/mongo/cluster/periodic_executor_spec.rb +6 -1
  622. data/spec/mongo/cluster/socket_reaper_spec.rb +3 -0
  623. data/spec/mongo/cluster/topology/replica_set_spec.rb +13 -10
  624. data/spec/mongo/cluster/topology/sharded_spec.rb +6 -3
  625. data/spec/mongo/cluster/topology/single_spec.rb +20 -8
  626. data/spec/mongo/cluster/topology/unknown_spec.rb +4 -1
  627. data/spec/mongo/cluster/topology_spec.rb +4 -1
  628. data/spec/mongo/cluster_spec.rb +183 -192
  629. data/spec/mongo/cluster_time_spec.rb +3 -0
  630. data/spec/mongo/collection/view/aggregation_spec.rb +181 -83
  631. data/spec/mongo/collection/view/builder/find_command_spec.rb +7 -0
  632. data/spec/mongo/collection/view/builder/op_query_spec.rb +7 -0
  633. data/spec/mongo/collection/view/change_stream_resume_spec.rb +8 -3
  634. data/spec/mongo/collection/view/change_stream_spec.rb +18 -2
  635. data/spec/mongo/collection/view/explainable_spec.rb +90 -4
  636. data/spec/mongo/collection/view/immutable_spec.rb +3 -0
  637. data/spec/mongo/collection/view/iterable_spec.rb +3 -0
  638. data/spec/mongo/collection/view/map_reduce_spec.rb +46 -2
  639. data/spec/mongo/collection/view/readable_spec.rb +868 -1
  640. data/spec/mongo/collection/view/writable_spec.rb +147 -32
  641. data/spec/mongo/collection/view_spec.rb +3 -0
  642. data/spec/mongo/collection_crud_spec.rb +4471 -0
  643. data/spec/mongo/collection_ddl_spec.rb +587 -0
  644. data/spec/mongo/collection_spec.rb +106 -4839
  645. data/spec/mongo/condition_variable_spec.rb +104 -0
  646. data/spec/mongo/config/options_spec.rb +76 -0
  647. data/spec/mongo/config_spec.rb +74 -0
  648. data/spec/mongo/crypt/auto_decryption_context_spec.rb +21 -2
  649. data/spec/mongo/crypt/auto_encrypter_spec.rb +266 -5
  650. data/spec/mongo/crypt/auto_encryption_context_spec.rb +21 -2
  651. data/spec/mongo/crypt/binary_spec.rb +3 -5
  652. data/spec/mongo/crypt/binding/binary_spec.rb +3 -5
  653. data/spec/mongo/crypt/binding/context_spec.rb +71 -23
  654. data/spec/mongo/crypt/binding/helpers_spec.rb +3 -5
  655. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +21 -52
  656. data/spec/mongo/crypt/binding/status_spec.rb +3 -5
  657. data/spec/mongo/crypt/binding/version_spec.rb +50 -5
  658. data/spec/mongo/crypt/binding_unloaded_spec.rb +17 -0
  659. data/spec/mongo/crypt/data_key_context_spec.rb +45 -114
  660. data/spec/mongo/crypt/encryption_io_spec.rb +5 -0
  661. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +36 -2
  662. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +98 -2
  663. data/spec/mongo/crypt/handle_spec.rb +189 -155
  664. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +3 -0
  665. data/spec/mongo/crypt/hooks_spec.rb +30 -0
  666. data/spec/mongo/crypt/kms/azure/credentials_retriever_spec.rb +86 -0
  667. data/spec/mongo/crypt/kms/credentials_spec.rb +373 -0
  668. data/spec/mongo/crypt/kms_spec.rb +62 -0
  669. data/spec/mongo/crypt/status_spec.rb +3 -5
  670. data/spec/mongo/crypt_spec.rb +21 -0
  671. data/spec/mongo/cursor/builder/get_more_command_spec.rb +11 -2
  672. data/spec/mongo/cursor/builder/op_get_more_spec.rb +11 -2
  673. data/spec/mongo/cursor_spec.rb +230 -19
  674. data/spec/mongo/database_spec.rb +263 -25
  675. data/spec/mongo/distinguishing_semaphore_spec.rb +9 -6
  676. data/spec/mongo/error/bulk_write_error_spec.rb +6 -3
  677. data/spec/mongo/error/crypt_error_spec.rb +3 -0
  678. data/spec/mongo/error/max_bson_size_spec.rb +3 -0
  679. data/spec/mongo/error/no_server_available_spec.rb +4 -1
  680. data/spec/mongo/error/notable_spec.rb +3 -0
  681. data/spec/mongo/error/operation_failure_heavy_spec.rb +53 -1
  682. data/spec/mongo/error/operation_failure_spec.rb +94 -31
  683. data/spec/mongo/error/parser_spec.rb +40 -6
  684. data/spec/mongo/error/unsupported_option_spec.rb +3 -0
  685. data/spec/mongo/event/publisher_spec.rb +3 -0
  686. data/spec/mongo/event/subscriber_spec.rb +3 -0
  687. data/spec/mongo/grid/file/chunk_spec.rb +7 -4
  688. data/spec/mongo/grid/file/info_spec.rb +3 -0
  689. data/spec/mongo/grid/file_spec.rb +4 -1
  690. data/spec/mongo/grid/fs_bucket_spec.rb +40 -17
  691. data/spec/mongo/grid/stream/read_spec.rb +33 -10
  692. data/spec/mongo/grid/stream/write_spec.rb +6 -9
  693. data/spec/mongo/grid/stream_spec.rb +4 -1
  694. data/spec/mongo/id_spec.rb +4 -1
  695. data/spec/mongo/index/view_spec.rb +138 -4
  696. data/spec/mongo/lint_spec.rb +4 -1
  697. data/spec/mongo/logger_spec.rb +16 -11
  698. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +3 -0
  699. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +4 -1
  700. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +4 -1
  701. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +4 -1
  702. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +4 -1
  703. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +4 -1
  704. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +4 -1
  705. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +4 -1
  706. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +4 -1
  707. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +4 -1
  708. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +4 -1
  709. data/spec/mongo/monitoring/event/command_failed_spec.rb +59 -2
  710. data/spec/mongo/monitoring/event/command_started_spec.rb +3 -0
  711. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +46 -6
  712. data/spec/mongo/monitoring/event/secure_spec.rb +28 -4
  713. data/spec/mongo/monitoring/event/server_closed_spec.rb +4 -1
  714. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +3 -0
  715. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +4 -1
  716. data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +3 -0
  717. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +4 -1
  718. data/spec/mongo/monitoring/event/server_opening_spec.rb +4 -1
  719. data/spec/mongo/monitoring/event/topology_changed_spec.rb +4 -1
  720. data/spec/mongo/monitoring/event/topology_closed_spec.rb +4 -1
  721. data/spec/mongo/monitoring/event/topology_opening_spec.rb +4 -1
  722. data/spec/mongo/monitoring_spec.rb +3 -0
  723. data/spec/mongo/operation/aggregate/result_spec.rb +7 -2
  724. data/spec/mongo/operation/aggregate_spec.rb +5 -1
  725. data/spec/mongo/operation/collections_info_spec.rb +7 -1
  726. data/spec/mongo/operation/command_spec.rb +11 -5
  727. data/spec/mongo/operation/create/op_msg_spec.rb +244 -0
  728. data/spec/mongo/operation/create_index_spec.rb +9 -3
  729. data/spec/mongo/operation/create_user_spec.rb +9 -3
  730. data/spec/mongo/operation/delete/bulk_spec.rb +12 -6
  731. data/spec/mongo/operation/delete/op_msg_spec.rb +20 -8
  732. data/spec/mongo/operation/delete_spec.rb +13 -36
  733. data/spec/mongo/operation/drop_index_spec.rb +9 -2
  734. data/spec/mongo/operation/find/builder/flags_spec.rb +109 -0
  735. data/spec/mongo/operation/find/builder/modifiers_spec.rb +213 -0
  736. data/spec/mongo/operation/indexes_spec.rb +8 -1
  737. data/spec/mongo/operation/insert/bulk_spec.rb +14 -8
  738. data/spec/mongo/operation/insert/op_msg_spec.rb +25 -14
  739. data/spec/mongo/operation/insert_spec.rb +17 -43
  740. data/spec/mongo/operation/limited_spec.rb +3 -0
  741. data/spec/mongo/operation/map_reduce_spec.rb +8 -2
  742. data/spec/mongo/operation/read_preference_legacy_spec.rb +39 -42
  743. data/spec/mongo/operation/read_preference_op_msg_spec.rb +33 -5
  744. data/spec/mongo/operation/remove_user_spec.rb +9 -3
  745. data/spec/mongo/operation/result_spec.rb +30 -5
  746. data/spec/mongo/operation/specifiable_spec.rb +3 -0
  747. data/spec/mongo/operation/update/bulk_spec.rb +13 -7
  748. data/spec/mongo/operation/update/op_msg_spec.rb +20 -8
  749. data/spec/mongo/operation/update_spec.rb +12 -35
  750. data/spec/mongo/operation/update_user_spec.rb +7 -1
  751. data/spec/mongo/options/redacted_spec.rb +4 -1
  752. data/spec/mongo/protocol/caching_hash_spec.rb +37 -0
  753. data/spec/mongo/protocol/compressed_spec.rb +29 -12
  754. data/spec/mongo/protocol/get_more_spec.rb +3 -0
  755. data/spec/mongo/protocol/kill_cursors_spec.rb +3 -0
  756. data/spec/mongo/protocol/msg_spec.rb +48 -66
  757. data/spec/mongo/protocol/query_spec.rb +6 -3
  758. data/spec/mongo/protocol/registry_spec.rb +3 -0
  759. data/spec/mongo/protocol/reply_spec.rb +3 -0
  760. data/spec/mongo/query_cache_middleware_spec.rb +55 -0
  761. data/spec/mongo/query_cache_spec.rb +453 -0
  762. data/spec/mongo/retryable_spec.rb +42 -7
  763. data/spec/mongo/semaphore_spec.rb +9 -6
  764. data/spec/mongo/server/app_metadata/environment_spec.rb +209 -0
  765. data/spec/mongo/server/app_metadata/truncator_spec.rb +158 -0
  766. data/spec/mongo/server/app_metadata_spec.rb +55 -52
  767. data/spec/mongo/server/connection_auth_spec.rb +9 -10
  768. data/spec/mongo/server/connection_common_spec.rb +87 -0
  769. data/spec/mongo/server/connection_pool/populator_spec.rb +22 -3
  770. data/spec/mongo/server/connection_pool_spec.rb +635 -58
  771. data/spec/mongo/server/connection_spec.rb +226 -204
  772. data/spec/mongo/server/description/features_spec.rb +27 -0
  773. data/spec/mongo/server/description_query_methods_spec.rb +4 -1
  774. data/spec/mongo/server/description_spec.rb +625 -594
  775. data/spec/mongo/server/monitor/app_metadata_spec.rb +3 -1
  776. data/spec/mongo/server/monitor/connection_spec.rb +81 -9
  777. data/spec/mongo/server/monitor_spec.rb +31 -18
  778. data/spec/mongo/server/push_monitor_spec.rb +95 -0
  779. data/spec/mongo/server/round_trip_time_averager_spec.rb +3 -0
  780. data/spec/mongo/server_selector/nearest_spec.rb +8 -2
  781. data/spec/mongo/server_selector/primary_preferred_spec.rb +8 -2
  782. data/spec/mongo/server_selector/primary_spec.rb +8 -2
  783. data/spec/mongo/server_selector/secondary_preferred_spec.rb +14 -8
  784. data/spec/mongo/server_selector/secondary_spec.rb +8 -2
  785. data/spec/mongo/server_selector_spec.rb +143 -18
  786. data/spec/mongo/server_spec.rb +49 -6
  787. data/spec/mongo/session/server_session_spec.rb +3 -0
  788. data/spec/mongo/session/session_pool_spec.rb +45 -10
  789. data/spec/mongo/session_spec.rb +29 -6
  790. data/spec/mongo/session_transaction_spec.rb +17 -36
  791. data/spec/mongo/socket/ssl_spec.rb +91 -75
  792. data/spec/mongo/socket/tcp_spec.rb +3 -0
  793. data/spec/mongo/socket/unix_spec.rb +4 -0
  794. data/spec/mongo/socket_spec.rb +5 -2
  795. data/spec/mongo/srv/monitor_spec.rb +3 -0
  796. data/spec/mongo/srv/result_spec.rb +3 -0
  797. data/spec/mongo/timeout_spec.rb +3 -0
  798. data/spec/mongo/tls_context_hooks_spec.rb +40 -0
  799. data/spec/mongo/uri/options_mapper_spec.rb +1605 -0
  800. data/spec/mongo/uri/srv_protocol_spec.rb +330 -36
  801. data/spec/mongo/uri_option_parsing_spec.rb +52 -16
  802. data/spec/mongo/uri_spec.rb +238 -42
  803. data/spec/mongo/utils_spec.rb +42 -0
  804. data/spec/mongo/write_concern/acknowledged_spec.rb +3 -0
  805. data/spec/mongo/write_concern/unacknowledged_spec.rb +3 -0
  806. data/spec/mongo/write_concern_spec.rb +3 -0
  807. data/spec/runners/auth.rb +26 -2
  808. data/spec/runners/change_streams/outcome.rb +3 -0
  809. data/spec/runners/change_streams/spec.rb +4 -1
  810. data/spec/runners/change_streams/test.rb +5 -2
  811. data/spec/runners/cmap/verifier.rb +4 -1
  812. data/spec/runners/cmap.rb +192 -46
  813. data/spec/runners/command_monitoring.rb +4 -1
  814. data/spec/runners/connection_string.rb +48 -126
  815. data/spec/runners/crud/context.rb +3 -0
  816. data/spec/runners/crud/operation.rb +21 -7
  817. data/spec/runners/crud/outcome.rb +3 -0
  818. data/spec/runners/crud/requirement.rb +76 -6
  819. data/spec/runners/crud/spec.rb +9 -3
  820. data/spec/runners/crud/test.rb +4 -1
  821. data/spec/runners/crud/test_base.rb +4 -20
  822. data/spec/runners/crud/verifier.rb +20 -4
  823. data/spec/runners/crud.rb +23 -1
  824. data/spec/runners/gridfs.rb +4 -1
  825. data/spec/runners/read_write_concern_document.rb +4 -1
  826. data/spec/runners/sdam/verifier.rb +3 -0
  827. data/spec/runners/sdam.rb +9 -5
  828. data/spec/runners/server_selection.rb +5 -2
  829. data/spec/runners/server_selection_rtt.rb +5 -2
  830. data/spec/runners/transactions/operation.rb +30 -10
  831. data/spec/runners/transactions/spec.rb +5 -2
  832. data/spec/runners/transactions/test.rb +69 -21
  833. data/spec/runners/transactions.rb +14 -8
  834. data/spec/runners/unified/assertions.rb +379 -0
  835. data/spec/runners/unified/change_stream_operations.rb +52 -0
  836. data/spec/runners/unified/client_side_encryption_operations.rb +83 -0
  837. data/spec/runners/unified/crud_operations.rb +332 -0
  838. data/spec/runners/unified/ddl_operations.rb +255 -0
  839. data/spec/runners/unified/entity_map.rb +42 -0
  840. data/spec/runners/unified/error.rb +29 -0
  841. data/spec/runners/unified/event_subscriber.rb +110 -0
  842. data/spec/runners/unified/exceptions.rb +24 -0
  843. data/spec/runners/unified/grid_fs_operations.rb +79 -0
  844. data/spec/runners/unified/support_operations.rb +333 -0
  845. data/spec/runners/unified/test.rb +585 -0
  846. data/spec/runners/unified/test_group.rb +31 -0
  847. data/spec/runners/unified/thread_operations.rb +73 -0
  848. data/spec/runners/unified.rb +109 -0
  849. data/spec/shared/LICENSE +20 -0
  850. data/spec/shared/bin/get-mongodb-download-url +17 -0
  851. data/spec/shared/bin/s3-copy +45 -0
  852. data/spec/shared/bin/s3-upload +69 -0
  853. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  854. data/spec/shared/lib/mrss/cluster_config.rb +231 -0
  855. data/spec/shared/lib/mrss/constraints.rb +378 -0
  856. data/spec/shared/lib/mrss/docker_runner.rb +295 -0
  857. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  858. data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
  859. data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
  860. data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
  861. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  862. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  863. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  864. data/spec/shared/lib/mrss/utils.rb +37 -0
  865. data/spec/shared/share/Dockerfile.erb +330 -0
  866. data/spec/shared/share/haproxy-1.conf +16 -0
  867. data/spec/shared/share/haproxy-2.conf +17 -0
  868. data/spec/shared/shlib/config.sh +27 -0
  869. data/spec/shared/shlib/distro.sh +74 -0
  870. data/spec/shared/shlib/server.sh +416 -0
  871. data/spec/shared/shlib/set_env.sh +169 -0
  872. data/spec/solo/clean_exit_spec.rb +22 -0
  873. data/spec/spec_helper.rb +11 -5
  874. data/spec/spec_tests/auth_spec.rb +30 -13
  875. data/spec/spec_tests/change_streams_unified_spec.rb +14 -0
  876. data/spec/spec_tests/client_side_encryption_spec.rb +27 -1
  877. data/spec/spec_tests/client_side_encryption_unified_spec.rb +26 -0
  878. data/spec/spec_tests/cmap_spec.rb +41 -17
  879. data/spec/spec_tests/collection_management_spec.rb +13 -0
  880. data/spec/spec_tests/command_monitoring_unified_spec.rb +13 -0
  881. data/spec/spec_tests/connection_string_spec.rb +3 -0
  882. data/spec/spec_tests/crud_spec.rb +3 -10
  883. data/spec/spec_tests/crud_unified_spec.rb +13 -0
  884. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +41 -0
  885. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +103 -0
  886. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +120 -0
  887. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
  888. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1169 -0
  889. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1069 -0
  890. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +307 -0
  891. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +927 -0
  892. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
  893. data/spec/spec_tests/data/client_side_encryption/awsTemporary.yml +57 -0
  894. data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
  895. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +12 -2
  896. data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
  897. data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
  898. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
  899. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +5 -4
  900. data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
  901. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
  902. data/spec/spec_tests/data/client_side_encryption/create-and-createIndexes.yml +58 -0
  903. data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
  904. data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
  905. data/spec/spec_tests/data/client_side_encryption/explain.yml +1 -8
  906. data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
  907. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
  908. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
  909. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
  910. data/spec/spec_tests/data/client_side_encryption/fle2v2-BypassQueryAnalysis.yml +89 -0
  911. data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +82 -0
  912. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection-OldServer.yml +61 -0
  913. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +937 -0
  914. data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +66 -0
  915. data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +100 -0
  916. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +79 -0
  917. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +102 -0
  918. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +58 -0
  919. data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +200 -0
  920. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +96 -0
  921. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +89 -0
  922. data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +43 -0
  923. data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +44 -0
  924. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +241 -0
  925. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +422 -0
  926. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +182 -0
  927. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +239 -0
  928. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +235 -0
  929. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +252 -0
  930. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +1687 -0
  931. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +293 -0
  932. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +905 -0
  933. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +1684 -0
  934. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +1680 -0
  935. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +1697 -0
  936. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +329 -0
  937. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +424 -0
  938. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +226 -0
  939. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +327 -0
  940. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +319 -0
  941. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +336 -0
  942. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +913 -0
  943. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +292 -0
  944. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +518 -0
  945. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +911 -0
  946. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +907 -0
  947. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +924 -0
  948. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +325 -0
  949. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +424 -0
  950. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +224 -0
  951. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +323 -0
  952. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +319 -0
  953. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +338 -0
  954. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +241 -0
  955. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +423 -0
  956. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +182 -0
  957. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +239 -0
  958. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +235 -0
  959. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +254 -0
  960. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +241 -0
  961. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +422 -0
  962. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +182 -0
  963. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +239 -0
  964. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +235 -0
  965. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +254 -0
  966. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +43 -0
  967. data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +210 -0
  968. data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +169 -0
  969. data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
  970. data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
  971. data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
  972. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
  973. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
  974. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
  975. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +3 -1
  976. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
  977. data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
  978. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
  979. data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
  980. data/spec/spec_tests/data/client_side_encryption/unified/addKeyAltName.yml +194 -0
  981. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +67 -0
  982. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey.yml +309 -0
  983. data/spec/spec_tests/data/client_side_encryption/unified/deleteKey.yml +159 -0
  984. data/spec/spec_tests/data/client_side_encryption/unified/getKey.yml +105 -0
  985. data/spec/spec_tests/data/client_side_encryption/unified/getKeyByAltName.yml +104 -0
  986. data/spec/spec_tests/data/client_side_encryption/unified/getKeys.yml +122 -0
  987. data/spec/spec_tests/data/client_side_encryption/unified/removeKeyAltName.yml +157 -0
  988. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-decrypt_failure.yml +69 -0
  989. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-encrypt_failure.yml +122 -0
  990. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +432 -0
  991. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
  992. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
  993. data/spec/spec_tests/data/client_side_encryption/validatorAndPartialFieldExpression.yml +166 -0
  994. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +2 -0
  995. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +2 -0
  996. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +2 -0
  997. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +2 -0
  998. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +3 -1
  999. data/spec/spec_tests/data/cmap/pool-checkin.yml +5 -0
  1000. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +8 -2
  1001. data/spec/spec_tests/data/cmap/pool-checkout-custom-maxConnecting-is-enforced.yml +50 -0
  1002. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +2 -0
  1003. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-is-enforced.yml +81 -0
  1004. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-timeout.yml +71 -0
  1005. data/spec/spec_tests/data/cmap/pool-checkout-minPoolSize-connection-maxConnecting.yml +64 -0
  1006. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +2 -0
  1007. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +6 -0
  1008. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +8 -0
  1009. data/spec/spec_tests/data/cmap/pool-checkout-returned-connection-maxConnecting.yml +88 -0
  1010. data/spec/spec_tests/data/cmap/pool-clear-interrupt-immediately.yml +49 -0
  1011. data/spec/spec_tests/data/cmap/pool-clear-interrupting-pending-connections.yml +43 -0
  1012. data/spec/spec_tests/data/cmap/pool-clear-min-size.yml +41 -0
  1013. data/spec/spec_tests/data/cmap/pool-clear-paused.yml +18 -0
  1014. data/spec/spec_tests/data/cmap/pool-clear-ready.yml +39 -0
  1015. data/spec/spec_tests/data/cmap/pool-clear-schedule-run-interruptInUseConnections-false.yml +48 -0
  1016. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +2 -0
  1017. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +2 -0
  1018. data/spec/spec_tests/data/cmap/pool-create-min-size-error.yml +43 -0
  1019. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +12 -0
  1020. data/spec/spec_tests/data/cmap/pool-ready-ready.yml +22 -0
  1021. data/spec/spec_tests/data/cmap/pool-ready.yml +30 -0
  1022. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +2 -0
  1023. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +6 -1
  1024. data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
  1025. data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
  1026. data/spec/spec_tests/data/collection_management/modifyCollection-errorResponse.yml +59 -0
  1027. data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
  1028. data/spec/spec_tests/data/collection_management/timeseries-collection.yml +164 -0
  1029. data/spec/spec_tests/data/command_monitoring_unified/bulkWrite.yml +68 -0
  1030. data/spec/spec_tests/data/command_monitoring_unified/command.yml +50 -0
  1031. data/spec/spec_tests/data/command_monitoring_unified/deleteMany.yml +79 -0
  1032. data/spec/spec_tests/data/command_monitoring_unified/deleteOne.yml +79 -0
  1033. data/spec/spec_tests/data/command_monitoring_unified/find.yml +254 -0
  1034. data/spec/spec_tests/data/command_monitoring_unified/insertMany.yml +79 -0
  1035. data/spec/spec_tests/data/command_monitoring_unified/insertOne.yml +77 -0
  1036. data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
  1037. data/spec/spec_tests/data/command_monitoring_unified/redacted-commands.yml +348 -0
  1038. data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
  1039. data/spec/spec_tests/data/command_monitoring_unified/unacknowledgedBulkWrite.yml +55 -0
  1040. data/spec/spec_tests/data/command_monitoring_unified/updateMany.yml +87 -0
  1041. data/spec/spec_tests/data/command_monitoring_unified/updateOne.yml +118 -0
  1042. data/spec/spec_tests/data/command_monitoring_unified/writeConcernError.yml +80 -0
  1043. data/spec/spec_tests/data/connection_string/valid-warnings.yml +24 -0
  1044. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +2 -1
  1045. data/spec/spec_tests/data/crud/read/aggregate-out.yml +1 -0
  1046. data/spec/spec_tests/data/crud/read/count-collation.yml +2 -1
  1047. data/spec/spec_tests/data/crud/read/distinct-collation.yml +2 -1
  1048. data/spec/spec_tests/data/crud/read/find-collation.yml +2 -1
  1049. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +2 -1
  1050. data/spec/spec_tests/data/crud/write/bulkWrite.yml +26 -22
  1051. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +2 -1
  1052. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +2 -1
  1053. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +3 -2
  1054. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +2 -1
  1055. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +3 -2
  1056. data/spec/spec_tests/data/crud/write/insertMany.yml +26 -22
  1057. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +3 -2
  1058. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +2 -1
  1059. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +2 -1
  1060. data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
  1061. data/spec/spec_tests/data/crud_unified/aggregate-let.yml +138 -0
  1062. data/spec/spec_tests/data/crud_unified/aggregate-merge-errorResponse.yml +42 -0
  1063. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
  1064. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
  1065. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +155 -0
  1066. data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
  1067. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
  1068. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
  1069. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
  1070. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
  1071. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
  1072. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
  1073. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
  1074. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
  1075. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
  1076. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
  1077. data/spec/spec_tests/data/crud_unified/bulkWrite-errorResponse.yml +50 -0
  1078. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
  1079. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
  1080. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
  1081. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
  1082. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
  1083. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
  1084. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
  1085. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
  1086. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
  1087. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
  1088. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
  1089. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
  1090. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
  1091. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
  1092. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
  1093. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +151 -0
  1094. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
  1095. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
  1096. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
  1097. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
  1098. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
  1099. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
  1100. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +93 -0
  1101. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
  1102. data/spec/spec_tests/data/crud_unified/deleteOne-errorResponse.yml +46 -0
  1103. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
  1104. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
  1105. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
  1106. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
  1107. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +91 -0
  1108. data/spec/spec_tests/data/crud_unified/distinct-comment.yml +98 -0
  1109. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
  1110. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +181 -0
  1111. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
  1112. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
  1113. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
  1114. data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
  1115. data/spec/spec_tests/data/crud_unified/find-let.yml +71 -0
  1116. data/spec/spec_tests/data/crud_unified/find.yml +68 -0
  1117. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
  1118. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
  1119. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
  1120. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
  1121. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
  1122. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +86 -0
  1123. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
  1124. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
  1125. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
  1126. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
  1127. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
  1128. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
  1129. data/spec/spec_tests/data/crud_unified/findOneAndReplace-let.yml +94 -0
  1130. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
  1131. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
  1132. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-errorResponse.yml +69 -0
  1133. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
  1134. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
  1135. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
  1136. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
  1137. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-let.yml +96 -0
  1138. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
  1139. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
  1140. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
  1141. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
  1142. data/spec/spec_tests/data/crud_unified/insertOne-errorResponse.yml +46 -0
  1143. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
  1144. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
  1145. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
  1146. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
  1147. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
  1148. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
  1149. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
  1150. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
  1151. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
  1152. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
  1153. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
  1154. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
  1155. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +107 -0
  1156. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
  1157. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
  1158. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
  1159. data/spec/spec_tests/data/crud_unified/updateOne-errorResponse.yml +47 -0
  1160. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
  1161. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
  1162. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
  1163. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
  1164. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +102 -0
  1165. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
  1166. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +299 -0
  1167. data/spec/spec_tests/data/gridfs_unified/delete.yml +198 -0
  1168. data/spec/spec_tests/data/gridfs_unified/download.yml +241 -0
  1169. data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +159 -0
  1170. data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +92 -0
  1171. data/spec/spec_tests/data/gridfs_unified/upload.yml +288 -0
  1172. data/spec/spec_tests/data/load_balancers/event-monitoring.yml +99 -0
  1173. data/spec/spec_tests/data/load_balancers/lb-connection-establishment.yml +36 -0
  1174. data/spec/spec_tests/data/load_balancers/non-lb-connection-establishment.yml +56 -0
  1175. data/spec/spec_tests/data/load_balancers/server-selection.yml +50 -0
  1176. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/DefaultNoMaxStaleness.yml +2 -2
  1177. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +3 -3
  1178. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest.yml +3 -3
  1179. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +3 -3
  1180. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +2 -2
  1181. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +2 -2
  1182. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Secondary.yml +4 -4
  1183. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +2 -2
  1184. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +4 -4
  1185. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml +2 -2
  1186. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml +2 -2
  1187. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +3 -3
  1188. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat.yml +2 -2
  1189. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml +2 -2
  1190. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +2 -2
  1191. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +2 -2
  1192. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest.yml +3 -3
  1193. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +3 -3
  1194. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +2 -2
  1195. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +2 -2
  1196. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +2 -2
  1197. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +5 -5
  1198. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +3 -3
  1199. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +5 -5
  1200. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +3 -3
  1201. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +2 -2
  1202. data/spec/spec_tests/data/max_staleness/Sharded/SmallMaxStaleness.yml +2 -2
  1203. data/spec/spec_tests/data/max_staleness/Single/SmallMaxStaleness.yml +1 -1
  1204. data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +1 -1
  1205. data/spec/spec_tests/data/retryable_reads/legacy/aggregate-serverErrors.yml +157 -0
  1206. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-client.watch-serverErrors.yml +150 -0
  1207. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-client.watch.yml +62 -0
  1208. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-db.coll.watch-serverErrors.yml +150 -0
  1209. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-db.coll.watch.yml +66 -0
  1210. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-db.watch-serverErrors.yml +154 -0
  1211. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-db.watch.yml +62 -0
  1212. data/spec/spec_tests/data/retryable_reads/legacy/count-serverErrors.yml +150 -0
  1213. data/spec/spec_tests/data/retryable_reads/legacy/countDocuments-serverErrors.yml +150 -0
  1214. data/spec/spec_tests/data/retryable_reads/legacy/distinct-serverErrors.yml +156 -0
  1215. data/spec/spec_tests/data/retryable_reads/legacy/estimatedDocumentCount-serverErrors.yml +148 -0
  1216. data/spec/spec_tests/data/retryable_reads/legacy/find-serverErrors.yml +160 -0
  1217. data/spec/spec_tests/data/retryable_reads/legacy/findOne-serverErrors.yml +154 -0
  1218. data/spec/spec_tests/data/retryable_reads/legacy/gridfs-download-serverErrors.yml +173 -0
  1219. data/spec/spec_tests/data/retryable_reads/legacy/gridfs-downloadByName-serverErrors.yml +174 -0
  1220. data/spec/spec_tests/data/retryable_reads/legacy/listCollectionNames-serverErrors.yml +143 -0
  1221. data/spec/spec_tests/data/retryable_reads/legacy/listCollectionObjects-serverErrors.yml +144 -0
  1222. data/spec/spec_tests/data/retryable_reads/legacy/listCollections-serverErrors.yml +143 -0
  1223. data/spec/spec_tests/data/retryable_reads/legacy/listDatabaseNames-serverErrors.yml +143 -0
  1224. data/spec/spec_tests/data/retryable_reads/legacy/listDatabaseObjects-serverErrors.yml +144 -0
  1225. data/spec/spec_tests/data/retryable_reads/legacy/listDatabases-serverErrors.yml +144 -0
  1226. data/spec/spec_tests/data/retryable_reads/legacy/listIndexNames-serverErrors.yml +144 -0
  1227. data/spec/spec_tests/data/retryable_reads/legacy/listIndexNames.yml +60 -0
  1228. data/spec/spec_tests/data/retryable_reads/legacy/listIndexes-serverErrors.yml +145 -0
  1229. data/spec/spec_tests/data/retryable_reads/legacy/mapReduce.yml +62 -0
  1230. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +1342 -0
  1231. data/spec/spec_tests/data/retryable_writes/legacy/bulkWrite-serverErrors.yml +130 -0
  1232. data/spec/spec_tests/data/retryable_writes/legacy/bulkWrite.yml +402 -0
  1233. data/spec/spec_tests/data/retryable_writes/legacy/deleteOne-serverErrors.yml +73 -0
  1234. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndDelete-serverErrors.yml +74 -0
  1235. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndReplace-serverErrors.yml +80 -0
  1236. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndUpdate-serverErrors.yml +79 -0
  1237. data/spec/spec_tests/data/retryable_writes/legacy/insertMany-serverErrors.yml +84 -0
  1238. data/spec/spec_tests/data/retryable_writes/legacy/insertOne-serverErrors.yml +527 -0
  1239. data/spec/spec_tests/data/retryable_writes/legacy/replaceOne-serverErrors.yml +82 -0
  1240. data/spec/spec_tests/data/retryable_writes/legacy/updateOne-serverErrors.yml +82 -0
  1241. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +96 -0
  1242. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +785 -0
  1243. data/spec/spec_tests/data/retryable_writes/unified/insertOne-noWritesPerformedError.yml +54 -0
  1244. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +78 -0
  1245. data/spec/spec_tests/data/sdam/errors/error_handling_handshake.yml +2 -1
  1246. data/spec/spec_tests/data/sdam/errors/non-stale-network-error.yml +2 -1
  1247. data/spec/spec_tests/data/sdam/errors/non-stale-network-timeout-error.yml +2 -1
  1248. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.yml +2 -1
  1249. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.yml +2 -1
  1250. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-LegacyNotPrimary.yml +61 -0
  1251. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotPrimaryNoSecondaryOk.yml +61 -0
  1252. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotPrimaryOrSecondary.yml +61 -0
  1253. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotWritablePrimary.yml +61 -0
  1254. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.yml +2 -1
  1255. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-ShutdownInProgress.yml +2 -1
  1256. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.yml +2 -1
  1257. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.yml +2 -1
  1258. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-LegacyNotPrimary.yml +52 -0
  1259. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotPrimaryNoSecondaryOk.yml +52 -0
  1260. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotPrimaryOrSecondary.yml +52 -0
  1261. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotWritablePrimary.yml +52 -0
  1262. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.yml +2 -1
  1263. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-ShutdownInProgress.yml +2 -1
  1264. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.yml +2 -1
  1265. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.yml +2 -1
  1266. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-LegacyNotPrimary.yml +61 -0
  1267. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryNoSecondaryOk.yml +61 -0
  1268. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryOrSecondary.yml +61 -0
  1269. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotWritablePrimary.yml +61 -0
  1270. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.yml +2 -1
  1271. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.yml +2 -1
  1272. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedAtShutdown.yml +2 -1
  1273. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedDueToReplStateChange.yml +2 -1
  1274. data/spec/spec_tests/data/sdam/errors/post-42-LegacyNotPrimary.yml +47 -0
  1275. data/spec/spec_tests/data/sdam/errors/post-42-NotPrimaryNoSecondaryOk.yml +47 -0
  1276. data/spec/spec_tests/data/sdam/errors/post-42-NotPrimaryOrSecondary.yml +47 -0
  1277. data/spec/spec_tests/data/sdam/errors/post-42-NotWritablePrimary.yml +47 -0
  1278. data/spec/spec_tests/data/sdam/errors/post-42-PrimarySteppedDown.yml +2 -1
  1279. data/spec/spec_tests/data/sdam/errors/post-42-ShutdownInProgress.yml +2 -1
  1280. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedAtShutdown.yml +2 -1
  1281. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedDueToReplStateChange.yml +2 -1
  1282. data/spec/spec_tests/data/sdam/errors/pre-42-LegacyNotPrimary.yml +47 -0
  1283. data/spec/spec_tests/data/sdam/errors/pre-42-NotPrimaryNoSecondaryOk.yml +47 -0
  1284. data/spec/spec_tests/data/sdam/errors/pre-42-NotPrimaryOrSecondary.yml +47 -0
  1285. data/spec/spec_tests/data/sdam/errors/pre-42-NotWritablePrimary.yml +47 -0
  1286. data/spec/spec_tests/data/sdam/errors/pre-42-PrimarySteppedDown.yml +2 -1
  1287. data/spec/spec_tests/data/sdam/errors/pre-42-ShutdownInProgress.yml +2 -1
  1288. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +54 -0
  1289. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedAtShutdown.yml +4 -2
  1290. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedDueToReplStateChange.yml +4 -2
  1291. data/spec/spec_tests/data/sdam/errors/stale-generation-NotPrimaryNoSecondaryOk.yml +91 -0
  1292. data/spec/spec_tests/data/sdam/errors/stale-generation-NotPrimaryOrSecondary.yml +91 -0
  1293. data/spec/spec_tests/data/sdam/errors/stale-generation-NotWritablePrimary.yml +91 -0
  1294. data/spec/spec_tests/data/sdam/errors/stale-generation-PrimarySteppedDown.yml +4 -2
  1295. data/spec/spec_tests/data/sdam/errors/stale-generation-ShutdownInProgress.yml +4 -2
  1296. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.yml +4 -2
  1297. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.yml +4 -2
  1298. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-LegacyNotPrimary.yml +91 -0
  1299. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotPrimaryNoSecondaryOk.yml +91 -0
  1300. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotPrimaryOrSecondary.yml +91 -0
  1301. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotWritablePrimary.yml +91 -0
  1302. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.yml +4 -2
  1303. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.yml +4 -2
  1304. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-network.yml +6 -4
  1305. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-timeout.yml +6 -4
  1306. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.yml +4 -2
  1307. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.yml +4 -2
  1308. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-LegacyNotPrimary.yml +91 -0
  1309. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryNoSecondaryOk.yml +91 -0
  1310. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryOrSecondary.yml +91 -0
  1311. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotWritablePrimary.yml +91 -0
  1312. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.yml +4 -2
  1313. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.yml +4 -2
  1314. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-network.yml +6 -4
  1315. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-timeout.yml +6 -4
  1316. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedAtShutdown.yml +2 -1
  1317. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedDueToReplStateChange.yml +2 -1
  1318. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-LegacyNotPrimary.yml +65 -0
  1319. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotPrimaryNoSecondaryOk.yml +65 -0
  1320. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotPrimaryOrSecondary.yml +65 -0
  1321. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotWritablePrimary.yml +65 -0
  1322. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-PrimarySteppedDown.yml +2 -1
  1323. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-ShutdownInProgress.yml +2 -1
  1324. data/spec/spec_tests/data/sdam/errors/write_errors_ignored.yml +42 -0
  1325. data/spec/spec_tests/data/sdam/load-balanced/discover_load_balancer.yml +25 -0
  1326. data/spec/spec_tests/data/sdam/rs/compatible.yml +4 -2
  1327. data/spec/spec_tests/data/sdam/rs/compatible_unknown.yml +2 -1
  1328. data/spec/spec_tests/data/sdam/rs/discover_arbiters.yml +2 -1
  1329. data/spec/spec_tests/data/sdam/rs/discover_arbiters_replicaset.yml +2 -1
  1330. data/spec/spec_tests/data/sdam/rs/discover_ghost.yml +2 -1
  1331. data/spec/spec_tests/data/sdam/rs/discover_ghost_replicaset.yml +2 -1
  1332. data/spec/spec_tests/data/sdam/rs/discover_hidden.yml +2 -1
  1333. data/spec/spec_tests/data/sdam/rs/discover_hidden_replicaset.yml +2 -1
  1334. data/spec/spec_tests/data/sdam/rs/discover_passives.yml +4 -2
  1335. data/spec/spec_tests/data/sdam/rs/discover_passives_replicaset.yml +4 -2
  1336. data/spec/spec_tests/data/sdam/rs/discover_primary.yml +2 -1
  1337. data/spec/spec_tests/data/sdam/rs/discover_primary_replicaset.yml +2 -1
  1338. data/spec/spec_tests/data/sdam/rs/discover_rsother.yml +2 -1
  1339. data/spec/spec_tests/data/sdam/rs/discover_rsother_replicaset.yml +4 -2
  1340. data/spec/spec_tests/data/sdam/rs/discover_secondary.yml +2 -1
  1341. data/spec/spec_tests/data/sdam/rs/discover_secondary_replicaset.yml +2 -1
  1342. data/spec/spec_tests/data/sdam/rs/discovery.yml +8 -4
  1343. data/spec/spec_tests/data/sdam/rs/electionId_precedence_setVersion.yml +62 -0
  1344. data/spec/spec_tests/data/sdam/rs/equal_electionids.yml +4 -2
  1345. data/spec/spec_tests/data/sdam/rs/hosts_differ_from_seeds.yml +2 -1
  1346. data/spec/spec_tests/data/sdam/rs/incompatible_arbiter.yml +3 -1
  1347. data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +3 -1
  1348. data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +3 -1
  1349. data/spec/spec_tests/data/sdam/rs/ls_timeout.yml +12 -6
  1350. data/spec/spec_tests/data/sdam/rs/member_reconfig.yml +4 -2
  1351. data/spec/spec_tests/data/sdam/rs/member_standalone.yml +4 -2
  1352. data/spec/spec_tests/data/sdam/rs/new_primary.yml +4 -2
  1353. data/spec/spec_tests/data/sdam/rs/new_primary_new_electionid.yml +6 -3
  1354. data/spec/spec_tests/data/sdam/rs/new_primary_new_setversion.yml +6 -3
  1355. data/spec/spec_tests/data/sdam/rs/new_primary_wrong_set_name.yml +4 -2
  1356. data/spec/spec_tests/data/sdam/rs/non_rs_member.yml +1 -0
  1357. data/spec/spec_tests/data/sdam/rs/normalize_case.yml +2 -1
  1358. data/spec/spec_tests/data/sdam/rs/normalize_case_me.yml +4 -2
  1359. data/spec/spec_tests/data/sdam/rs/null_election_id-pre-6.0.yml +175 -0
  1360. data/spec/spec_tests/data/sdam/rs/null_election_id.yml +28 -22
  1361. data/spec/spec_tests/data/sdam/rs/primary_becomes_ghost.yml +4 -2
  1362. data/spec/spec_tests/data/sdam/rs/primary_becomes_mongos.yml +4 -2
  1363. data/spec/spec_tests/data/sdam/rs/primary_becomes_standalone.yml +2 -1
  1364. data/spec/spec_tests/data/sdam/rs/primary_changes_set_name.yml +4 -2
  1365. data/spec/spec_tests/data/sdam/rs/primary_disconnect.yml +2 -1
  1366. data/spec/spec_tests/data/sdam/rs/primary_disconnect_electionid.yml +10 -5
  1367. data/spec/spec_tests/data/sdam/rs/primary_disconnect_setversion.yml +10 -5
  1368. data/spec/spec_tests/data/sdam/rs/primary_hint_from_secondary_with_mismatched_me.yml +4 -2
  1369. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me.yml +2 -1
  1370. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me_not_removed.yml +5 -3
  1371. data/spec/spec_tests/data/sdam/rs/primary_reports_new_member.yml +8 -4
  1372. data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +4 -2
  1373. data/spec/spec_tests/data/sdam/rs/primary_wrong_set_name.yml +2 -1
  1374. data/spec/spec_tests/data/sdam/rs/repeated.yml +9 -5
  1375. data/spec/spec_tests/data/sdam/rs/replicaset_rsnp.yml +2 -1
  1376. data/spec/spec_tests/data/sdam/rs/response_from_removed.yml +4 -2
  1377. data/spec/spec_tests/data/sdam/rs/sec_not_auth.yml +4 -2
  1378. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0-pre-6.0.yml +87 -0
  1379. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +5 -3
  1380. data/spec/spec_tests/data/sdam/rs/secondary_mismatched_me.yml +2 -1
  1381. data/spec/spec_tests/data/sdam/rs/secondary_wrong_set_name.yml +2 -1
  1382. data/spec/spec_tests/data/sdam/rs/secondary_wrong_set_name_with_primary.yml +4 -2
  1383. data/spec/spec_tests/data/sdam/rs/set_version_can_rollback.yml +101 -0
  1384. data/spec/spec_tests/data/sdam/rs/setversion_equal_max_without_electionid.yml +78 -0
  1385. data/spec/spec_tests/data/sdam/rs/setversion_greaterthan_max_without_electionid.yml +79 -0
  1386. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid-pre-6.0.yml +79 -0
  1387. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +13 -12
  1388. data/spec/spec_tests/data/sdam/rs/stepdown_change_set_name.yml +4 -2
  1389. data/spec/spec_tests/data/sdam/rs/too_new.yml +4 -2
  1390. data/spec/spec_tests/data/sdam/rs/too_old.yml +4 -2
  1391. data/spec/spec_tests/data/sdam/rs/topology_version_equal.yml +4 -2
  1392. data/spec/spec_tests/data/sdam/rs/topology_version_greater.yml +10 -5
  1393. data/spec/spec_tests/data/sdam/rs/topology_version_less.yml +4 -2
  1394. data/spec/spec_tests/data/sdam/rs/unexpected_mongos.yml +2 -1
  1395. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid-pre-6.0.yml +117 -0
  1396. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +29 -24
  1397. data/spec/spec_tests/data/sdam/rs/wrong_set_name.yml +2 -1
  1398. data/spec/spec_tests/data/sdam/sharded/compatible.yml +4 -2
  1399. data/spec/spec_tests/data/sdam/sharded/discover_single_mongos.yml +2 -1
  1400. data/spec/spec_tests/data/sdam/sharded/ls_timeout_mongos.yml +9 -5
  1401. data/spec/spec_tests/data/sdam/sharded/mongos_disconnect.yml +6 -3
  1402. data/spec/spec_tests/data/sdam/sharded/multiple_mongoses.yml +4 -2
  1403. data/spec/spec_tests/data/sdam/sharded/non_mongos_removed.yml +4 -2
  1404. data/spec/spec_tests/data/sdam/sharded/too_new.yml +4 -2
  1405. data/spec/spec_tests/data/sdam/sharded/too_old.yml +4 -2
  1406. data/spec/spec_tests/data/sdam/single/compatible.yml +2 -1
  1407. data/spec/spec_tests/data/sdam/single/direct_connection_external_ip.yml +2 -1
  1408. data/spec/spec_tests/data/sdam/single/direct_connection_mongos.yml +2 -1
  1409. data/spec/spec_tests/data/sdam/single/direct_connection_replicaset.yml +2 -1
  1410. data/spec/spec_tests/data/sdam/single/direct_connection_rsarbiter.yml +2 -1
  1411. data/spec/spec_tests/data/sdam/single/direct_connection_rsprimary.yml +2 -1
  1412. data/spec/spec_tests/data/sdam/single/direct_connection_rssecondary.yml +2 -1
  1413. data/spec/spec_tests/data/sdam/single/direct_connection_standalone.yml +2 -1
  1414. data/spec/spec_tests/data/sdam/single/direct_connection_wrong_set_name.yml +4 -2
  1415. data/spec/spec_tests/data/sdam/single/discover_standalone.yml +2 -1
  1416. data/spec/spec_tests/data/sdam/single/ls_timeout_standalone.yml +2 -1
  1417. data/spec/spec_tests/data/sdam/single/not_ok_response.yml +5 -3
  1418. data/spec/spec_tests/data/sdam/single/standalone_removed.yml +2 -1
  1419. data/spec/spec_tests/data/sdam/single/standalone_using_legacy_hello.yml +34 -0
  1420. data/spec/spec_tests/data/sdam/single/too_new.yml +2 -1
  1421. data/spec/spec_tests/data/sdam/single/too_old.yml +2 -1
  1422. data/spec/spec_tests/data/sdam/single/too_old_then_upgraded.yml +4 -2
  1423. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +2 -4
  1424. data/spec/spec_tests/data/sdam_monitoring/load_balancer.yml +65 -0
  1425. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +40 -40
  1426. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +40 -40
  1427. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +4 -3
  1428. data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +3 -2
  1429. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +3 -3
  1430. data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +2 -2
  1431. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +4 -4
  1432. data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +2 -2
  1433. data/spec/spec_tests/data/sdam_unified/auth-error.yml +130 -0
  1434. data/spec/spec_tests/data/sdam_unified/auth-misc-command-error.yml +132 -0
  1435. data/spec/spec_tests/data/sdam_unified/auth-network-error.yml +132 -0
  1436. data/spec/spec_tests/data/sdam_unified/auth-network-timeout-error.yml +138 -0
  1437. data/spec/spec_tests/data/sdam_unified/auth-shutdown-error.yml +133 -0
  1438. data/spec/spec_tests/data/sdam_unified/cancel-server-check.yml +143 -0
  1439. data/spec/spec_tests/data/sdam_unified/connectTimeoutMS.yml +130 -0
  1440. data/spec/spec_tests/data/sdam_unified/find-network-error.yml +135 -0
  1441. data/spec/spec_tests/data/sdam_unified/find-network-timeout-error.yml +119 -0
  1442. data/spec/spec_tests/data/sdam_unified/find-shutdown-error.yml +163 -0
  1443. data/spec/spec_tests/data/sdam_unified/hello-command-error.yml +233 -0
  1444. data/spec/spec_tests/data/sdam_unified/hello-network-error.yml +228 -0
  1445. data/spec/spec_tests/data/sdam_unified/hello-timeout.yml +318 -0
  1446. data/spec/spec_tests/data/sdam_unified/insert-network-error.yml +137 -0
  1447. data/spec/spec_tests/data/sdam_unified/insert-shutdown-error.yml +162 -0
  1448. data/spec/spec_tests/data/sdam_unified/interruptInUse-pool-clear.yml +340 -0
  1449. data/spec/spec_tests/data/sdam_unified/minPoolSize-error.yml +125 -0
  1450. data/spec/spec_tests/data/sdam_unified/pool-cleared-error.yml +239 -0
  1451. data/spec/spec_tests/data/sdam_unified/rediscover-quickly-after-step-down.yml +144 -0
  1452. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +14 -0
  1453. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
  1454. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +6 -0
  1455. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-multiple-hosts.yml +5 -0
  1456. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +11 -0
  1457. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
  1458. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
  1459. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +11 -0
  1460. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +11 -0
  1461. data/spec/spec_tests/data/seed_list_discovery/replica-set/encoded-userinfo-and-db.yml +15 -0
  1462. data/spec/spec_tests/data/seed_list_discovery/replica-set/loadBalanced-false-txt.yml +10 -0
  1463. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
  1464. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
  1465. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
  1466. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
  1467. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
  1468. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
  1469. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
  1470. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
  1471. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-admin-database.yml +13 -0
  1472. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-auth.yml +12 -0
  1473. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
  1474. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
  1475. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
  1476. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
  1477. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
  1478. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
  1479. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
  1480. data/spec/spec_tests/data/sessions_unified/implicit-sessions-default-causal-consistency.yml +119 -0
  1481. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +75 -0
  1482. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-server-error.yml +102 -0
  1483. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +258 -0
  1484. data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +482 -0
  1485. data/spec/spec_tests/data/transactions/error-labels.yml +4 -1
  1486. data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
  1487. data/spec/spec_tests/data/transactions/mongos-pin-auto.yml +3 -0
  1488. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +3 -1
  1489. data/spec/spec_tests/data/transactions/pin-mongos.yml +6 -3
  1490. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -7
  1491. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -7
  1492. data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
  1493. data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +172 -0
  1494. data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +118 -0
  1495. data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +118 -0
  1496. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor-malformed.yml +31 -0
  1497. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor.yml +31 -0
  1498. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError-malformed.yml +34 -0
  1499. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError.yml +35 -0
  1500. data/spec/spec_tests/data/unified/valid-fail/operation-failure.yml +31 -0
  1501. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
  1502. data/spec/spec_tests/data/unified/valid-pass/assertNumberConnectionsCheckedOut.yml +17 -0
  1503. data/spec/spec_tests/data/unified/valid-pass/collectionData-createOptions.yml +37 -0
  1504. data/spec/spec_tests/data/unified/valid-pass/entity-client-cmap-events.yml +40 -0
  1505. data/spec/spec_tests/data/unified/valid-pass/entity-client-storeEventsAsEntities.yml +37 -0
  1506. data/spec/spec_tests/data/unified/valid-pass/expectedError-errorResponse.yml +39 -0
  1507. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-eventType.yml +66 -0
  1508. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
  1509. data/spec/spec_tests/data/unified/valid-pass/ignoreResultAndError.yml +34 -0
  1510. data/spec/spec_tests/data/unified/valid-pass/observeSensitiveCommands.yml +255 -0
  1511. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +241 -0
  1512. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +102 -0
  1513. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +190 -0
  1514. data/spec/spec_tests/data/unified/valid-pass/poc-gridfs.yml +155 -0
  1515. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +193 -0
  1516. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +210 -0
  1517. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +215 -0
  1518. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +235 -0
  1519. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +169 -0
  1520. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +171 -0
  1521. data/spec/spec_tests/data/uri_options/auth-options.yml +25 -0
  1522. data/spec/spec_tests/data/uri_options/compression-options.yml +7 -4
  1523. data/spec/spec_tests/data/uri_options/connection-options.yml +60 -0
  1524. data/spec/spec_tests/data/uri_options/read-preference-options.yml +24 -0
  1525. data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +1 -0
  1526. data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
  1527. data/spec/spec_tests/data/uri_options/tls-options.yml +160 -4
  1528. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +419 -0
  1529. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +413 -0
  1530. data/spec/spec_tests/data/versioned_api/runcommand-helper-no-api-version-declared.yml +75 -0
  1531. data/spec/spec_tests/data/versioned_api/test-commands-deprecation-errors.yml +47 -0
  1532. data/spec/spec_tests/data/versioned_api/test-commands-strict-mode.yml +46 -0
  1533. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +128 -0
  1534. data/spec/spec_tests/gridfs_spec.rb +3 -0
  1535. data/spec/spec_tests/gridfs_unified_spec.rb +13 -0
  1536. data/spec/spec_tests/load_balancers_spec.rb +15 -0
  1537. data/spec/spec_tests/max_staleness_spec.rb +3 -0
  1538. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +3 -0
  1539. data/spec/spec_tests/read_write_concern_document_spec.rb +3 -0
  1540. data/spec/spec_tests/read_write_concern_operaton_spec.rb +3 -0
  1541. data/spec/spec_tests/retryable_reads_spec.rb +11 -3
  1542. data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
  1543. data/spec/spec_tests/retryable_writes_spec.rb +14 -8
  1544. data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
  1545. data/spec/spec_tests/sdam_monitoring_spec.rb +14 -6
  1546. data/spec/spec_tests/sdam_spec.rb +9 -2
  1547. data/spec/spec_tests/sdam_unified_spec.rb +13 -0
  1548. data/spec/spec_tests/seed_list_discovery_spec.rb +127 -0
  1549. data/spec/spec_tests/server_selection_rtt_spec.rb +3 -0
  1550. data/spec/spec_tests/server_selection_spec.rb +3 -0
  1551. data/spec/spec_tests/sessions_unified_spec.rb +13 -0
  1552. data/spec/spec_tests/transactions_api_spec.rb +3 -0
  1553. data/spec/spec_tests/transactions_spec.rb +3 -0
  1554. data/spec/spec_tests/transactions_unified_spec.rb +13 -0
  1555. data/spec/spec_tests/unified_spec.rb +18 -0
  1556. data/spec/spec_tests/uri_options_spec.rb +50 -33
  1557. data/spec/spec_tests/versioned_api_spec.rb +13 -0
  1558. data/spec/stress/cleanup_spec.rb +3 -0
  1559. data/spec/stress/connection_pool_stress_spec.rb +3 -61
  1560. data/spec/stress/connection_pool_timing_spec.rb +14 -35
  1561. data/spec/stress/fork_reconnect_stress_spec.rb +17 -18
  1562. data/spec/stress/push_monitor_close_spec.rb +44 -0
  1563. data/spec/support/authorization.rb +4 -1
  1564. data/spec/support/aws_utils/base.rb +3 -0
  1565. data/spec/support/aws_utils/inspector.rb +3 -0
  1566. data/spec/support/aws_utils/orchestrator.rb +22 -7
  1567. data/spec/support/aws_utils/provisioner.rb +3 -0
  1568. data/spec/support/aws_utils.rb +6 -2
  1569. data/spec/support/background_thread_registry.rb +7 -14
  1570. data/spec/support/certificates/README.md +3 -2
  1571. data/spec/support/certificates/atlas-ocsp-ca.crt +103 -0
  1572. data/spec/support/certificates/atlas-ocsp.crt +152 -0
  1573. data/spec/support/certificates/retrieve-atlas-cert +40 -0
  1574. data/spec/support/client_registry.rb +17 -6
  1575. data/spec/support/client_registry_macros.rb +17 -5
  1576. data/spec/support/cluster_tools.rb +17 -9
  1577. data/spec/support/common_shortcuts.rb +134 -10
  1578. data/spec/support/constraints.rb +16 -246
  1579. data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
  1580. data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
  1581. data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
  1582. data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
  1583. data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
  1584. data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
  1585. data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
  1586. data/spec/support/crypt/corpus/corpus.json +4999 -37
  1587. data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
  1588. data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
  1589. data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
  1590. data/spec/support/crypt/encrypted_fields/encryptedFields.json +32 -0
  1591. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +30 -0
  1592. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +21 -0
  1593. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +29 -0
  1594. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +21 -0
  1595. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +30 -0
  1596. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +27 -0
  1597. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +27 -0
  1598. data/spec/support/crypt/keys/key1-document.json +30 -0
  1599. data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
  1600. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  1601. data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
  1602. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  1603. data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
  1604. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  1605. data/spec/support/crypt.rb +271 -13
  1606. data/spec/support/dns.rb +3 -0
  1607. data/spec/support/json_ext_formatter.rb +3 -0
  1608. data/spec/support/keyword_struct.rb +3 -0
  1609. data/spec/support/local_resource_registry.rb +3 -0
  1610. data/spec/support/macros.rb +29 -0
  1611. data/spec/support/matchers.rb +33 -1
  1612. data/spec/support/mongos_macros.rb +24 -0
  1613. data/spec/support/monitoring_ext.rb +3 -0
  1614. data/spec/support/ocsp +1 -0
  1615. data/spec/support/primary_socket.rb +3 -0
  1616. data/spec/support/sdam_formatter_integration.rb +3 -0
  1617. data/spec/support/shared/app_metadata.rb +179 -0
  1618. data/spec/support/shared/auth_context.rb +17 -0
  1619. data/spec/support/shared/protocol.rb +3 -0
  1620. data/spec/support/shared/scram_conversation.rb +5 -1
  1621. data/spec/support/shared/server_selector.rb +6 -3
  1622. data/spec/support/shared/session.rb +20 -11
  1623. data/spec/support/spec_config.rb +248 -24
  1624. data/spec/support/spec_setup.rb +51 -38
  1625. data/spec/support/using_hash.rb +40 -0
  1626. data/spec/support/utils.rb +353 -172
  1627. data.tar.gz.sig +0 -0
  1628. metadata +2052 -1217
  1629. metadata.gz.sig +0 -0
  1630. data/lib/mongo/collection/view/builder/find_command.rb +0 -150
  1631. data/lib/mongo/collection/view/builder/flags.rb +0 -62
  1632. data/lib/mongo/collection/view/builder/modifiers.rb +0 -80
  1633. data/lib/mongo/collection/view/builder/op_query.rb +0 -91
  1634. data/lib/mongo/cursor/builder/get_more_command.rb +0 -77
  1635. data/lib/mongo/cursor/builder/kill_cursors_command.rb +0 -108
  1636. data/lib/mongo/cursor/builder/op_get_more.rb +0 -61
  1637. data/lib/mongo/cursor/builder/op_kill_cursors.rb +0 -103
  1638. data/lib/mongo/cursor/builder.rb +0 -18
  1639. data/lib/mongo/operation/aggregate/command.rb +0 -44
  1640. data/lib/mongo/operation/collections_info/command.rb +0 -40
  1641. data/lib/mongo/operation/command/command.rb +0 -38
  1642. data/lib/mongo/operation/count/command.rb +0 -38
  1643. data/lib/mongo/operation/create/command.rb +0 -38
  1644. data/lib/mongo/operation/create_index/command.rb +0 -42
  1645. data/lib/mongo/operation/create_user/command.rb +0 -43
  1646. data/lib/mongo/operation/delete/command.rb +0 -46
  1647. data/lib/mongo/operation/delete/legacy.rb +0 -54
  1648. data/lib/mongo/operation/distinct/command.rb +0 -38
  1649. data/lib/mongo/operation/drop/command.rb +0 -38
  1650. data/lib/mongo/operation/drop_database/command.rb +0 -38
  1651. data/lib/mongo/operation/drop_index/command.rb +0 -42
  1652. data/lib/mongo/operation/explain/command.rb +0 -39
  1653. data/lib/mongo/operation/explain/legacy.rb +0 -38
  1654. data/lib/mongo/operation/find/command.rb +0 -39
  1655. data/lib/mongo/operation/find/legacy/result.rb +0 -41
  1656. data/lib/mongo/operation/find/legacy.rb +0 -40
  1657. data/lib/mongo/operation/get_more/command.rb +0 -39
  1658. data/lib/mongo/operation/get_more/legacy.rb +0 -36
  1659. data/lib/mongo/operation/indexes/command.rb +0 -39
  1660. data/lib/mongo/operation/indexes/legacy.rb +0 -45
  1661. data/lib/mongo/operation/insert/command.rb +0 -56
  1662. data/lib/mongo/operation/insert/legacy.rb +0 -65
  1663. data/lib/mongo/operation/kill_cursors/command.rb +0 -37
  1664. data/lib/mongo/operation/kill_cursors/legacy.rb +0 -37
  1665. data/lib/mongo/operation/list_collections/command.rb +0 -43
  1666. data/lib/mongo/operation/map_reduce/command.rb +0 -40
  1667. data/lib/mongo/operation/parallel_scan/command.rb +0 -55
  1668. data/lib/mongo/operation/remove_user/command.rb +0 -43
  1669. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +0 -56
  1670. data/lib/mongo/operation/shared/op_msg_or_command.rb +0 -44
  1671. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +0 -47
  1672. data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +0 -47
  1673. data/lib/mongo/operation/update/command.rb +0 -47
  1674. data/lib/mongo/operation/update/legacy/result.rb +0 -102
  1675. data/lib/mongo/operation/update/legacy.rb +0 -65
  1676. data/lib/mongo/operation/update_user/command.rb +0 -42
  1677. data/lib/mongo/operation/users_info/command.rb +0 -43
  1678. data/lib/mongo/protocol/delete.rb +0 -169
  1679. data/lib/mongo/protocol/insert.rb +0 -178
  1680. data/lib/mongo/protocol/update.rb +0 -211
  1681. data/lib/mongo/server/context.rb +0 -69
  1682. data/spec/mongo/collection/view/builder/flags_spec.rb +0 -106
  1683. data/spec/mongo/collection/view/builder/modifiers_spec.rb +0 -210
  1684. data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +0 -61
  1685. data/spec/mongo/dbref_spec.rb +0 -149
  1686. data/spec/mongo/operation/delete/command_spec.rb +0 -112
  1687. data/spec/mongo/operation/find/legacy_spec.rb +0 -125
  1688. data/spec/mongo/operation/get_more_spec.rb +0 -58
  1689. data/spec/mongo/operation/insert/command_spec.rb +0 -115
  1690. data/spec/mongo/operation/kill_cursors_spec.rb +0 -41
  1691. data/spec/mongo/operation/update/command_spec.rb +0 -119
  1692. data/spec/mongo/protocol/delete_spec.rb +0 -182
  1693. data/spec/mongo/protocol/insert_spec.rb +0 -176
  1694. data/spec/mongo/protocol/update_spec.rb +0 -201
  1695. data/spec/mongo/server/app_metadata_shared.rb +0 -136
  1696. data/spec/spec_tests/change_streams_spec.rb +0 -90
  1697. data/spec/spec_tests/command_monitoring_spec.rb +0 -66
  1698. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -102
  1699. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
  1700. data/spec/spec_tests/data/change_streams/change-streams-resume-whitelist.yml +0 -1173
  1701. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -537
  1702. data/spec/spec_tests/data/command_monitoring/bulkWrite.yml +0 -49
  1703. data/spec/spec_tests/data/command_monitoring/command.yml +0 -61
  1704. data/spec/spec_tests/data/command_monitoring/deleteMany.yml +0 -55
  1705. data/spec/spec_tests/data/command_monitoring/deleteOne.yml +0 -55
  1706. data/spec/spec_tests/data/command_monitoring/find.yml +0 -266
  1707. data/spec/spec_tests/data/command_monitoring/insertMany.yml +0 -75
  1708. data/spec/spec_tests/data/command_monitoring/insertOne.yml +0 -51
  1709. data/spec/spec_tests/data/command_monitoring/unacknowledgedBulkWrite.yml +0 -34
  1710. data/spec/spec_tests/data/command_monitoring/updateMany.yml +0 -65
  1711. data/spec/spec_tests/data/command_monitoring/updateOne.yml +0 -90
  1712. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
  1713. data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -110
  1714. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
  1715. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
  1716. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
  1717. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
  1718. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
  1719. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
  1720. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
  1721. data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -38
  1722. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
  1723. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
  1724. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
  1725. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
  1726. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
  1727. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
  1728. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
  1729. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
  1730. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
  1731. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
  1732. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
  1733. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
  1734. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
  1735. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
  1736. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
  1737. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
  1738. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
  1739. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
  1740. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
  1741. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
  1742. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
  1743. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
  1744. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
  1745. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
  1746. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
  1747. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
  1748. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
  1749. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
  1750. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
  1751. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
  1752. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
  1753. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
  1754. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
  1755. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
  1756. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
  1757. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
  1758. data/spec/spec_tests/data/retryable_reads/aggregate-serverErrors.yml +0 -157
  1759. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch-serverErrors.yml +0 -149
  1760. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch.yml +0 -61
  1761. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch-serverErrors.yml +0 -149
  1762. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch.yml +0 -65
  1763. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch-serverErrors.yml +0 -153
  1764. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch.yml +0 -61
  1765. data/spec/spec_tests/data/retryable_reads/count-serverErrors.yml +0 -150
  1766. data/spec/spec_tests/data/retryable_reads/countDocuments-serverErrors.yml +0 -150
  1767. data/spec/spec_tests/data/retryable_reads/distinct-serverErrors.yml +0 -156
  1768. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors.yml +0 -148
  1769. data/spec/spec_tests/data/retryable_reads/find-serverErrors.yml +0 -160
  1770. data/spec/spec_tests/data/retryable_reads/findOne-serverErrors.yml +0 -154
  1771. data/spec/spec_tests/data/retryable_reads/gridfs-download-serverErrors.yml +0 -173
  1772. data/spec/spec_tests/data/retryable_reads/gridfs-downloadByName-serverErrors.yml +0 -174
  1773. data/spec/spec_tests/data/retryable_reads/listCollectionNames-serverErrors.yml +0 -143
  1774. data/spec/spec_tests/data/retryable_reads/listCollectionObjects-serverErrors.yml +0 -144
  1775. data/spec/spec_tests/data/retryable_reads/listCollections-serverErrors.yml +0 -143
  1776. data/spec/spec_tests/data/retryable_reads/listDatabaseNames-serverErrors.yml +0 -143
  1777. data/spec/spec_tests/data/retryable_reads/listDatabaseObjects-serverErrors.yml +0 -144
  1778. data/spec/spec_tests/data/retryable_reads/listDatabases-serverErrors.yml +0 -144
  1779. data/spec/spec_tests/data/retryable_reads/listIndexNames-serverErrors.yml +0 -144
  1780. data/spec/spec_tests/data/retryable_reads/listIndexNames.yml +0 -60
  1781. data/spec/spec_tests/data/retryable_reads/listIndexes-serverErrors.yml +0 -145
  1782. data/spec/spec_tests/data/retryable_reads/mapReduce.yml +0 -60
  1783. data/spec/spec_tests/data/retryable_writes/bulkWrite-serverErrors.yml +0 -130
  1784. data/spec/spec_tests/data/retryable_writes/bulkWrite.yml +0 -396
  1785. data/spec/spec_tests/data/retryable_writes/deleteOne-serverErrors.yml +0 -73
  1786. data/spec/spec_tests/data/retryable_writes/findOneAndDelete-serverErrors.yml +0 -74
  1787. data/spec/spec_tests/data/retryable_writes/findOneAndReplace-serverErrors.yml +0 -80
  1788. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate-serverErrors.yml +0 -79
  1789. data/spec/spec_tests/data/retryable_writes/insertMany-serverErrors.yml +0 -84
  1790. data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +0 -526
  1791. data/spec/spec_tests/data/retryable_writes/replaceOne-serverErrors.yml +0 -82
  1792. data/spec/spec_tests/data/retryable_writes/updateOne-serverErrors.yml +0 -82
  1793. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMaster.yml +0 -60
  1794. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMasterNoSlaveOk.yml +0 -60
  1795. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMasterOrSecondary.yml +0 -60
  1796. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMaster.yml +0 -51
  1797. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMasterNoSlaveOk.yml +0 -51
  1798. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMasterOrSecondary.yml +0 -51
  1799. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMaster.yml +0 -60
  1800. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMasterNoSlaveOk.yml +0 -60
  1801. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMasterOrSecondary.yml +0 -60
  1802. data/spec/spec_tests/data/sdam/errors/post-42-NotMaster.yml +0 -46
  1803. data/spec/spec_tests/data/sdam/errors/post-42-NotMasterNoSlaveOk.yml +0 -46
  1804. data/spec/spec_tests/data/sdam/errors/post-42-NotMasterOrSecondary.yml +0 -46
  1805. data/spec/spec_tests/data/sdam/errors/pre-42-NotMaster.yml +0 -46
  1806. data/spec/spec_tests/data/sdam/errors/pre-42-NotMasterNoSlaveOk.yml +0 -46
  1807. data/spec/spec_tests/data/sdam/errors/pre-42-NotMasterOrSecondary.yml +0 -46
  1808. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMaster.yml +0 -89
  1809. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMasterNoSlaveOk.yml +0 -89
  1810. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMasterOrSecondary.yml +0 -89
  1811. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMaster.yml +0 -89
  1812. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMasterNoSlaveOk.yml +0 -89
  1813. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMasterOrSecondary.yml +0 -89
  1814. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMaster.yml +0 -89
  1815. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMasterNoSlaveOk.yml +0 -89
  1816. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMasterOrSecondary.yml +0 -89
  1817. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMaster.yml +0 -64
  1818. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMasterNoSlaveOk.yml +0 -64
  1819. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMasterOrSecondary.yml +0 -64
  1820. data/spec/spec_tests/data/sdam/single/direct_connection_slave.yml +0 -34
  1821. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +0 -96
  1822. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +0 -88
  1823. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +0 -83
  1824. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +0 -116
  1825. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +0 -86
  1826. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +0 -115
  1827. data/spec/spec_tests/data/sdam_integration/isMaster-command-error.yml +0 -168
  1828. data/spec/spec_tests/data/sdam_integration/isMaster-network-error.yml +0 -162
  1829. data/spec/spec_tests/data/sdam_integration/isMaster-timeout.yml +0 -229
  1830. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +0 -87
  1831. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +0 -68
  1832. data/spec/spec_tests/sdam_integration_spec.rb +0 -13
  1833. data/spec/support/child_process_helper.rb +0 -78
  1834. data/spec/support/cluster_config.rb +0 -207
  1835. data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
  1836. data/spec/support/event_subscriber.rb +0 -212
  1837. data/spec/support/lite_constraints.rb +0 -141
  1838. data/spec/support/spec_organizer.rb +0 -129
  1839. /data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
  1840. /data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
  1841. /data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
  1842. /data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
  1843. /data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
  1844. /data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount.yml → legacy/estimatedDocumentCount.yml} +0 -0
  1845. /data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
  1846. /data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
  1847. /data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
  1848. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
  1849. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
  1850. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
  1851. /data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
  1852. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
  1853. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
  1854. /data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
  1855. /data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
  1856. /data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
  1857. /data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
  1858. /data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
  1859. /data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
  1860. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
  1861. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
  1862. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
  1863. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
  1864. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
  1865. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
  1866. /data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
  1867. /data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
  1868. /data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
  1869. /data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
  1870. /data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
  1871. /data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
  1872. /data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
  1873. /data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
  1874. /data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
  1875. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-false.yml +0 -0
  1876. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-true.yml +0 -0
  1877. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/longer-parent-in-return.yml +0 -0
  1878. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/misformatted-option.yml +0 -0
  1879. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/no-results.yml +0 -0
  1880. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/not-enough-parts.yml +0 -0
  1881. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-result-default-port.yml +0 -0
  1882. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record-multiple-strings.yml +0 -0
  1883. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record.yml +0 -0
  1884. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch1.yml +0 -0
  1885. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch2.yml +0 -0
  1886. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch3.yml +0 -0
  1887. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch4.yml +0 -0
  1888. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch5.yml +0 -0
  1889. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-too-short.yml +0 -0
  1890. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-wrong.yml +0 -0
  1891. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-default-port.yml +0 -0
  1892. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-nonstandard-port.yml +0 -0
  1893. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-txt-records.yml +0 -0
  1894. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-not-allowed-option.yml +0 -0
  1895. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-ssl-option.yml +0 -0
  1896. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-uri-option.yml +0 -0
  1897. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-unallowed-option.yml +0 -0
  1898. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-port.yml +0 -0
  1899. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-two-hosts.yml +0 -0
data/lib/mongo/client.rb CHANGED
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # rubocop:todo all
3
+
1
4
  # Copyright (C) 2014-2020 MongoDB Inc.
2
5
  #
3
6
  # Licensed under the Apache License, Version 2.0 (the 'License');
@@ -64,9 +67,11 @@ module Mongo
64
67
  :database,
65
68
  :heartbeat_frequency,
66
69
  :id_generator,
70
+ :load_balanced,
67
71
  :local_threshold,
68
72
  :logger,
69
73
  :log_prefix,
74
+ :max_connecting,
70
75
  :max_idle_time,
71
76
  :max_pool_size,
72
77
  :max_read_retries,
@@ -76,6 +81,7 @@ module Mongo
76
81
  :monitoring_io,
77
82
  :password,
78
83
  :platform,
84
+ :populator_io,
79
85
  :read,
80
86
  :read_concern,
81
87
  :read_retry_interval,
@@ -85,8 +91,11 @@ module Mongo
85
91
  :retry_writes,
86
92
  :scan,
87
93
  :sdam_proc,
94
+ :server_api,
88
95
  :server_selection_timeout,
89
96
  :socket_timeout,
97
+ :srv_max_hosts,
98
+ :srv_service_name,
90
99
  :ssl,
91
100
  :ssl_ca_cert,
92
101
  :ssl_ca_cert_object,
@@ -101,6 +110,7 @@ module Mongo
101
110
  :ssl_verify,
102
111
  :ssl_verify_certificate,
103
112
  :ssl_verify_hostname,
113
+ :ssl_verify_ocsp_endpoint,
104
114
  :truncate_logs,
105
115
  :user,
106
116
  :wait_queue_timeout,
@@ -113,7 +123,16 @@ module Mongo
113
123
  # The compression algorithms supported by the driver.
114
124
  #
115
125
  # @since 2.5.0
116
- VALID_COMPRESSORS = [ Mongo::Protocol::Compressed::ZLIB ].freeze
126
+ VALID_COMPRESSORS = [
127
+ Mongo::Protocol::Compressed::ZSTD,
128
+ Mongo::Protocol::Compressed::SNAPPY,
129
+ Mongo::Protocol::Compressed::ZLIB
130
+ ].freeze
131
+
132
+ # The known server API versions.
133
+ VALID_SERVER_API_VERSIONS = %w(
134
+ 1
135
+ ).freeze
117
136
 
118
137
  # @return [ Mongo::Cluster ] cluster The cluster of servers for the client.
119
138
  attr_reader :cluster
@@ -222,31 +241,42 @@ module Mongo
222
241
  # @option options [ Array<String> ] :compressors A list of potential
223
242
  # compressors to use, in order of preference. The driver chooses the
224
243
  # first compressor that is also supported by the server. Currently the
225
- # driver only supports 'zlib'.
244
+ # driver only supports 'zstd, 'snappy' and 'zlib'.
226
245
  # @option options [ true | false ] :direct_connection Whether to connect
227
246
  # directly to the specified seed, bypassing topology discovery. Exactly
228
247
  # one seed must be provided.
229
248
  # @option options [ Symbol ] :connect Deprecated - use :direct_connection
230
249
  # option instead of this option. The connection method to use. This
231
250
  # forces the cluster to behave in the specified way instead of
232
- # auto-discovering. One of :direct, :replica_set, :sharded
251
+ # auto-discovering. One of :direct, :replica_set, :sharded,
252
+ # :load_balanced. If :connect is set to :load_balanced, the driver
253
+ # will behave as if the server is a load balancer even if it isn't
254
+ # connected to a load balancer.
233
255
  # @option options [ Float ] :connect_timeout The timeout, in seconds, to
234
256
  # attempt a connection.
235
257
  # @option options [ String ] :database The database to connect to.
236
258
  # @option options [ Float ] :heartbeat_frequency The interval, in seconds,
237
- # for the server monitor to refresh its description via ismaster.
259
+ # for the server monitor to refresh its description via hello.
238
260
  # @option options [ Object ] :id_generator A custom object to generate ids
239
261
  # for documents. Must respond to #generate.
262
+ # @option options [ true | false ] :load_balanced Whether to expect to
263
+ # connect to a load balancer.
240
264
  # @option options [ Integer ] :local_threshold The local threshold boundary
241
265
  # in seconds for selecting a near server for an operation.
242
266
  # @option options [ Logger ] :logger A custom logger to use.
243
267
  # @option options [ String ] :log_prefix A custom log prefix to use when
244
268
  # logging. This option is experimental and subject to change in a future
245
269
  # version of the driver.
270
+ # @option options [ Integer ] :max_connecting The maximum number of
271
+ # connections that can be connecting simultaneously. The default is 2.
272
+ # This option should be increased if there are many threads that share
273
+ # the same client and the application is experiencing timeouts
274
+ # while waiting for connections to be established.
275
+ # selecting a server for an operation. The default is 2.
246
276
  # @option options [ Integer ] :max_idle_time The maximum seconds a socket can remain idle
247
277
  # since it has been checked in to the pool.
248
278
  # @option options [ Integer ] :max_pool_size The maximum size of the
249
- # connection pool.
279
+ # connection pool. Setting this option to zero creates an unlimited connection pool.
250
280
  # @option options [ Integer ] :max_read_retries The maximum number of read
251
281
  # retries when legacy read retries are in use.
252
282
  # @option options [ Integer ] :max_write_retries The maximum number of write
@@ -311,11 +341,23 @@ module Mongo
311
341
  # in particular the cluster is nil at this time. sdam_proc should
312
342
  # limit itself to calling #subscribe and #unsubscribe methods on the
313
343
  # client only.
344
+ # @option options [ Hash ] :server_api The requested server API version.
345
+ # This hash can have the following items:
346
+ # - *:version* -- string
347
+ # - *:strict* -- boolean
348
+ # - *:deprecation_errors* -- boolean
314
349
  # @option options [ Integer ] :server_selection_timeout The timeout in seconds
315
350
  # for selecting a server for an operation.
316
351
  # @option options [ Float ] :socket_timeout The timeout, in seconds, to
317
352
  # execute operations on a socket.
318
- # @option options [ true, false ] :ssl Whether to use SSL.
353
+ # @option options [ Integer ] :srv_max_hosts The maximum number of mongoses
354
+ # that the driver will communicate with for sharded topologies. If this
355
+ # option is 0, then there will be no maximum number of mongoses. If the
356
+ # given URI resolves to more hosts than ``:srv_max_hosts``, the client
357
+ # will ramdomly choose an ``:srv_max_hosts`` sized subset of hosts.
358
+ # @option options [ String ] :srv_service_name The service name to use in
359
+ # the SRV DNS query.
360
+ # @option options [ true, false ] :ssl Whether to use TLS.
319
361
  # @option options [ String ] :ssl_ca_cert The file containing concatenated
320
362
  # certificate authority certificates used to validate certs passed from the
321
363
  # other end of the connection. Intermediate certificates should NOT be
@@ -395,11 +437,16 @@ module Mongo
395
437
  # instance containing the encryption key vault
396
438
  # - :key_vault_namespace => String, the namespace of the key vault in the
397
439
  # format database.collection
398
- # - :kms_providers => Hash, A hash of key management service configuration
399
- # information. Valid hash keys are :local or :aws. There may be more
400
- # than one kms provider specified.
440
+ # - :kms_providers => Hash, A hash of key management service (KMS) configuration
441
+ # information. Valid hash keys are :aws, :azure, :gcp, :kmip, :local.
442
+ # There may be more than one kms provider specified.
443
+ # - :kms_tls_options => Hash, A hash of TLS options to authenticate to
444
+ # KMS providers, usually used for KMIP servers. Valid hash keys
445
+ # are :aws, :azure, :gcp, :kmip, :local. There may be more than one
446
+ # kms provider specified.
401
447
  # - :schema_map => Hash | nil, JSONSchema for one or more collections
402
- # specifying which fields should be encrypted.
448
+ # specifying which fields should be encrypted. This option is
449
+ # mutually exclusive with :schema_map_path.
403
450
  # - Note: Schemas supplied in the schema_map only apply to configuring
404
451
  # automatic encryption for client side encryption. Other validation
405
452
  # rules in the JSON schema will not be enforced by the driver and will
@@ -408,10 +455,27 @@ module Mongo
408
455
  # JSON Schemas obtained from the server. It protects against a
409
456
  # malicious server advertising a false JSON Schema, which could trick
410
457
  # the client into sending unencrypted data that should be encrypted.
458
+ # - Note: If a collection is present on both the :encrypted_fields_map
459
+ # and :schema_map, an error will be raised.
460
+ # - :schema_map_path => String | nil A path to a file contains the JSON schema
461
+ # of the collection that stores auto encrypted documents. This option is
462
+ # mutually exclusive with :schema_map.
411
463
  # - :bypass_auto_encryption => Boolean, when true, disables auto encryption;
412
464
  # defaults to false.
413
465
  # - :extra_options => Hash | nil, options related to spawning mongocryptd
414
466
  # (this part of the API is subject to change).
467
+ # - :encrypted_fields_map => Hash | nil, maps a collection namespace to
468
+ # a hash describing encrypted fields for queryable encryption.
469
+ # - Note: If a collection is present on both the encryptedFieldsMap
470
+ # and schemaMap, an error will be raised.
471
+ # - :bypass_query_analysis => Boolean | nil, when true disables automatic
472
+ # analysis of outgoing commands.
473
+ # - :crypt_shared_lib_path => [ String | nil ] Path that should
474
+ # be the used to load the crypt shared library. Providing this option
475
+ # overrides default crypt shared library load paths for libmongocrypt.
476
+ # - :crypt_shared_lib_required => [ Boolean | nil ] Whether
477
+ # crypt shared library is required. If 'true', an error will be raised
478
+ # if a crypt_shared library cannot be loaded by libmongocrypt.
415
479
  #
416
480
  # Notes on automatic encryption:
417
481
  # - Automatic encryption is an enterprise only feature that only applies
@@ -462,6 +526,20 @@ module Mongo
462
526
  @srv_records = nil
463
527
  end
464
528
 
529
+ options = self.class.canonicalize_ruby_options(options)
530
+
531
+ # The server API version is specified to be a string.
532
+ # However, it is very annoying to always provide the number 1 as a string,
533
+ # therefore cast to the string type here.
534
+ if server_api = options[:server_api]
535
+ if server_api.is_a?(Hash)
536
+ server_api = Options::Redacted.new(server_api)
537
+ if (version = server_api[:version]).is_a?(Integer)
538
+ options[:server_api] = server_api.merge(version: version.to_s)
539
+ end
540
+ end
541
+ end
542
+
465
543
  # Special handling for sdam_proc as it is only used during client
466
544
  # construction
467
545
  sdam_proc = options.delete(:sdam_proc)
@@ -478,6 +556,12 @@ module Mongo
478
556
  end
479
557
  options = merged_options
480
558
 
559
+ options.keys.each do |k|
560
+ if options[k].nil?
561
+ options.delete(k)
562
+ end
563
+ end
564
+
481
565
  @options = validate_new_options!(options)
482
566
  =begin WriteConcern object support
483
567
  if @options[:write_concern].is_a?(WriteConcern::Base)
@@ -487,10 +571,12 @@ module Mongo
487
571
  end
488
572
  =end
489
573
  @options.freeze
490
- validate_options!(addresses)
574
+ validate_options!(addresses, is_srv: uri.is_a?(URI::SRVProtocol))
491
575
  validate_authentication_options!
492
576
 
493
- @database = Database.new(self, @options[:database], @options)
577
+ database_options = @options.dup
578
+ database_options.delete(:server_api)
579
+ @database = Database.new(self, @options[:database], database_options)
494
580
 
495
581
  # Temporarily set monitoring so that event subscriptions can be
496
582
  # set up without there being a cluster
@@ -518,9 +604,9 @@ module Mongo
518
604
 
519
605
  rescue
520
606
  begin
521
- @cluster.disconnect!
607
+ @cluster.close
522
608
  rescue => e
523
- log_warn("Eror disconnecting cluster in client constructor's exception handler: #{e.class}: #{e}")
609
+ log_warn("Eror closing cluster in client constructor's exception handler: #{e.class}: #{e}")
524
610
  # Drop this exception so that the original exception is raised
525
611
  end
526
612
  raise
@@ -605,15 +691,12 @@ module Mongo
605
691
 
606
692
  # Get a summary of the client state.
607
693
  #
608
- # @note This method is experimental and subject to change.
609
- #
610
- # @example Inspect the client.
611
- # client.summary
694
+ # @note The exact format and layout of the returned summary string is
695
+ # not part of the driver's public API and may be changed at any time.
612
696
  #
613
- # @return [ String ] Summary string.
697
+ # @return [ String ] The summary string.
614
698
  #
615
699
  # @since 2.7.0
616
- # @api experimental
617
700
  def summary
618
701
  "#<Client cluster=#{cluster.summary}>"
619
702
  end
@@ -691,14 +774,14 @@ module Mongo
691
774
  # @return [ Mongo::Client ] A new client instance.
692
775
  #
693
776
  # @since 2.0.0
694
- def with(new_options = Options::Redacted.new)
777
+ def with(new_options = nil)
695
778
  clone.tap do |client|
696
- opts = client.update_options(new_options)
779
+ opts = client.update_options(new_options || Options::Redacted.new)
697
780
  Database.create(client)
698
781
  # We can't use the same cluster if some options that would affect it
699
782
  # have changed.
700
783
  if cluster_modifying?(opts)
701
- Cluster.create(client)
784
+ Cluster.create(client, monitoring: opts[:monitoring])
702
785
  end
703
786
  end
704
787
  end
@@ -720,6 +803,8 @@ module Mongo
720
803
  def update_options(new_options)
721
804
  old_options = @options
722
805
 
806
+ new_options = self.class.canonicalize_ruby_options(new_options || {})
807
+
723
808
  validate_new_options!(new_options).tap do |opts|
724
809
  # Our options are frozen
725
810
  options = @options.dup
@@ -769,7 +854,6 @@ module Mongo
769
854
  options[:read_concern]
770
855
  end
771
856
 
772
-
773
857
  # Get the write concern for this client. If no option was provided, then a
774
858
  # default single server acknowledgement will be used.
775
859
  #
@@ -783,6 +867,10 @@ module Mongo
783
867
  @write_concern ||= WriteConcern.get(options[:write_concern] || options[:write])
784
868
  end
785
869
 
870
+ def closed?
871
+ !!@closed
872
+ end
873
+
786
874
  # Close all connections.
787
875
  #
788
876
  # @return [ true ] Always true.
@@ -790,6 +878,7 @@ module Mongo
790
878
  # @since 2.1.0
791
879
  def close
792
880
  @connect_lock.synchronize do
881
+ @closed = true
793
882
  do_close
794
883
  end
795
884
  true
@@ -823,6 +912,8 @@ module Mongo
823
912
  if @options[:auto_encryption_options]
824
913
  build_encrypter
825
914
  end
915
+
916
+ @closed = false
826
917
  end
827
918
 
828
919
  true
@@ -840,8 +931,11 @@ module Mongo
840
931
  # which databases are returned based on user privileges when access control
841
932
  # is enabled
842
933
  #
843
- # See https://docs.mongodb.com/manual/reference/command/listDatabases/
934
+ # See https://mongodb.com/docs/manual/reference/command/listDatabases/
844
935
  # for more information and usage.
936
+ # @option opts [ Session ] :session The session to use.
937
+ # @option options [ Object ] :comment A user-provided
938
+ # comment to attach to this command.
845
939
  #
846
940
  # @return [ Array<String> ] The names of the databases.
847
941
  #
@@ -863,8 +957,11 @@ module Mongo
863
957
  # which databases are returned based on user privileges when access control
864
958
  # is enabled
865
959
  #
866
- # See https://docs.mongodb.com/manual/reference/command/listDatabases/
960
+ # See https://mongodb.com/docs/manual/reference/command/listDatabases/
867
961
  # for more information and usage.
962
+ # @option opts [ Session ] :session The session to use.
963
+ # @option options [ Object ] :comment A user-provided
964
+ # comment to attach to this command.
868
965
  #
869
966
  # @return [ Array<Hash> ] The info for each database.
870
967
  #
@@ -885,6 +982,10 @@ module Mongo
885
982
  # @param [ Hash ] filter The filter criteria for getting a list of databases.
886
983
  # @param [ Hash ] opts The command options.
887
984
  #
985
+ # @option opts [ Session ] :session The session to use.
986
+ # @option options [ Object ] :comment A user-provided
987
+ # comment to attach to this command.
988
+ #
888
989
  # @return [ Array<Mongo::Database> ] The list of database objects.
889
990
  #
890
991
  # @since 2.5.0
@@ -935,11 +1036,35 @@ module Mongo
935
1036
  #
936
1037
  # @param [ Array<Hash> ] pipeline Optional additional filter operators.
937
1038
  # @param [ Hash ] options The change stream options.
1039
+ # @option options [ String ] :full_document Allowed values: nil, 'default',
1040
+ # 'updateLookup', 'whenAvailable', 'required'.
1041
+ #
1042
+ # The default is to not send a value (i.e. nil), which is equivalent to
1043
+ # 'default'. By default, the change notification for partial updates will
1044
+ # include a delta describing the changes to the document.
938
1045
  #
939
- # @option options [ String ] :full_document Allowed values: 'default', 'updateLookup'.
940
- # Defaults to 'default'. When set to 'updateLookup', the change notification for partial
941
- # updates will include both a delta describing the changes to the document, as well as a copy
942
- # of the entire document that was changed from some time after the change occurred.
1046
+ # When set to 'updateLookup', the change notification for partial updates
1047
+ # will include both a delta describing the changes to the document as well
1048
+ # as a copy of the entire document that was changed from some time after
1049
+ # the change occurred.
1050
+ #
1051
+ # When set to 'whenAvailable', configures the change stream to return the
1052
+ # post-image of the modified document for replace and update change events
1053
+ # if the post-image for this event is available.
1054
+ #
1055
+ # When set to 'required', the same behavior as 'whenAvailable' except that
1056
+ # an error is raised if the post-image is not available.
1057
+ # @option options [ String ] :full_document_before_change Allowed values: nil,
1058
+ # 'whenAvailable', 'required', 'off'.
1059
+ #
1060
+ # The default is to not send a value (i.e. nil), which is equivalent to 'off'.
1061
+ #
1062
+ # When set to 'whenAvailable', configures the change stream to return the
1063
+ # pre-image of the modified document for replace, update, and delete change
1064
+ # events if it is available.
1065
+ #
1066
+ # When set to 'required', the same behavior as 'whenAvailable' except that
1067
+ # an error is raised if the pre-image is not available.
943
1068
  # @option options [ BSON::Document, Hash ] :resume_after Specifies the logical starting point
944
1069
  # for the new change stream.
945
1070
  # @option options [ Integer ] :max_await_time_ms The maximum amount of time for the server to
@@ -951,6 +1076,13 @@ module Mongo
951
1076
  # changes that occurred at or after the specified timestamp. Any command run
952
1077
  # against the server will return a cluster time that can be used here.
953
1078
  # Only recognized by server versions 4.0+.
1079
+ # @option options [ Object ] :comment A user-provided
1080
+ # comment to attach to this command.
1081
+ # @option options [ Boolean ] :show_expanded_events Enables the server to
1082
+ # send the 'expanded' list of change stream events. The list of additional
1083
+ # events included with this flag set are: createIndexes, dropIndexes,
1084
+ # modify, create, shardCollection, reshardCollection,
1085
+ # refineCollectionShardKey.
954
1086
  #
955
1087
  # @note A change stream only allows 'majority' read concern.
956
1088
  # @note This helper method is preferable to running a raw aggregation with a $changeStream
@@ -962,8 +1094,11 @@ module Mongo
962
1094
  def watch(pipeline = [], options = {})
963
1095
  return use(Database::ADMIN).watch(pipeline, options) unless database.name == Database::ADMIN
964
1096
 
1097
+ view_options = options.dup
1098
+ view_options[:await_data] = true if options[:max_await_time_ms]
1099
+
965
1100
  Mongo::Collection::View::ChangeStream.new(
966
- Mongo::Collection::View.new(self["#{Database::COMMAND}.aggregate"]),
1101
+ Mongo::Collection::View.new(self["#{Database::COMMAND}.aggregate"], {}, view_options),
967
1102
  pipeline,
968
1103
  Mongo::Collection::View::ChangeStream::CLUSTER,
969
1104
  options)
@@ -1013,6 +1148,9 @@ module Mongo
1013
1148
  #
1014
1149
  # @api private
1015
1150
  def with_session(options = {}, &block)
1151
+ # TODO: Add this back in RUBY-3174.
1152
+ # assert_not_closed
1153
+
1016
1154
  session = get_session(options)
1017
1155
 
1018
1156
  yield session
@@ -1022,6 +1160,31 @@ module Mongo
1022
1160
  end
1023
1161
  end
1024
1162
 
1163
+ class << self
1164
+ # Lowercases auth mechanism properties, if given, in the specified
1165
+ # options, then converts the options to an instance of Options::Redacted.
1166
+ #
1167
+ # @api private
1168
+ def canonicalize_ruby_options(options)
1169
+ Options::Redacted.new(Hash[options.map do |k, v|
1170
+ if k == :auth_mech_properties || k == 'auth_mech_properties'
1171
+ if v
1172
+ v = Hash[v.map { |pk, pv| [pk.downcase, pv] }]
1173
+ end
1174
+ end
1175
+ [k, v]
1176
+ end])
1177
+ end
1178
+ end
1179
+
1180
+ # Returns encrypted field map hash if provided when creating the client.
1181
+ #
1182
+ # @return [ Hash | nil ] Encrypted field map hash, or nil if not set.
1183
+ # @api private
1184
+ def encrypted_fields_map
1185
+ @encrypted_fields_map ||= @options.fetch(:auto_encryption_options, {})[:encrypted_fields_map]
1186
+ end
1187
+
1025
1188
  private
1026
1189
 
1027
1190
  # Create a new encrypter object using the client's auto encryption options
@@ -1050,7 +1213,7 @@ module Mongo
1050
1213
 
1051
1214
  # Implementation for #close, assumes the connect lock is already acquired.
1052
1215
  def do_close
1053
- @cluster.disconnect!
1216
+ @cluster.close
1054
1217
  close_encrypter
1055
1218
  end
1056
1219
 
@@ -1081,11 +1244,26 @@ module Mongo
1081
1244
 
1082
1245
  cluster.validate_session_support!
1083
1246
 
1084
- Session.new(cluster.session_pool.checkout, self, { implicit: true }.merge(options))
1247
+ options = {implicit: true}.update(options)
1248
+
1249
+ server_session = if options[:implicit]
1250
+ nil
1251
+ else
1252
+ cluster.session_pool.checkout
1253
+ end
1254
+
1255
+ Session.new(server_session, self, options)
1085
1256
  end
1086
1257
 
1258
+ # Auxiliary method that is called by interpreter when copying the client
1259
+ # via dup or clone.
1260
+ #
1261
+ # @param [ Mongo::Client ] original Client that is being cloned.
1262
+ #
1263
+ # @api private
1087
1264
  def initialize_copy(original)
1088
1265
  @options = original.options.dup
1266
+ @connect_lock = Mutex.new
1089
1267
  @monitoring = @cluster ? monitoring : Monitoring.new(options)
1090
1268
  @database = nil
1091
1269
  @read_preference = nil
@@ -1105,18 +1283,68 @@ module Mongo
1105
1283
  # The argument may contain a subset of options that the client will
1106
1284
  # eventually have; this method validates each of the provided options
1107
1285
  # but does not check for interactions between combinations of options.
1108
- def validate_new_options!(opts = Options::Redacted.new)
1286
+ def validate_new_options!(opts)
1109
1287
  return Options::Redacted.new unless opts
1288
+ if opts[:read_concern]
1289
+ # Raise an error for non user-settable options
1290
+ if opts[:read_concern][:after_cluster_time]
1291
+ raise Mongo::Error::InvalidReadConcern.new(
1292
+ 'The after_cluster_time read_concern option cannot be specified by the user'
1293
+ )
1294
+ end
1295
+
1296
+ given_keys = opts[:read_concern].keys.map(&:to_s)
1297
+ allowed_keys = ['level']
1298
+ invalid_keys = given_keys - allowed_keys
1299
+ # Warn that options are invalid but keep it and forward to the server
1300
+ unless invalid_keys.empty?
1301
+ log_warn("Read concern has invalid keys: #{invalid_keys.join(',')}.")
1302
+ end
1303
+ end
1304
+
1305
+ if server_api = opts[:server_api]
1306
+ unless server_api.is_a?(Hash)
1307
+ raise ArgumentError, ":server_api value must be a hash: #{server_api}"
1308
+ end
1309
+
1310
+ extra_keys = server_api.keys - %w(version strict deprecation_errors)
1311
+ unless extra_keys.empty?
1312
+ raise ArgumentError, "Unknown keys under :server_api: #{extra_keys.map(&:inspect).join(', ')}"
1313
+ end
1314
+
1315
+ if version = server_api[:version]
1316
+ unless VALID_SERVER_API_VERSIONS.include?(version)
1317
+ raise ArgumentError, "Unknown server API version: #{version}"
1318
+ end
1319
+ end
1320
+ end
1321
+
1110
1322
  Lint.validate_underscore_read_preference(opts[:read])
1111
1323
  Lint.validate_read_concern_option(opts[:read_concern])
1112
1324
  opts.each.inject(Options::Redacted.new) do |_options, (k, v)|
1113
1325
  key = k.to_sym
1114
1326
  if VALID_OPTIONS.include?(key)
1115
1327
  validate_max_min_pool_size!(key, opts)
1328
+ validate_max_connecting!(key, opts)
1116
1329
  validate_read!(key, opts)
1117
1330
  if key == :compressors
1118
1331
  compressors = valid_compressors(v)
1332
+
1333
+ if compressors.include?('snappy')
1334
+ validate_snappy_compression!
1335
+ end
1336
+
1337
+ if compressors.include?('zstd')
1338
+ validate_zstd_compression!
1339
+ end
1340
+
1119
1341
  _options[key] = compressors unless compressors.empty?
1342
+ elsif key == :srv_max_hosts
1343
+ if v && (!v.is_a?(Integer) || v < 0)
1344
+ log_warn("#{v} is not a valid integer for srv_max_hosts")
1345
+ else
1346
+ _options[key] = v
1347
+ end
1120
1348
  else
1121
1349
  _options[key] = v
1122
1350
  end
@@ -1130,14 +1358,20 @@ module Mongo
1130
1358
  # Validates all options after they are set on the client.
1131
1359
  # This method is intended to catch combinations of options which are
1132
1360
  # not allowed.
1133
- def validate_options!(addresses = nil)
1361
+ def validate_options!(addresses = nil, is_srv: nil)
1134
1362
  if options[:write] && options[:write_concern] && options[:write] != options[:write_concern]
1135
1363
  raise ArgumentError, "If :write and :write_concern are both given, they must be identical: #{options.inspect}"
1136
1364
  end
1137
1365
 
1366
+ connect = options[:connect]&.to_sym
1367
+
1368
+ if connect && !%i(direct replica_set sharded load_balanced).include?(connect)
1369
+ raise ArgumentError, "Invalid :connect option value: #{connect}"
1370
+ end
1371
+
1138
1372
  if options[:direct_connection]
1139
- if options[:connect] && options[:connect].to_sym != :direct
1140
- raise ArgumentError, "Conflicting client options: direct_connection=true and connect=#{options[:connect]}"
1373
+ if connect && connect != :direct
1374
+ raise ArgumentError, "Conflicting client options: direct_connection=true and connect=#{connect}"
1141
1375
  end
1142
1376
  # When a new client is created, we get the list of seed addresses
1143
1377
  if addresses && addresses.length > 1
@@ -1149,8 +1383,36 @@ module Mongo
1149
1383
  end
1150
1384
  end
1151
1385
 
1152
- if options[:direct_connection] == false && options[:connect] && options[:connect].to_sym == :direct
1153
- raise ArgumentError, "Conflicting client options: direct_connection=false and connect=#{options[:connect]}"
1386
+ if options[:load_balanced]
1387
+ if addresses && addresses.length > 1
1388
+ raise ArgumentError, "load_balanced=true cannot be used with multiple seeds"
1389
+ end
1390
+
1391
+ if options[:direct_connection]
1392
+ raise ArgumentError, "direct_connection=true cannot be used with load_balanced=true"
1393
+ end
1394
+
1395
+ if connect && connect != :load_balanced
1396
+ raise ArgumentError, "connect=#{connect} cannot be used with load_balanced=true"
1397
+ end
1398
+
1399
+ if options[:replica_set]
1400
+ raise ArgumentError, "load_balanced=true cannot be used with replica_set option"
1401
+ end
1402
+ end
1403
+
1404
+ if connect == :load_balanced
1405
+ if addresses && addresses.length > 1
1406
+ raise ArgumentError, "connect=load_balanced cannot be used with multiple seeds"
1407
+ end
1408
+
1409
+ if options[:replica_set]
1410
+ raise ArgumentError, "connect=load_balanced cannot be used with replica_set option"
1411
+ end
1412
+ end
1413
+
1414
+ if options[:direct_connection] == false && connect && connect == :direct
1415
+ raise ArgumentError, "Conflicting client options: direct_connection=false and connect=#{connect}"
1154
1416
  end
1155
1417
 
1156
1418
  %i(connect_timeout socket_timeout).each do |key|
@@ -1206,6 +1468,26 @@ module Mongo
1206
1468
  end
1207
1469
  end
1208
1470
  end
1471
+
1472
+ if options[:srv_max_hosts] && options[:srv_max_hosts] > 0
1473
+ if options[:replica_set]
1474
+ raise ArgumentError, ":srv_max_hosts > 0 cannot be used with :replica_set option"
1475
+ end
1476
+
1477
+ if options[:load_balanced]
1478
+ raise ArgumentError, ":srv_max_hosts > 0 cannot be used with :load_balanced=true"
1479
+ end
1480
+ end
1481
+
1482
+ unless is_srv.nil? || is_srv
1483
+ if options[:srv_max_hosts]
1484
+ raise ArgumentError, ":srv_max_hosts cannot be used on non-SRV URI"
1485
+ end
1486
+
1487
+ if options[:srv_service_name]
1488
+ raise ArgumentError, ":srv_service_name cannot be used on non-SRV URI"
1489
+ end
1490
+ end
1209
1491
  end
1210
1492
 
1211
1493
  # Validates all authentication-related options after they are set on the client
@@ -1272,15 +1554,53 @@ module Mongo
1272
1554
  "This compressor will not be used.")
1273
1555
  false
1274
1556
  else
1557
+
1275
1558
  true
1276
1559
  end
1277
1560
  end
1278
1561
  end
1279
1562
 
1563
+ def validate_snappy_compression!
1564
+ return if defined?(Snappy)
1565
+ require 'snappy'
1566
+ rescue LoadError => e
1567
+ raise Error::UnmetDependency, "Cannot enable snappy compression because the snappy gem " \
1568
+ "has not been installed. Add \"gem 'snappy'\" to your Gemfile and run " \
1569
+ "\"bundle install\" to install the gem. (#{e.class}: #{e})"
1570
+ end
1571
+
1572
+ def validate_zstd_compression!
1573
+ return if defined?(Zstd)
1574
+ require 'zstd-ruby'
1575
+ rescue LoadError => e
1576
+ raise Error::UnmetDependency, "Cannot enable zstd compression because the zstd-ruby gem " \
1577
+ "has not been installed. Add \"gem 'zstd-ruby'\" to your Gemfile and run " \
1578
+ "\"bundle install\" to install the gem. (#{e.class}: #{e})"
1579
+ end
1580
+
1280
1581
  def validate_max_min_pool_size!(option, opts)
1281
1582
  if option == :min_pool_size && opts[:min_pool_size]
1282
1583
  max = opts[:max_pool_size] || Server::ConnectionPool::DEFAULT_MAX_SIZE
1283
- raise Error::InvalidMinPoolSize.new(opts[:min_pool_size], max) unless opts[:min_pool_size] <= max
1584
+ if max != 0 && opts[:min_pool_size] > max
1585
+ raise Error::InvalidMinPoolSize.new(opts[:min_pool_size], max)
1586
+ end
1587
+ end
1588
+ true
1589
+ end
1590
+
1591
+ # Validates whether the max_connecting option is valid.
1592
+ #
1593
+ # @param [ Symbol ] option The option to validate.
1594
+ # @param [ Hash ] opts The client options.
1595
+ #
1596
+ # @return [ true ] If the option is valid.
1597
+ # @raise [ Error::InvalidMaxConnecting ] If the option is invalid.
1598
+ def validate_max_connecting!(option, opts)
1599
+ if option == :max_connecting && opts.key?(:max_connecting)
1600
+ max_connecting = opts[:max_connecting] || Server::ConnectionPool::DEFAULT_MAX_CONNECTING
1601
+ if max_connecting <= 0
1602
+ raise Error::InvalidMaxConnecting.new(opts[:max_connecting])
1603
+ end
1284
1604
  end
1285
1605
  true
1286
1606
  end
@@ -1292,7 +1612,7 @@ module Mongo
1292
1612
  # for custom classes implementing key access ([]).
1293
1613
  # Instead reject common cases of strings and symbols.
1294
1614
  if read.is_a?(String) || read.is_a?(Symbol)
1295
- raise Error::InvalidReadOption.new(read, 'must be a hash')
1615
+ raise Error::InvalidReadOption.new(read, "the read preference must be specified as a hash: { mode: #{read.inspect} }")
1296
1616
  end
1297
1617
 
1298
1618
  if mode = read[:mode]
@@ -1304,5 +1624,11 @@ module Mongo
1304
1624
  end
1305
1625
  true
1306
1626
  end
1627
+
1628
+ def assert_not_closed
1629
+ if closed?
1630
+ raise Error::ClientClosed, "The client was closed and is not usable for operations. Call #reconnect to reset this client instance or create a new client instance"
1631
+ end
1632
+ end
1307
1633
  end
1308
1634
  end