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