mongo 2.13.1 → 2.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1899) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +36 -39
  4. data/Rakefile +49 -20
  5. data/bin/mongo_console +2 -0
  6. data/lib/mongo/active_support.rb +3 -0
  7. data/lib/mongo/address/ipv4.rb +4 -1
  8. data/lib/mongo/address/ipv6.rb +4 -1
  9. data/lib/mongo/address/unix.rb +3 -0
  10. data/lib/mongo/address/validator.rb +3 -0
  11. data/lib/mongo/address.rb +4 -1
  12. data/lib/mongo/auth/aws/conversation.rb +4 -8
  13. data/lib/mongo/auth/aws/credentials.rb +38 -0
  14. data/lib/mongo/auth/aws/credentials_cache.rb +75 -0
  15. data/lib/mongo/auth/aws/credentials_retriever.rb +174 -36
  16. data/lib/mongo/auth/aws/request.rb +3 -2
  17. data/lib/mongo/auth/aws.rb +8 -5
  18. data/lib/mongo/auth/base.rb +25 -9
  19. data/lib/mongo/auth/conversation_base.rb +35 -0
  20. data/lib/mongo/auth/cr/conversation.rb +9 -29
  21. data/lib/mongo/auth/cr.rb +3 -0
  22. data/lib/mongo/auth/credential_cache.rb +3 -0
  23. data/lib/mongo/auth/gssapi/conversation.rb +7 -15
  24. data/lib/mongo/auth/gssapi.rb +3 -0
  25. data/lib/mongo/auth/ldap/conversation.rb +6 -14
  26. data/lib/mongo/auth/ldap.rb +3 -0
  27. data/lib/mongo/auth/roles.rb +19 -16
  28. data/lib/mongo/auth/sasl_conversation_base.rb +4 -13
  29. data/lib/mongo/auth/scram/conversation.rb +3 -0
  30. data/lib/mongo/auth/scram.rb +5 -2
  31. data/lib/mongo/auth/scram256/conversation.rb +3 -0
  32. data/lib/mongo/auth/scram256.rb +3 -0
  33. data/lib/mongo/auth/scram_conversation_base.rb +10 -34
  34. data/lib/mongo/auth/stringprep/profiles/sasl.rb +3 -0
  35. data/lib/mongo/auth/stringprep/tables.rb +3 -0
  36. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +2 -2
  37. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +2 -1
  38. data/lib/mongo/auth/stringprep.rb +4 -1
  39. data/lib/mongo/auth/user/view.rb +19 -9
  40. data/lib/mongo/auth/user.rb +3 -0
  41. data/lib/mongo/auth/x509/conversation.rb +7 -25
  42. data/lib/mongo/auth/x509.rb +3 -0
  43. data/lib/mongo/auth.rb +16 -2
  44. data/lib/mongo/background_thread.rb +16 -2
  45. data/lib/mongo/bson.rb +3 -0
  46. data/lib/mongo/bulk_write/combineable.rb +3 -0
  47. data/lib/mongo/bulk_write/ordered_combiner.rb +3 -0
  48. data/lib/mongo/bulk_write/result.rb +13 -1
  49. data/lib/mongo/bulk_write/result_combiner.rb +5 -4
  50. data/lib/mongo/bulk_write/transformable.rb +3 -0
  51. data/lib/mongo/bulk_write/unordered_combiner.rb +3 -0
  52. data/lib/mongo/bulk_write/validatable.rb +3 -0
  53. data/lib/mongo/bulk_write.rb +156 -45
  54. data/lib/mongo/caching_cursor.rb +77 -0
  55. data/lib/mongo/client.rb +367 -41
  56. data/lib/mongo/client_encryption.rb +217 -10
  57. data/lib/mongo/cluster/periodic_executor.rb +7 -3
  58. data/lib/mongo/cluster/reapers/cursor_reaper.rb +101 -43
  59. data/lib/mongo/cluster/reapers/socket_reaper.rb +4 -1
  60. data/lib/mongo/cluster/sdam_flow.rb +67 -17
  61. data/lib/mongo/cluster/topology/base.rb +16 -9
  62. data/lib/mongo/cluster/topology/load_balanced.rb +102 -0
  63. data/lib/mongo/cluster/topology/no_replica_set_options.rb +3 -0
  64. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +3 -0
  65. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +3 -0
  66. data/lib/mongo/cluster/topology/sharded.rb +3 -0
  67. data/lib/mongo/cluster/topology/single.rb +4 -1
  68. data/lib/mongo/cluster/topology/unknown.rb +3 -0
  69. data/lib/mongo/cluster/topology.rb +31 -8
  70. data/lib/mongo/cluster.rb +210 -116
  71. data/lib/mongo/cluster_time.rb +3 -0
  72. data/lib/mongo/collection/helpers.rb +43 -0
  73. data/lib/mongo/collection/queryable_encryption.rb +162 -0
  74. data/lib/mongo/collection/view/aggregation.rb +94 -24
  75. data/lib/mongo/collection/view/builder/aggregation.rb +19 -17
  76. data/lib/mongo/collection/view/builder/map_reduce.rb +18 -49
  77. data/lib/mongo/collection/view/builder.rb +3 -4
  78. data/lib/mongo/collection/view/change_stream/retryable.rb +3 -0
  79. data/lib/mongo/collection/view/change_stream.rb +71 -22
  80. data/lib/mongo/collection/view/explainable.rb +30 -8
  81. data/lib/mongo/collection/view/immutable.rb +3 -0
  82. data/lib/mongo/collection/view/iterable.rb +121 -24
  83. data/lib/mongo/collection/view/map_reduce.rb +76 -25
  84. data/lib/mongo/collection/view/readable.rb +147 -67
  85. data/lib/mongo/collection/view/writable.rb +296 -162
  86. data/lib/mongo/collection/view.rb +42 -41
  87. data/lib/mongo/collection.rb +356 -89
  88. data/lib/mongo/condition_variable.rb +58 -0
  89. data/lib/mongo/config/options.rb +63 -0
  90. data/lib/mongo/config/validators/option.rb +27 -0
  91. data/lib/mongo/config.rb +43 -0
  92. data/lib/mongo/crypt/auto_decryption_context.rb +3 -0
  93. data/lib/mongo/crypt/auto_encrypter.rb +142 -15
  94. data/lib/mongo/crypt/auto_encryption_context.rb +3 -0
  95. data/lib/mongo/crypt/binary.rb +3 -0
  96. data/lib/mongo/crypt/binding.rb +717 -151
  97. data/lib/mongo/crypt/context.rb +74 -5
  98. data/lib/mongo/crypt/data_key_context.rb +15 -104
  99. data/lib/mongo/crypt/encryption_io.rb +101 -64
  100. data/lib/mongo/crypt/explicit_decryption_context.rb +3 -0
  101. data/lib/mongo/crypt/explicit_encrypter.rb +235 -29
  102. data/lib/mongo/crypt/explicit_encryption_context.rb +78 -21
  103. data/lib/mongo/crypt/explicit_encryption_expression_context.rb +30 -0
  104. data/lib/mongo/crypt/handle.rb +171 -86
  105. data/lib/mongo/crypt/hooks.rb +28 -2
  106. data/lib/mongo/crypt/kms/aws/credentials.rb +83 -0
  107. data/lib/mongo/crypt/kms/aws/master_document.rb +78 -0
  108. data/lib/mongo/crypt/kms/aws.rb +20 -0
  109. data/lib/mongo/crypt/kms/azure/access_token.rb +54 -0
  110. data/lib/mongo/crypt/kms/azure/credentials.rb +103 -0
  111. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +122 -0
  112. data/lib/mongo/crypt/kms/azure/master_document.rb +79 -0
  113. data/lib/mongo/crypt/kms/azure.rb +21 -0
  114. data/lib/mongo/crypt/kms/credentials.rb +96 -0
  115. data/lib/mongo/crypt/kms/gcp/credentials.rb +127 -0
  116. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +58 -0
  117. data/lib/mongo/crypt/kms/gcp/master_document.rb +99 -0
  118. data/lib/mongo/crypt/kms/gcp.rb +21 -0
  119. data/lib/mongo/crypt/kms/kmip/credentials.rb +68 -0
  120. data/lib/mongo/crypt/kms/kmip/master_document.rb +74 -0
  121. data/lib/mongo/crypt/kms/kmip.rb +19 -0
  122. data/lib/mongo/crypt/kms/local/credentials.rb +65 -0
  123. data/lib/mongo/crypt/kms/local/master_document.rb +43 -0
  124. data/lib/mongo/crypt/kms/local.rb +19 -0
  125. data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
  126. data/lib/mongo/crypt/kms.rb +122 -0
  127. data/lib/mongo/crypt/kms_context.rb +3 -0
  128. data/lib/mongo/crypt/rewrap_many_data_key_context.rb +46 -0
  129. data/lib/mongo/crypt/rewrap_many_data_key_result.rb +37 -0
  130. data/lib/mongo/crypt/status.rb +11 -2
  131. data/lib/mongo/crypt.rb +18 -0
  132. data/lib/mongo/cursor/kill_spec.rb +76 -0
  133. data/lib/mongo/cursor.rb +150 -43
  134. data/lib/mongo/database/view.rb +55 -10
  135. data/lib/mongo/database.rb +95 -25
  136. data/lib/mongo/dbref.rb +4 -105
  137. data/lib/mongo/distinguishing_semaphore.rb +4 -1
  138. data/lib/mongo/error/auth_error.rb +3 -0
  139. data/lib/mongo/error/bad_load_balancer_target.rb +26 -0
  140. data/lib/mongo/error/bulk_write_error.rb +49 -5
  141. data/lib/mongo/error/change_stream_resumable.rb +3 -0
  142. data/lib/mongo/error/client_closed.rb +24 -0
  143. data/lib/mongo/error/closed_stream.rb +3 -0
  144. data/lib/mongo/error/connection_check_out_timeout.rb +3 -0
  145. data/lib/mongo/error/connection_perished.rb +5 -0
  146. data/lib/mongo/error/connection_unavailable.rb +27 -0
  147. data/lib/mongo/error/credential_check_error.rb +3 -0
  148. data/lib/mongo/error/crypt_error.rb +3 -0
  149. data/lib/mongo/error/extra_file_chunk.rb +3 -0
  150. data/lib/mongo/error/failed_string_prep_validation.rb +3 -0
  151. data/lib/mongo/error/file_not_found.rb +3 -0
  152. data/lib/mongo/error/handshake_error.rb +3 -0
  153. data/lib/mongo/error/insufficient_iteration_count.rb +3 -0
  154. data/lib/mongo/error/internal_driver_error.rb +25 -0
  155. data/lib/mongo/error/invalid_address.rb +3 -0
  156. data/lib/mongo/error/invalid_application_name.rb +3 -0
  157. data/lib/mongo/error/invalid_bulk_operation.rb +3 -0
  158. data/lib/mongo/error/invalid_bulk_operation_type.rb +3 -0
  159. data/lib/mongo/error/invalid_collection_name.rb +3 -0
  160. data/lib/mongo/error/invalid_config_option.rb +21 -0
  161. data/lib/mongo/error/invalid_cursor_operation.rb +3 -0
  162. data/lib/mongo/error/invalid_database_name.rb +3 -0
  163. data/lib/mongo/error/invalid_document.rb +3 -0
  164. data/lib/mongo/error/invalid_file.rb +3 -0
  165. data/lib/mongo/error/invalid_file_revision.rb +3 -0
  166. data/lib/mongo/error/invalid_max_connecting.rb +28 -0
  167. data/lib/mongo/error/invalid_min_pool_size.rb +3 -0
  168. data/lib/mongo/error/invalid_nonce.rb +3 -0
  169. data/lib/mongo/error/invalid_read_concern.rb +31 -0
  170. data/lib/mongo/error/invalid_read_option.rb +4 -1
  171. data/lib/mongo/error/invalid_replacement_document.rb +30 -9
  172. data/lib/mongo/error/invalid_server_auth_host.rb +3 -0
  173. data/lib/mongo/error/invalid_server_auth_response.rb +3 -0
  174. data/lib/mongo/error/invalid_server_preference.rb +3 -0
  175. data/lib/mongo/error/invalid_session.rb +3 -0
  176. data/lib/mongo/error/invalid_signature.rb +3 -0
  177. data/lib/mongo/error/invalid_transaction_operation.rb +3 -0
  178. data/lib/mongo/error/invalid_txt_record.rb +3 -0
  179. data/lib/mongo/error/invalid_update_document.rb +30 -7
  180. data/lib/mongo/error/invalid_uri.rb +3 -0
  181. data/lib/mongo/error/invalid_write_concern.rb +3 -0
  182. data/lib/mongo/error/kms_error.rb +3 -0
  183. data/lib/mongo/error/labelable.rb +72 -0
  184. data/lib/mongo/error/lint_error.rb +3 -0
  185. data/lib/mongo/error/max_bson_size.rb +3 -0
  186. data/lib/mongo/error/max_message_size.rb +3 -0
  187. data/lib/mongo/error/mismatched_domain.rb +3 -0
  188. data/lib/mongo/error/missing_connection.rb +27 -0
  189. data/lib/mongo/error/missing_file_chunk.rb +11 -2
  190. data/lib/mongo/error/missing_password.rb +3 -0
  191. data/lib/mongo/error/missing_resume_token.rb +3 -0
  192. data/lib/mongo/error/missing_scram_server_signature.rb +3 -0
  193. data/lib/mongo/error/missing_service_id.rb +26 -0
  194. data/lib/mongo/error/mongocryptd_spawn_error.rb +3 -0
  195. data/lib/mongo/error/multi_index_drop.rb +3 -0
  196. data/lib/mongo/error/need_primary_server.rb +3 -0
  197. data/lib/mongo/error/no_server_available.rb +3 -0
  198. data/lib/mongo/error/no_service_connection_available.rb +49 -0
  199. data/lib/mongo/error/no_srv_records.rb +3 -0
  200. data/lib/mongo/error/notable.rb +24 -0
  201. data/lib/mongo/error/operation_failure.rb +57 -87
  202. data/lib/mongo/error/parser.rb +69 -13
  203. data/lib/mongo/error/pool_cleared_error.rb +40 -0
  204. data/lib/mongo/error/pool_closed_error.rb +6 -16
  205. data/lib/mongo/error/pool_error.rb +45 -0
  206. data/lib/mongo/error/pool_paused_error.rb +40 -0
  207. data/lib/mongo/error/raise_original_error.rb +3 -0
  208. data/lib/mongo/error/read_write_retryable.rb +108 -0
  209. data/lib/mongo/error/sdam_error_detection.rb +16 -5
  210. data/lib/mongo/error/server_api_conflict.rb +26 -0
  211. data/lib/mongo/error/server_api_not_supported.rb +27 -0
  212. data/lib/mongo/error/server_certificate_revoked.rb +25 -0
  213. data/lib/mongo/error/server_not_usable.rb +36 -0
  214. data/lib/mongo/error/session_ended.rb +3 -0
  215. data/lib/mongo/error/session_not_materialized.rb +29 -0
  216. data/lib/mongo/error/sessions_not_supported.rb +3 -0
  217. data/lib/mongo/error/snapshot_session_invalid_server_version.rb +31 -0
  218. data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +30 -0
  219. data/lib/mongo/error/socket_error.rb +3 -0
  220. data/lib/mongo/error/socket_timeout_error.rb +3 -0
  221. data/lib/mongo/error/unchangeable_collection_option.rb +3 -0
  222. data/lib/mongo/error/unexpected_chunk_length.rb +3 -0
  223. data/lib/mongo/error/unexpected_response.rb +3 -0
  224. data/lib/mongo/error/unknown_payload_type.rb +3 -0
  225. data/lib/mongo/error/unmet_dependency.rb +24 -0
  226. data/lib/mongo/error/unsupported_array_filters.rb +3 -0
  227. data/lib/mongo/error/unsupported_collation.rb +3 -0
  228. data/lib/mongo/error/unsupported_features.rb +3 -0
  229. data/lib/mongo/error/unsupported_message_type.rb +3 -0
  230. data/lib/mongo/error/unsupported_option.rb +17 -12
  231. data/lib/mongo/error/write_retryable.rb +3 -0
  232. data/lib/mongo/error.rb +31 -38
  233. data/lib/mongo/event/base.rb +3 -0
  234. data/lib/mongo/event/listeners.rb +3 -0
  235. data/lib/mongo/event/publisher.rb +3 -0
  236. data/lib/mongo/event/subscriber.rb +3 -0
  237. data/lib/mongo/event.rb +3 -0
  238. data/lib/mongo/grid/file/chunk.rb +6 -2
  239. data/lib/mongo/grid/file/info.rb +5 -1
  240. data/lib/mongo/grid/file.rb +3 -0
  241. data/lib/mongo/grid/fs_bucket.rb +86 -46
  242. data/lib/mongo/grid/stream/read.rb +28 -7
  243. data/lib/mongo/grid/stream/write.rb +3 -0
  244. data/lib/mongo/grid/stream.rb +3 -0
  245. data/lib/mongo/grid.rb +3 -0
  246. data/lib/mongo/id.rb +10 -5
  247. data/lib/mongo/index/view.rb +68 -58
  248. data/lib/mongo/index.rb +3 -0
  249. data/lib/mongo/lint.rb +5 -1
  250. data/lib/mongo/loggable.rb +5 -2
  251. data/lib/mongo/logger.rb +6 -3
  252. data/lib/mongo/monitoring/cmap_log_subscriber.rb +3 -0
  253. data/lib/mongo/monitoring/command_log_subscriber.rb +3 -0
  254. data/lib/mongo/monitoring/event/cmap/base.rb +3 -0
  255. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +3 -0
  256. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +3 -0
  257. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +3 -0
  258. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +3 -0
  259. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +3 -0
  260. data/lib/mongo/monitoring/event/cmap/connection_created.rb +3 -0
  261. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +3 -0
  262. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +17 -4
  263. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +3 -0
  264. data/lib/mongo/monitoring/event/cmap/pool_created.rb +3 -0
  265. data/lib/mongo/monitoring/event/cmap/pool_ready.rb +67 -0
  266. data/lib/mongo/monitoring/event/cmap.rb +4 -0
  267. data/lib/mongo/monitoring/event/command_failed.rb +38 -5
  268. data/lib/mongo/monitoring/event/command_started.rb +23 -3
  269. data/lib/mongo/monitoring/event/command_succeeded.rb +36 -3
  270. data/lib/mongo/monitoring/event/secure.rb +39 -5
  271. data/lib/mongo/monitoring/event/server_closed.rb +3 -0
  272. data/lib/mongo/monitoring/event/server_description_changed.rb +4 -1
  273. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +32 -18
  274. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +3 -0
  275. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +30 -16
  276. data/lib/mongo/monitoring/event/server_opening.rb +3 -0
  277. data/lib/mongo/monitoring/event/topology_changed.rb +3 -0
  278. data/lib/mongo/monitoring/event/topology_closed.rb +3 -0
  279. data/lib/mongo/monitoring/event/topology_opening.rb +3 -0
  280. data/lib/mongo/monitoring/event.rb +3 -0
  281. data/lib/mongo/monitoring/publishable.rb +38 -12
  282. data/lib/mongo/monitoring/sdam_log_subscriber.rb +3 -0
  283. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +3 -0
  284. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +3 -0
  285. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +3 -0
  286. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +3 -0
  287. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +3 -0
  288. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +3 -0
  289. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +3 -0
  290. data/lib/mongo/monitoring.rb +20 -8
  291. data/lib/mongo/operation/aggregate/op_msg.rb +3 -0
  292. data/lib/mongo/operation/aggregate/result.rb +12 -8
  293. data/lib/mongo/operation/aggregate.rb +4 -2
  294. data/lib/mongo/operation/collections_info/result.rb +24 -1
  295. data/lib/mongo/operation/collections_info.rb +10 -2
  296. data/lib/mongo/operation/command/op_msg.rb +9 -0
  297. data/lib/mongo/operation/command.rb +4 -2
  298. data/lib/mongo/operation/context.rb +138 -0
  299. data/lib/mongo/operation/count/op_msg.rb +12 -0
  300. data/lib/mongo/operation/count.rb +4 -2
  301. data/lib/mongo/operation/create/op_msg.rb +13 -0
  302. data/lib/mongo/operation/create.rb +4 -2
  303. data/lib/mongo/operation/create_index/op_msg.rb +21 -4
  304. data/lib/mongo/operation/create_index.rb +4 -2
  305. data/lib/mongo/operation/create_user/op_msg.rb +3 -0
  306. data/lib/mongo/operation/create_user.rb +4 -2
  307. data/lib/mongo/operation/delete/bulk_result.rb +5 -0
  308. data/lib/mongo/operation/delete/op_msg.rb +13 -1
  309. data/lib/mongo/operation/delete/result.rb +6 -0
  310. data/lib/mongo/operation/delete.rb +3 -2
  311. data/lib/mongo/operation/distinct/op_msg.rb +13 -0
  312. data/lib/mongo/operation/distinct.rb +4 -2
  313. data/lib/mongo/operation/drop/op_msg.rb +3 -0
  314. data/lib/mongo/operation/drop.rb +4 -2
  315. data/lib/mongo/operation/drop_database/op_msg.rb +3 -0
  316. data/lib/mongo/operation/drop_database.rb +4 -2
  317. data/lib/mongo/operation/drop_index/op_msg.rb +8 -1
  318. data/lib/mongo/operation/drop_index.rb +4 -2
  319. data/lib/mongo/operation/explain/op_msg.rb +17 -0
  320. data/lib/mongo/operation/explain/result.rb +6 -0
  321. data/lib/mongo/operation/explain.rb +4 -3
  322. data/lib/mongo/operation/find/builder/command.rb +111 -0
  323. data/lib/mongo/operation/find/builder/flags.rb +61 -0
  324. data/lib/mongo/operation/find/builder/modifiers.rb +89 -0
  325. data/lib/mongo/operation/find/builder.rb +20 -0
  326. data/lib/mongo/operation/find/op_msg.rb +15 -0
  327. data/lib/mongo/operation/find/result.rb +16 -0
  328. data/lib/mongo/operation/find.rb +5 -3
  329. data/lib/mongo/operation/get_more/command_builder.rb +42 -0
  330. data/lib/mongo/operation/get_more/op_msg.rb +4 -0
  331. data/lib/mongo/operation/get_more/result.rb +6 -0
  332. data/lib/mongo/operation/get_more.rb +5 -3
  333. data/lib/mongo/operation/indexes/op_msg.rb +3 -0
  334. data/lib/mongo/operation/indexes/result.rb +8 -0
  335. data/lib/mongo/operation/indexes.rb +4 -3
  336. data/lib/mongo/operation/insert/bulk_result.rb +13 -1
  337. data/lib/mongo/operation/insert/op_msg.rb +11 -5
  338. data/lib/mongo/operation/insert/result.rb +14 -3
  339. data/lib/mongo/operation/insert.rb +3 -2
  340. data/lib/mongo/operation/kill_cursors/command_builder.rb +35 -0
  341. data/lib/mongo/operation/kill_cursors/op_msg.rb +13 -0
  342. data/lib/mongo/operation/kill_cursors.rb +5 -3
  343. data/lib/mongo/operation/list_collections/op_msg.rb +7 -1
  344. data/lib/mongo/operation/list_collections/result.rb +12 -1
  345. data/lib/mongo/operation/list_collections.rb +4 -2
  346. data/lib/mongo/operation/map_reduce/op_msg.rb +4 -1
  347. data/lib/mongo/operation/map_reduce/result.rb +29 -0
  348. data/lib/mongo/operation/map_reduce.rb +4 -2
  349. data/lib/mongo/operation/op_msg_base.rb +3 -0
  350. data/lib/mongo/operation/parallel_scan/op_msg.rb +3 -0
  351. data/lib/mongo/operation/parallel_scan/result.rb +7 -0
  352. data/lib/mongo/operation/parallel_scan.rb +4 -2
  353. data/lib/mongo/operation/remove_user/op_msg.rb +3 -0
  354. data/lib/mongo/operation/remove_user.rb +4 -2
  355. data/lib/mongo/operation/result.rb +67 -11
  356. data/lib/mongo/operation/shared/bypass_document_validation.rb +4 -0
  357. data/lib/mongo/operation/shared/causal_consistency_supported.rb +4 -0
  358. data/lib/mongo/operation/shared/executable.rb +61 -17
  359. data/lib/mongo/operation/shared/executable_no_validate.rb +5 -2
  360. data/lib/mongo/operation/shared/executable_transaction_label.rb +3 -0
  361. data/lib/mongo/operation/shared/idable.rb +5 -1
  362. data/lib/mongo/operation/shared/limited.rb +4 -0
  363. data/lib/mongo/operation/shared/object_id_generator.rb +4 -0
  364. data/lib/mongo/operation/shared/op_msg_executable.rb +59 -0
  365. data/lib/mongo/operation/shared/polymorphic_lookup.rb +3 -0
  366. data/lib/mongo/operation/shared/polymorphic_result.rb +3 -0
  367. data/lib/mongo/operation/shared/read_preference_supported.rb +44 -37
  368. data/lib/mongo/operation/shared/response_handling.rb +32 -27
  369. data/lib/mongo/operation/shared/result/aggregatable.rb +4 -0
  370. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +3 -0
  371. data/lib/mongo/operation/shared/sessions_supported.rb +55 -20
  372. data/lib/mongo/operation/shared/specifiable.rb +15 -29
  373. data/lib/mongo/operation/shared/validatable.rb +87 -0
  374. data/lib/mongo/operation/shared/write.rb +28 -28
  375. data/lib/mongo/operation/shared/write_concern_supported.rb +4 -0
  376. data/lib/mongo/operation/update/bulk_result.rb +3 -0
  377. data/lib/mongo/operation/update/op_msg.rb +12 -4
  378. data/lib/mongo/operation/update/result.rb +11 -0
  379. data/lib/mongo/operation/update.rb +3 -2
  380. data/lib/mongo/operation/update_user/op_msg.rb +3 -0
  381. data/lib/mongo/operation/update_user.rb +4 -2
  382. data/lib/mongo/operation/users_info/op_msg.rb +3 -0
  383. data/lib/mongo/operation/users_info/result.rb +6 -0
  384. data/lib/mongo/operation/users_info.rb +4 -2
  385. data/lib/mongo/operation/write_command/op_msg.rb +43 -0
  386. data/lib/mongo/operation/write_command.rb +31 -0
  387. data/lib/mongo/operation.rb +17 -4
  388. data/lib/mongo/options/mapper.rb +3 -0
  389. data/lib/mongo/options/redacted.rb +3 -0
  390. data/lib/mongo/options.rb +3 -0
  391. data/lib/mongo/protocol/bit_vector.rb +6 -1
  392. data/lib/mongo/protocol/caching_hash.rb +52 -0
  393. data/lib/mongo/protocol/compressed.rb +54 -5
  394. data/lib/mongo/protocol/get_more.rb +3 -0
  395. data/lib/mongo/protocol/kill_cursors.rb +3 -0
  396. data/lib/mongo/protocol/message.rb +27 -10
  397. data/lib/mongo/protocol/msg.rb +61 -17
  398. data/lib/mongo/protocol/query.rb +53 -32
  399. data/lib/mongo/protocol/registry.rb +3 -0
  400. data/lib/mongo/protocol/reply.rb +3 -0
  401. data/lib/mongo/protocol/serializers.rb +27 -17
  402. data/lib/mongo/protocol.rb +4 -3
  403. data/lib/mongo/query_cache.rb +300 -0
  404. data/lib/mongo/retryable/base_worker.rb +91 -0
  405. data/lib/mongo/retryable/read_worker.rb +296 -0
  406. data/lib/mongo/retryable/write_worker.rb +364 -0
  407. data/lib/mongo/retryable.rb +33 -446
  408. data/lib/mongo/semaphore.rb +4 -1
  409. data/lib/mongo/server/app_metadata/environment.rb +259 -0
  410. data/lib/mongo/server/app_metadata/platform.rb +114 -0
  411. data/lib/mongo/server/app_metadata/truncator.rb +142 -0
  412. data/lib/mongo/server/app_metadata.rb +117 -94
  413. data/lib/mongo/server/connection.rb +126 -22
  414. data/lib/mongo/server/connection_base.rb +49 -21
  415. data/lib/mongo/server/connection_common.rb +76 -3
  416. data/lib/mongo/server/connection_pool/generation_manager.rb +115 -0
  417. data/lib/mongo/server/connection_pool/populator.rb +35 -30
  418. data/lib/mongo/server/connection_pool.rb +776 -206
  419. data/lib/mongo/server/description/features.rb +34 -25
  420. data/lib/mongo/server/description/load_balancer.rb +33 -0
  421. data/lib/mongo/server/description.rb +126 -17
  422. data/lib/mongo/server/monitor/app_metadata.rb +4 -1
  423. data/lib/mongo/server/monitor/connection.rb +66 -50
  424. data/lib/mongo/server/monitor.rb +62 -32
  425. data/lib/mongo/server/pending_connection.rb +77 -44
  426. data/lib/mongo/server/push_monitor/connection.rb +3 -0
  427. data/lib/mongo/server/push_monitor.rb +54 -20
  428. data/lib/mongo/server/round_trip_time_averager.rb +6 -3
  429. data/lib/mongo/server.rb +197 -67
  430. data/lib/mongo/server_selector/base.rb +65 -11
  431. data/lib/mongo/server_selector/nearest.rb +6 -4
  432. data/lib/mongo/server_selector/primary.rb +6 -4
  433. data/lib/mongo/server_selector/primary_preferred.rb +6 -4
  434. data/lib/mongo/server_selector/secondary.rb +6 -4
  435. data/lib/mongo/server_selector/secondary_preferred.rb +8 -11
  436. data/lib/mongo/server_selector.rb +3 -0
  437. data/lib/mongo/session/server_session.rb +3 -0
  438. data/lib/mongo/session/session_pool.rb +26 -2
  439. data/lib/mongo/session.rb +164 -38
  440. data/lib/mongo/socket/ocsp_cache.rb +99 -0
  441. data/lib/mongo/socket/ocsp_verifier.rb +344 -0
  442. data/lib/mongo/socket/ssl.rb +56 -24
  443. data/lib/mongo/socket/tcp.rb +6 -0
  444. data/lib/mongo/socket/unix.rb +3 -0
  445. data/lib/mongo/socket.rb +71 -16
  446. data/lib/mongo/srv/monitor.rb +10 -26
  447. data/lib/mongo/srv/resolver.rb +41 -13
  448. data/lib/mongo/srv/result.rb +3 -0
  449. data/lib/mongo/srv.rb +3 -0
  450. data/lib/mongo/timeout.rb +6 -1
  451. data/lib/mongo/topology_version.rb +4 -1
  452. data/lib/mongo/uri/options_mapper.rb +867 -0
  453. data/lib/mongo/uri/srv_protocol.rb +13 -11
  454. data/lib/mongo/uri.rb +100 -400
  455. data/lib/mongo/utils.rb +44 -1
  456. data/lib/mongo/version.rb +4 -1
  457. data/lib/mongo/write_concern/acknowledged.rb +3 -0
  458. data/lib/mongo/write_concern/base.rb +3 -0
  459. data/lib/mongo/write_concern/unacknowledged.rb +3 -0
  460. data/lib/mongo/write_concern.rb +3 -0
  461. data/lib/mongo.rb +58 -0
  462. data/mongo.gemspec +16 -7
  463. data/spec/NOTES.aws-auth.md +12 -7
  464. data/spec/README.md +106 -3
  465. data/spec/atlas/atlas_connectivity_spec.rb +3 -0
  466. data/spec/atlas/operations_spec.rb +5 -7
  467. data/spec/integration/auth_spec.rb +58 -15
  468. data/spec/integration/awaited_ismaster_spec.rb +9 -6
  469. data/spec/integration/aws_auth_credentials_cache_spec.rb +51 -0
  470. data/spec/integration/aws_auth_request_spec.rb +4 -1
  471. data/spec/integration/aws_credentials_retriever_spec.rb +34 -1
  472. data/spec/integration/aws_lambda_examples_spec.rb +68 -0
  473. data/spec/integration/bson_symbol_spec.rb +8 -3
  474. data/spec/integration/bulk_insert_spec.rb +3 -0
  475. data/spec/integration/bulk_write_error_message_spec.rb +74 -0
  476. data/spec/integration/bulk_write_spec.rb +67 -0
  477. data/spec/integration/change_stream_examples_spec.rb +3 -0
  478. data/spec/integration/change_stream_spec.rb +18 -9
  479. data/spec/integration/check_clean_slate_spec.rb +3 -0
  480. data/spec/integration/client_authentication_options_spec.rb +76 -36
  481. data/spec/integration/client_connectivity_spec.rb +4 -1
  482. data/spec/integration/client_construction_aws_auth_spec.rb +14 -2
  483. data/spec/integration/client_construction_spec.rb +153 -8
  484. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +13 -10
  485. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +172 -169
  486. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +3 -1
  487. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +3 -0
  488. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +43 -4
  489. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +148 -2
  490. data/spec/integration/client_side_encryption/automatic_data_encryption_keys_prose_spec.rb +153 -0
  491. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +6 -3
  492. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +6 -3
  493. data/spec/integration/client_side_encryption/client_close_spec.rb +4 -1
  494. data/spec/integration/client_side_encryption/corpus_spec.rb +67 -35
  495. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +42 -42
  496. data/spec/integration/client_side_encryption/data_key_spec.rb +101 -8
  497. data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +159 -0
  498. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +62 -0
  499. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +150 -0
  500. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +9 -6
  501. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +436 -0
  502. data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
  503. data/spec/integration/client_side_encryption/mongocryptd_prose_spec.rb +105 -0
  504. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +49 -0
  505. data/spec/integration/client_side_encryption/on_demand_azure_credentials_spec.rb +46 -0
  506. data/spec/integration/client_side_encryption/on_demand_gcp_credentials_spec.rb +47 -0
  507. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +114 -0
  508. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +536 -0
  509. data/spec/integration/client_side_encryption/rewrap_prose_spec.rb +114 -0
  510. data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +89 -0
  511. data/spec/integration/client_side_encryption/views_spec.rb +4 -1
  512. data/spec/integration/client_spec.rb +14 -4
  513. data/spec/integration/client_update_spec.rb +9 -2
  514. data/spec/integration/collection_indexes_prose_spec.rb +3 -0
  515. data/spec/integration/command_monitoring_spec.rb +64 -26
  516. data/spec/integration/command_spec.rb +5 -24
  517. data/spec/integration/connect_single_rs_name_spec.rb +6 -3
  518. data/spec/integration/connection/faas_env_spec.rb +62 -0
  519. data/spec/integration/connection_pool_populator_spec.rb +33 -8
  520. data/spec/integration/connection_spec.rb +58 -36
  521. data/spec/integration/crud_spec.rb +217 -1
  522. data/spec/integration/cursor_pinning_spec.rb +125 -0
  523. data/spec/integration/cursor_reaping_spec.rb +62 -19
  524. data/spec/integration/docs_examples_spec.rb +12 -2
  525. data/spec/integration/error_detection_spec.rb +3 -0
  526. data/spec/integration/fork_reconnect_spec.rb +73 -9
  527. data/spec/integration/get_more_spec.rb +4 -1
  528. data/spec/integration/grid_fs_bucket_spec.rb +7 -4
  529. data/spec/integration/heartbeat_events_spec.rb +8 -5
  530. data/spec/integration/map_reduce_spec.rb +81 -0
  531. data/spec/integration/mmapv1_spec.rb +3 -0
  532. data/spec/integration/mongos_pinning_spec.rb +3 -0
  533. data/spec/integration/ocsp_connectivity_spec.rb +29 -0
  534. data/spec/integration/ocsp_verifier_cache_spec.rb +191 -0
  535. data/spec/integration/ocsp_verifier_spec.rb +358 -0
  536. data/spec/integration/operation_failure_code_spec.rb +4 -1
  537. data/spec/integration/operation_failure_message_spec.rb +91 -0
  538. data/spec/integration/query_cache_spec.rb +1343 -0
  539. data/spec/integration/query_cache_transactions_spec.rb +193 -0
  540. data/spec/integration/read_concern_spec.rb +4 -1
  541. data/spec/integration/read_preference_spec.rb +20 -13
  542. data/spec/integration/reconnect_spec.rb +39 -13
  543. data/spec/integration/retryable_errors_spec.rb +4 -1
  544. data/spec/integration/retryable_reads_errors_spec.rb +110 -0
  545. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +5 -2
  546. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +5 -1
  547. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +3 -0
  548. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +3 -0
  549. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +3 -0
  550. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +5 -0
  551. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +3 -0
  552. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +3 -0
  553. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +3 -0
  554. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +3 -0
  555. data/spec/integration/retryable_writes/shared/supports_retries.rb +3 -0
  556. data/spec/integration/retryable_writes_errors_spec.rb +162 -1
  557. data/spec/integration/sdam_error_handling_spec.rb +159 -8
  558. data/spec/integration/sdam_events_spec.rb +94 -31
  559. data/spec/integration/sdam_prose_spec.rb +7 -4
  560. data/spec/integration/secondary_reads_spec.rb +103 -0
  561. data/spec/integration/server_description_spec.rb +3 -0
  562. data/spec/integration/server_monitor_spec.rb +7 -2
  563. data/spec/integration/server_selection_spec.rb +39 -0
  564. data/spec/integration/server_selector_spec.rb +29 -7
  565. data/spec/integration/server_spec.rb +27 -25
  566. data/spec/integration/shell_examples_spec.rb +3 -0
  567. data/spec/integration/size_limit_spec.rb +7 -1
  568. data/spec/integration/snappy_compression_spec.rb +28 -0
  569. data/spec/integration/snapshot_query_examples_spec.rb +129 -0
  570. data/spec/integration/srv_monitoring_spec.rb +82 -5
  571. data/spec/integration/srv_spec.rb +60 -0
  572. data/spec/integration/ssl_uri_options_spec.rb +3 -0
  573. data/spec/integration/step_down_spec.rb +28 -7
  574. data/spec/integration/time_zone_querying_spec.rb +3 -0
  575. data/spec/integration/transaction_pinning_spec.rb +134 -0
  576. data/spec/integration/transactions_api_examples_spec.rb +3 -0
  577. data/spec/integration/transactions_examples_spec.rb +26 -7
  578. data/spec/integration/truncated_utf8_spec.rb +26 -0
  579. data/spec/integration/versioned_api_examples_spec.rb +120 -0
  580. data/spec/integration/x509_auth_spec.rb +5 -2
  581. data/spec/integration/zlib_compression_spec.rb +4 -1
  582. data/spec/integration/zstd_compression_spec.rb +29 -0
  583. data/spec/kerberos/kerberos_spec.rb +3 -0
  584. data/spec/lite_spec_helper.rb +59 -16
  585. data/spec/mongo/address/ipv4_spec.rb +3 -0
  586. data/spec/mongo/address/ipv6_spec.rb +10 -0
  587. data/spec/mongo/address/unix_spec.rb +4 -0
  588. data/spec/mongo/address/validator_spec.rb +3 -0
  589. data/spec/mongo/address_spec.rb +33 -13
  590. data/spec/mongo/auth/aws/credential_cache_spec.rb +63 -0
  591. data/spec/mongo/auth/aws/credentials_retriever_spec.rb +90 -0
  592. data/spec/mongo/auth/aws/credentials_spec.rb +46 -0
  593. data/spec/mongo/auth/aws/request_region_spec.rb +3 -0
  594. data/spec/mongo/auth/aws/request_spec.rb +3 -0
  595. data/spec/mongo/auth/cr_spec.rb +6 -24
  596. data/spec/mongo/auth/gssapi/conversation_spec.rb +3 -0
  597. data/spec/mongo/auth/invalid_mechanism_spec.rb +3 -0
  598. data/spec/mongo/auth/ldap/conversation_spec.rb +4 -1
  599. data/spec/mongo/auth/ldap_spec.rb +10 -4
  600. data/spec/mongo/auth/scram/conversation_spec.rb +26 -23
  601. data/spec/mongo/auth/scram256/conversation_spec.rb +23 -20
  602. data/spec/mongo/auth/scram_negotiation_spec.rb +5 -1
  603. data/spec/mongo/auth/scram_spec.rb +5 -3
  604. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +3 -0
  605. data/spec/mongo/auth/stringprep_spec.rb +3 -0
  606. data/spec/mongo/auth/user/view_spec.rb +99 -1
  607. data/spec/mongo/auth/user_spec.rb +4 -1
  608. data/spec/mongo/auth/x509/conversation_spec.rb +6 -3
  609. data/spec/mongo/auth/x509_spec.rb +5 -3
  610. data/spec/mongo/auth_spec.rb +3 -0
  611. data/spec/mongo/bson_spec.rb +3 -0
  612. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +3 -0
  613. data/spec/mongo/bulk_write/result_spec.rb +18 -1
  614. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +3 -0
  615. data/spec/mongo/bulk_write_spec.rb +149 -25
  616. data/spec/mongo/caching_cursor_spec.rb +73 -0
  617. data/spec/mongo/client_construction_spec.rb +1112 -546
  618. data/spec/mongo/client_encryption_spec.rb +27 -30
  619. data/spec/mongo/client_spec.rb +445 -139
  620. data/spec/mongo/cluster/cursor_reaper_spec.rb +66 -23
  621. data/spec/mongo/cluster/periodic_executor_spec.rb +6 -1
  622. data/spec/mongo/cluster/socket_reaper_spec.rb +3 -0
  623. data/spec/mongo/cluster/topology/replica_set_spec.rb +13 -10
  624. data/spec/mongo/cluster/topology/sharded_spec.rb +6 -3
  625. data/spec/mongo/cluster/topology/single_spec.rb +20 -8
  626. data/spec/mongo/cluster/topology/unknown_spec.rb +4 -1
  627. data/spec/mongo/cluster/topology_spec.rb +4 -1
  628. data/spec/mongo/cluster_spec.rb +183 -192
  629. data/spec/mongo/cluster_time_spec.rb +3 -0
  630. data/spec/mongo/collection/view/aggregation_spec.rb +181 -83
  631. data/spec/mongo/collection/view/builder/find_command_spec.rb +7 -0
  632. data/spec/mongo/collection/view/builder/op_query_spec.rb +7 -0
  633. data/spec/mongo/collection/view/change_stream_resume_spec.rb +8 -3
  634. data/spec/mongo/collection/view/change_stream_spec.rb +18 -2
  635. data/spec/mongo/collection/view/explainable_spec.rb +90 -4
  636. data/spec/mongo/collection/view/immutable_spec.rb +3 -0
  637. data/spec/mongo/collection/view/iterable_spec.rb +3 -0
  638. data/spec/mongo/collection/view/map_reduce_spec.rb +46 -2
  639. data/spec/mongo/collection/view/readable_spec.rb +868 -1
  640. data/spec/mongo/collection/view/writable_spec.rb +147 -32
  641. data/spec/mongo/collection/view_spec.rb +3 -0
  642. data/spec/mongo/collection_crud_spec.rb +4471 -0
  643. data/spec/mongo/collection_ddl_spec.rb +587 -0
  644. data/spec/mongo/collection_spec.rb +106 -4839
  645. data/spec/mongo/condition_variable_spec.rb +104 -0
  646. data/spec/mongo/config/options_spec.rb +76 -0
  647. data/spec/mongo/config_spec.rb +74 -0
  648. data/spec/mongo/crypt/auto_decryption_context_spec.rb +21 -2
  649. data/spec/mongo/crypt/auto_encrypter_spec.rb +266 -5
  650. data/spec/mongo/crypt/auto_encryption_context_spec.rb +21 -2
  651. data/spec/mongo/crypt/binary_spec.rb +3 -5
  652. data/spec/mongo/crypt/binding/binary_spec.rb +3 -5
  653. data/spec/mongo/crypt/binding/context_spec.rb +71 -23
  654. data/spec/mongo/crypt/binding/helpers_spec.rb +3 -5
  655. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +21 -52
  656. data/spec/mongo/crypt/binding/status_spec.rb +3 -5
  657. data/spec/mongo/crypt/binding/version_spec.rb +50 -5
  658. data/spec/mongo/crypt/binding_unloaded_spec.rb +17 -0
  659. data/spec/mongo/crypt/data_key_context_spec.rb +45 -114
  660. data/spec/mongo/crypt/encryption_io_spec.rb +5 -0
  661. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +36 -2
  662. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +98 -2
  663. data/spec/mongo/crypt/handle_spec.rb +189 -155
  664. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +3 -0
  665. data/spec/mongo/crypt/hooks_spec.rb +30 -0
  666. data/spec/mongo/crypt/kms/azure/credentials_retriever_spec.rb +86 -0
  667. data/spec/mongo/crypt/kms/credentials_spec.rb +373 -0
  668. data/spec/mongo/crypt/kms_spec.rb +62 -0
  669. data/spec/mongo/crypt/status_spec.rb +3 -5
  670. data/spec/mongo/crypt_spec.rb +21 -0
  671. data/spec/mongo/cursor/builder/get_more_command_spec.rb +11 -2
  672. data/spec/mongo/cursor/builder/op_get_more_spec.rb +11 -2
  673. data/spec/mongo/cursor_spec.rb +230 -19
  674. data/spec/mongo/database_spec.rb +263 -25
  675. data/spec/mongo/distinguishing_semaphore_spec.rb +9 -6
  676. data/spec/mongo/error/bulk_write_error_spec.rb +6 -3
  677. data/spec/mongo/error/crypt_error_spec.rb +3 -0
  678. data/spec/mongo/error/max_bson_size_spec.rb +3 -0
  679. data/spec/mongo/error/no_server_available_spec.rb +4 -1
  680. data/spec/mongo/error/notable_spec.rb +3 -0
  681. data/spec/mongo/error/operation_failure_heavy_spec.rb +53 -1
  682. data/spec/mongo/error/operation_failure_spec.rb +94 -31
  683. data/spec/mongo/error/parser_spec.rb +40 -6
  684. data/spec/mongo/error/unsupported_option_spec.rb +3 -0
  685. data/spec/mongo/event/publisher_spec.rb +3 -0
  686. data/spec/mongo/event/subscriber_spec.rb +3 -0
  687. data/spec/mongo/grid/file/chunk_spec.rb +7 -4
  688. data/spec/mongo/grid/file/info_spec.rb +3 -0
  689. data/spec/mongo/grid/file_spec.rb +4 -1
  690. data/spec/mongo/grid/fs_bucket_spec.rb +40 -17
  691. data/spec/mongo/grid/stream/read_spec.rb +33 -10
  692. data/spec/mongo/grid/stream/write_spec.rb +6 -9
  693. data/spec/mongo/grid/stream_spec.rb +4 -1
  694. data/spec/mongo/id_spec.rb +4 -1
  695. data/spec/mongo/index/view_spec.rb +138 -4
  696. data/spec/mongo/lint_spec.rb +4 -1
  697. data/spec/mongo/logger_spec.rb +16 -11
  698. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +3 -0
  699. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +4 -1
  700. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +4 -1
  701. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +4 -1
  702. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +4 -1
  703. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +4 -1
  704. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +4 -1
  705. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +4 -1
  706. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +4 -1
  707. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +4 -1
  708. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +4 -1
  709. data/spec/mongo/monitoring/event/command_failed_spec.rb +59 -2
  710. data/spec/mongo/monitoring/event/command_started_spec.rb +3 -0
  711. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +46 -6
  712. data/spec/mongo/monitoring/event/secure_spec.rb +28 -4
  713. data/spec/mongo/monitoring/event/server_closed_spec.rb +4 -1
  714. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +3 -0
  715. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +4 -1
  716. data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +3 -0
  717. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +4 -1
  718. data/spec/mongo/monitoring/event/server_opening_spec.rb +4 -1
  719. data/spec/mongo/monitoring/event/topology_changed_spec.rb +4 -1
  720. data/spec/mongo/monitoring/event/topology_closed_spec.rb +4 -1
  721. data/spec/mongo/monitoring/event/topology_opening_spec.rb +4 -1
  722. data/spec/mongo/monitoring_spec.rb +3 -0
  723. data/spec/mongo/operation/aggregate/result_spec.rb +7 -2
  724. data/spec/mongo/operation/aggregate_spec.rb +5 -1
  725. data/spec/mongo/operation/collections_info_spec.rb +7 -1
  726. data/spec/mongo/operation/command_spec.rb +11 -5
  727. data/spec/mongo/operation/create/op_msg_spec.rb +244 -0
  728. data/spec/mongo/operation/create_index_spec.rb +9 -3
  729. data/spec/mongo/operation/create_user_spec.rb +9 -3
  730. data/spec/mongo/operation/delete/bulk_spec.rb +12 -6
  731. data/spec/mongo/operation/delete/op_msg_spec.rb +20 -8
  732. data/spec/mongo/operation/delete_spec.rb +13 -36
  733. data/spec/mongo/operation/drop_index_spec.rb +9 -2
  734. data/spec/mongo/operation/find/builder/flags_spec.rb +109 -0
  735. data/spec/mongo/operation/find/builder/modifiers_spec.rb +213 -0
  736. data/spec/mongo/operation/indexes_spec.rb +8 -1
  737. data/spec/mongo/operation/insert/bulk_spec.rb +14 -8
  738. data/spec/mongo/operation/insert/op_msg_spec.rb +25 -14
  739. data/spec/mongo/operation/insert_spec.rb +17 -43
  740. data/spec/mongo/operation/limited_spec.rb +3 -0
  741. data/spec/mongo/operation/map_reduce_spec.rb +8 -2
  742. data/spec/mongo/operation/read_preference_legacy_spec.rb +39 -42
  743. data/spec/mongo/operation/read_preference_op_msg_spec.rb +33 -5
  744. data/spec/mongo/operation/remove_user_spec.rb +9 -3
  745. data/spec/mongo/operation/result_spec.rb +30 -5
  746. data/spec/mongo/operation/specifiable_spec.rb +3 -0
  747. data/spec/mongo/operation/update/bulk_spec.rb +13 -7
  748. data/spec/mongo/operation/update/op_msg_spec.rb +20 -8
  749. data/spec/mongo/operation/update_spec.rb +12 -35
  750. data/spec/mongo/operation/update_user_spec.rb +7 -1
  751. data/spec/mongo/options/redacted_spec.rb +4 -1
  752. data/spec/mongo/protocol/caching_hash_spec.rb +37 -0
  753. data/spec/mongo/protocol/compressed_spec.rb +29 -12
  754. data/spec/mongo/protocol/get_more_spec.rb +3 -0
  755. data/spec/mongo/protocol/kill_cursors_spec.rb +3 -0
  756. data/spec/mongo/protocol/msg_spec.rb +48 -66
  757. data/spec/mongo/protocol/query_spec.rb +6 -3
  758. data/spec/mongo/protocol/registry_spec.rb +3 -0
  759. data/spec/mongo/protocol/reply_spec.rb +3 -0
  760. data/spec/mongo/query_cache_middleware_spec.rb +55 -0
  761. data/spec/mongo/query_cache_spec.rb +453 -0
  762. data/spec/mongo/retryable_spec.rb +42 -7
  763. data/spec/mongo/semaphore_spec.rb +9 -6
  764. data/spec/mongo/server/app_metadata/environment_spec.rb +209 -0
  765. data/spec/mongo/server/app_metadata/truncator_spec.rb +158 -0
  766. data/spec/mongo/server/app_metadata_spec.rb +55 -52
  767. data/spec/mongo/server/connection_auth_spec.rb +9 -10
  768. data/spec/mongo/server/connection_common_spec.rb +87 -0
  769. data/spec/mongo/server/connection_pool/populator_spec.rb +22 -3
  770. data/spec/mongo/server/connection_pool_spec.rb +635 -58
  771. data/spec/mongo/server/connection_spec.rb +226 -204
  772. data/spec/mongo/server/description/features_spec.rb +27 -0
  773. data/spec/mongo/server/description_query_methods_spec.rb +4 -1
  774. data/spec/mongo/server/description_spec.rb +625 -594
  775. data/spec/mongo/server/monitor/app_metadata_spec.rb +3 -1
  776. data/spec/mongo/server/monitor/connection_spec.rb +81 -9
  777. data/spec/mongo/server/monitor_spec.rb +31 -18
  778. data/spec/mongo/server/push_monitor_spec.rb +95 -0
  779. data/spec/mongo/server/round_trip_time_averager_spec.rb +3 -0
  780. data/spec/mongo/server_selector/nearest_spec.rb +8 -2
  781. data/spec/mongo/server_selector/primary_preferred_spec.rb +8 -2
  782. data/spec/mongo/server_selector/primary_spec.rb +8 -2
  783. data/spec/mongo/server_selector/secondary_preferred_spec.rb +14 -8
  784. data/spec/mongo/server_selector/secondary_spec.rb +8 -2
  785. data/spec/mongo/server_selector_spec.rb +143 -18
  786. data/spec/mongo/server_spec.rb +49 -6
  787. data/spec/mongo/session/server_session_spec.rb +3 -0
  788. data/spec/mongo/session/session_pool_spec.rb +45 -10
  789. data/spec/mongo/session_spec.rb +29 -6
  790. data/spec/mongo/session_transaction_spec.rb +17 -36
  791. data/spec/mongo/socket/ssl_spec.rb +91 -75
  792. data/spec/mongo/socket/tcp_spec.rb +3 -0
  793. data/spec/mongo/socket/unix_spec.rb +4 -0
  794. data/spec/mongo/socket_spec.rb +5 -2
  795. data/spec/mongo/srv/monitor_spec.rb +3 -0
  796. data/spec/mongo/srv/result_spec.rb +3 -0
  797. data/spec/mongo/timeout_spec.rb +3 -0
  798. data/spec/mongo/tls_context_hooks_spec.rb +40 -0
  799. data/spec/mongo/uri/options_mapper_spec.rb +1605 -0
  800. data/spec/mongo/uri/srv_protocol_spec.rb +330 -36
  801. data/spec/mongo/uri_option_parsing_spec.rb +52 -16
  802. data/spec/mongo/uri_spec.rb +238 -42
  803. data/spec/mongo/utils_spec.rb +42 -0
  804. data/spec/mongo/write_concern/acknowledged_spec.rb +3 -0
  805. data/spec/mongo/write_concern/unacknowledged_spec.rb +3 -0
  806. data/spec/mongo/write_concern_spec.rb +3 -0
  807. data/spec/runners/auth.rb +26 -2
  808. data/spec/runners/change_streams/outcome.rb +3 -0
  809. data/spec/runners/change_streams/spec.rb +4 -1
  810. data/spec/runners/change_streams/test.rb +5 -2
  811. data/spec/runners/cmap/verifier.rb +4 -1
  812. data/spec/runners/cmap.rb +192 -46
  813. data/spec/runners/command_monitoring.rb +4 -1
  814. data/spec/runners/connection_string.rb +48 -126
  815. data/spec/runners/crud/context.rb +3 -0
  816. data/spec/runners/crud/operation.rb +21 -7
  817. data/spec/runners/crud/outcome.rb +3 -0
  818. data/spec/runners/crud/requirement.rb +76 -6
  819. data/spec/runners/crud/spec.rb +9 -3
  820. data/spec/runners/crud/test.rb +4 -1
  821. data/spec/runners/crud/test_base.rb +4 -20
  822. data/spec/runners/crud/verifier.rb +20 -4
  823. data/spec/runners/crud.rb +23 -1
  824. data/spec/runners/gridfs.rb +4 -1
  825. data/spec/runners/read_write_concern_document.rb +4 -1
  826. data/spec/runners/sdam/verifier.rb +3 -0
  827. data/spec/runners/sdam.rb +9 -5
  828. data/spec/runners/server_selection.rb +5 -2
  829. data/spec/runners/server_selection_rtt.rb +5 -2
  830. data/spec/runners/transactions/operation.rb +30 -10
  831. data/spec/runners/transactions/spec.rb +5 -2
  832. data/spec/runners/transactions/test.rb +69 -21
  833. data/spec/runners/transactions.rb +14 -8
  834. data/spec/runners/unified/assertions.rb +379 -0
  835. data/spec/runners/unified/change_stream_operations.rb +52 -0
  836. data/spec/runners/unified/client_side_encryption_operations.rb +83 -0
  837. data/spec/runners/unified/crud_operations.rb +332 -0
  838. data/spec/runners/unified/ddl_operations.rb +255 -0
  839. data/spec/runners/unified/entity_map.rb +42 -0
  840. data/spec/runners/unified/error.rb +29 -0
  841. data/spec/runners/unified/event_subscriber.rb +110 -0
  842. data/spec/runners/unified/exceptions.rb +24 -0
  843. data/spec/runners/unified/grid_fs_operations.rb +79 -0
  844. data/spec/runners/unified/support_operations.rb +333 -0
  845. data/spec/runners/unified/test.rb +585 -0
  846. data/spec/runners/unified/test_group.rb +31 -0
  847. data/spec/runners/unified/thread_operations.rb +73 -0
  848. data/spec/runners/unified.rb +109 -0
  849. data/spec/shared/LICENSE +20 -0
  850. data/spec/shared/bin/get-mongodb-download-url +17 -0
  851. data/spec/shared/bin/s3-copy +45 -0
  852. data/spec/shared/bin/s3-upload +69 -0
  853. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  854. data/spec/shared/lib/mrss/cluster_config.rb +231 -0
  855. data/spec/shared/lib/mrss/constraints.rb +378 -0
  856. data/spec/shared/lib/mrss/docker_runner.rb +295 -0
  857. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  858. data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
  859. data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
  860. data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
  861. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  862. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  863. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  864. data/spec/shared/lib/mrss/utils.rb +37 -0
  865. data/spec/shared/share/Dockerfile.erb +330 -0
  866. data/spec/shared/share/haproxy-1.conf +16 -0
  867. data/spec/shared/share/haproxy-2.conf +17 -0
  868. data/spec/shared/shlib/config.sh +27 -0
  869. data/spec/shared/shlib/distro.sh +74 -0
  870. data/spec/shared/shlib/server.sh +416 -0
  871. data/spec/shared/shlib/set_env.sh +169 -0
  872. data/spec/solo/clean_exit_spec.rb +22 -0
  873. data/spec/spec_helper.rb +11 -5
  874. data/spec/spec_tests/auth_spec.rb +30 -13
  875. data/spec/spec_tests/change_streams_unified_spec.rb +14 -0
  876. data/spec/spec_tests/client_side_encryption_spec.rb +27 -1
  877. data/spec/spec_tests/client_side_encryption_unified_spec.rb +26 -0
  878. data/spec/spec_tests/cmap_spec.rb +41 -17
  879. data/spec/spec_tests/collection_management_spec.rb +13 -0
  880. data/spec/spec_tests/command_monitoring_unified_spec.rb +13 -0
  881. data/spec/spec_tests/connection_string_spec.rb +3 -0
  882. data/spec/spec_tests/crud_spec.rb +3 -10
  883. data/spec/spec_tests/crud_unified_spec.rb +13 -0
  884. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +41 -0
  885. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +103 -0
  886. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +120 -0
  887. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
  888. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1169 -0
  889. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1069 -0
  890. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +307 -0
  891. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +927 -0
  892. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
  893. data/spec/spec_tests/data/client_side_encryption/awsTemporary.yml +57 -0
  894. data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
  895. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +12 -2
  896. data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
  897. data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
  898. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
  899. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +5 -4
  900. data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
  901. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
  902. data/spec/spec_tests/data/client_side_encryption/create-and-createIndexes.yml +58 -0
  903. data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
  904. data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
  905. data/spec/spec_tests/data/client_side_encryption/explain.yml +1 -8
  906. data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
  907. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
  908. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
  909. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
  910. data/spec/spec_tests/data/client_side_encryption/fle2v2-BypassQueryAnalysis.yml +89 -0
  911. data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +82 -0
  912. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection-OldServer.yml +61 -0
  913. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +937 -0
  914. data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +66 -0
  915. data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +100 -0
  916. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +79 -0
  917. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +102 -0
  918. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +58 -0
  919. data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +200 -0
  920. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +96 -0
  921. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +89 -0
  922. data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +43 -0
  923. data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +44 -0
  924. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +241 -0
  925. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +422 -0
  926. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +182 -0
  927. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +239 -0
  928. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +235 -0
  929. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +252 -0
  930. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +1687 -0
  931. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +293 -0
  932. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +905 -0
  933. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +1684 -0
  934. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +1680 -0
  935. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +1697 -0
  936. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +329 -0
  937. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +424 -0
  938. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +226 -0
  939. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +327 -0
  940. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +319 -0
  941. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +336 -0
  942. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +913 -0
  943. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +292 -0
  944. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +518 -0
  945. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +911 -0
  946. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +907 -0
  947. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +924 -0
  948. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +325 -0
  949. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +424 -0
  950. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +224 -0
  951. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +323 -0
  952. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +319 -0
  953. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +338 -0
  954. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +241 -0
  955. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +423 -0
  956. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +182 -0
  957. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +239 -0
  958. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +235 -0
  959. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +254 -0
  960. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +241 -0
  961. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +422 -0
  962. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +182 -0
  963. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +239 -0
  964. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +235 -0
  965. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +254 -0
  966. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +43 -0
  967. data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +210 -0
  968. data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +169 -0
  969. data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
  970. data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
  971. data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
  972. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
  973. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
  974. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
  975. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +3 -1
  976. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
  977. data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
  978. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
  979. data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
  980. data/spec/spec_tests/data/client_side_encryption/unified/addKeyAltName.yml +194 -0
  981. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +67 -0
  982. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey.yml +309 -0
  983. data/spec/spec_tests/data/client_side_encryption/unified/deleteKey.yml +159 -0
  984. data/spec/spec_tests/data/client_side_encryption/unified/getKey.yml +105 -0
  985. data/spec/spec_tests/data/client_side_encryption/unified/getKeyByAltName.yml +104 -0
  986. data/spec/spec_tests/data/client_side_encryption/unified/getKeys.yml +122 -0
  987. data/spec/spec_tests/data/client_side_encryption/unified/removeKeyAltName.yml +157 -0
  988. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-decrypt_failure.yml +69 -0
  989. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-encrypt_failure.yml +122 -0
  990. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +432 -0
  991. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
  992. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
  993. data/spec/spec_tests/data/client_side_encryption/validatorAndPartialFieldExpression.yml +166 -0
  994. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +2 -0
  995. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +2 -0
  996. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +2 -0
  997. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +2 -0
  998. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +3 -1
  999. data/spec/spec_tests/data/cmap/pool-checkin.yml +5 -0
  1000. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +8 -2
  1001. data/spec/spec_tests/data/cmap/pool-checkout-custom-maxConnecting-is-enforced.yml +50 -0
  1002. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +2 -0
  1003. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-is-enforced.yml +81 -0
  1004. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-timeout.yml +71 -0
  1005. data/spec/spec_tests/data/cmap/pool-checkout-minPoolSize-connection-maxConnecting.yml +64 -0
  1006. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +2 -0
  1007. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +6 -0
  1008. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +8 -0
  1009. data/spec/spec_tests/data/cmap/pool-checkout-returned-connection-maxConnecting.yml +88 -0
  1010. data/spec/spec_tests/data/cmap/pool-clear-interrupt-immediately.yml +49 -0
  1011. data/spec/spec_tests/data/cmap/pool-clear-interrupting-pending-connections.yml +43 -0
  1012. data/spec/spec_tests/data/cmap/pool-clear-min-size.yml +41 -0
  1013. data/spec/spec_tests/data/cmap/pool-clear-paused.yml +18 -0
  1014. data/spec/spec_tests/data/cmap/pool-clear-ready.yml +39 -0
  1015. data/spec/spec_tests/data/cmap/pool-clear-schedule-run-interruptInUseConnections-false.yml +48 -0
  1016. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +2 -0
  1017. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +2 -0
  1018. data/spec/spec_tests/data/cmap/pool-create-min-size-error.yml +43 -0
  1019. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +12 -0
  1020. data/spec/spec_tests/data/cmap/pool-ready-ready.yml +22 -0
  1021. data/spec/spec_tests/data/cmap/pool-ready.yml +30 -0
  1022. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +2 -0
  1023. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +6 -1
  1024. data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
  1025. data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
  1026. data/spec/spec_tests/data/collection_management/modifyCollection-errorResponse.yml +59 -0
  1027. data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
  1028. data/spec/spec_tests/data/collection_management/timeseries-collection.yml +164 -0
  1029. data/spec/spec_tests/data/command_monitoring_unified/bulkWrite.yml +68 -0
  1030. data/spec/spec_tests/data/command_monitoring_unified/command.yml +50 -0
  1031. data/spec/spec_tests/data/command_monitoring_unified/deleteMany.yml +79 -0
  1032. data/spec/spec_tests/data/command_monitoring_unified/deleteOne.yml +79 -0
  1033. data/spec/spec_tests/data/command_monitoring_unified/find.yml +254 -0
  1034. data/spec/spec_tests/data/command_monitoring_unified/insertMany.yml +79 -0
  1035. data/spec/spec_tests/data/command_monitoring_unified/insertOne.yml +77 -0
  1036. data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
  1037. data/spec/spec_tests/data/command_monitoring_unified/redacted-commands.yml +348 -0
  1038. data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
  1039. data/spec/spec_tests/data/command_monitoring_unified/unacknowledgedBulkWrite.yml +55 -0
  1040. data/spec/spec_tests/data/command_monitoring_unified/updateMany.yml +87 -0
  1041. data/spec/spec_tests/data/command_monitoring_unified/updateOne.yml +118 -0
  1042. data/spec/spec_tests/data/command_monitoring_unified/writeConcernError.yml +80 -0
  1043. data/spec/spec_tests/data/connection_string/valid-warnings.yml +24 -0
  1044. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +2 -1
  1045. data/spec/spec_tests/data/crud/read/aggregate-out.yml +1 -0
  1046. data/spec/spec_tests/data/crud/read/count-collation.yml +2 -1
  1047. data/spec/spec_tests/data/crud/read/distinct-collation.yml +2 -1
  1048. data/spec/spec_tests/data/crud/read/find-collation.yml +2 -1
  1049. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +2 -1
  1050. data/spec/spec_tests/data/crud/write/bulkWrite.yml +26 -22
  1051. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +2 -1
  1052. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +2 -1
  1053. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +3 -2
  1054. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +2 -1
  1055. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +3 -2
  1056. data/spec/spec_tests/data/crud/write/insertMany.yml +26 -22
  1057. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +3 -2
  1058. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +2 -1
  1059. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +2 -1
  1060. data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
  1061. data/spec/spec_tests/data/crud_unified/aggregate-let.yml +138 -0
  1062. data/spec/spec_tests/data/crud_unified/aggregate-merge-errorResponse.yml +42 -0
  1063. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
  1064. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
  1065. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +155 -0
  1066. data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
  1067. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
  1068. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
  1069. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
  1070. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
  1071. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
  1072. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
  1073. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
  1074. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
  1075. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
  1076. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
  1077. data/spec/spec_tests/data/crud_unified/bulkWrite-errorResponse.yml +50 -0
  1078. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
  1079. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
  1080. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
  1081. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
  1082. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
  1083. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
  1084. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
  1085. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
  1086. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
  1087. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
  1088. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
  1089. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
  1090. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
  1091. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
  1092. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
  1093. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +151 -0
  1094. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
  1095. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
  1096. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
  1097. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
  1098. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
  1099. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
  1100. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +93 -0
  1101. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
  1102. data/spec/spec_tests/data/crud_unified/deleteOne-errorResponse.yml +46 -0
  1103. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
  1104. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
  1105. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
  1106. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
  1107. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +91 -0
  1108. data/spec/spec_tests/data/crud_unified/distinct-comment.yml +98 -0
  1109. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
  1110. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +181 -0
  1111. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
  1112. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
  1113. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
  1114. data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
  1115. data/spec/spec_tests/data/crud_unified/find-let.yml +71 -0
  1116. data/spec/spec_tests/data/crud_unified/find.yml +68 -0
  1117. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
  1118. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
  1119. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
  1120. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
  1121. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
  1122. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +86 -0
  1123. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
  1124. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
  1125. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
  1126. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
  1127. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
  1128. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
  1129. data/spec/spec_tests/data/crud_unified/findOneAndReplace-let.yml +94 -0
  1130. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
  1131. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
  1132. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-errorResponse.yml +69 -0
  1133. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
  1134. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
  1135. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
  1136. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
  1137. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-let.yml +96 -0
  1138. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
  1139. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
  1140. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
  1141. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
  1142. data/spec/spec_tests/data/crud_unified/insertOne-errorResponse.yml +46 -0
  1143. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
  1144. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
  1145. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
  1146. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
  1147. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
  1148. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
  1149. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
  1150. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
  1151. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
  1152. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
  1153. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
  1154. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
  1155. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +107 -0
  1156. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
  1157. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
  1158. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
  1159. data/spec/spec_tests/data/crud_unified/updateOne-errorResponse.yml +47 -0
  1160. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
  1161. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
  1162. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
  1163. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
  1164. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +102 -0
  1165. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
  1166. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +299 -0
  1167. data/spec/spec_tests/data/gridfs_unified/delete.yml +198 -0
  1168. data/spec/spec_tests/data/gridfs_unified/download.yml +241 -0
  1169. data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +159 -0
  1170. data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +92 -0
  1171. data/spec/spec_tests/data/gridfs_unified/upload.yml +288 -0
  1172. data/spec/spec_tests/data/load_balancers/event-monitoring.yml +99 -0
  1173. data/spec/spec_tests/data/load_balancers/lb-connection-establishment.yml +36 -0
  1174. data/spec/spec_tests/data/load_balancers/non-lb-connection-establishment.yml +56 -0
  1175. data/spec/spec_tests/data/load_balancers/server-selection.yml +50 -0
  1176. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/DefaultNoMaxStaleness.yml +2 -2
  1177. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +3 -3
  1178. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest.yml +3 -3
  1179. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +3 -3
  1180. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +2 -2
  1181. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +2 -2
  1182. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Secondary.yml +4 -4
  1183. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +2 -2
  1184. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +4 -4
  1185. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml +2 -2
  1186. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml +2 -2
  1187. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +3 -3
  1188. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat.yml +2 -2
  1189. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml +2 -2
  1190. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +2 -2
  1191. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +2 -2
  1192. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest.yml +3 -3
  1193. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +3 -3
  1194. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +2 -2
  1195. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +2 -2
  1196. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +2 -2
  1197. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +5 -5
  1198. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +3 -3
  1199. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +5 -5
  1200. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +3 -3
  1201. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +2 -2
  1202. data/spec/spec_tests/data/max_staleness/Sharded/SmallMaxStaleness.yml +2 -2
  1203. data/spec/spec_tests/data/max_staleness/Single/SmallMaxStaleness.yml +1 -1
  1204. data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +1 -1
  1205. data/spec/spec_tests/data/retryable_reads/legacy/aggregate-serverErrors.yml +157 -0
  1206. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-client.watch-serverErrors.yml +150 -0
  1207. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-client.watch.yml +62 -0
  1208. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-db.coll.watch-serverErrors.yml +150 -0
  1209. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-db.coll.watch.yml +66 -0
  1210. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-db.watch-serverErrors.yml +154 -0
  1211. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-db.watch.yml +62 -0
  1212. data/spec/spec_tests/data/retryable_reads/legacy/count-serverErrors.yml +150 -0
  1213. data/spec/spec_tests/data/retryable_reads/legacy/countDocuments-serverErrors.yml +150 -0
  1214. data/spec/spec_tests/data/retryable_reads/legacy/distinct-serverErrors.yml +156 -0
  1215. data/spec/spec_tests/data/retryable_reads/legacy/estimatedDocumentCount-serverErrors.yml +148 -0
  1216. data/spec/spec_tests/data/retryable_reads/legacy/find-serverErrors.yml +160 -0
  1217. data/spec/spec_tests/data/retryable_reads/legacy/findOne-serverErrors.yml +154 -0
  1218. data/spec/spec_tests/data/retryable_reads/legacy/gridfs-download-serverErrors.yml +173 -0
  1219. data/spec/spec_tests/data/retryable_reads/legacy/gridfs-downloadByName-serverErrors.yml +174 -0
  1220. data/spec/spec_tests/data/retryable_reads/legacy/listCollectionNames-serverErrors.yml +143 -0
  1221. data/spec/spec_tests/data/retryable_reads/legacy/listCollectionObjects-serverErrors.yml +144 -0
  1222. data/spec/spec_tests/data/retryable_reads/legacy/listCollections-serverErrors.yml +143 -0
  1223. data/spec/spec_tests/data/retryable_reads/legacy/listDatabaseNames-serverErrors.yml +143 -0
  1224. data/spec/spec_tests/data/retryable_reads/legacy/listDatabaseObjects-serverErrors.yml +144 -0
  1225. data/spec/spec_tests/data/retryable_reads/legacy/listDatabases-serverErrors.yml +144 -0
  1226. data/spec/spec_tests/data/retryable_reads/legacy/listIndexNames-serverErrors.yml +144 -0
  1227. data/spec/spec_tests/data/retryable_reads/legacy/listIndexNames.yml +60 -0
  1228. data/spec/spec_tests/data/retryable_reads/legacy/listIndexes-serverErrors.yml +145 -0
  1229. data/spec/spec_tests/data/retryable_reads/legacy/mapReduce.yml +62 -0
  1230. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +1342 -0
  1231. data/spec/spec_tests/data/retryable_writes/legacy/bulkWrite-serverErrors.yml +130 -0
  1232. data/spec/spec_tests/data/retryable_writes/legacy/bulkWrite.yml +402 -0
  1233. data/spec/spec_tests/data/retryable_writes/legacy/deleteOne-serverErrors.yml +73 -0
  1234. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndDelete-serverErrors.yml +74 -0
  1235. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndReplace-serverErrors.yml +80 -0
  1236. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndUpdate-serverErrors.yml +79 -0
  1237. data/spec/spec_tests/data/retryable_writes/legacy/insertMany-serverErrors.yml +84 -0
  1238. data/spec/spec_tests/data/retryable_writes/legacy/insertOne-serverErrors.yml +527 -0
  1239. data/spec/spec_tests/data/retryable_writes/legacy/replaceOne-serverErrors.yml +82 -0
  1240. data/spec/spec_tests/data/retryable_writes/legacy/updateOne-serverErrors.yml +82 -0
  1241. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +96 -0
  1242. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +785 -0
  1243. data/spec/spec_tests/data/retryable_writes/unified/insertOne-noWritesPerformedError.yml +54 -0
  1244. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +78 -0
  1245. data/spec/spec_tests/data/sdam/errors/error_handling_handshake.yml +2 -1
  1246. data/spec/spec_tests/data/sdam/errors/non-stale-network-error.yml +2 -1
  1247. data/spec/spec_tests/data/sdam/errors/non-stale-network-timeout-error.yml +2 -1
  1248. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.yml +2 -1
  1249. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.yml +2 -1
  1250. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-LegacyNotPrimary.yml +61 -0
  1251. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotPrimaryNoSecondaryOk.yml +61 -0
  1252. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotPrimaryOrSecondary.yml +61 -0
  1253. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotWritablePrimary.yml +61 -0
  1254. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.yml +2 -1
  1255. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-ShutdownInProgress.yml +2 -1
  1256. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.yml +2 -1
  1257. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.yml +2 -1
  1258. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-LegacyNotPrimary.yml +52 -0
  1259. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotPrimaryNoSecondaryOk.yml +52 -0
  1260. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotPrimaryOrSecondary.yml +52 -0
  1261. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotWritablePrimary.yml +52 -0
  1262. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.yml +2 -1
  1263. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-ShutdownInProgress.yml +2 -1
  1264. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.yml +2 -1
  1265. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.yml +2 -1
  1266. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-LegacyNotPrimary.yml +61 -0
  1267. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryNoSecondaryOk.yml +61 -0
  1268. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryOrSecondary.yml +61 -0
  1269. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotWritablePrimary.yml +61 -0
  1270. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.yml +2 -1
  1271. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.yml +2 -1
  1272. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedAtShutdown.yml +2 -1
  1273. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedDueToReplStateChange.yml +2 -1
  1274. data/spec/spec_tests/data/sdam/errors/post-42-LegacyNotPrimary.yml +47 -0
  1275. data/spec/spec_tests/data/sdam/errors/post-42-NotPrimaryNoSecondaryOk.yml +47 -0
  1276. data/spec/spec_tests/data/sdam/errors/post-42-NotPrimaryOrSecondary.yml +47 -0
  1277. data/spec/spec_tests/data/sdam/errors/post-42-NotWritablePrimary.yml +47 -0
  1278. data/spec/spec_tests/data/sdam/errors/post-42-PrimarySteppedDown.yml +2 -1
  1279. data/spec/spec_tests/data/sdam/errors/post-42-ShutdownInProgress.yml +2 -1
  1280. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedAtShutdown.yml +2 -1
  1281. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedDueToReplStateChange.yml +2 -1
  1282. data/spec/spec_tests/data/sdam/errors/pre-42-LegacyNotPrimary.yml +47 -0
  1283. data/spec/spec_tests/data/sdam/errors/pre-42-NotPrimaryNoSecondaryOk.yml +47 -0
  1284. data/spec/spec_tests/data/sdam/errors/pre-42-NotPrimaryOrSecondary.yml +47 -0
  1285. data/spec/spec_tests/data/sdam/errors/pre-42-NotWritablePrimary.yml +47 -0
  1286. data/spec/spec_tests/data/sdam/errors/pre-42-PrimarySteppedDown.yml +2 -1
  1287. data/spec/spec_tests/data/sdam/errors/pre-42-ShutdownInProgress.yml +2 -1
  1288. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +54 -0
  1289. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedAtShutdown.yml +4 -2
  1290. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedDueToReplStateChange.yml +4 -2
  1291. data/spec/spec_tests/data/sdam/errors/stale-generation-NotPrimaryNoSecondaryOk.yml +91 -0
  1292. data/spec/spec_tests/data/sdam/errors/stale-generation-NotPrimaryOrSecondary.yml +91 -0
  1293. data/spec/spec_tests/data/sdam/errors/stale-generation-NotWritablePrimary.yml +91 -0
  1294. data/spec/spec_tests/data/sdam/errors/stale-generation-PrimarySteppedDown.yml +4 -2
  1295. data/spec/spec_tests/data/sdam/errors/stale-generation-ShutdownInProgress.yml +4 -2
  1296. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.yml +4 -2
  1297. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.yml +4 -2
  1298. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-LegacyNotPrimary.yml +91 -0
  1299. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotPrimaryNoSecondaryOk.yml +91 -0
  1300. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotPrimaryOrSecondary.yml +91 -0
  1301. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotWritablePrimary.yml +91 -0
  1302. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.yml +4 -2
  1303. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.yml +4 -2
  1304. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-network.yml +6 -4
  1305. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-timeout.yml +6 -4
  1306. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.yml +4 -2
  1307. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.yml +4 -2
  1308. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-LegacyNotPrimary.yml +91 -0
  1309. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryNoSecondaryOk.yml +91 -0
  1310. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryOrSecondary.yml +91 -0
  1311. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotWritablePrimary.yml +91 -0
  1312. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.yml +4 -2
  1313. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.yml +4 -2
  1314. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-network.yml +6 -4
  1315. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-timeout.yml +6 -4
  1316. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedAtShutdown.yml +2 -1
  1317. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedDueToReplStateChange.yml +2 -1
  1318. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-LegacyNotPrimary.yml +65 -0
  1319. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotPrimaryNoSecondaryOk.yml +65 -0
  1320. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotPrimaryOrSecondary.yml +65 -0
  1321. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotWritablePrimary.yml +65 -0
  1322. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-PrimarySteppedDown.yml +2 -1
  1323. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-ShutdownInProgress.yml +2 -1
  1324. data/spec/spec_tests/data/sdam/errors/write_errors_ignored.yml +42 -0
  1325. data/spec/spec_tests/data/sdam/load-balanced/discover_load_balancer.yml +25 -0
  1326. data/spec/spec_tests/data/sdam/rs/compatible.yml +4 -2
  1327. data/spec/spec_tests/data/sdam/rs/compatible_unknown.yml +2 -1
  1328. data/spec/spec_tests/data/sdam/rs/discover_arbiters.yml +2 -1
  1329. data/spec/spec_tests/data/sdam/rs/discover_arbiters_replicaset.yml +2 -1
  1330. data/spec/spec_tests/data/sdam/rs/discover_ghost.yml +2 -1
  1331. data/spec/spec_tests/data/sdam/rs/discover_ghost_replicaset.yml +2 -1
  1332. data/spec/spec_tests/data/sdam/rs/discover_hidden.yml +2 -1
  1333. data/spec/spec_tests/data/sdam/rs/discover_hidden_replicaset.yml +2 -1
  1334. data/spec/spec_tests/data/sdam/rs/discover_passives.yml +4 -2
  1335. data/spec/spec_tests/data/sdam/rs/discover_passives_replicaset.yml +4 -2
  1336. data/spec/spec_tests/data/sdam/rs/discover_primary.yml +2 -1
  1337. data/spec/spec_tests/data/sdam/rs/discover_primary_replicaset.yml +2 -1
  1338. data/spec/spec_tests/data/sdam/rs/discover_rsother.yml +2 -1
  1339. data/spec/spec_tests/data/sdam/rs/discover_rsother_replicaset.yml +4 -2
  1340. data/spec/spec_tests/data/sdam/rs/discover_secondary.yml +2 -1
  1341. data/spec/spec_tests/data/sdam/rs/discover_secondary_replicaset.yml +2 -1
  1342. data/spec/spec_tests/data/sdam/rs/discovery.yml +8 -4
  1343. data/spec/spec_tests/data/sdam/rs/electionId_precedence_setVersion.yml +62 -0
  1344. data/spec/spec_tests/data/sdam/rs/equal_electionids.yml +4 -2
  1345. data/spec/spec_tests/data/sdam/rs/hosts_differ_from_seeds.yml +2 -1
  1346. data/spec/spec_tests/data/sdam/rs/incompatible_arbiter.yml +3 -1
  1347. data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +3 -1
  1348. data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +3 -1
  1349. data/spec/spec_tests/data/sdam/rs/ls_timeout.yml +12 -6
  1350. data/spec/spec_tests/data/sdam/rs/member_reconfig.yml +4 -2
  1351. data/spec/spec_tests/data/sdam/rs/member_standalone.yml +4 -2
  1352. data/spec/spec_tests/data/sdam/rs/new_primary.yml +4 -2
  1353. data/spec/spec_tests/data/sdam/rs/new_primary_new_electionid.yml +6 -3
  1354. data/spec/spec_tests/data/sdam/rs/new_primary_new_setversion.yml +6 -3
  1355. data/spec/spec_tests/data/sdam/rs/new_primary_wrong_set_name.yml +4 -2
  1356. data/spec/spec_tests/data/sdam/rs/non_rs_member.yml +1 -0
  1357. data/spec/spec_tests/data/sdam/rs/normalize_case.yml +2 -1
  1358. data/spec/spec_tests/data/sdam/rs/normalize_case_me.yml +4 -2
  1359. data/spec/spec_tests/data/sdam/rs/null_election_id-pre-6.0.yml +175 -0
  1360. data/spec/spec_tests/data/sdam/rs/null_election_id.yml +28 -22
  1361. data/spec/spec_tests/data/sdam/rs/primary_becomes_ghost.yml +4 -2
  1362. data/spec/spec_tests/data/sdam/rs/primary_becomes_mongos.yml +4 -2
  1363. data/spec/spec_tests/data/sdam/rs/primary_becomes_standalone.yml +2 -1
  1364. data/spec/spec_tests/data/sdam/rs/primary_changes_set_name.yml +4 -2
  1365. data/spec/spec_tests/data/sdam/rs/primary_disconnect.yml +2 -1
  1366. data/spec/spec_tests/data/sdam/rs/primary_disconnect_electionid.yml +10 -5
  1367. data/spec/spec_tests/data/sdam/rs/primary_disconnect_setversion.yml +10 -5
  1368. data/spec/spec_tests/data/sdam/rs/primary_hint_from_secondary_with_mismatched_me.yml +4 -2
  1369. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me.yml +2 -1
  1370. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me_not_removed.yml +5 -3
  1371. data/spec/spec_tests/data/sdam/rs/primary_reports_new_member.yml +8 -4
  1372. data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +4 -2
  1373. data/spec/spec_tests/data/sdam/rs/primary_wrong_set_name.yml +2 -1
  1374. data/spec/spec_tests/data/sdam/rs/repeated.yml +9 -5
  1375. data/spec/spec_tests/data/sdam/rs/replicaset_rsnp.yml +2 -1
  1376. data/spec/spec_tests/data/sdam/rs/response_from_removed.yml +4 -2
  1377. data/spec/spec_tests/data/sdam/rs/sec_not_auth.yml +4 -2
  1378. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0-pre-6.0.yml +87 -0
  1379. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +5 -3
  1380. data/spec/spec_tests/data/sdam/rs/secondary_mismatched_me.yml +2 -1
  1381. data/spec/spec_tests/data/sdam/rs/secondary_wrong_set_name.yml +2 -1
  1382. data/spec/spec_tests/data/sdam/rs/secondary_wrong_set_name_with_primary.yml +4 -2
  1383. data/spec/spec_tests/data/sdam/rs/set_version_can_rollback.yml +101 -0
  1384. data/spec/spec_tests/data/sdam/rs/setversion_equal_max_without_electionid.yml +78 -0
  1385. data/spec/spec_tests/data/sdam/rs/setversion_greaterthan_max_without_electionid.yml +79 -0
  1386. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid-pre-6.0.yml +79 -0
  1387. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +13 -12
  1388. data/spec/spec_tests/data/sdam/rs/stepdown_change_set_name.yml +4 -2
  1389. data/spec/spec_tests/data/sdam/rs/too_new.yml +4 -2
  1390. data/spec/spec_tests/data/sdam/rs/too_old.yml +4 -2
  1391. data/spec/spec_tests/data/sdam/rs/topology_version_equal.yml +4 -2
  1392. data/spec/spec_tests/data/sdam/rs/topology_version_greater.yml +10 -5
  1393. data/spec/spec_tests/data/sdam/rs/topology_version_less.yml +4 -2
  1394. data/spec/spec_tests/data/sdam/rs/unexpected_mongos.yml +2 -1
  1395. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid-pre-6.0.yml +117 -0
  1396. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +29 -24
  1397. data/spec/spec_tests/data/sdam/rs/wrong_set_name.yml +2 -1
  1398. data/spec/spec_tests/data/sdam/sharded/compatible.yml +4 -2
  1399. data/spec/spec_tests/data/sdam/sharded/discover_single_mongos.yml +2 -1
  1400. data/spec/spec_tests/data/sdam/sharded/ls_timeout_mongos.yml +9 -5
  1401. data/spec/spec_tests/data/sdam/sharded/mongos_disconnect.yml +6 -3
  1402. data/spec/spec_tests/data/sdam/sharded/multiple_mongoses.yml +4 -2
  1403. data/spec/spec_tests/data/sdam/sharded/non_mongos_removed.yml +4 -2
  1404. data/spec/spec_tests/data/sdam/sharded/too_new.yml +4 -2
  1405. data/spec/spec_tests/data/sdam/sharded/too_old.yml +4 -2
  1406. data/spec/spec_tests/data/sdam/single/compatible.yml +2 -1
  1407. data/spec/spec_tests/data/sdam/single/direct_connection_external_ip.yml +2 -1
  1408. data/spec/spec_tests/data/sdam/single/direct_connection_mongos.yml +2 -1
  1409. data/spec/spec_tests/data/sdam/single/direct_connection_replicaset.yml +2 -1
  1410. data/spec/spec_tests/data/sdam/single/direct_connection_rsarbiter.yml +2 -1
  1411. data/spec/spec_tests/data/sdam/single/direct_connection_rsprimary.yml +2 -1
  1412. data/spec/spec_tests/data/sdam/single/direct_connection_rssecondary.yml +2 -1
  1413. data/spec/spec_tests/data/sdam/single/direct_connection_standalone.yml +2 -1
  1414. data/spec/spec_tests/data/sdam/single/direct_connection_wrong_set_name.yml +4 -2
  1415. data/spec/spec_tests/data/sdam/single/discover_standalone.yml +2 -1
  1416. data/spec/spec_tests/data/sdam/single/ls_timeout_standalone.yml +2 -1
  1417. data/spec/spec_tests/data/sdam/single/not_ok_response.yml +5 -3
  1418. data/spec/spec_tests/data/sdam/single/standalone_removed.yml +2 -1
  1419. data/spec/spec_tests/data/sdam/single/standalone_using_legacy_hello.yml +34 -0
  1420. data/spec/spec_tests/data/sdam/single/too_new.yml +2 -1
  1421. data/spec/spec_tests/data/sdam/single/too_old.yml +2 -1
  1422. data/spec/spec_tests/data/sdam/single/too_old_then_upgraded.yml +4 -2
  1423. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +2 -4
  1424. data/spec/spec_tests/data/sdam_monitoring/load_balancer.yml +65 -0
  1425. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +40 -40
  1426. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +40 -40
  1427. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +4 -3
  1428. data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +3 -2
  1429. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +3 -3
  1430. data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +2 -2
  1431. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +4 -4
  1432. data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +2 -2
  1433. data/spec/spec_tests/data/sdam_unified/auth-error.yml +130 -0
  1434. data/spec/spec_tests/data/sdam_unified/auth-misc-command-error.yml +132 -0
  1435. data/spec/spec_tests/data/sdam_unified/auth-network-error.yml +132 -0
  1436. data/spec/spec_tests/data/sdam_unified/auth-network-timeout-error.yml +138 -0
  1437. data/spec/spec_tests/data/sdam_unified/auth-shutdown-error.yml +133 -0
  1438. data/spec/spec_tests/data/sdam_unified/cancel-server-check.yml +143 -0
  1439. data/spec/spec_tests/data/sdam_unified/connectTimeoutMS.yml +130 -0
  1440. data/spec/spec_tests/data/sdam_unified/find-network-error.yml +135 -0
  1441. data/spec/spec_tests/data/sdam_unified/find-network-timeout-error.yml +119 -0
  1442. data/spec/spec_tests/data/sdam_unified/find-shutdown-error.yml +163 -0
  1443. data/spec/spec_tests/data/sdam_unified/hello-command-error.yml +233 -0
  1444. data/spec/spec_tests/data/sdam_unified/hello-network-error.yml +228 -0
  1445. data/spec/spec_tests/data/sdam_unified/hello-timeout.yml +318 -0
  1446. data/spec/spec_tests/data/sdam_unified/insert-network-error.yml +137 -0
  1447. data/spec/spec_tests/data/sdam_unified/insert-shutdown-error.yml +162 -0
  1448. data/spec/spec_tests/data/sdam_unified/interruptInUse-pool-clear.yml +340 -0
  1449. data/spec/spec_tests/data/sdam_unified/minPoolSize-error.yml +125 -0
  1450. data/spec/spec_tests/data/sdam_unified/pool-cleared-error.yml +239 -0
  1451. data/spec/spec_tests/data/sdam_unified/rediscover-quickly-after-step-down.yml +144 -0
  1452. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +14 -0
  1453. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
  1454. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +6 -0
  1455. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-multiple-hosts.yml +5 -0
  1456. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +11 -0
  1457. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
  1458. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
  1459. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +11 -0
  1460. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +11 -0
  1461. data/spec/spec_tests/data/seed_list_discovery/replica-set/encoded-userinfo-and-db.yml +15 -0
  1462. data/spec/spec_tests/data/seed_list_discovery/replica-set/loadBalanced-false-txt.yml +10 -0
  1463. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
  1464. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
  1465. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
  1466. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
  1467. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
  1468. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
  1469. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
  1470. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
  1471. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-admin-database.yml +13 -0
  1472. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-auth.yml +12 -0
  1473. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
  1474. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
  1475. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
  1476. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
  1477. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
  1478. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
  1479. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
  1480. data/spec/spec_tests/data/sessions_unified/implicit-sessions-default-causal-consistency.yml +119 -0
  1481. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +75 -0
  1482. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-server-error.yml +102 -0
  1483. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +258 -0
  1484. data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +482 -0
  1485. data/spec/spec_tests/data/transactions/error-labels.yml +4 -1
  1486. data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
  1487. data/spec/spec_tests/data/transactions/mongos-pin-auto.yml +3 -0
  1488. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +3 -1
  1489. data/spec/spec_tests/data/transactions/pin-mongos.yml +6 -3
  1490. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -7
  1491. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -7
  1492. data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
  1493. data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +172 -0
  1494. data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +118 -0
  1495. data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +118 -0
  1496. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor-malformed.yml +31 -0
  1497. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor.yml +31 -0
  1498. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError-malformed.yml +34 -0
  1499. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError.yml +35 -0
  1500. data/spec/spec_tests/data/unified/valid-fail/operation-failure.yml +31 -0
  1501. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
  1502. data/spec/spec_tests/data/unified/valid-pass/assertNumberConnectionsCheckedOut.yml +17 -0
  1503. data/spec/spec_tests/data/unified/valid-pass/collectionData-createOptions.yml +37 -0
  1504. data/spec/spec_tests/data/unified/valid-pass/entity-client-cmap-events.yml +40 -0
  1505. data/spec/spec_tests/data/unified/valid-pass/entity-client-storeEventsAsEntities.yml +37 -0
  1506. data/spec/spec_tests/data/unified/valid-pass/expectedError-errorResponse.yml +39 -0
  1507. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-eventType.yml +66 -0
  1508. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
  1509. data/spec/spec_tests/data/unified/valid-pass/ignoreResultAndError.yml +34 -0
  1510. data/spec/spec_tests/data/unified/valid-pass/observeSensitiveCommands.yml +255 -0
  1511. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +241 -0
  1512. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +102 -0
  1513. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +190 -0
  1514. data/spec/spec_tests/data/unified/valid-pass/poc-gridfs.yml +155 -0
  1515. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +193 -0
  1516. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +210 -0
  1517. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +215 -0
  1518. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +235 -0
  1519. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +169 -0
  1520. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +171 -0
  1521. data/spec/spec_tests/data/uri_options/auth-options.yml +25 -0
  1522. data/spec/spec_tests/data/uri_options/compression-options.yml +7 -4
  1523. data/spec/spec_tests/data/uri_options/connection-options.yml +60 -0
  1524. data/spec/spec_tests/data/uri_options/read-preference-options.yml +24 -0
  1525. data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +1 -0
  1526. data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
  1527. data/spec/spec_tests/data/uri_options/tls-options.yml +160 -4
  1528. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +419 -0
  1529. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +413 -0
  1530. data/spec/spec_tests/data/versioned_api/runcommand-helper-no-api-version-declared.yml +75 -0
  1531. data/spec/spec_tests/data/versioned_api/test-commands-deprecation-errors.yml +47 -0
  1532. data/spec/spec_tests/data/versioned_api/test-commands-strict-mode.yml +46 -0
  1533. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +128 -0
  1534. data/spec/spec_tests/gridfs_spec.rb +3 -0
  1535. data/spec/spec_tests/gridfs_unified_spec.rb +13 -0
  1536. data/spec/spec_tests/load_balancers_spec.rb +15 -0
  1537. data/spec/spec_tests/max_staleness_spec.rb +3 -0
  1538. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +3 -0
  1539. data/spec/spec_tests/read_write_concern_document_spec.rb +3 -0
  1540. data/spec/spec_tests/read_write_concern_operaton_spec.rb +3 -0
  1541. data/spec/spec_tests/retryable_reads_spec.rb +11 -3
  1542. data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
  1543. data/spec/spec_tests/retryable_writes_spec.rb +14 -8
  1544. data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
  1545. data/spec/spec_tests/sdam_monitoring_spec.rb +14 -6
  1546. data/spec/spec_tests/sdam_spec.rb +9 -2
  1547. data/spec/spec_tests/sdam_unified_spec.rb +13 -0
  1548. data/spec/spec_tests/seed_list_discovery_spec.rb +127 -0
  1549. data/spec/spec_tests/server_selection_rtt_spec.rb +3 -0
  1550. data/spec/spec_tests/server_selection_spec.rb +3 -0
  1551. data/spec/spec_tests/sessions_unified_spec.rb +13 -0
  1552. data/spec/spec_tests/transactions_api_spec.rb +3 -0
  1553. data/spec/spec_tests/transactions_spec.rb +3 -0
  1554. data/spec/spec_tests/transactions_unified_spec.rb +13 -0
  1555. data/spec/spec_tests/unified_spec.rb +18 -0
  1556. data/spec/spec_tests/uri_options_spec.rb +50 -33
  1557. data/spec/spec_tests/versioned_api_spec.rb +13 -0
  1558. data/spec/stress/cleanup_spec.rb +3 -0
  1559. data/spec/stress/connection_pool_stress_spec.rb +3 -61
  1560. data/spec/stress/connection_pool_timing_spec.rb +14 -35
  1561. data/spec/stress/fork_reconnect_stress_spec.rb +17 -18
  1562. data/spec/stress/push_monitor_close_spec.rb +44 -0
  1563. data/spec/support/authorization.rb +4 -1
  1564. data/spec/support/aws_utils/base.rb +3 -0
  1565. data/spec/support/aws_utils/inspector.rb +3 -0
  1566. data/spec/support/aws_utils/orchestrator.rb +22 -7
  1567. data/spec/support/aws_utils/provisioner.rb +3 -0
  1568. data/spec/support/aws_utils.rb +6 -2
  1569. data/spec/support/background_thread_registry.rb +7 -14
  1570. data/spec/support/certificates/README.md +3 -2
  1571. data/spec/support/certificates/atlas-ocsp-ca.crt +103 -0
  1572. data/spec/support/certificates/atlas-ocsp.crt +152 -0
  1573. data/spec/support/certificates/retrieve-atlas-cert +40 -0
  1574. data/spec/support/client_registry.rb +17 -6
  1575. data/spec/support/client_registry_macros.rb +17 -5
  1576. data/spec/support/cluster_tools.rb +17 -9
  1577. data/spec/support/common_shortcuts.rb +134 -10
  1578. data/spec/support/constraints.rb +16 -246
  1579. data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
  1580. data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
  1581. data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
  1582. data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
  1583. data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
  1584. data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
  1585. data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
  1586. data/spec/support/crypt/corpus/corpus.json +4999 -37
  1587. data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
  1588. data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
  1589. data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
  1590. data/spec/support/crypt/encrypted_fields/encryptedFields.json +32 -0
  1591. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +30 -0
  1592. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +21 -0
  1593. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +29 -0
  1594. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +21 -0
  1595. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +30 -0
  1596. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +27 -0
  1597. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +27 -0
  1598. data/spec/support/crypt/keys/key1-document.json +30 -0
  1599. data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
  1600. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  1601. data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
  1602. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  1603. data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
  1604. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  1605. data/spec/support/crypt.rb +271 -13
  1606. data/spec/support/dns.rb +3 -0
  1607. data/spec/support/json_ext_formatter.rb +3 -0
  1608. data/spec/support/keyword_struct.rb +3 -0
  1609. data/spec/support/local_resource_registry.rb +3 -0
  1610. data/spec/support/macros.rb +29 -0
  1611. data/spec/support/matchers.rb +33 -1
  1612. data/spec/support/mongos_macros.rb +24 -0
  1613. data/spec/support/monitoring_ext.rb +3 -0
  1614. data/spec/support/ocsp +1 -0
  1615. data/spec/support/primary_socket.rb +3 -0
  1616. data/spec/support/sdam_formatter_integration.rb +3 -0
  1617. data/spec/support/shared/app_metadata.rb +179 -0
  1618. data/spec/support/shared/auth_context.rb +17 -0
  1619. data/spec/support/shared/protocol.rb +3 -0
  1620. data/spec/support/shared/scram_conversation.rb +5 -1
  1621. data/spec/support/shared/server_selector.rb +6 -3
  1622. data/spec/support/shared/session.rb +20 -11
  1623. data/spec/support/spec_config.rb +248 -24
  1624. data/spec/support/spec_setup.rb +51 -38
  1625. data/spec/support/using_hash.rb +40 -0
  1626. data/spec/support/utils.rb +353 -172
  1627. data.tar.gz.sig +0 -0
  1628. metadata +2052 -1217
  1629. metadata.gz.sig +0 -0
  1630. data/lib/mongo/collection/view/builder/find_command.rb +0 -150
  1631. data/lib/mongo/collection/view/builder/flags.rb +0 -62
  1632. data/lib/mongo/collection/view/builder/modifiers.rb +0 -80
  1633. data/lib/mongo/collection/view/builder/op_query.rb +0 -91
  1634. data/lib/mongo/cursor/builder/get_more_command.rb +0 -77
  1635. data/lib/mongo/cursor/builder/kill_cursors_command.rb +0 -108
  1636. data/lib/mongo/cursor/builder/op_get_more.rb +0 -61
  1637. data/lib/mongo/cursor/builder/op_kill_cursors.rb +0 -103
  1638. data/lib/mongo/cursor/builder.rb +0 -18
  1639. data/lib/mongo/operation/aggregate/command.rb +0 -44
  1640. data/lib/mongo/operation/collections_info/command.rb +0 -40
  1641. data/lib/mongo/operation/command/command.rb +0 -38
  1642. data/lib/mongo/operation/count/command.rb +0 -38
  1643. data/lib/mongo/operation/create/command.rb +0 -38
  1644. data/lib/mongo/operation/create_index/command.rb +0 -42
  1645. data/lib/mongo/operation/create_user/command.rb +0 -43
  1646. data/lib/mongo/operation/delete/command.rb +0 -46
  1647. data/lib/mongo/operation/delete/legacy.rb +0 -54
  1648. data/lib/mongo/operation/distinct/command.rb +0 -38
  1649. data/lib/mongo/operation/drop/command.rb +0 -38
  1650. data/lib/mongo/operation/drop_database/command.rb +0 -38
  1651. data/lib/mongo/operation/drop_index/command.rb +0 -42
  1652. data/lib/mongo/operation/explain/command.rb +0 -39
  1653. data/lib/mongo/operation/explain/legacy.rb +0 -38
  1654. data/lib/mongo/operation/find/command.rb +0 -39
  1655. data/lib/mongo/operation/find/legacy/result.rb +0 -41
  1656. data/lib/mongo/operation/find/legacy.rb +0 -40
  1657. data/lib/mongo/operation/get_more/command.rb +0 -39
  1658. data/lib/mongo/operation/get_more/legacy.rb +0 -36
  1659. data/lib/mongo/operation/indexes/command.rb +0 -39
  1660. data/lib/mongo/operation/indexes/legacy.rb +0 -45
  1661. data/lib/mongo/operation/insert/command.rb +0 -56
  1662. data/lib/mongo/operation/insert/legacy.rb +0 -65
  1663. data/lib/mongo/operation/kill_cursors/command.rb +0 -37
  1664. data/lib/mongo/operation/kill_cursors/legacy.rb +0 -37
  1665. data/lib/mongo/operation/list_collections/command.rb +0 -43
  1666. data/lib/mongo/operation/map_reduce/command.rb +0 -40
  1667. data/lib/mongo/operation/parallel_scan/command.rb +0 -55
  1668. data/lib/mongo/operation/remove_user/command.rb +0 -43
  1669. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +0 -56
  1670. data/lib/mongo/operation/shared/op_msg_or_command.rb +0 -44
  1671. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +0 -47
  1672. data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +0 -47
  1673. data/lib/mongo/operation/update/command.rb +0 -47
  1674. data/lib/mongo/operation/update/legacy/result.rb +0 -102
  1675. data/lib/mongo/operation/update/legacy.rb +0 -65
  1676. data/lib/mongo/operation/update_user/command.rb +0 -42
  1677. data/lib/mongo/operation/users_info/command.rb +0 -43
  1678. data/lib/mongo/protocol/delete.rb +0 -169
  1679. data/lib/mongo/protocol/insert.rb +0 -178
  1680. data/lib/mongo/protocol/update.rb +0 -211
  1681. data/lib/mongo/server/context.rb +0 -69
  1682. data/spec/mongo/collection/view/builder/flags_spec.rb +0 -106
  1683. data/spec/mongo/collection/view/builder/modifiers_spec.rb +0 -210
  1684. data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +0 -61
  1685. data/spec/mongo/dbref_spec.rb +0 -149
  1686. data/spec/mongo/operation/delete/command_spec.rb +0 -112
  1687. data/spec/mongo/operation/find/legacy_spec.rb +0 -125
  1688. data/spec/mongo/operation/get_more_spec.rb +0 -58
  1689. data/spec/mongo/operation/insert/command_spec.rb +0 -115
  1690. data/spec/mongo/operation/kill_cursors_spec.rb +0 -41
  1691. data/spec/mongo/operation/update/command_spec.rb +0 -119
  1692. data/spec/mongo/protocol/delete_spec.rb +0 -182
  1693. data/spec/mongo/protocol/insert_spec.rb +0 -176
  1694. data/spec/mongo/protocol/update_spec.rb +0 -201
  1695. data/spec/mongo/server/app_metadata_shared.rb +0 -136
  1696. data/spec/spec_tests/change_streams_spec.rb +0 -90
  1697. data/spec/spec_tests/command_monitoring_spec.rb +0 -66
  1698. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -102
  1699. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
  1700. data/spec/spec_tests/data/change_streams/change-streams-resume-whitelist.yml +0 -1173
  1701. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -537
  1702. data/spec/spec_tests/data/command_monitoring/bulkWrite.yml +0 -49
  1703. data/spec/spec_tests/data/command_monitoring/command.yml +0 -61
  1704. data/spec/spec_tests/data/command_monitoring/deleteMany.yml +0 -55
  1705. data/spec/spec_tests/data/command_monitoring/deleteOne.yml +0 -55
  1706. data/spec/spec_tests/data/command_monitoring/find.yml +0 -266
  1707. data/spec/spec_tests/data/command_monitoring/insertMany.yml +0 -75
  1708. data/spec/spec_tests/data/command_monitoring/insertOne.yml +0 -51
  1709. data/spec/spec_tests/data/command_monitoring/unacknowledgedBulkWrite.yml +0 -34
  1710. data/spec/spec_tests/data/command_monitoring/updateMany.yml +0 -65
  1711. data/spec/spec_tests/data/command_monitoring/updateOne.yml +0 -90
  1712. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
  1713. data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -110
  1714. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
  1715. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
  1716. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
  1717. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
  1718. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
  1719. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
  1720. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
  1721. data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -38
  1722. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
  1723. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
  1724. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
  1725. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
  1726. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
  1727. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
  1728. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
  1729. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
  1730. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
  1731. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
  1732. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
  1733. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
  1734. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
  1735. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
  1736. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
  1737. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
  1738. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
  1739. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
  1740. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
  1741. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
  1742. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
  1743. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
  1744. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
  1745. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
  1746. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
  1747. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
  1748. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
  1749. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
  1750. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
  1751. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
  1752. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
  1753. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
  1754. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
  1755. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
  1756. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
  1757. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
  1758. data/spec/spec_tests/data/retryable_reads/aggregate-serverErrors.yml +0 -157
  1759. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch-serverErrors.yml +0 -149
  1760. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch.yml +0 -61
  1761. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch-serverErrors.yml +0 -149
  1762. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch.yml +0 -65
  1763. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch-serverErrors.yml +0 -153
  1764. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch.yml +0 -61
  1765. data/spec/spec_tests/data/retryable_reads/count-serverErrors.yml +0 -150
  1766. data/spec/spec_tests/data/retryable_reads/countDocuments-serverErrors.yml +0 -150
  1767. data/spec/spec_tests/data/retryable_reads/distinct-serverErrors.yml +0 -156
  1768. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors.yml +0 -148
  1769. data/spec/spec_tests/data/retryable_reads/find-serverErrors.yml +0 -160
  1770. data/spec/spec_tests/data/retryable_reads/findOne-serverErrors.yml +0 -154
  1771. data/spec/spec_tests/data/retryable_reads/gridfs-download-serverErrors.yml +0 -173
  1772. data/spec/spec_tests/data/retryable_reads/gridfs-downloadByName-serverErrors.yml +0 -174
  1773. data/spec/spec_tests/data/retryable_reads/listCollectionNames-serverErrors.yml +0 -143
  1774. data/spec/spec_tests/data/retryable_reads/listCollectionObjects-serverErrors.yml +0 -144
  1775. data/spec/spec_tests/data/retryable_reads/listCollections-serverErrors.yml +0 -143
  1776. data/spec/spec_tests/data/retryable_reads/listDatabaseNames-serverErrors.yml +0 -143
  1777. data/spec/spec_tests/data/retryable_reads/listDatabaseObjects-serverErrors.yml +0 -144
  1778. data/spec/spec_tests/data/retryable_reads/listDatabases-serverErrors.yml +0 -144
  1779. data/spec/spec_tests/data/retryable_reads/listIndexNames-serverErrors.yml +0 -144
  1780. data/spec/spec_tests/data/retryable_reads/listIndexNames.yml +0 -60
  1781. data/spec/spec_tests/data/retryable_reads/listIndexes-serverErrors.yml +0 -145
  1782. data/spec/spec_tests/data/retryable_reads/mapReduce.yml +0 -60
  1783. data/spec/spec_tests/data/retryable_writes/bulkWrite-serverErrors.yml +0 -130
  1784. data/spec/spec_tests/data/retryable_writes/bulkWrite.yml +0 -396
  1785. data/spec/spec_tests/data/retryable_writes/deleteOne-serverErrors.yml +0 -73
  1786. data/spec/spec_tests/data/retryable_writes/findOneAndDelete-serverErrors.yml +0 -74
  1787. data/spec/spec_tests/data/retryable_writes/findOneAndReplace-serverErrors.yml +0 -80
  1788. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate-serverErrors.yml +0 -79
  1789. data/spec/spec_tests/data/retryable_writes/insertMany-serverErrors.yml +0 -84
  1790. data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +0 -526
  1791. data/spec/spec_tests/data/retryable_writes/replaceOne-serverErrors.yml +0 -82
  1792. data/spec/spec_tests/data/retryable_writes/updateOne-serverErrors.yml +0 -82
  1793. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMaster.yml +0 -60
  1794. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMasterNoSlaveOk.yml +0 -60
  1795. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMasterOrSecondary.yml +0 -60
  1796. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMaster.yml +0 -51
  1797. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMasterNoSlaveOk.yml +0 -51
  1798. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMasterOrSecondary.yml +0 -51
  1799. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMaster.yml +0 -60
  1800. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMasterNoSlaveOk.yml +0 -60
  1801. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMasterOrSecondary.yml +0 -60
  1802. data/spec/spec_tests/data/sdam/errors/post-42-NotMaster.yml +0 -46
  1803. data/spec/spec_tests/data/sdam/errors/post-42-NotMasterNoSlaveOk.yml +0 -46
  1804. data/spec/spec_tests/data/sdam/errors/post-42-NotMasterOrSecondary.yml +0 -46
  1805. data/spec/spec_tests/data/sdam/errors/pre-42-NotMaster.yml +0 -46
  1806. data/spec/spec_tests/data/sdam/errors/pre-42-NotMasterNoSlaveOk.yml +0 -46
  1807. data/spec/spec_tests/data/sdam/errors/pre-42-NotMasterOrSecondary.yml +0 -46
  1808. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMaster.yml +0 -89
  1809. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMasterNoSlaveOk.yml +0 -89
  1810. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMasterOrSecondary.yml +0 -89
  1811. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMaster.yml +0 -89
  1812. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMasterNoSlaveOk.yml +0 -89
  1813. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMasterOrSecondary.yml +0 -89
  1814. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMaster.yml +0 -89
  1815. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMasterNoSlaveOk.yml +0 -89
  1816. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMasterOrSecondary.yml +0 -89
  1817. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMaster.yml +0 -64
  1818. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMasterNoSlaveOk.yml +0 -64
  1819. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMasterOrSecondary.yml +0 -64
  1820. data/spec/spec_tests/data/sdam/single/direct_connection_slave.yml +0 -34
  1821. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +0 -96
  1822. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +0 -88
  1823. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +0 -83
  1824. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +0 -116
  1825. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +0 -86
  1826. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +0 -115
  1827. data/spec/spec_tests/data/sdam_integration/isMaster-command-error.yml +0 -168
  1828. data/spec/spec_tests/data/sdam_integration/isMaster-network-error.yml +0 -162
  1829. data/spec/spec_tests/data/sdam_integration/isMaster-timeout.yml +0 -229
  1830. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +0 -87
  1831. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +0 -68
  1832. data/spec/spec_tests/sdam_integration_spec.rb +0 -13
  1833. data/spec/support/child_process_helper.rb +0 -78
  1834. data/spec/support/cluster_config.rb +0 -207
  1835. data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
  1836. data/spec/support/event_subscriber.rb +0 -212
  1837. data/spec/support/lite_constraints.rb +0 -141
  1838. data/spec/support/spec_organizer.rb +0 -129
  1839. /data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
  1840. /data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
  1841. /data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
  1842. /data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
  1843. /data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
  1844. /data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount.yml → legacy/estimatedDocumentCount.yml} +0 -0
  1845. /data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
  1846. /data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
  1847. /data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
  1848. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
  1849. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
  1850. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
  1851. /data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
  1852. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
  1853. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
  1854. /data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
  1855. /data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
  1856. /data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
  1857. /data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
  1858. /data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
  1859. /data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
  1860. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
  1861. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
  1862. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
  1863. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
  1864. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
  1865. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
  1866. /data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
  1867. /data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
  1868. /data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
  1869. /data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
  1870. /data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
  1871. /data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
  1872. /data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
  1873. /data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
  1874. /data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
  1875. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-false.yml +0 -0
  1876. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-true.yml +0 -0
  1877. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/longer-parent-in-return.yml +0 -0
  1878. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/misformatted-option.yml +0 -0
  1879. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/no-results.yml +0 -0
  1880. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/not-enough-parts.yml +0 -0
  1881. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-result-default-port.yml +0 -0
  1882. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record-multiple-strings.yml +0 -0
  1883. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record.yml +0 -0
  1884. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch1.yml +0 -0
  1885. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch2.yml +0 -0
  1886. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch3.yml +0 -0
  1887. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch4.yml +0 -0
  1888. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch5.yml +0 -0
  1889. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-too-short.yml +0 -0
  1890. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-wrong.yml +0 -0
  1891. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-default-port.yml +0 -0
  1892. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-nonstandard-port.yml +0 -0
  1893. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-txt-records.yml +0 -0
  1894. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-not-allowed-option.yml +0 -0
  1895. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-ssl-option.yml +0 -0
  1896. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-uri-option.yml +0 -0
  1897. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-unallowed-option.yml +0 -0
  1898. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-port.yml +0 -0
  1899. /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-two-hosts.yml +0 -0
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # rubocop:todo all
3
+
1
4
  # Copyright (C) 2019-2020 MongoDB Inc.
2
5
  #
3
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,20 +16,28 @@
13
16
  # limitations under the License.
14
17
 
15
18
  unless ENV['LIBMONGOCRYPT_PATH']
16
- # It seems that MRI maintains autoload configuration for a module until
17
- # that module is defined, but JRuby removes autoload configuration as soon
18
- # as the referenced file is attempted to be loaded, even if the module
19
- # never ends up being defined.
20
- if BSON::Environment.jruby?
21
- module Mongo
22
- module Crypt
23
- autoload :Binding, 'mongo/crypt/binding'
19
+ begin
20
+ require 'libmongocrypt_helper'
21
+ rescue LoadError => e
22
+ # It seems that MRI maintains autoload configuration for a module until
23
+ # that module is defined, but JRuby removes autoload configuration as soon
24
+ # as the referenced file is attempted to be loaded, even if the module
25
+ # never ends up being defined.
26
+ if BSON::Environment.jruby?
27
+ module Mongo
28
+ module Crypt
29
+ autoload :Binding, 'mongo/crypt/binding'
30
+ end
24
31
  end
25
32
  end
26
- end
27
33
 
28
- raise LoadError, "Cannot load Mongo::Crypt::Binding because there is no path " +
29
- "to libmongocrypt specified in the LIBMONGOCRYPT_PATH environment variable."
34
+ # JRuby 9.3.2.0 replaces a LoadError with our custom message with a
35
+ # generic NameError, when this load is attempted as part of autoloading
36
+ # process. JRuby 9.2.20.0 propagates LoadError as expected.
37
+ raise LoadError, "Cannot load Mongo::Crypt::Binding because there is no path " +
38
+ "to libmongocrypt specified in the LIBMONGOCRYPT_PATH environment variable " +
39
+ "and libmongocrypt-helper is not installed: #{e.class}: #{e}"
40
+ end
30
41
  end
31
42
 
32
43
  require 'ffi'
@@ -47,15 +58,33 @@ module Mongo
47
58
  class Binding
48
59
  extend FFI::Library
49
60
 
50
- begin
51
- ffi_lib ENV['LIBMONGOCRYPT_PATH']
52
- rescue LoadError => e
53
- Crypt.reset_autoload
54
- raise LoadError, "Cannot load Mongo::Crypt::Binding because the path to " +
55
- "libmongocrypt specified in the LIBMONGOCRYPT_PATH environment variable " +
56
- "is invalid: #{ENV['LIBMONGOCRYPT_PATH']}\n\n#{e.class}: #{e.message}"
61
+ if ENV['LIBMONGOCRYPT_PATH']
62
+ begin
63
+ ffi_lib ENV['LIBMONGOCRYPT_PATH']
64
+ rescue LoadError => e
65
+ Crypt.reset_autoload
66
+ raise LoadError, "Cannot load Mongo::Crypt::Binding because the path to " +
67
+ "libmongocrypt specified in the LIBMONGOCRYPT_PATH environment variable " +
68
+ "is invalid: #{ENV['LIBMONGOCRYPT_PATH']}\n\n#{e.class}: #{e.message}"
69
+ end
70
+ else
71
+ begin
72
+ ffi_lib LibmongocryptHelper.libmongocrypt_path
73
+ rescue LoadError => e
74
+ Crypt.reset_autoload
75
+ raise LoadError, "Cannot load Mongo::Crypt::Binding because the path to " +
76
+ "libmongocrypt specified in libmongocrypt-helper " +
77
+ "is invalid: #{LibmongocryptHelper.libmongocrypt_path}\n\n#{e.class}: #{e.message}"
78
+ end
57
79
  end
58
80
 
81
+ # Minimum version of libmongocrypt required by this version of the driver.
82
+ # An attempt to use the driver with any previous version of libmongocrypt
83
+ # will cause a `LoadError`.
84
+ #
85
+ # @api private
86
+ MIN_LIBMONGOCRYPT_VERSION = Gem::Version.new("1.7.0")
87
+
59
88
  # @!method self.mongocrypt_version(len)
60
89
  # @api private
61
90
  #
@@ -65,6 +94,49 @@ module Mongo
65
94
  # @return [ String ] A version string for libmongocrypt.
66
95
  attach_function :mongocrypt_version, [:pointer], :string
67
96
 
97
+ # Given a string representing a version number, parses it into a
98
+ # Gem::Version object. This handles the case where the string is not
99
+ # in a format supported by Gem::Version by doing some custom parsing.
100
+ #
101
+ # @param [ String ] version String representing a version number.
102
+ #
103
+ # @return [ Gem::Version ] the version number
104
+ #
105
+ # @raise [ ArgumentError ] if the string cannot be parsed.
106
+ #
107
+ # @api private
108
+ def self.parse_version(version)
109
+ Gem::Version.new(version)
110
+ rescue ArgumentError
111
+ match = version.match(/\A(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)?(-[A-Za-z\+\d]+)?\z/)
112
+ raise ArgumentError.new("Malformed version number string #{version}") if match.nil?
113
+
114
+ Gem::Version.new(
115
+ [
116
+ match[:major],
117
+ match[:minor],
118
+ match[:patch]
119
+ ].join('.')
120
+ )
121
+ end
122
+
123
+ # Validates if provided version of libmongocrypt is valid, i.e. equal or
124
+ # greater than minimum required version. Raises a LoadError if not.
125
+ #
126
+ # @param [ String ] lmc_version String representing libmongocrypt version.
127
+ #
128
+ # @raise [ LoadError ] if given version is lesser than minimum required version.
129
+ #
130
+ # @api private
131
+ def self.validate_version(lmc_version)
132
+ if (actual_version = parse_version(lmc_version)) < MIN_LIBMONGOCRYPT_VERSION
133
+ raise LoadError, "libmongocrypt version #{MIN_LIBMONGOCRYPT_VERSION} or above is required, " +
134
+ "but version #{actual_version} was found."
135
+ end
136
+ end
137
+
138
+ validate_version(mongocrypt_version(nil))
139
+
68
140
  # @!method self.mongocrypt_binary_new
69
141
  # @api private
70
142
  #
@@ -250,69 +322,36 @@ module Mongo
250
322
  end
251
323
  end
252
324
 
253
- # @!method self.mongocrypt_setopt_kms_provider_aws(crypt, aws_access_key_id, aws_access_key_id_len, aws_secret_access_key, aws_secret_access_key_len)
325
+ # @!method self.mongocrypt_setopt_kms_providers(crypt, kms_providers)
254
326
  # @api private
255
327
  #
256
- # Configure mongocrypt_t object with AWS KMS provider options.
328
+ # Configure KMS providers with a BSON document.
257
329
  # @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
258
- # @param [ String ] aws_access_key_id The AWS access key id.
259
- # @param [ Integer ] aws_access_key_id_len The length of the AWS access
260
- # key string (or -1 for a null-terminated string).
261
- # @param [ String ] aws_secret_access_key The AWS secret access key.
262
- # @param [ Integer ] aws_secret_access_key_len The length of the AWS
263
- # secret access key (or -1 for a null-terminated string).
264
- # @return [ Boolean ] Returns whether the option was set successfully.
265
- attach_function(
266
- :mongocrypt_setopt_kms_provider_aws,
267
- [:pointer, :string, :int, :string, :int],
268
- :bool
269
- )
270
-
271
- # Configure the Handle object with AWS KMS provider options
272
- #
273
- # @param [ Mongo::Crypt::Handle ] handle
274
- # @param [ String ] aws_access_key The AWS access key
275
- # @param [ String ] aws_secret_access_key The AWS secret access key
276
- #
277
- # @raise [ Mongo::Error::CryptError ] If the option is not set successfully
278
- def self.setopt_kms_provider_aws(handle,
279
- aws_access_key, aws_secret_access_key
280
- )
281
- check_status(handle) do
282
- mongocrypt_setopt_kms_provider_aws(
283
- handle.ref,
284
- aws_access_key,
285
- -1,
286
- aws_secret_access_key,
287
- -1
288
- )
289
- end
290
- end
291
-
292
- # @!method self.mongocrypt_setopt_kms_provider_local(crypt, key)
293
- # @api private
330
+ # @param [ FFI::Pointer ] kms_providers A pointer to a
331
+ # mongocrypt_binary_t object that references a BSON document mapping
332
+ # the KMS provider names to credentials.
333
+ # @note Do not initialize ctx before calling this method.
294
334
  #
295
- # Configure mongocrypt_t object to take local KSM provider options.
296
- # @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
297
- # @param [ FFI::Pointer ] key A pointer to a mongocrypt_binary_t object
298
- # that references the 96-byte local master key.
299
- # @return [ Boolean ] Returns whether the option was set successfully.
335
+ # @returns [ true | false ] Returns whether the options was set successfully.
300
336
  attach_function(
301
- :mongocrypt_setopt_kms_provider_local,
337
+ :mongocrypt_setopt_kms_providers,
302
338
  [:pointer, :pointer],
303
339
  :bool
304
340
  )
305
341
 
306
- # Set local KMS provider options on the Mongo::Crypt::Handle object
342
+ # Set KMS providers options on the Mongo::Crypt::Handle object
307
343
  #
308
344
  # @param [ Mongo::Crypt::Handle ] handle
309
- # @param [ String ] master_key The 96-byte local KMS master key
345
+ # @param [ BSON::Document ] kms_providers BSON document mapping
346
+ # the KMS provider names to credentials.
310
347
  #
311
348
  # @raise [ Mongo::Error::CryptError ] If the option is not set successfully
312
- def self.setopt_kms_provider_local(handle, master_key)
313
- Binary.wrap_string(master_key) do |master_key_p|
349
+ def self.setopt_kms_providers(handle, kms_providers)
350
+ validate_document(kms_providers)
351
+ data = kms_providers.to_bson.to_s
352
+ Binary.wrap_string(data) do |data_p|
314
353
  check_status(handle) do
315
- mongocrypt_setopt_kms_provider_local(handle.ref, master_key_p)
354
+ mongocrypt_setopt_kms_providers(handle.ref, data_p)
316
355
  end
317
356
  end
318
357
  end
@@ -462,6 +501,38 @@ module Mongo
462
501
  end
463
502
  end
464
503
 
504
+ # @!method self.mongocrypt_ctx_setopt_key_material(ctx, binary)
505
+ # @api private
506
+ #
507
+ # When creating a data key, set a custom key material to use for
508
+ # encrypting data.
509
+ # @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
510
+ # @param [ FFI::Pointer ] binary A pointer to a mongocrypt_binary_t
511
+ # object that references the data encryption key to use.
512
+ # @return [ Boolean ] Whether the custom key material was successfully set.
513
+ # @note Do not initialize ctx before calling this method.
514
+ attach_function(
515
+ :mongocrypt_ctx_setopt_key_material,
516
+ [:pointer, :pointer],
517
+ :bool
518
+ )
519
+
520
+ # Set set a custom key material to use for
521
+ # encrypting data.
522
+ #
523
+ # @param [ Mongo::Crypt::Context ] context A DataKeyContext
524
+ # @param [ BSON::Binary ] key_material 96 bytes of custom key material
525
+ #
526
+ # @raise [ Mongo::Error::CryptError ] If the key material is not 96 bytes.
527
+ def self.ctx_setopt_key_material(context, key_material)
528
+ data = {'keyMaterial' => key_material}.to_bson.to_s
529
+ Binary.wrap_string(data) do |data_p|
530
+ check_ctx_status(context) do
531
+ mongocrypt_ctx_setopt_key_material(context.ctx_p, data_p)
532
+ end
533
+ end
534
+ end
535
+
465
536
  # @!method self.mongocrypt_ctx_setopt_algorithm(ctx, algorithm, len)
466
537
  # @api private
467
538
  #
@@ -493,95 +564,36 @@ module Mongo
493
564
  end
494
565
  end
495
566
 
496
- # @!method self.mongocrypt_ctx_setopt_masterkey_aws(ctx, region, region_len, arn, arn_len)
497
- # @api private
498
- #
499
- # Configure the ctx to take a master key from AWS.
500
- # @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_object.
501
- # @param [ String ] region The AWS region.
502
- # @param [ Integer ] region_len The length of the region string (or -1
503
- # for a null-terminated string).
504
- # @param [ String ] arn The Amazon Resource Name (ARN) of the mater key.
505
- # @param [ Integer ] arn_len The length of the ARN (or -1 for a
506
- # null-terminated string).
507
- # @return [ Boolean ] Returns whether the option was set successfully.
508
- attach_function(
509
- :mongocrypt_ctx_setopt_masterkey_aws,
510
- [:pointer, :string, :int, :string, :int],
511
- :bool
512
- )
513
-
514
- # Configure the Context object to take a master key from AWS
515
- #
516
- # @param [ Mongo::Crypt::Context ] context
517
- # @param [ String ] region The AWS region (e.g. "us-east-2")
518
- # @param [ String ] arn The master key Amazon Resource Name
519
- #
520
- # @raise [ Mongo::Error::CryptError ] If the operation failed
521
- def self.ctx_setopt_master_key_aws(context, region, arn)
522
- check_ctx_status(context) do
523
- mongocrypt_ctx_setopt_masterkey_aws(
524
- context.ctx_p,
525
- region,
526
- -1,
527
- arn,
528
- -1
529
- )
530
- end
531
- end
532
-
533
- # @!method self.mongocrypt_ctx_setopt_masterkey_aws_endpoint(ctx, endpoint, endpoint_len)
534
- # @api private
535
- #
536
- # Set a custom endpoint at which to fetch the AWS master key
537
- # @param [ FFI::Pointer ] ctx
538
- # @param [ String ] endpoint The custom endpoint.
539
- # @param [ Integer ] endpoint_len The length of the endpoint string (or
540
- # -1 for a null-terminated string).
541
- # @return [ Boolean ] Returns whether the option was set successfully.
542
- attach_function(
543
- :mongocrypt_ctx_setopt_masterkey_aws_endpoint,
544
- [:pointer, :string, :int],
545
- :bool
546
- )
547
-
548
- # Configure the Context object to take a masterk ey from AWS
549
- #
550
- # @param [ Mongo::Crypt::Context ] context
551
- # @param [ String ] endpoint The custom AWS master key endpoint
552
- #
553
- # @raise [ Mongo::Error::CryptError ] If the operation failed
554
- def self.ctx_setopt_master_key_aws_endpoint(context, endpoint)
555
- check_ctx_status(context) do
556
- mongocrypt_ctx_setopt_masterkey_aws_endpoint(
557
- context.ctx_p,
558
- endpoint,
559
- -1,
560
- )
561
- end
562
- end
563
-
564
- # @!method self.mongocrypt_ctx_setopt_masterkey_local(ctx)
567
+ # @!method self.mongocrypt_ctx_setopt_key_encryption_key(ctx)
565
568
  # @api private
566
569
  #
567
- # Set the ctx to take a local master key.
570
+ # Set key encryption key document for creating a data key.
568
571
  # @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
572
+ # @param [ FFI::Pointer ] bin A pointer to a mongocrypt_binary_t
573
+ # object that references a BSON document representing the key
574
+ # encryption key document with an additional "provider" field.
569
575
  # @note Do not initialize ctx before calling this method.
570
576
  # @return [ Boolean ] Whether the option was successfully set.
571
577
  attach_function(
572
- :mongocrypt_ctx_setopt_masterkey_local,
573
- [:pointer],
578
+ :mongocrypt_ctx_setopt_key_encryption_key,
579
+ [:pointer, :pointer],
574
580
  :bool
575
581
  )
576
582
 
577
- # Tell the Context object to read the master key from local KMS options
583
+ # Set key encryption key document for creating a data key.
578
584
  #
579
585
  # @param [ Mongo::Crypt::Context ] context
586
+ # @param [ BSON::Document ] key_document BSON document representing the key
587
+ # encryption key document with an additional "provider" field.
580
588
  #
581
589
  # @raise [ Mongo::Error::CryptError ] If the operation failed
582
- def self.ctx_setopt_master_key_local(context)
583
- check_ctx_status(context) do
584
- mongocrypt_ctx_setopt_masterkey_local(context.ctx_p)
590
+ def self.ctx_setopt_key_encryption_key(context, key_document)
591
+ validate_document(key_document)
592
+ data = key_document.to_bson.to_s
593
+ Binary.wrap_string(data) do |data_p|
594
+ check_ctx_status(context) do
595
+ mongocrypt_ctx_setopt_key_encryption_key(context.ctx_p, data_p)
596
+ end
585
597
  end
586
598
  end
587
599
 
@@ -608,6 +620,40 @@ module Mongo
608
620
  end
609
621
  end
610
622
 
623
+ # @!method self.mongocrypt_ctx_datakey_init(ctx, filter)
624
+ # @api private
625
+ #
626
+ # Initialize a context to rewrap datakeys.
627
+ #
628
+ # @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
629
+ # @param [ FFI::Pointer ] filter A pointer to a mongocrypt_binary_t object
630
+ # that represents filter to use for the find command on the key vault
631
+ # collection to retrieve datakeys to rewrap.
632
+ #
633
+ # @return [ Boolean ] Whether the initialization was successful.
634
+ attach_function(
635
+ :mongocrypt_ctx_rewrap_many_datakey_init,
636
+ [:pointer, :pointer],
637
+ :bool
638
+ )
639
+
640
+ # Initialize a context to rewrap datakeys.
641
+ #
642
+ # @param [ Mongo::Crypt::Context ] context
643
+ # @param [ BSON::Document ] filter BSON Document
644
+ # that represents filter to use for the find command on the key vault
645
+ # collection to retrieve datakeys to rewrap.
646
+ #
647
+ # @return [ Boolean ] Whether the initialization was successful.
648
+ def self.ctx_rewrap_many_datakey_init(context, filter)
649
+ filter_data = filter.to_bson.to_s
650
+ Binary.wrap_string(filter_data) do |data_p|
651
+ check_ctx_status(context) do
652
+ mongocrypt_ctx_rewrap_many_datakey_init(context.ctx_p, data_p)
653
+ end
654
+ end
655
+ end
656
+
611
657
  # @!method self.mongocrypt_ctx_encrypt_init(ctx, db, db_len, cmd)
612
658
  # @api private
613
659
  #
@@ -679,6 +725,40 @@ module Mongo
679
725
  end
680
726
  end
681
727
 
728
+ # @!method self.mongocrypt_ctx_explicit_encrypt_init(ctx, msg)
729
+ # @api private
730
+ #
731
+ # Initializes the ctx for explicit expression encryption.
732
+ # @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
733
+ # @param [ FFI::Pointer ] msg A pointer to a mongocrypt_binary_t object
734
+ # that references the message to be encrypted as a binary string.
735
+ # @note Before calling this method, set a key_id, key_alt_name (optional),
736
+ # and encryption algorithm using the following methods:
737
+ # mongocrypt_ctx_setopt_key_id, mongocrypt_ctx_setopt_key_alt_name,
738
+ # and mongocrypt_ctx_setopt_algorithm.
739
+ # @return [ Boolean ] Whether the initialization was successful.
740
+ attach_function(
741
+ :mongocrypt_ctx_explicit_encrypt_expression_init,
742
+ [:pointer, :pointer],
743
+ :bool
744
+ )
745
+
746
+ # Initialize the Context for explicit expression encryption.
747
+ #
748
+ # @param [ Mongo::Crypt::Context ] context
749
+ # @param [ Hash ] doc A BSON document to encrypt
750
+ #
751
+ # @raise [ Mongo::Error::CryptError ] If initialization fails
752
+ def self.ctx_explicit_encrypt_expression_init(context, doc)
753
+ validate_document(doc)
754
+ data = doc.to_bson.to_s
755
+ Binary.wrap_string(data) do |data_p|
756
+ check_ctx_status(context) do
757
+ mongocrypt_ctx_explicit_encrypt_expression_init(context.ctx_p, data_p)
758
+ end
759
+ end
760
+ end
761
+
682
762
  # @!method self.mongocrypt_ctx_decrypt_init(ctx, doc)
683
763
  # @api private
684
764
  #
@@ -737,13 +817,14 @@ module Mongo
737
817
 
738
818
  # An enum labeling different libmognocrypt state machine states
739
819
  enum :mongocrypt_ctx_state, [
740
- :error, 0,
741
- :need_mongo_collinfo, 1,
742
- :need_mongo_markings, 2,
743
- :need_mongo_keys, 3,
744
- :need_kms, 4,
745
- :ready, 5,
746
- :done, 6,
820
+ :error, 0,
821
+ :need_mongo_collinfo, 1,
822
+ :need_mongo_markings, 2,
823
+ :need_mongo_keys, 3,
824
+ :need_kms, 4,
825
+ :ready, 5,
826
+ :done, 6,
827
+ :need_kms_credentials, 7,
747
828
  ]
748
829
 
749
830
  # @!method self.mongocrypt_ctx_state(ctx)
@@ -847,6 +928,58 @@ module Mongo
847
928
  end
848
929
  end
849
930
 
931
+ # @!method self.mongocrypt_kms_ctx_get_kms_provider(crypt, kms_providers)
932
+ # @api private
933
+ #
934
+ # Get the KMS provider identifier associated with this KMS request.
935
+ #
936
+ # This is used to conditionally configure TLS connections based on the KMS
937
+ # request. It is useful for KMIP, which authenticates with a client
938
+ # certificate.
939
+ #
940
+ # @param [ FFI::Pointer ] kms Pointer mongocrypt_kms_ctx_t object.
941
+ # @param [ FFI::Pointer ] len (outparam) Receives the length of the
942
+ # returned string. It may be NULL. If it is not NULL, it is set to
943
+ # the length of the returned string without the NULL terminator.
944
+ #
945
+ # @returns [ FFI::Pointer ] One of the NULL terminated static strings: "aws", "azure", "gcp", or
946
+ # "kmip".
947
+ attach_function(
948
+ :mongocrypt_kms_ctx_get_kms_provider,
949
+ [:pointer, :pointer],
950
+ :pointer
951
+ )
952
+
953
+ # Get the KMS provider identifier associated with this KMS request.
954
+ #
955
+ # This is used to conditionally configure TLS connections based on the KMS
956
+ # request. It is useful for KMIP, which authenticates with a client
957
+ # certificate.
958
+ #
959
+ # @param [ FFI::Pointer ] kms Pointer mongocrypt_kms_ctx_t object.
960
+ #
961
+ # @returns [ Symbol | nil ] KMS provider identifier.
962
+ def self.kms_ctx_get_kms_provider(kms_context)
963
+ len_ptr = FFI::MemoryPointer.new(:uint32, 1)
964
+ provider = mongocrypt_kms_ctx_get_kms_provider(
965
+ kms_context.kms_ctx_p,
966
+ len_ptr
967
+ )
968
+ if len_ptr.nil?
969
+ nil
970
+ else
971
+ len = if BSON::Environment.jruby?
972
+ # JRuby FFI implementation does not have `read(type)` method, but it
973
+ # has this `get_uint32`.
974
+ len_ptr.get_uint32
975
+ else
976
+ # For MRI we use a documented `read` method - https://www.rubydoc.info/github/ffi/ffi/FFI%2FPointer:read
977
+ len_ptr.read(:uint32)
978
+ end
979
+ provider.read_string(len).to_sym
980
+ end
981
+ end
982
+
850
983
  # @!method self.mongocrypt_kms_ctx_message(kms, msg)
851
984
  # @api private
852
985
  #
@@ -968,7 +1101,7 @@ module Mongo
968
1101
  status = Status.new
969
1102
 
970
1103
  mongocrypt_kms_ctx_status(kms_context.kms_ctx_p, status.ref)
971
- status.raise_crypt_error
1104
+ status.raise_crypt_error(kms: true)
972
1105
  end
973
1106
  end
974
1107
 
@@ -1171,6 +1304,439 @@ module Mongo
1171
1304
  end
1172
1305
  end
1173
1306
 
1307
+ # @!method self.mongocrypt_setopt_crypto_hook_sign_rsaes_pkcs1_v1_5(crypt, sign_rsaes_pkcs1_v1_5, ctx=nil)
1308
+ # @api private
1309
+ #
1310
+ # Set a crypto hook for the RSASSA-PKCS1-v1_5 algorithm with a SHA-256 hash.
1311
+ # @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
1312
+ # @param [ Proc ] sign_rsaes_pkcs1_v1_5 A RSASSA-PKCS1-v1_5 signing method.
1313
+ # @param [ FFI::Pointer | nil ] ctx An optional pointer to a context object
1314
+ # that may have been set when hooks were enabled.
1315
+ # @return [ Boolean ] Whether setting this option succeeded.
1316
+ attach_function(
1317
+ :mongocrypt_setopt_crypto_hook_sign_rsaes_pkcs1_v1_5,
1318
+ [
1319
+ :pointer,
1320
+ :mongocrypt_hmac_fn,
1321
+ :pointer
1322
+ ],
1323
+ :bool
1324
+ )
1325
+
1326
+ # Set a crypto hook for the RSASSA-PKCS1-v1_5 algorithm with
1327
+ # a SHA-256 hash oh the Handle.
1328
+ #
1329
+ # @param [ Mongo::Crypt::Handle ] handle
1330
+ # @param [ Method ] rsaes_pkcs_signature_cb A RSASSA-PKCS1-v1_5 signing method.
1331
+ #
1332
+ # @raise [ Mongo::Error::CryptError ] If the callbacks aren't set successfully
1333
+ def self.setopt_crypto_hook_sign_rsaes_pkcs1_v1_5(
1334
+ handle,
1335
+ rsaes_pkcs_signature_cb
1336
+ )
1337
+ check_status(handle) do
1338
+ mongocrypt_setopt_crypto_hook_sign_rsaes_pkcs1_v1_5(
1339
+ handle.ref,
1340
+ rsaes_pkcs_signature_cb,
1341
+ nil
1342
+ )
1343
+ end
1344
+ end
1345
+
1346
+ # @!method self.mongocrypt_setopt_encrypted_field_config_map(crypt, efc_map)
1347
+ # @api private
1348
+ #
1349
+ # Set a local EncryptedFieldConfigMap for encryption.
1350
+ #
1351
+ # @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
1352
+ # @param [ FFI::Pointer ] efc_map A pointer to mongocrypt_binary_t object that
1353
+ # references a BSON document representing the EncryptedFieldConfigMap
1354
+ # supplied by the user. The keys are collection namespaces and values are
1355
+ # EncryptedFieldConfigMap documents.
1356
+ #
1357
+ # @return [ Boolean ] Whether the operation succeeded.
1358
+ attach_function(
1359
+ :mongocrypt_setopt_encrypted_field_config_map,
1360
+ [
1361
+ :pointer,
1362
+ :pointer
1363
+ ],
1364
+ :bool
1365
+ )
1366
+
1367
+ # Set a local EncryptedFieldConfigMap for encryption.
1368
+ #
1369
+ # @param [ Mongo::Crypt::Handle ] handle
1370
+ # @param [ BSON::Document ] efc_map A BSON document representing
1371
+ # the EncryptedFieldConfigMap supplied by the user.
1372
+ # The keys are collection namespaces and values are
1373
+ # EncryptedFieldConfigMap documents.
1374
+ #
1375
+ # @raise [ Mongo::Error::CryptError ] If the operation failed.
1376
+ def self.setopt_encrypted_field_config_map(handle, efc_map)
1377
+ validate_document(efc_map)
1378
+ data = efc_map.to_bson.to_s
1379
+ Binary.wrap_string(data) do |data_p|
1380
+ check_status(handle) do
1381
+ mongocrypt_setopt_encrypted_field_config_map(
1382
+ handle.ref,
1383
+ data_p
1384
+ )
1385
+ end
1386
+ end
1387
+ end
1388
+
1389
+ # @!method self.mongocrypt_setopt_bypass_query_analysis(crypt)
1390
+ # @api private
1391
+ #
1392
+ # Opt into skipping query analysis.
1393
+ #
1394
+ # If opted in:
1395
+ # - The csfle shared library will not attempt to be loaded.
1396
+ # - A mongocrypt_ctx_t will never enter the MONGOCRYPT_CTX_NEED_MARKINGS state.
1397
+ #
1398
+ # @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
1399
+ attach_function(:mongocrypt_setopt_bypass_query_analysis, [:pointer], :void)
1400
+
1401
+ # Opt-into skipping query analysis.
1402
+ #
1403
+ # If opted in:
1404
+ # - The csfle shared library will not attempt to be loaded.
1405
+ # - A mongocrypt_ctx_t will never enter the MONGOCRYPT_CTX_NEED_MARKINGS state.
1406
+ #
1407
+ # @param [ Mongo::Crypt::Handle ] handle
1408
+ def self.setopt_bypass_query_analysis(handle)
1409
+ mongocrypt_setopt_bypass_query_analysis(handle.ref)
1410
+ end
1411
+
1412
+ # @!method self.mongocrypt_setopt_aes_256_ctr(crypt, aes_256_ctr_encrypt, aes_256_ctr_decrypt, ctx)
1413
+ # @api private
1414
+ #
1415
+ # Set a crypto hook for the AES256-CTR operations.
1416
+ #
1417
+ # @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
1418
+ # @param [ Proc ] aes_enc_fn An AES-CTR encryption method.
1419
+ # @param [ Proc ] aes_dec_fn An AES-CTR decryption method.
1420
+ # @param [ FFI::Pointer | nil ] ctx An optional pointer to a context object
1421
+ # that may have been set when hooks were enabled.
1422
+ # @return [ Boolean ] Whether setting this option succeeded.
1423
+ attach_function(
1424
+ :mongocrypt_setopt_aes_256_ctr,
1425
+ [
1426
+ :pointer,
1427
+ :mongocrypt_crypto_fn,
1428
+ :mongocrypt_crypto_fn,
1429
+ :pointer
1430
+ ],
1431
+ :bool
1432
+ )
1433
+
1434
+ # Set a crypto hook for the AES256-CTR operations.
1435
+ #
1436
+ # @param [ Mongo::Crypt::Handle ] handle
1437
+ # @param [ Method ] aes_encrypt_cb An AES-CTR encryption method
1438
+ # @param [ Method ] aes_decrypt_cb A AES-CTR decryption method
1439
+ #
1440
+ # @raise [ Mongo::Error::CryptError ] If the callbacks aren't set successfully
1441
+ def self.setopt_aes_256_ctr(handle, aes_ctr_encrypt_cb, aes_ctr_decrypt_cb)
1442
+ check_status(handle) do
1443
+ mongocrypt_setopt_aes_256_ctr(handle.ref,
1444
+ aes_ctr_encrypt_cb, aes_ctr_decrypt_cb, nil
1445
+ )
1446
+ end
1447
+ end
1448
+
1449
+ # @!method self.mongocrypt_setopt_append_crypt_shared_lib_search_path(crypt, path)
1450
+ # @api private
1451
+ #
1452
+ # Append an additional search directory to the search path for loading
1453
+ # the crypt_shared dynamic library.
1454
+ #
1455
+ # @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
1456
+ # @param [ String ] path A path to search for the crypt shared library. If the leading element of
1457
+ # the path is the literal string "$ORIGIN", that substring will be replaced
1458
+ # with the directory path containing the executable libmongocrypt module. If
1459
+ # the path string is literal "$SYSTEM", then libmongocrypt will defer to the
1460
+ # system's library resolution mechanism to find the crypt_shared library.
1461
+ attach_function(
1462
+ :mongocrypt_setopt_append_crypt_shared_lib_search_path,
1463
+ [
1464
+ :pointer,
1465
+ :string,
1466
+ ],
1467
+ :void
1468
+ )
1469
+
1470
+ # Append an additional search directory to the search path for loading
1471
+ # the crypt_shared dynamic library.
1472
+ #
1473
+ # @param [ Mongo::Crypt::Handle ] handle
1474
+ # @param [ String ] path A search path for the crypt shared library.
1475
+ def self.setopt_append_crypt_shared_lib_search_path(handle, path)
1476
+ check_status(handle) do
1477
+ mongocrypt_setopt_append_crypt_shared_lib_search_path(handle.ref, path)
1478
+ end
1479
+ end
1480
+
1481
+ # @!method self.mongocrypt_setopt_set_crypt_shared_lib_path_override(crypt, path)
1482
+ # @api private
1483
+ #
1484
+ # Set a single override path for loading the crypt shared library.
1485
+ #
1486
+ # @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
1487
+ # @param [ String ] path A path to crypt shared library file. If the leading element of
1488
+ # the path is the literal string "$ORIGIN", that substring will be replaced
1489
+ # with the directory path containing the executable libmongocrypt module.
1490
+ attach_function(
1491
+ :mongocrypt_setopt_set_crypt_shared_lib_path_override,
1492
+ [
1493
+ :pointer,
1494
+ :string,
1495
+ ],
1496
+ :void
1497
+ )
1498
+
1499
+ # Set a single override path for loading the crypt shared library.
1500
+ #
1501
+ # @param [ Mongo::Crypt::Handle ] handle
1502
+ # @param [ String ] path A path to crypt shared library file.
1503
+ def self.setopt_set_crypt_shared_lib_path_override(handle, path)
1504
+ check_status(handle) do
1505
+ mongocrypt_setopt_set_crypt_shared_lib_path_override(handle.ref, path)
1506
+ end
1507
+ end
1508
+
1509
+ # @!method self.mongocrypt_crypt_shared_lib_version(crypt)
1510
+ # @api private
1511
+ #
1512
+ # Obtain a 64-bit constant encoding the version of the loaded
1513
+ # crypt_shared library, if available.
1514
+ #
1515
+ # The version is encoded as four 16-bit numbers, from high to low:
1516
+ #
1517
+ # - Major version
1518
+ # - Minor version
1519
+ # - Revision
1520
+ # - Reserved
1521
+ #
1522
+ # For example, version 6.2.1 would be encoded as: 0x0006'0002'0001'0000
1523
+ #
1524
+ # @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
1525
+ #
1526
+ # @return [int64] A 64-bit encoded version number, with the version encoded as four
1527
+ # sixteen-bit integers, or zero if no crypt_shared library was loaded.
1528
+ attach_function(
1529
+ :mongocrypt_crypt_shared_lib_version,
1530
+ [ :pointer ],
1531
+ :uint64
1532
+ )
1533
+
1534
+ # Obtain a 64-bit constant encoding the version of the loaded
1535
+ # crypt_shared library, if available.
1536
+ #
1537
+ # The version is encoded as four 16-bit numbers, from high to low:
1538
+ #
1539
+ # - Major version
1540
+ # - Minor version
1541
+ # - Revision
1542
+ # - Reserved
1543
+ #
1544
+ # For example, version 6.2.1 would be encoded as: 0x0006'0002'0001'0000
1545
+ #
1546
+ # @param [ Mongo::Crypt::Handle ] handle
1547
+ #
1548
+ # @return [ Integer ] A 64-bit encoded version number, with the version encoded as four
1549
+ # sixteen-bit integers, or zero if no crypt_shared library was loaded.
1550
+ def self.crypt_shared_lib_version(handle)
1551
+ mongocrypt_crypt_shared_lib_version(handle.ref)
1552
+ end
1553
+
1554
+ # @!method self.mongocrypt_setopt_use_need_kms_credentials_state(crypt)
1555
+ # @api private
1556
+ #
1557
+ # Opt-into handling the MONGOCRYPT_CTX_NEED_KMS_CREDENTIALS state.
1558
+ #
1559
+ # If set, before entering the MONGOCRYPT_CTX_NEED_KMS state,
1560
+ # contexts may enter the MONGOCRYPT_CTX_NEED_KMS_CREDENTIALS state
1561
+ # and then wait for credentials to be supplied through
1562
+ # `mongocrypt_ctx_provide_kms_providers`.
1563
+ #
1564
+ # A context will only enter MONGOCRYPT_CTX_NEED_KMS_CREDENTIALS
1565
+ # if an empty document was set for a KMS provider in
1566
+ # `mongocrypt_setopt_kms_providers`.
1567
+ #
1568
+ # @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
1569
+ attach_function(
1570
+ :mongocrypt_setopt_use_need_kms_credentials_state,
1571
+ [ :pointer ],
1572
+ :void
1573
+ )
1574
+
1575
+ # Opt-into handling the MONGOCRYPT_CTX_NEED_KMS_CREDENTIALS state.
1576
+ #
1577
+ # If set, before entering the MONGOCRYPT_CTX_NEED_KMS state,
1578
+ # contexts may enter the MONGOCRYPT_CTX_NEED_KMS_CREDENTIALS state
1579
+ # and then wait for credentials to be supplied through
1580
+ # `mongocrypt_ctx_provide_kms_providers`.
1581
+ #
1582
+ # A context will only enter MONGOCRYPT_CTX_NEED_KMS_CREDENTIALS
1583
+ # if an empty document was set for a KMS provider in
1584
+ # `mongocrypt_setopt_kms_providers`.
1585
+ #
1586
+ # @param [ Mongo::Crypt::Handle ] handle
1587
+ def self.setopt_use_need_kms_credentials_state(handle)
1588
+ mongocrypt_setopt_use_need_kms_credentials_state(handle.ref)
1589
+ end
1590
+
1591
+ # @!method self.mongocrypt_ctx_provide_kms_providers(ctx, kms_providers)
1592
+ # @api private
1593
+ #
1594
+ # Call in response to the MONGOCRYPT_CTX_NEED_KMS_CREDENTIALS state
1595
+ # to set per-context KMS provider settings. These follow the same format
1596
+ # as `mongocrypt_setopt_kms_providers``. If no keys are present in the
1597
+ # BSON input, the KMS provider settings configured for the mongocrypt_t
1598
+ # at initialization are used.
1599
+ #
1600
+ # @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
1601
+ # @param [ FFI::Pointer ] kms_providers A pointer to a
1602
+ # mongocrypt_binary_t object that references a BSON document mapping
1603
+ # the KMS provider names to credentials.
1604
+ #
1605
+ # @returns [ true | false ] Returns whether the options was set successfully.
1606
+ attach_function(
1607
+ :mongocrypt_ctx_provide_kms_providers,
1608
+ [ :pointer, :pointer ],
1609
+ :bool
1610
+ )
1611
+
1612
+ # Call in response to the MONGOCRYPT_CTX_NEED_KMS_CREDENTIALS state
1613
+ # to set per-context KMS provider settings. These follow the same format
1614
+ # as `mongocrypt_setopt_kms_providers``. If no keys are present in the
1615
+ # BSON input, the KMS provider settings configured for the mongocrypt_t
1616
+ # at initialization are used.
1617
+ #
1618
+ # @param [ Mongo::Crypt::Context ] context Encryption context.
1619
+ # @param [ BSON::Document ] kms_providers BSON document mapping
1620
+ # the KMS provider names to credentials.
1621
+ #
1622
+ # @raise [ Mongo::Error::CryptError ] If the option is not set successfully.
1623
+ def self.ctx_provide_kms_providers(context, kms_providers)
1624
+ validate_document(kms_providers)
1625
+ data = kms_providers.to_bson.to_s
1626
+ Binary.wrap_string(data) do |data_p|
1627
+ check_ctx_status(context) do
1628
+ mongocrypt_ctx_provide_kms_providers(context.ctx_p, data_p)
1629
+ end
1630
+ end
1631
+ end
1632
+
1633
+ # @!method self.mongocrypt_ctx_setopt_query_type(ctx, mongocrypt_query_type)
1634
+ # @api private
1635
+ #
1636
+ # Set the query type to use for FLE 2 explicit encryption.
1637
+ # The query type is only used for indexed FLE 2 encryption.
1638
+ #
1639
+ # @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
1640
+ # @param [ String ] query_type Type of the query.
1641
+ # @param [ Integer ] len The length of the query type string.
1642
+ #
1643
+ # @return [ Boolean ] Whether setting this option succeeded.
1644
+ attach_function(
1645
+ :mongocrypt_ctx_setopt_query_type,
1646
+ [
1647
+ :pointer,
1648
+ :string,
1649
+ :int
1650
+ ],
1651
+ :bool
1652
+ )
1653
+
1654
+ # Set the query type to use for FLE 2 explicit encryption.
1655
+ # The query type is only used for indexed FLE 2 encryption.
1656
+ #
1657
+ # @param [ Mongo::Crypt::Context ] context Explicit encryption context.
1658
+ # @param [ String ] :mongocrypt_query_type query_type Type of the query.
1659
+ #
1660
+ # @raise [ Mongo::Error::CryptError ] If the operation failed.
1661
+ def self.ctx_setopt_query_type(context, query_type)
1662
+ check_ctx_status(context) do
1663
+ mongocrypt_ctx_setopt_query_type(context.ctx_p, query_type, -1)
1664
+ end
1665
+ end
1666
+
1667
+ # @!method self.mongocrypt_ctx_setopt_contention_factor(ctx, contention_factor)
1668
+ # @api private
1669
+ #
1670
+ # Set the contention factor used for explicit encryption.
1671
+ # The contention factor is only used for indexed FLE 2 encryption.
1672
+ #
1673
+ # @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
1674
+ # @param [ int64 ] contention_factor
1675
+ #
1676
+ # @return [ Boolean ] Whether setting this option succeeded.
1677
+ attach_function(
1678
+ :mongocrypt_ctx_setopt_contention_factor,
1679
+ [
1680
+ :pointer,
1681
+ :int64
1682
+ ],
1683
+ :bool
1684
+ )
1685
+
1686
+ # Set the contention factor used for explicit encryption.
1687
+ # The contention factor is only used for indexed FLE 2 encryption.
1688
+ #
1689
+ # @param [ Mongo::Crypt::Context ] context Explicit encryption context.
1690
+ # @param [ Integer ] factor Contention factor used for explicit encryption.
1691
+ #
1692
+ # @raise [ Mongo::Error::CryptError ] If the operation failed.
1693
+ def self.ctx_setopt_contention_factor(context, factor)
1694
+ check_ctx_status(context) do
1695
+ mongocrypt_ctx_setopt_contention_factor(context.ctx_p, factor)
1696
+ end
1697
+ end
1698
+
1699
+ # @!method self.mongocrypt_ctx_setopt_algorithm_range(ctx, opts)
1700
+ # @api private
1701
+ #
1702
+ # Set options for explicit encryption with the "rangePreview" algorithm.
1703
+ #
1704
+ # @note The RangePreview algorithm is experimental only. It is not intended for
1705
+ # public use.
1706
+ #
1707
+ # @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
1708
+ # @param [ FFI::Pointer ] opts opts A pointer to range
1709
+ # options document.
1710
+ #
1711
+ # @return [ Boolean ] Whether setting this option succeeded.
1712
+ attach_function(
1713
+ :mongocrypt_ctx_setopt_algorithm_range,
1714
+ [
1715
+ :pointer,
1716
+ :pointer
1717
+ ],
1718
+ :bool
1719
+ )
1720
+
1721
+ # Set options for explicit encryption with the "rangePreview" algorithm.
1722
+ #
1723
+ # @note The RangePreview algorithm is experimental only. It is not intended for
1724
+ # public use.
1725
+ #
1726
+ # @param [ Mongo::Crypt::Context ] context
1727
+ # @param [ Hash ] opts options
1728
+ #
1729
+ # @raise [ Mongo::Error::CryptError ] If the operation failed
1730
+ def self.ctx_setopt_algorithm_range(context, opts)
1731
+ validate_document(opts)
1732
+ data = opts.to_bson.to_s
1733
+ Binary.wrap_string(data) do |data_p|
1734
+ check_ctx_status(context) do
1735
+ mongocrypt_ctx_setopt_algorithm_range(context.ctx_p, data_p)
1736
+ end
1737
+ end
1738
+ end
1739
+
1174
1740
  # Raise a Mongo::Error::CryptError based on the status of the underlying
1175
1741
  # mongocrypt_t object.
1176
1742
  #