mongo 2.18.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 (1173) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +12 -2
  4. data/Rakefile +4 -3
  5. data/bin/mongo_console +2 -0
  6. data/lib/mongo/active_support.rb +1 -1
  7. data/lib/mongo/address/ipv4.rb +1 -1
  8. data/lib/mongo/address/ipv6.rb +1 -1
  9. data/lib/mongo/address/unix.rb +1 -1
  10. data/lib/mongo/address/validator.rb +1 -1
  11. data/lib/mongo/address.rb +1 -1
  12. data/lib/mongo/auth/aws/conversation.rb +1 -5
  13. data/lib/mongo/{operation/get_more/command.rb → auth/aws/credentials.rb} +15 -20
  14. data/lib/mongo/auth/aws/credentials_cache.rb +75 -0
  15. data/lib/mongo/auth/aws/credentials_retriever.rb +172 -37
  16. data/lib/mongo/auth/aws/request.rb +1 -2
  17. data/lib/mongo/auth/aws.rb +6 -6
  18. data/lib/mongo/auth/base.rb +1 -1
  19. data/lib/mongo/auth/conversation_base.rb +1 -1
  20. data/lib/mongo/auth/cr/conversation.rb +1 -1
  21. data/lib/mongo/auth/cr.rb +1 -1
  22. data/lib/mongo/auth/credential_cache.rb +1 -1
  23. data/lib/mongo/auth/gssapi/conversation.rb +1 -1
  24. data/lib/mongo/auth/gssapi.rb +1 -1
  25. data/lib/mongo/auth/ldap/conversation.rb +1 -1
  26. data/lib/mongo/auth/ldap.rb +1 -1
  27. data/lib/mongo/auth/roles.rb +17 -17
  28. data/lib/mongo/auth/sasl_conversation_base.rb +1 -1
  29. data/lib/mongo/auth/scram/conversation.rb +1 -1
  30. data/lib/mongo/auth/scram.rb +1 -1
  31. data/lib/mongo/auth/scram256/conversation.rb +1 -1
  32. data/lib/mongo/auth/scram256.rb +1 -1
  33. data/lib/mongo/auth/scram_conversation_base.rb +1 -1
  34. data/lib/mongo/auth/stringprep/profiles/sasl.rb +1 -1
  35. data/lib/mongo/auth/stringprep/tables.rb +1 -1
  36. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +1 -1
  37. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +2 -1
  38. data/lib/mongo/auth/stringprep.rb +1 -1
  39. data/lib/mongo/auth/user/view.rb +1 -1
  40. data/lib/mongo/auth/user.rb +1 -1
  41. data/lib/mongo/auth/x509/conversation.rb +1 -1
  42. data/lib/mongo/auth/x509.rb +1 -1
  43. data/lib/mongo/auth.rb +1 -1
  44. data/lib/mongo/background_thread.rb +1 -1
  45. data/lib/mongo/bson.rb +1 -1
  46. data/lib/mongo/bulk_write/combineable.rb +1 -1
  47. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
  48. data/lib/mongo/bulk_write/result.rb +1 -1
  49. data/lib/mongo/bulk_write/result_combiner.rb +1 -1
  50. data/lib/mongo/bulk_write/transformable.rb +1 -1
  51. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
  52. data/lib/mongo/bulk_write/validatable.rb +1 -1
  53. data/lib/mongo/bulk_write.rb +7 -5
  54. data/lib/mongo/caching_cursor.rb +1 -1
  55. data/lib/mongo/client.rb +53 -5
  56. data/lib/mongo/client_encryption.rb +102 -1
  57. data/lib/mongo/cluster/periodic_executor.rb +1 -1
  58. data/lib/mongo/cluster/reapers/cursor_reaper.rb +2 -6
  59. data/lib/mongo/cluster/reapers/socket_reaper.rb +2 -2
  60. data/lib/mongo/cluster/sdam_flow.rb +42 -15
  61. data/lib/mongo/cluster/topology/base.rb +1 -1
  62. data/lib/mongo/cluster/topology/load_balanced.rb +1 -1
  63. data/lib/mongo/cluster/topology/no_replica_set_options.rb +1 -1
  64. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +1 -1
  65. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +1 -1
  66. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  67. data/lib/mongo/cluster/topology/single.rb +1 -1
  68. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  69. data/lib/mongo/cluster/topology.rb +1 -1
  70. data/lib/mongo/cluster.rb +29 -12
  71. data/lib/mongo/cluster_time.rb +1 -1
  72. data/lib/mongo/collection/helpers.rb +1 -1
  73. data/lib/mongo/collection/queryable_encryption.rb +83 -43
  74. data/lib/mongo/collection/view/aggregation.rb +1 -1
  75. data/lib/mongo/collection/view/builder/aggregation.rb +1 -1
  76. data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
  77. data/lib/mongo/collection/view/builder.rb +1 -1
  78. data/lib/mongo/collection/view/change_stream/retryable.rb +1 -1
  79. data/lib/mongo/collection/view/change_stream.rb +3 -3
  80. data/lib/mongo/collection/view/explainable.rb +1 -1
  81. data/lib/mongo/collection/view/immutable.rb +1 -1
  82. data/lib/mongo/collection/view/iterable.rb +1 -1
  83. data/lib/mongo/collection/view/map_reduce.rb +1 -1
  84. data/lib/mongo/collection/view/readable.rb +11 -12
  85. data/lib/mongo/collection/view/writable.rb +1 -3
  86. data/lib/mongo/collection/view.rb +1 -1
  87. data/lib/mongo/collection.rb +179 -57
  88. data/lib/mongo/condition_variable.rb +58 -0
  89. data/lib/mongo/config/options.rb +1 -0
  90. data/lib/mongo/config/validators/option.rb +1 -0
  91. data/lib/mongo/config.rb +1 -0
  92. data/lib/mongo/crypt/auto_decryption_context.rb +1 -1
  93. data/lib/mongo/crypt/auto_encrypter.rb +5 -3
  94. data/lib/mongo/crypt/auto_encryption_context.rb +1 -1
  95. data/lib/mongo/crypt/binary.rb +1 -1
  96. data/lib/mongo/crypt/binding.rb +224 -30
  97. data/lib/mongo/crypt/context.rb +67 -4
  98. data/lib/mongo/crypt/data_key_context.rb +1 -1
  99. data/lib/mongo/crypt/encryption_io.rb +2 -2
  100. data/lib/mongo/crypt/explicit_decryption_context.rb +1 -1
  101. data/lib/mongo/crypt/explicit_encrypter.rb +120 -34
  102. data/lib/mongo/crypt/explicit_encryption_context.rb +58 -27
  103. data/lib/mongo/{operation/command/command.rb → crypt/explicit_encryption_expression_context.rb} +9 -20
  104. data/lib/mongo/crypt/handle.rb +10 -2
  105. data/lib/mongo/crypt/hooks.rb +1 -1
  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 +3 -119
  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 +5 -128
  114. data/lib/mongo/crypt/kms/credentials.rb +17 -2
  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 +4 -172
  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 +3 -100
  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 +3 -66
  125. data/lib/mongo/crypt/kms/master_key_document.rb +1 -1
  126. data/lib/mongo/crypt/kms.rb +7 -2
  127. data/lib/mongo/crypt/kms_context.rb +1 -1
  128. data/lib/mongo/crypt/rewrap_many_data_key_context.rb +1 -1
  129. data/lib/mongo/crypt/rewrap_many_data_key_result.rb +1 -1
  130. data/lib/mongo/crypt/status.rb +1 -1
  131. data/lib/mongo/crypt.rb +13 -1
  132. data/lib/mongo/cursor/kill_spec.rb +1 -1
  133. data/lib/mongo/cursor.rb +40 -6
  134. data/lib/mongo/database/view.rb +41 -4
  135. data/lib/mongo/database.rb +2 -2
  136. data/lib/mongo/dbref.rb +1 -1
  137. data/lib/mongo/distinguishing_semaphore.rb +2 -2
  138. data/lib/mongo/error/auth_error.rb +1 -1
  139. data/lib/mongo/error/bad_load_balancer_target.rb +1 -1
  140. data/lib/mongo/error/bulk_write_error.rb +1 -1
  141. data/lib/mongo/error/change_stream_resumable.rb +1 -1
  142. data/lib/mongo/{operation/drop_database/command.rb → error/client_closed.rb} +4 -21
  143. data/lib/mongo/error/closed_stream.rb +1 -1
  144. data/lib/mongo/error/connection_check_out_timeout.rb +1 -1
  145. data/lib/mongo/error/connection_perished.rb +3 -1
  146. data/lib/mongo/error/connection_unavailable.rb +27 -0
  147. data/lib/mongo/error/credential_check_error.rb +1 -1
  148. data/lib/mongo/error/crypt_error.rb +1 -1
  149. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  150. data/lib/mongo/error/failed_string_prep_validation.rb +1 -1
  151. data/lib/mongo/error/file_not_found.rb +1 -1
  152. data/lib/mongo/error/handshake_error.rb +1 -1
  153. data/lib/mongo/error/insufficient_iteration_count.rb +1 -1
  154. data/lib/mongo/error/internal_driver_error.rb +1 -1
  155. data/lib/mongo/error/invalid_address.rb +1 -1
  156. data/lib/mongo/error/invalid_application_name.rb +1 -1
  157. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  158. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  159. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  160. data/lib/mongo/error/invalid_config_option.rb +1 -0
  161. data/lib/mongo/error/invalid_cursor_operation.rb +1 -1
  162. data/lib/mongo/error/invalid_database_name.rb +1 -1
  163. data/lib/mongo/error/invalid_document.rb +1 -1
  164. data/lib/mongo/error/invalid_file.rb +1 -1
  165. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  166. data/lib/mongo/{operation/drop/command.rb → error/invalid_max_connecting.rb} +8 -21
  167. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  168. data/lib/mongo/error/invalid_nonce.rb +1 -1
  169. data/lib/mongo/error/invalid_read_concern.rb +1 -1
  170. data/lib/mongo/error/invalid_read_option.rb +2 -2
  171. data/lib/mongo/error/invalid_replacement_document.rb +1 -1
  172. data/lib/mongo/error/invalid_server_auth_host.rb +1 -1
  173. data/lib/mongo/error/invalid_server_auth_response.rb +1 -1
  174. data/lib/mongo/error/invalid_server_preference.rb +1 -1
  175. data/lib/mongo/error/invalid_session.rb +1 -1
  176. data/lib/mongo/error/invalid_signature.rb +1 -1
  177. data/lib/mongo/error/invalid_transaction_operation.rb +1 -1
  178. data/lib/mongo/error/invalid_txt_record.rb +1 -1
  179. data/lib/mongo/error/invalid_update_document.rb +1 -1
  180. data/lib/mongo/error/invalid_uri.rb +1 -1
  181. data/lib/mongo/error/invalid_write_concern.rb +1 -1
  182. data/lib/mongo/error/kms_error.rb +1 -1
  183. data/lib/mongo/error/labelable.rb +1 -1
  184. data/lib/mongo/error/lint_error.rb +1 -1
  185. data/lib/mongo/error/max_bson_size.rb +1 -1
  186. data/lib/mongo/error/max_message_size.rb +1 -1
  187. data/lib/mongo/error/mismatched_domain.rb +1 -1
  188. data/lib/mongo/error/missing_connection.rb +4 -2
  189. data/lib/mongo/error/missing_file_chunk.rb +1 -1
  190. data/lib/mongo/error/missing_password.rb +1 -1
  191. data/lib/mongo/error/missing_resume_token.rb +1 -1
  192. data/lib/mongo/error/missing_scram_server_signature.rb +1 -1
  193. data/lib/mongo/error/missing_service_id.rb +1 -1
  194. data/lib/mongo/error/mongocryptd_spawn_error.rb +1 -1
  195. data/lib/mongo/error/multi_index_drop.rb +1 -1
  196. data/lib/mongo/error/need_primary_server.rb +1 -1
  197. data/lib/mongo/error/no_server_available.rb +1 -1
  198. data/lib/mongo/error/no_service_connection_available.rb +1 -1
  199. data/lib/mongo/error/no_srv_records.rb +1 -1
  200. data/lib/mongo/error/notable.rb +8 -1
  201. data/lib/mongo/error/operation_failure.rb +1 -1
  202. data/lib/mongo/error/parser.rb +1 -1
  203. data/lib/mongo/{operation/create_user/command.rb → error/pool_cleared_error.rb} +17 -23
  204. data/lib/mongo/error/pool_closed_error.rb +4 -17
  205. data/lib/mongo/{operation/remove_user/command.rb → error/pool_error.rb} +21 -22
  206. data/lib/mongo/{operation/drop_index/command.rb → error/pool_paused_error.rb} +17 -22
  207. data/lib/mongo/error/raise_original_error.rb +1 -1
  208. data/lib/mongo/error/read_write_retryable.rb +1 -1
  209. data/lib/mongo/error/sdam_error_detection.rb +1 -1
  210. data/lib/mongo/error/server_api_conflict.rb +1 -1
  211. data/lib/mongo/error/server_api_not_supported.rb +1 -1
  212. data/lib/mongo/error/server_certificate_revoked.rb +1 -1
  213. data/lib/mongo/{operation/get_more/legacy.rb → error/server_not_usable.rb} +13 -16
  214. data/lib/mongo/error/session_ended.rb +1 -1
  215. data/lib/mongo/error/session_not_materialized.rb +1 -1
  216. data/lib/mongo/error/sessions_not_supported.rb +1 -1
  217. data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -1
  218. data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -1
  219. data/lib/mongo/error/socket_error.rb +1 -1
  220. data/lib/mongo/error/socket_timeout_error.rb +1 -1
  221. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  222. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  223. data/lib/mongo/error/unexpected_response.rb +1 -1
  224. data/lib/mongo/error/unknown_payload_type.rb +1 -1
  225. data/lib/mongo/error/unmet_dependency.rb +1 -1
  226. data/lib/mongo/error/unsupported_array_filters.rb +1 -1
  227. data/lib/mongo/error/unsupported_collation.rb +1 -1
  228. data/lib/mongo/error/unsupported_features.rb +1 -1
  229. data/lib/mongo/error/unsupported_message_type.rb +1 -1
  230. data/lib/mongo/error/unsupported_option.rb +1 -1
  231. data/lib/mongo/error/write_retryable.rb +1 -1
  232. data/lib/mongo/error.rb +8 -1
  233. data/lib/mongo/event/base.rb +1 -1
  234. data/lib/mongo/event/listeners.rb +1 -1
  235. data/lib/mongo/event/publisher.rb +1 -1
  236. data/lib/mongo/event/subscriber.rb +1 -1
  237. data/lib/mongo/event.rb +1 -1
  238. data/lib/mongo/grid/file/chunk.rb +3 -2
  239. data/lib/mongo/grid/file/info.rb +3 -2
  240. data/lib/mongo/grid/file.rb +1 -1
  241. data/lib/mongo/grid/fs_bucket.rb +1 -1
  242. data/lib/mongo/grid/stream/read.rb +1 -1
  243. data/lib/mongo/grid/stream/write.rb +1 -1
  244. data/lib/mongo/grid/stream.rb +1 -1
  245. data/lib/mongo/grid.rb +1 -1
  246. data/lib/mongo/id.rb +1 -1
  247. data/lib/mongo/index/view.rb +1 -1
  248. data/lib/mongo/index.rb +1 -1
  249. data/lib/mongo/lint.rb +1 -1
  250. data/lib/mongo/loggable.rb +3 -3
  251. data/lib/mongo/logger.rb +1 -1
  252. data/lib/mongo/monitoring/cmap_log_subscriber.rb +1 -1
  253. data/lib/mongo/monitoring/command_log_subscriber.rb +1 -1
  254. data/lib/mongo/monitoring/event/cmap/base.rb +1 -1
  255. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -1
  256. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +1 -1
  257. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -1
  258. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +1 -1
  259. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -1
  260. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -1
  261. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -1
  262. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +9 -2
  263. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -1
  264. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -1
  265. data/lib/mongo/monitoring/event/cmap/pool_ready.rb +67 -0
  266. data/lib/mongo/monitoring/event/cmap.rb +2 -1
  267. data/lib/mongo/monitoring/event/command_failed.rb +1 -1
  268. data/lib/mongo/monitoring/event/command_started.rb +1 -1
  269. data/lib/mongo/monitoring/event/command_succeeded.rb +1 -1
  270. data/lib/mongo/monitoring/event/secure.rb +1 -1
  271. data/lib/mongo/monitoring/event/server_closed.rb +1 -1
  272. data/lib/mongo/monitoring/event/server_description_changed.rb +1 -1
  273. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +1 -1
  274. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -1
  275. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +1 -1
  276. data/lib/mongo/monitoring/event/server_opening.rb +1 -1
  277. data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
  278. data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
  279. data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
  280. data/lib/mongo/monitoring/event.rb +1 -1
  281. data/lib/mongo/monitoring/publishable.rb +1 -1
  282. data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
  283. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
  284. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
  285. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
  286. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  287. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +1 -1
  288. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
  289. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -1
  290. data/lib/mongo/monitoring.rb +1 -1
  291. data/lib/mongo/operation/aggregate/op_msg.rb +1 -1
  292. data/lib/mongo/operation/aggregate/result.rb +1 -1
  293. data/lib/mongo/operation/aggregate.rb +2 -3
  294. data/lib/mongo/operation/collections_info/result.rb +1 -1
  295. data/lib/mongo/operation/collections_info.rb +4 -16
  296. data/lib/mongo/operation/command/op_msg.rb +1 -1
  297. data/lib/mongo/operation/command.rb +2 -3
  298. data/lib/mongo/operation/context.rb +1 -1
  299. data/lib/mongo/operation/count/op_msg.rb +1 -1
  300. data/lib/mongo/operation/count.rb +2 -3
  301. data/lib/mongo/operation/create/op_msg.rb +1 -1
  302. data/lib/mongo/operation/create.rb +2 -3
  303. data/lib/mongo/operation/create_index/op_msg.rb +1 -1
  304. data/lib/mongo/operation/create_index.rb +2 -3
  305. data/lib/mongo/operation/create_user/op_msg.rb +1 -1
  306. data/lib/mongo/operation/create_user.rb +2 -3
  307. data/lib/mongo/operation/delete/bulk_result.rb +1 -1
  308. data/lib/mongo/operation/delete/op_msg.rb +1 -1
  309. data/lib/mongo/operation/delete/result.rb +1 -1
  310. data/lib/mongo/operation/delete.rb +1 -2
  311. data/lib/mongo/operation/distinct/op_msg.rb +1 -1
  312. data/lib/mongo/operation/distinct.rb +2 -3
  313. data/lib/mongo/operation/drop/op_msg.rb +1 -1
  314. data/lib/mongo/operation/drop.rb +2 -3
  315. data/lib/mongo/operation/drop_database/op_msg.rb +1 -1
  316. data/lib/mongo/operation/drop_database.rb +2 -3
  317. data/lib/mongo/operation/drop_index/op_msg.rb +1 -1
  318. data/lib/mongo/operation/drop_index.rb +2 -3
  319. data/lib/mongo/operation/explain/op_msg.rb +1 -1
  320. data/lib/mongo/operation/explain/result.rb +1 -1
  321. data/lib/mongo/operation/explain.rb +2 -4
  322. data/lib/mongo/operation/find/builder/command.rb +1 -1
  323. data/lib/mongo/operation/find/builder/flags.rb +1 -1
  324. data/lib/mongo/operation/find/builder/modifiers.rb +1 -1
  325. data/lib/mongo/operation/find/builder.rb +1 -2
  326. data/lib/mongo/operation/find/op_msg.rb +1 -1
  327. data/lib/mongo/operation/find/result.rb +1 -1
  328. data/lib/mongo/operation/find.rb +2 -4
  329. data/lib/mongo/operation/get_more/command_builder.rb +1 -1
  330. data/lib/mongo/operation/get_more/op_msg.rb +1 -1
  331. data/lib/mongo/operation/get_more/result.rb +1 -1
  332. data/lib/mongo/operation/get_more.rb +2 -4
  333. data/lib/mongo/operation/indexes/op_msg.rb +1 -1
  334. data/lib/mongo/operation/indexes/result.rb +1 -1
  335. data/lib/mongo/operation/indexes.rb +2 -18
  336. data/lib/mongo/operation/insert/bulk_result.rb +1 -1
  337. data/lib/mongo/operation/insert/op_msg.rb +1 -1
  338. data/lib/mongo/operation/insert/result.rb +1 -1
  339. data/lib/mongo/operation/insert.rb +1 -2
  340. data/lib/mongo/operation/kill_cursors/command_builder.rb +1 -1
  341. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -1
  342. data/lib/mongo/operation/kill_cursors.rb +2 -3
  343. data/lib/mongo/operation/list_collections/op_msg.rb +1 -1
  344. data/lib/mongo/operation/list_collections/result.rb +1 -1
  345. data/lib/mongo/operation/list_collections.rb +2 -3
  346. data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
  347. data/lib/mongo/operation/map_reduce/result.rb +1 -1
  348. data/lib/mongo/operation/map_reduce.rb +2 -3
  349. data/lib/mongo/operation/op_msg_base.rb +1 -1
  350. data/lib/mongo/operation/parallel_scan/op_msg.rb +1 -1
  351. data/lib/mongo/operation/parallel_scan/result.rb +1 -1
  352. data/lib/mongo/operation/parallel_scan.rb +2 -3
  353. data/lib/mongo/operation/remove_user/op_msg.rb +1 -1
  354. data/lib/mongo/operation/remove_user.rb +2 -3
  355. data/lib/mongo/operation/result.rb +1 -1
  356. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -1
  357. data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -1
  358. data/lib/mongo/operation/shared/executable.rb +1 -1
  359. data/lib/mongo/operation/shared/executable_no_validate.rb +1 -1
  360. data/lib/mongo/operation/shared/executable_transaction_label.rb +1 -1
  361. data/lib/mongo/operation/shared/idable.rb +1 -1
  362. data/lib/mongo/operation/shared/limited.rb +1 -1
  363. data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
  364. data/lib/mongo/operation/shared/{polymorphic_operation.rb → op_msg_executable.rb} +12 -7
  365. data/lib/mongo/operation/shared/polymorphic_lookup.rb +1 -1
  366. data/lib/mongo/operation/shared/polymorphic_result.rb +1 -1
  367. data/lib/mongo/operation/shared/read_preference_supported.rb +1 -1
  368. data/lib/mongo/operation/shared/response_handling.rb +1 -1
  369. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -1
  370. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +1 -1
  371. data/lib/mongo/operation/shared/sessions_supported.rb +1 -2
  372. data/lib/mongo/operation/shared/specifiable.rb +1 -1
  373. data/lib/mongo/operation/shared/validatable.rb +1 -1
  374. data/lib/mongo/operation/shared/write.rb +1 -1
  375. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
  376. data/lib/mongo/operation/update/bulk_result.rb +1 -1
  377. data/lib/mongo/operation/update/op_msg.rb +1 -1
  378. data/lib/mongo/operation/update/result.rb +1 -1
  379. data/lib/mongo/operation/update.rb +1 -2
  380. data/lib/mongo/operation/update_user/op_msg.rb +1 -1
  381. data/lib/mongo/operation/update_user.rb +2 -3
  382. data/lib/mongo/operation/users_info/op_msg.rb +1 -1
  383. data/lib/mongo/operation/users_info/result.rb +1 -1
  384. data/lib/mongo/operation/users_info.rb +2 -3
  385. data/lib/mongo/operation/write_command/op_msg.rb +1 -1
  386. data/lib/mongo/operation/write_command.rb +2 -3
  387. data/lib/mongo/operation.rb +2 -4
  388. data/lib/mongo/options/mapper.rb +1 -1
  389. data/lib/mongo/options/redacted.rb +1 -1
  390. data/lib/mongo/options.rb +1 -1
  391. data/lib/mongo/protocol/bit_vector.rb +4 -2
  392. data/lib/mongo/protocol/caching_hash.rb +4 -21
  393. data/lib/mongo/protocol/compressed.rb +1 -1
  394. data/lib/mongo/protocol/get_more.rb +1 -1
  395. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  396. data/lib/mongo/protocol/message.rb +5 -9
  397. data/lib/mongo/protocol/msg.rb +2 -1
  398. data/lib/mongo/protocol/query.rb +1 -1
  399. data/lib/mongo/protocol/registry.rb +1 -1
  400. data/lib/mongo/protocol/reply.rb +1 -1
  401. data/lib/mongo/protocol/serializers.rb +25 -18
  402. data/lib/mongo/protocol.rb +1 -4
  403. data/lib/mongo/query_cache.rb +21 -21
  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 +31 -502
  408. data/lib/mongo/semaphore.rb +2 -2
  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 +75 -108
  413. data/lib/mongo/server/connection.rb +61 -20
  414. data/lib/mongo/server/connection_base.rb +1 -1
  415. data/lib/mongo/server/connection_common.rb +1 -1
  416. data/lib/mongo/server/connection_pool/generation_manager.rb +56 -12
  417. data/lib/mongo/server/connection_pool/populator.rb +33 -31
  418. data/lib/mongo/server/connection_pool.rb +726 -265
  419. data/lib/mongo/server/description/features.rb +2 -2
  420. data/lib/mongo/server/description/load_balancer.rb +1 -1
  421. data/lib/mongo/server/description.rb +7 -6
  422. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  423. data/lib/mongo/server/monitor/connection.rb +1 -1
  424. data/lib/mongo/server/monitor.rb +11 -7
  425. data/lib/mongo/server/pending_connection.rb +1 -1
  426. data/lib/mongo/server/push_monitor/connection.rb +1 -1
  427. data/lib/mongo/server/push_monitor.rb +1 -1
  428. data/lib/mongo/server/round_trip_time_averager.rb +1 -1
  429. data/lib/mongo/server.rb +96 -30
  430. data/lib/mongo/server_selector/base.rb +24 -3
  431. data/lib/mongo/server_selector/nearest.rb +1 -1
  432. data/lib/mongo/server_selector/primary.rb +1 -1
  433. data/lib/mongo/server_selector/primary_preferred.rb +1 -1
  434. data/lib/mongo/server_selector/secondary.rb +1 -1
  435. data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
  436. data/lib/mongo/server_selector.rb +1 -1
  437. data/lib/mongo/session/server_session.rb +1 -1
  438. data/lib/mongo/session/session_pool.rb +1 -1
  439. data/lib/mongo/session.rb +2 -2
  440. data/lib/mongo/socket/ocsp_cache.rb +1 -1
  441. data/lib/mongo/socket/ocsp_verifier.rb +1 -1
  442. data/lib/mongo/socket/ssl.rb +1 -1
  443. data/lib/mongo/socket/tcp.rb +1 -1
  444. data/lib/mongo/socket/unix.rb +1 -1
  445. data/lib/mongo/socket.rb +29 -2
  446. data/lib/mongo/srv/monitor.rb +1 -3
  447. data/lib/mongo/srv/resolver.rb +1 -1
  448. data/lib/mongo/srv/result.rb +1 -1
  449. data/lib/mongo/srv.rb +1 -1
  450. data/lib/mongo/timeout.rb +2 -2
  451. data/lib/mongo/topology_version.rb +1 -1
  452. data/lib/mongo/uri/options_mapper.rb +322 -81
  453. data/lib/mongo/uri/srv_protocol.rb +1 -1
  454. data/lib/mongo/uri.rb +41 -13
  455. data/lib/mongo/utils.rb +1 -1
  456. data/lib/mongo/version.rb +2 -2
  457. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  458. data/lib/mongo/write_concern/base.rb +1 -1
  459. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  460. data/lib/mongo/write_concern.rb +1 -1
  461. data/lib/mongo.rb +2 -1
  462. data/mongo.gemspec +5 -2
  463. data/spec/atlas/atlas_connectivity_spec.rb +1 -1
  464. data/spec/atlas/operations_spec.rb +3 -8
  465. data/spec/integration/auth_spec.rb +1 -1
  466. data/spec/integration/awaited_ismaster_spec.rb +1 -1
  467. data/spec/integration/aws_auth_credentials_cache_spec.rb +51 -0
  468. data/spec/integration/aws_auth_request_spec.rb +2 -2
  469. data/spec/integration/aws_credentials_retriever_spec.rb +32 -2
  470. data/spec/integration/aws_lambda_examples_spec.rb +1 -1
  471. data/spec/integration/bson_symbol_spec.rb +1 -1
  472. data/spec/integration/bulk_insert_spec.rb +1 -1
  473. data/spec/integration/bulk_write_error_message_spec.rb +1 -0
  474. data/spec/integration/bulk_write_spec.rb +1 -1
  475. data/spec/integration/change_stream_examples_spec.rb +1 -1
  476. data/spec/integration/change_stream_spec.rb +6 -1
  477. data/spec/integration/check_clean_slate_spec.rb +1 -1
  478. data/spec/integration/client_authentication_options_spec.rb +1 -1
  479. data/spec/integration/client_connectivity_spec.rb +1 -1
  480. data/spec/integration/client_construction_aws_auth_spec.rb +12 -3
  481. data/spec/integration/client_construction_spec.rb +23 -1
  482. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +1 -1
  483. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +1 -1
  484. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +1 -1
  485. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +1 -1
  486. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +10 -5
  487. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +38 -2
  488. data/spec/integration/client_side_encryption/automatic_data_encryption_keys_prose_spec.rb +153 -0
  489. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +1 -1
  490. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +1 -1
  491. data/spec/integration/client_side_encryption/client_close_spec.rb +1 -1
  492. data/spec/integration/client_side_encryption/corpus_spec.rb +1 -1
  493. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +3 -3
  494. data/spec/integration/client_side_encryption/data_key_spec.rb +1 -1
  495. data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +59 -58
  496. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +1 -1
  497. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +36 -33
  498. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +1 -1
  499. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +3 -3
  500. data/spec/integration/client_side_encryption/kms_tls_spec.rb +1 -1
  501. data/spec/integration/client_side_encryption/mongocryptd_prose_spec.rb +105 -0
  502. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +49 -0
  503. data/spec/integration/client_side_encryption/on_demand_azure_credentials_spec.rb +46 -0
  504. data/spec/integration/client_side_encryption/on_demand_gcp_credentials_spec.rb +47 -0
  505. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +14 -11
  506. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +536 -0
  507. data/spec/integration/client_side_encryption/rewrap_prose_spec.rb +114 -0
  508. data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +20 -16
  509. data/spec/integration/client_side_encryption/views_spec.rb +1 -1
  510. data/spec/integration/client_spec.rb +8 -3
  511. data/spec/integration/client_update_spec.rb +7 -3
  512. data/spec/integration/collection_indexes_prose_spec.rb +1 -1
  513. data/spec/integration/command_monitoring_spec.rb +1 -1
  514. data/spec/integration/command_spec.rb +2 -24
  515. data/spec/integration/connect_single_rs_name_spec.rb +1 -1
  516. data/spec/integration/connection/faas_env_spec.rb +62 -0
  517. data/spec/integration/connection_pool_populator_spec.rb +27 -7
  518. data/spec/integration/connection_spec.rb +1 -1
  519. data/spec/integration/crud_spec.rb +1 -1
  520. data/spec/integration/cursor_pinning_spec.rb +6 -2
  521. data/spec/integration/cursor_reaping_spec.rb +1 -1
  522. data/spec/integration/docs_examples_spec.rb +2 -2
  523. data/spec/integration/error_detection_spec.rb +1 -1
  524. data/spec/integration/fork_reconnect_spec.rb +2 -2
  525. data/spec/integration/get_more_spec.rb +1 -1
  526. data/spec/integration/grid_fs_bucket_spec.rb +1 -1
  527. data/spec/integration/heartbeat_events_spec.rb +1 -1
  528. data/spec/integration/map_reduce_spec.rb +5 -1
  529. data/spec/integration/mmapv1_spec.rb +1 -1
  530. data/spec/integration/mongos_pinning_spec.rb +1 -1
  531. data/spec/integration/ocsp_connectivity_spec.rb +1 -1
  532. data/spec/integration/ocsp_verifier_cache_spec.rb +1 -1
  533. data/spec/integration/ocsp_verifier_spec.rb +2 -2
  534. data/spec/integration/operation_failure_code_spec.rb +1 -1
  535. data/spec/integration/operation_failure_message_spec.rb +1 -0
  536. data/spec/integration/query_cache_spec.rb +90 -3
  537. data/spec/integration/query_cache_transactions_spec.rb +1 -1
  538. data/spec/integration/read_concern_spec.rb +1 -1
  539. data/spec/integration/read_preference_spec.rb +1 -1
  540. data/spec/integration/reconnect_spec.rb +4 -1
  541. data/spec/integration/retryable_errors_spec.rb +1 -1
  542. data/spec/integration/retryable_reads_errors_spec.rb +110 -0
  543. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
  544. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
  545. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +1 -1
  546. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +1 -1
  547. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +1 -1
  548. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +1 -1
  549. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +1 -1
  550. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +1 -1
  551. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +1 -1
  552. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +1 -1
  553. data/spec/integration/retryable_writes/shared/supports_retries.rb +1 -1
  554. data/spec/integration/retryable_writes_errors_spec.rb +160 -2
  555. data/spec/integration/sdam_error_handling_spec.rb +65 -4
  556. data/spec/integration/sdam_events_spec.rb +1 -1
  557. data/spec/integration/sdam_prose_spec.rb +3 -3
  558. data/spec/integration/secondary_reads_spec.rb +1 -0
  559. data/spec/integration/server_description_spec.rb +1 -1
  560. data/spec/integration/server_monitor_spec.rb +1 -1
  561. data/spec/integration/server_selection_spec.rb +1 -1
  562. data/spec/integration/server_selector_spec.rb +5 -3
  563. data/spec/integration/server_spec.rb +23 -26
  564. data/spec/integration/shell_examples_spec.rb +1 -1
  565. data/spec/integration/size_limit_spec.rb +1 -1
  566. data/spec/integration/snappy_compression_spec.rb +1 -1
  567. data/spec/integration/snapshot_query_examples_spec.rb +9 -7
  568. data/spec/integration/srv_monitoring_spec.rb +2 -1
  569. data/spec/integration/srv_spec.rb +3 -3
  570. data/spec/integration/ssl_uri_options_spec.rb +1 -1
  571. data/spec/integration/step_down_spec.rb +5 -3
  572. data/spec/integration/time_zone_querying_spec.rb +1 -1
  573. data/spec/integration/transaction_pinning_spec.rb +18 -4
  574. data/spec/integration/transactions_api_examples_spec.rb +1 -1
  575. data/spec/integration/transactions_examples_spec.rb +1 -1
  576. data/spec/integration/truncated_utf8_spec.rb +1 -1
  577. data/spec/integration/versioned_api_examples_spec.rb +2 -2
  578. data/spec/integration/x509_auth_spec.rb +1 -1
  579. data/spec/integration/zlib_compression_spec.rb +1 -1
  580. data/spec/integration/zstd_compression_spec.rb +1 -1
  581. data/spec/kerberos/kerberos_spec.rb +1 -1
  582. data/spec/lite_spec_helper.rb +15 -2
  583. data/spec/mongo/address/ipv4_spec.rb +1 -1
  584. data/spec/mongo/address/ipv6_spec.rb +1 -1
  585. data/spec/mongo/address/unix_spec.rb +1 -1
  586. data/spec/mongo/address/validator_spec.rb +1 -1
  587. data/spec/mongo/address_spec.rb +8 -2
  588. data/spec/mongo/auth/aws/credential_cache_spec.rb +63 -0
  589. data/spec/mongo/auth/aws/credentials_retriever_spec.rb +90 -0
  590. data/spec/mongo/auth/aws/credentials_spec.rb +46 -0
  591. data/spec/mongo/auth/aws/request_region_spec.rb +1 -1
  592. data/spec/mongo/auth/aws/request_spec.rb +1 -1
  593. data/spec/mongo/auth/cr_spec.rb +2 -22
  594. data/spec/mongo/auth/gssapi/conversation_spec.rb +1 -1
  595. data/spec/mongo/auth/invalid_mechanism_spec.rb +1 -1
  596. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  597. data/spec/mongo/auth/ldap_spec.rb +1 -1
  598. data/spec/mongo/auth/scram/conversation_spec.rb +1 -1
  599. data/spec/mongo/auth/scram256/conversation_spec.rb +1 -1
  600. data/spec/mongo/auth/scram_negotiation_spec.rb +1 -1
  601. data/spec/mongo/auth/scram_spec.rb +1 -1
  602. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +1 -1
  603. data/spec/mongo/auth/stringprep_spec.rb +1 -1
  604. data/spec/mongo/auth/user/view_spec.rb +96 -1
  605. data/spec/mongo/auth/user_spec.rb +1 -1
  606. data/spec/mongo/auth/x509/conversation_spec.rb +1 -1
  607. data/spec/mongo/auth/x509_spec.rb +1 -1
  608. data/spec/mongo/auth_spec.rb +1 -1
  609. data/spec/mongo/bson_spec.rb +1 -1
  610. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +1 -1
  611. data/spec/mongo/bulk_write/result_spec.rb +1 -1
  612. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +1 -1
  613. data/spec/mongo/bulk_write_spec.rb +1 -1
  614. data/spec/mongo/caching_cursor_spec.rb +1 -1
  615. data/spec/mongo/client_construction_spec.rb +619 -693
  616. data/spec/mongo/client_encryption_spec.rb +1 -1
  617. data/spec/mongo/client_spec.rb +172 -231
  618. data/spec/mongo/cluster/cursor_reaper_spec.rb +1 -1
  619. data/spec/mongo/cluster/periodic_executor_spec.rb +1 -1
  620. data/spec/mongo/cluster/socket_reaper_spec.rb +1 -1
  621. data/spec/mongo/cluster/topology/replica_set_spec.rb +1 -1
  622. data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
  623. data/spec/mongo/cluster/topology/single_spec.rb +1 -1
  624. data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
  625. data/spec/mongo/cluster/topology_spec.rb +1 -1
  626. data/spec/mongo/cluster_spec.rb +156 -154
  627. data/spec/mongo/cluster_time_spec.rb +1 -1
  628. data/spec/mongo/collection/view/aggregation_spec.rb +1 -1
  629. data/spec/mongo/collection/view/builder/find_command_spec.rb +1 -1
  630. data/spec/mongo/collection/view/builder/op_query_spec.rb +1 -1
  631. data/spec/mongo/collection/view/change_stream_resume_spec.rb +1 -1
  632. data/spec/mongo/collection/view/change_stream_spec.rb +1 -1
  633. data/spec/mongo/collection/view/explainable_spec.rb +1 -1
  634. data/spec/mongo/collection/view/immutable_spec.rb +1 -1
  635. data/spec/mongo/collection/view/iterable_spec.rb +1 -1
  636. data/spec/mongo/collection/view/map_reduce_spec.rb +11 -1
  637. data/spec/mongo/collection/view/readable_spec.rb +139 -1
  638. data/spec/mongo/collection/view/writable_spec.rb +1 -1
  639. data/spec/mongo/collection/view_spec.rb +1 -1
  640. data/spec/mongo/collection_crud_spec.rb +57 -1
  641. data/spec/mongo/collection_ddl_spec.rb +116 -66
  642. data/spec/mongo/collection_spec.rb +18 -4
  643. data/spec/mongo/condition_variable_spec.rb +104 -0
  644. data/spec/mongo/config/options_spec.rb +1 -0
  645. data/spec/mongo/config_spec.rb +2 -1
  646. data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
  647. data/spec/mongo/crypt/auto_encrypter_spec.rb +8 -1
  648. data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
  649. data/spec/mongo/crypt/binary_spec.rb +1 -1
  650. data/spec/mongo/crypt/binding/binary_spec.rb +1 -1
  651. data/spec/mongo/crypt/binding/context_spec.rb +1 -1
  652. data/spec/mongo/crypt/binding/helpers_spec.rb +1 -1
  653. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +1 -1
  654. data/spec/mongo/crypt/binding/status_spec.rb +1 -1
  655. data/spec/mongo/crypt/binding/version_spec.rb +19 -5
  656. data/spec/mongo/crypt/binding_unloaded_spec.rb +1 -1
  657. data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
  658. data/spec/mongo/crypt/encryption_io_spec.rb +1 -1
  659. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
  660. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +3 -3
  661. data/spec/mongo/crypt/handle_spec.rb +19 -4
  662. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +1 -1
  663. data/spec/mongo/crypt/hooks_spec.rb +2 -2
  664. data/spec/mongo/crypt/kms/azure/credentials_retriever_spec.rb +86 -0
  665. data/spec/mongo/crypt/kms/credentials_spec.rb +17 -1
  666. data/spec/mongo/crypt/kms_spec.rb +13 -10
  667. data/spec/mongo/crypt/status_spec.rb +1 -1
  668. data/spec/mongo/crypt_spec.rb +21 -0
  669. data/spec/mongo/cursor/builder/get_more_command_spec.rb +1 -1
  670. data/spec/mongo/cursor/builder/op_get_more_spec.rb +1 -1
  671. data/spec/mongo/cursor_spec.rb +58 -11
  672. data/spec/mongo/database_spec.rb +1 -1
  673. data/spec/mongo/distinguishing_semaphore_spec.rb +7 -7
  674. data/spec/mongo/error/bulk_write_error_spec.rb +1 -1
  675. data/spec/mongo/error/crypt_error_spec.rb +1 -1
  676. data/spec/mongo/error/max_bson_size_spec.rb +1 -1
  677. data/spec/mongo/error/no_server_available_spec.rb +1 -1
  678. data/spec/mongo/error/notable_spec.rb +1 -1
  679. data/spec/mongo/error/operation_failure_heavy_spec.rb +1 -1
  680. data/spec/mongo/error/operation_failure_spec.rb +1 -1
  681. data/spec/mongo/error/parser_spec.rb +1 -1
  682. data/spec/mongo/error/unsupported_option_spec.rb +1 -1
  683. data/spec/mongo/event/publisher_spec.rb +1 -1
  684. data/spec/mongo/event/subscriber_spec.rb +1 -1
  685. data/spec/mongo/grid/file/chunk_spec.rb +1 -1
  686. data/spec/mongo/grid/file/info_spec.rb +1 -1
  687. data/spec/mongo/grid/file_spec.rb +1 -1
  688. data/spec/mongo/grid/fs_bucket_spec.rb +1 -1
  689. data/spec/mongo/grid/stream/read_spec.rb +1 -1
  690. data/spec/mongo/grid/stream/write_spec.rb +1 -1
  691. data/spec/mongo/grid/stream_spec.rb +1 -1
  692. data/spec/mongo/id_spec.rb +2 -2
  693. data/spec/mongo/index/view_spec.rb +4 -4
  694. data/spec/mongo/lint_spec.rb +2 -2
  695. data/spec/mongo/logger_spec.rb +1 -1
  696. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +1 -1
  697. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +2 -2
  698. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +2 -2
  699. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +2 -2
  700. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +2 -2
  701. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +2 -2
  702. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +2 -2
  703. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +2 -2
  704. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +2 -2
  705. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +2 -2
  706. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +2 -2
  707. data/spec/mongo/monitoring/event/command_failed_spec.rb +1 -1
  708. data/spec/mongo/monitoring/event/command_started_spec.rb +1 -1
  709. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +1 -1
  710. data/spec/mongo/monitoring/event/secure_spec.rb +1 -1
  711. data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
  712. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -1
  713. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
  714. data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +1 -1
  715. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
  716. data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
  717. data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
  718. data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
  719. data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
  720. data/spec/mongo/monitoring_spec.rb +1 -1
  721. data/spec/mongo/operation/aggregate/result_spec.rb +1 -1
  722. data/spec/mongo/operation/aggregate_spec.rb +1 -1
  723. data/spec/mongo/operation/collections_info_spec.rb +1 -1
  724. data/spec/mongo/operation/command_spec.rb +1 -1
  725. data/spec/mongo/operation/create/op_msg_spec.rb +1 -1
  726. data/spec/mongo/operation/create_index_spec.rb +1 -1
  727. data/spec/mongo/operation/create_user_spec.rb +1 -1
  728. data/spec/mongo/operation/delete/bulk_spec.rb +1 -1
  729. data/spec/mongo/operation/delete/op_msg_spec.rb +1 -1
  730. data/spec/mongo/operation/delete_spec.rb +1 -1
  731. data/spec/mongo/operation/drop_index_spec.rb +1 -1
  732. data/spec/mongo/operation/find/builder/flags_spec.rb +1 -1
  733. data/spec/mongo/operation/find/builder/modifiers_spec.rb +1 -1
  734. data/spec/mongo/operation/indexes_spec.rb +1 -1
  735. data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
  736. data/spec/mongo/operation/insert/op_msg_spec.rb +1 -1
  737. data/spec/mongo/operation/insert_spec.rb +1 -1
  738. data/spec/mongo/operation/limited_spec.rb +1 -1
  739. data/spec/mongo/operation/map_reduce_spec.rb +1 -1
  740. data/spec/mongo/operation/read_preference_legacy_spec.rb +1 -1
  741. data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
  742. data/spec/mongo/operation/remove_user_spec.rb +1 -1
  743. data/spec/mongo/operation/result_spec.rb +1 -1
  744. data/spec/mongo/operation/specifiable_spec.rb +1 -1
  745. data/spec/mongo/operation/update/bulk_spec.rb +1 -1
  746. data/spec/mongo/operation/update/op_msg_spec.rb +1 -1
  747. data/spec/mongo/operation/update_spec.rb +1 -1
  748. data/spec/mongo/operation/update_user_spec.rb +1 -1
  749. data/spec/mongo/options/redacted_spec.rb +2 -2
  750. data/spec/mongo/protocol/caching_hash_spec.rb +1 -46
  751. data/spec/mongo/protocol/compressed_spec.rb +1 -1
  752. data/spec/mongo/protocol/get_more_spec.rb +1 -1
  753. data/spec/mongo/protocol/kill_cursors_spec.rb +1 -1
  754. data/spec/mongo/protocol/msg_spec.rb +4 -66
  755. data/spec/mongo/protocol/query_spec.rb +1 -1
  756. data/spec/mongo/protocol/registry_spec.rb +1 -1
  757. data/spec/mongo/protocol/reply_spec.rb +1 -1
  758. data/spec/mongo/query_cache_middleware_spec.rb +1 -1
  759. data/spec/mongo/query_cache_spec.rb +1 -1
  760. data/spec/mongo/retryable_spec.rb +5 -3
  761. data/spec/mongo/semaphore_spec.rb +7 -7
  762. data/spec/mongo/server/app_metadata/environment_spec.rb +209 -0
  763. data/spec/mongo/server/app_metadata/truncator_spec.rb +158 -0
  764. data/spec/mongo/server/app_metadata_spec.rb +44 -66
  765. data/spec/mongo/server/connection_auth_spec.rb +1 -1
  766. data/spec/mongo/server/connection_common_spec.rb +1 -1
  767. data/spec/mongo/server/connection_pool/populator_spec.rb +17 -3
  768. data/spec/mongo/server/connection_pool_spec.rb +447 -10
  769. data/spec/mongo/server/connection_spec.rb +17 -4
  770. data/spec/mongo/server/description/features_spec.rb +1 -1
  771. data/spec/mongo/server/description_query_methods_spec.rb +1 -1
  772. data/spec/mongo/server/description_spec.rb +1 -1
  773. data/spec/mongo/server/monitor/app_metadata_spec.rb +1 -1
  774. data/spec/mongo/server/monitor/connection_spec.rb +3 -3
  775. data/spec/mongo/server/monitor_spec.rb +6 -5
  776. data/spec/mongo/server/push_monitor_spec.rb +1 -1
  777. data/spec/mongo/server/round_trip_time_averager_spec.rb +1 -1
  778. data/spec/mongo/server_selector/nearest_spec.rb +1 -1
  779. data/spec/mongo/server_selector/primary_preferred_spec.rb +1 -1
  780. data/spec/mongo/server_selector/primary_spec.rb +1 -1
  781. data/spec/mongo/server_selector/secondary_preferred_spec.rb +1 -1
  782. data/spec/mongo/server_selector/secondary_spec.rb +1 -1
  783. data/spec/mongo/server_selector_spec.rb +1 -1
  784. data/spec/mongo/server_spec.rb +32 -5
  785. data/spec/mongo/session/server_session_spec.rb +1 -1
  786. data/spec/mongo/session/session_pool_spec.rb +1 -1
  787. data/spec/mongo/session_spec.rb +1 -1
  788. data/spec/mongo/session_transaction_spec.rb +2 -2
  789. data/spec/mongo/socket/ssl_spec.rb +3 -9
  790. data/spec/mongo/socket/tcp_spec.rb +1 -1
  791. data/spec/mongo/socket/unix_spec.rb +1 -1
  792. data/spec/mongo/socket_spec.rb +1 -1
  793. data/spec/mongo/srv/monitor_spec.rb +1 -1
  794. data/spec/mongo/srv/result_spec.rb +1 -1
  795. data/spec/mongo/timeout_spec.rb +1 -1
  796. data/spec/mongo/tls_context_hooks_spec.rb +1 -1
  797. data/spec/mongo/uri/options_mapper_spec.rb +1605 -0
  798. data/spec/mongo/uri/srv_protocol_spec.rb +162 -2
  799. data/spec/mongo/uri_option_parsing_spec.rb +1 -1
  800. data/spec/mongo/uri_spec.rb +143 -2
  801. data/spec/mongo/utils_spec.rb +1 -1
  802. data/spec/mongo/write_concern/acknowledged_spec.rb +1 -1
  803. data/spec/mongo/write_concern/unacknowledged_spec.rb +1 -1
  804. data/spec/mongo/write_concern_spec.rb +1 -1
  805. data/spec/runners/auth.rb +1 -1
  806. data/spec/runners/change_streams/outcome.rb +1 -1
  807. data/spec/runners/change_streams/spec.rb +1 -1
  808. data/spec/runners/change_streams/test.rb +1 -1
  809. data/spec/runners/cmap/verifier.rb +2 -2
  810. data/spec/runners/cmap.rb +188 -45
  811. data/spec/runners/command_monitoring.rb +1 -1
  812. data/spec/runners/connection_string.rb +1 -1
  813. data/spec/runners/crud/context.rb +1 -1
  814. data/spec/runners/crud/operation.rb +2 -2
  815. data/spec/runners/crud/outcome.rb +1 -1
  816. data/spec/runners/crud/requirement.rb +3 -3
  817. data/spec/runners/crud/spec.rb +2 -2
  818. data/spec/runners/crud/test.rb +1 -1
  819. data/spec/runners/crud/test_base.rb +2 -2
  820. data/spec/runners/crud/verifier.rb +3 -3
  821. data/spec/runners/crud.rb +1 -1
  822. data/spec/runners/gridfs.rb +1 -1
  823. data/spec/runners/read_write_concern_document.rb +1 -1
  824. data/spec/runners/sdam/verifier.rb +1 -1
  825. data/spec/runners/sdam.rb +1 -1
  826. data/spec/runners/server_selection.rb +1 -1
  827. data/spec/runners/server_selection_rtt.rb +1 -1
  828. data/spec/runners/transactions/operation.rb +15 -9
  829. data/spec/runners/transactions/spec.rb +1 -1
  830. data/spec/runners/transactions/test.rb +44 -3
  831. data/spec/runners/transactions.rb +1 -1
  832. data/spec/runners/unified/assertions.rb +94 -77
  833. data/spec/runners/unified/change_stream_operations.rb +14 -3
  834. data/spec/runners/unified/client_side_encryption_operations.rb +1 -1
  835. data/spec/runners/unified/crud_operations.rb +11 -2
  836. data/spec/runners/unified/ddl_operations.rb +80 -4
  837. data/spec/runners/unified/entity_map.rb +1 -1
  838. data/spec/runners/unified/error.rb +1 -1
  839. data/spec/runners/unified/event_subscriber.rb +9 -3
  840. data/spec/runners/unified/exceptions.rb +1 -1
  841. data/spec/runners/unified/grid_fs_operations.rb +1 -1
  842. data/spec/runners/unified/support_operations.rb +66 -2
  843. data/spec/runners/unified/test.rb +98 -24
  844. data/spec/runners/unified/test_group.rb +1 -1
  845. data/spec/runners/unified/thread_operations.rb +73 -0
  846. data/spec/runners/unified.rb +9 -6
  847. data/spec/shared/lib/mrss/docker_runner.rb +4 -0
  848. data/spec/shared/lib/mrss/lite_constraints.rb +10 -2
  849. data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
  850. data/spec/shared/lib/mrss/utils.rb +28 -6
  851. data/spec/shared/share/Dockerfile.erb +24 -19
  852. data/spec/shared/shlib/server.sh +32 -8
  853. data/spec/shared/shlib/set_env.sh +4 -4
  854. data/spec/solo/clean_exit_spec.rb +4 -11
  855. data/spec/spec_helper.rb +1 -1
  856. data/spec/spec_tests/auth_spec.rb +1 -1
  857. data/spec/spec_tests/change_streams_unified_spec.rb +2 -1
  858. data/spec/spec_tests/client_side_encryption_spec.rb +25 -2
  859. data/spec/spec_tests/client_side_encryption_unified_spec.rb +12 -2
  860. data/spec/spec_tests/cmap_spec.rb +29 -15
  861. data/spec/spec_tests/collection_management_spec.rb +1 -1
  862. data/spec/spec_tests/command_monitoring_unified_spec.rb +1 -1
  863. data/spec/spec_tests/connection_string_spec.rb +1 -1
  864. data/spec/spec_tests/crud_spec.rb +1 -1
  865. data/spec/spec_tests/crud_unified_spec.rb +1 -1
  866. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +41 -0
  867. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +103 -0
  868. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +2 -6
  869. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +1 -1
  870. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1 -3
  871. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1 -3
  872. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +15 -6
  873. data/spec/spec_tests/data/client_side_encryption/awsTemporary.yml +57 -0
  874. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +5 -4
  875. data/spec/spec_tests/data/client_side_encryption/{fle2-BypassQueryAnalysis.yml → fle2v2-BypassQueryAnalysis.yml} +18 -30
  876. data/spec/spec_tests/data/client_side_encryption/{fle2-Compact.yml → fle2v2-Compact.yml} +5 -3
  877. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection-OldServer.yml +61 -0
  878. data/spec/spec_tests/data/client_side_encryption/{fle2-CreateCollection.yml → fle2v2-CreateCollection.yml} +212 -538
  879. data/spec/spec_tests/data/client_side_encryption/{fle2-DecryptExistingData.yml → fle2v2-DecryptExistingData.yml} +4 -2
  880. data/spec/spec_tests/data/client_side_encryption/{fle2-Delete.yml → fle2v2-Delete.yml} +17 -24
  881. data/spec/spec_tests/data/client_side_encryption/{fle2-EncryptedFields-vs-EncryptedFieldsMap.yml → fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml} +5 -6
  882. data/spec/spec_tests/data/client_side_encryption/{fle2-EncryptedFields-vs-jsonSchema.yml → fle2v2-EncryptedFields-vs-jsonSchema.yml} +18 -6
  883. data/spec/spec_tests/data/client_side_encryption/{fle2-EncryptedFieldsMap-defaults.yml → fle2v2-EncryptedFieldsMap-defaults.yml} +6 -5
  884. data/spec/spec_tests/data/client_side_encryption/{fle2-FindOneAndUpdate.yml → fle2v2-FindOneAndUpdate.yml} +31 -44
  885. data/spec/spec_tests/data/client_side_encryption/{fle2-InsertFind-Indexed.yml → fle2v2-InsertFind-Indexed.yml} +16 -6
  886. data/spec/spec_tests/data/client_side_encryption/{fle2-InsertFind-Unindexed.yml → fle2v2-InsertFind-Unindexed.yml} +10 -4
  887. data/spec/spec_tests/data/client_side_encryption/{fle2-MissingKey.yml → fle2v2-MissingKey.yml} +5 -3
  888. data/spec/spec_tests/data/client_side_encryption/{fle2-NoEncryption.yml → fle2v2-NoEncryption.yml} +4 -2
  889. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +241 -0
  890. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +422 -0
  891. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +182 -0
  892. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +239 -0
  893. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +235 -0
  894. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +252 -0
  895. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +1687 -0
  896. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +293 -0
  897. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +905 -0
  898. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +1684 -0
  899. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +1680 -0
  900. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +1697 -0
  901. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +329 -0
  902. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +424 -0
  903. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +226 -0
  904. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +327 -0
  905. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +319 -0
  906. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +336 -0
  907. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +913 -0
  908. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +292 -0
  909. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +518 -0
  910. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +911 -0
  911. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +907 -0
  912. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +924 -0
  913. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +325 -0
  914. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +424 -0
  915. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +224 -0
  916. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +323 -0
  917. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +319 -0
  918. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +338 -0
  919. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +241 -0
  920. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +423 -0
  921. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +182 -0
  922. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +239 -0
  923. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +235 -0
  924. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +254 -0
  925. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +241 -0
  926. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +422 -0
  927. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +182 -0
  928. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +239 -0
  929. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +235 -0
  930. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +254 -0
  931. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +43 -0
  932. data/spec/spec_tests/data/client_side_encryption/{fle2-Update.yml → fle2v2-Update.yml} +33 -44
  933. data/spec/spec_tests/data/client_side_encryption/{fle2-validatorAndPartialFieldExpression.yml → fle2v2-validatorAndPartialFieldExpression.yml} +10 -9
  934. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +1 -1
  935. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +1 -1
  936. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +2 -0
  937. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +2 -0
  938. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +2 -0
  939. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +2 -0
  940. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +3 -1
  941. data/spec/spec_tests/data/cmap/pool-checkin.yml +5 -0
  942. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +2 -0
  943. data/spec/spec_tests/data/cmap/pool-checkout-custom-maxConnecting-is-enforced.yml +50 -0
  944. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +2 -0
  945. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-is-enforced.yml +81 -0
  946. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-timeout.yml +71 -0
  947. data/spec/spec_tests/data/cmap/pool-checkout-minPoolSize-connection-maxConnecting.yml +64 -0
  948. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +2 -0
  949. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +6 -0
  950. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +8 -0
  951. data/spec/spec_tests/data/cmap/pool-checkout-returned-connection-maxConnecting.yml +88 -0
  952. data/spec/spec_tests/data/cmap/pool-clear-interrupt-immediately.yml +49 -0
  953. data/spec/spec_tests/data/cmap/pool-clear-interrupting-pending-connections.yml +43 -0
  954. data/spec/spec_tests/data/cmap/pool-clear-min-size.yml +41 -0
  955. data/spec/spec_tests/data/cmap/pool-clear-paused.yml +18 -0
  956. data/spec/spec_tests/data/cmap/pool-clear-ready.yml +39 -0
  957. data/spec/spec_tests/data/cmap/pool-clear-schedule-run-interruptInUseConnections-false.yml +48 -0
  958. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +2 -0
  959. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +2 -0
  960. data/spec/spec_tests/data/cmap/pool-create-min-size-error.yml +43 -0
  961. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +9 -0
  962. data/spec/spec_tests/data/cmap/pool-ready-ready.yml +22 -0
  963. data/spec/spec_tests/data/cmap/pool-ready.yml +30 -0
  964. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +2 -0
  965. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +6 -1
  966. data/spec/spec_tests/data/collection_management/modifyCollection-errorResponse.yml +59 -0
  967. data/spec/spec_tests/data/collection_management/timeseries-collection.yml +35 -0
  968. data/spec/spec_tests/data/command_monitoring_unified/redacted-commands.yml +8 -0
  969. data/spec/spec_tests/data/command_monitoring_unified/writeConcernError.yml +80 -0
  970. data/spec/spec_tests/data/crud_unified/aggregate-merge-errorResponse.yml +42 -0
  971. data/spec/spec_tests/data/crud_unified/bulkWrite-errorResponse.yml +50 -0
  972. data/spec/spec_tests/data/crud_unified/deleteOne-errorResponse.yml +46 -0
  973. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +44 -0
  974. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-errorResponse.yml +69 -0
  975. data/spec/spec_tests/data/crud_unified/insertOne-errorResponse.yml +46 -0
  976. data/spec/spec_tests/data/crud_unified/updateOne-errorResponse.yml +47 -0
  977. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +1266 -53
  978. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +1 -1
  979. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +706 -58
  980. data/spec/spec_tests/data/retryable_writes/unified/insertOne-noWritesPerformedError.yml +54 -0
  981. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +1 -1
  982. data/spec/spec_tests/data/sdam/rs/electionId_precedence_setVersion.yml +62 -0
  983. data/spec/spec_tests/data/sdam/rs/null_election_id-pre-6.0.yml +175 -0
  984. data/spec/spec_tests/data/sdam/rs/null_election_id.yml +20 -18
  985. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0-pre-6.0.yml +87 -0
  986. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +1 -1
  987. data/spec/spec_tests/data/sdam/rs/set_version_can_rollback.yml +101 -0
  988. data/spec/spec_tests/data/sdam/rs/setversion_equal_max_without_electionid.yml +78 -0
  989. data/spec/spec_tests/data/sdam/rs/setversion_greaterthan_max_without_electionid.yml +79 -0
  990. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid-pre-6.0.yml +79 -0
  991. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +9 -10
  992. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid-pre-6.0.yml +117 -0
  993. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +23 -21
  994. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -1
  995. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +38 -39
  996. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +38 -39
  997. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +1 -1
  998. data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +1 -1
  999. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +1 -1
  1000. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  1001. data/spec/spec_tests/data/sdam_unified/auth-error.yml +130 -0
  1002. data/spec/spec_tests/data/sdam_unified/auth-misc-command-error.yml +132 -0
  1003. data/spec/spec_tests/data/sdam_unified/auth-network-error.yml +132 -0
  1004. data/spec/spec_tests/data/sdam_unified/auth-network-timeout-error.yml +138 -0
  1005. data/spec/spec_tests/data/sdam_unified/auth-shutdown-error.yml +133 -0
  1006. data/spec/spec_tests/data/sdam_unified/cancel-server-check.yml +143 -0
  1007. data/spec/spec_tests/data/sdam_unified/connectTimeoutMS.yml +130 -0
  1008. data/spec/spec_tests/data/sdam_unified/find-network-error.yml +135 -0
  1009. data/spec/spec_tests/data/sdam_unified/find-network-timeout-error.yml +119 -0
  1010. data/spec/spec_tests/data/sdam_unified/find-shutdown-error.yml +163 -0
  1011. data/spec/spec_tests/data/sdam_unified/hello-command-error.yml +233 -0
  1012. data/spec/spec_tests/data/sdam_unified/hello-network-error.yml +228 -0
  1013. data/spec/spec_tests/data/sdam_unified/hello-timeout.yml +318 -0
  1014. data/spec/spec_tests/data/sdam_unified/insert-network-error.yml +137 -0
  1015. data/spec/spec_tests/data/sdam_unified/insert-shutdown-error.yml +162 -0
  1016. data/spec/spec_tests/data/sdam_unified/interruptInUse-pool-clear.yml +340 -0
  1017. data/spec/spec_tests/data/sdam_unified/minPoolSize-error.yml +125 -0
  1018. data/spec/spec_tests/data/sdam_unified/pool-cleared-error.yml +239 -0
  1019. data/spec/spec_tests/data/sdam_unified/rediscover-quickly-after-step-down.yml +144 -0
  1020. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +6 -5
  1021. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +2 -2
  1022. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +5 -4
  1023. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +1 -1
  1024. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +4 -3
  1025. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +4 -3
  1026. data/spec/spec_tests/data/sessions_unified/implicit-sessions-default-causal-consistency.yml +119 -0
  1027. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +1 -1
  1028. data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +1 -1
  1029. data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +1 -1
  1030. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor-malformed.yml +31 -0
  1031. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor.yml +31 -0
  1032. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError-malformed.yml +34 -0
  1033. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError.yml +35 -0
  1034. data/spec/spec_tests/data/unified/valid-pass/assertNumberConnectionsCheckedOut.yml +17 -0
  1035. data/spec/spec_tests/data/unified/valid-pass/collectionData-createOptions.yml +37 -0
  1036. data/spec/spec_tests/data/unified/valid-pass/entity-client-cmap-events.yml +40 -0
  1037. data/spec/spec_tests/data/unified/valid-pass/entity-client-storeEventsAsEntities.yml +37 -0
  1038. data/spec/spec_tests/data/unified/valid-pass/expectedError-errorResponse.yml +39 -0
  1039. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-eventType.yml +66 -0
  1040. data/spec/spec_tests/data/unified/valid-pass/ignoreResultAndError.yml +34 -0
  1041. data/spec/spec_tests/data/unified/valid-pass/observeSensitiveCommands.yml +255 -0
  1042. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +18 -0
  1043. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +18 -12
  1044. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +3 -3
  1045. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +2 -2
  1046. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +1 -1
  1047. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +1 -1
  1048. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +4 -4
  1049. data/spec/spec_tests/gridfs_spec.rb +1 -1
  1050. data/spec/spec_tests/gridfs_unified_spec.rb +1 -1
  1051. data/spec/spec_tests/load_balancers_spec.rb +1 -1
  1052. data/spec/spec_tests/max_staleness_spec.rb +1 -1
  1053. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
  1054. data/spec/spec_tests/read_write_concern_document_spec.rb +1 -1
  1055. data/spec/spec_tests/read_write_concern_operaton_spec.rb +1 -1
  1056. data/spec/spec_tests/retryable_reads_spec.rb +3 -1
  1057. data/spec/spec_tests/retryable_reads_unified_spec.rb +1 -1
  1058. data/spec/spec_tests/retryable_writes_spec.rb +1 -1
  1059. data/spec/spec_tests/retryable_writes_unified_spec.rb +1 -1
  1060. data/spec/spec_tests/sdam_monitoring_spec.rb +1 -1
  1061. data/spec/spec_tests/sdam_spec.rb +5 -1
  1062. data/spec/spec_tests/sdam_unified_spec.rb +13 -0
  1063. data/spec/spec_tests/seed_list_discovery_spec.rb +1 -1
  1064. data/spec/spec_tests/server_selection_rtt_spec.rb +1 -1
  1065. data/spec/spec_tests/server_selection_spec.rb +1 -1
  1066. data/spec/spec_tests/sessions_unified_spec.rb +1 -1
  1067. data/spec/spec_tests/transactions_api_spec.rb +1 -1
  1068. data/spec/spec_tests/transactions_spec.rb +1 -1
  1069. data/spec/spec_tests/transactions_unified_spec.rb +1 -1
  1070. data/spec/spec_tests/unified_spec.rb +1 -6
  1071. data/spec/spec_tests/uri_options_spec.rb +1 -1
  1072. data/spec/spec_tests/versioned_api_spec.rb +1 -1
  1073. data/spec/stress/cleanup_spec.rb +1 -1
  1074. data/spec/stress/connection_pool_stress_spec.rb +1 -62
  1075. data/spec/stress/connection_pool_timing_spec.rb +9 -34
  1076. data/spec/stress/fork_reconnect_stress_spec.rb +7 -8
  1077. data/spec/stress/push_monitor_close_spec.rb +1 -1
  1078. data/spec/support/authorization.rb +1 -1
  1079. data/spec/support/aws_utils/base.rb +1 -1
  1080. data/spec/support/aws_utils/inspector.rb +1 -1
  1081. data/spec/support/aws_utils/orchestrator.rb +20 -8
  1082. data/spec/support/aws_utils/provisioner.rb +1 -1
  1083. data/spec/support/aws_utils.rb +4 -3
  1084. data/spec/support/background_thread_registry.rb +1 -1
  1085. data/spec/support/certificates/atlas-ocsp-ca.crt +67 -67
  1086. data/spec/support/certificates/atlas-ocsp.crt +103 -103
  1087. data/spec/support/certificates/retrieve-atlas-cert +2 -0
  1088. data/spec/support/client_registry.rb +6 -2
  1089. data/spec/support/client_registry_macros.rb +1 -1
  1090. data/spec/support/cluster_tools.rb +13 -8
  1091. data/spec/support/common_shortcuts.rb +30 -5
  1092. data/spec/support/constraints.rb +15 -1
  1093. data/spec/support/crypt/{encryptedFields.json → encrypted_fields/encryptedFields.json} +0 -1
  1094. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +30 -0
  1095. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +21 -0
  1096. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +29 -0
  1097. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +21 -0
  1098. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +30 -0
  1099. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +27 -0
  1100. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +27 -0
  1101. data/spec/support/crypt.rb +13 -3
  1102. data/spec/support/dns.rb +1 -1
  1103. data/spec/support/json_ext_formatter.rb +1 -1
  1104. data/spec/support/keyword_struct.rb +1 -1
  1105. data/spec/support/local_resource_registry.rb +1 -1
  1106. data/spec/support/macros.rb +1 -0
  1107. data/spec/support/matchers.rb +5 -5
  1108. data/spec/support/mongos_macros.rb +7 -0
  1109. data/spec/support/monitoring_ext.rb +1 -1
  1110. data/spec/support/primary_socket.rb +1 -1
  1111. data/spec/support/sdam_formatter_integration.rb +1 -1
  1112. data/spec/support/shared/app_metadata.rb +15 -3
  1113. data/spec/support/shared/auth_context.rb +1 -0
  1114. data/spec/support/shared/protocol.rb +1 -1
  1115. data/spec/support/shared/scram_conversation.rb +1 -1
  1116. data/spec/support/shared/server_selector.rb +1 -1
  1117. data/spec/support/shared/session.rb +1 -1
  1118. data/spec/support/spec_config.rb +40 -3
  1119. data/spec/support/spec_setup.rb +1 -1
  1120. data/spec/support/using_hash.rb +11 -2
  1121. data/spec/support/utils.rb +277 -249
  1122. data.tar.gz.sig +0 -0
  1123. metadata +1522 -1289
  1124. metadata.gz.sig +0 -0
  1125. data/lib/mongo/operation/aggregate/command.rb +0 -55
  1126. data/lib/mongo/operation/collections_info/command.rb +0 -48
  1127. data/lib/mongo/operation/count/command.rb +0 -47
  1128. data/lib/mongo/operation/create/command.rb +0 -47
  1129. data/lib/mongo/operation/create_index/command.rb +0 -61
  1130. data/lib/mongo/operation/delete/command.rb +0 -52
  1131. data/lib/mongo/operation/distinct/command.rb +0 -47
  1132. data/lib/mongo/operation/explain/command.rb +0 -58
  1133. data/lib/mongo/operation/explain/legacy.rb +0 -52
  1134. data/lib/mongo/operation/find/builder/legacy.rb +0 -123
  1135. data/lib/mongo/operation/find/command.rb +0 -51
  1136. data/lib/mongo/operation/find/legacy/result.rb +0 -46
  1137. data/lib/mongo/operation/find/legacy.rb +0 -52
  1138. data/lib/mongo/operation/indexes/command.rb +0 -42
  1139. data/lib/mongo/operation/indexes/legacy.rb +0 -48
  1140. data/lib/mongo/operation/insert/command.rb +0 -55
  1141. data/lib/mongo/operation/kill_cursors/command.rb +0 -48
  1142. data/lib/mongo/operation/list_collections/command.rb +0 -46
  1143. data/lib/mongo/operation/map_reduce/command.rb +0 -51
  1144. data/lib/mongo/operation/parallel_scan/command.rb +0 -57
  1145. data/lib/mongo/operation/shared/op_msg_or_command.rb +0 -41
  1146. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +0 -44
  1147. data/lib/mongo/operation/update/command.rb +0 -53
  1148. data/lib/mongo/operation/update_user/command.rb +0 -45
  1149. data/lib/mongo/operation/users_info/command.rb +0 -46
  1150. data/lib/mongo/operation/write_command/command.rb +0 -51
  1151. data/lib/mongo/protocol/delete.rb +0 -172
  1152. data/lib/mongo/protocol/insert.rb +0 -181
  1153. data/lib/mongo/protocol/update.rb +0 -214
  1154. data/spec/mongo/operation/delete/command_spec.rb +0 -115
  1155. data/spec/mongo/operation/find/legacy_spec.rb +0 -131
  1156. data/spec/mongo/operation/get_more_spec.rb +0 -63
  1157. data/spec/mongo/operation/insert/command_spec.rb +0 -118
  1158. data/spec/mongo/operation/update/command_spec.rb +0 -122
  1159. data/spec/mongo/protocol/delete_spec.rb +0 -185
  1160. data/spec/mongo/protocol/insert_spec.rb +0 -179
  1161. data/spec/mongo/protocol/update_spec.rb +0 -204
  1162. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +0 -96
  1163. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +0 -88
  1164. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +0 -85
  1165. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +0 -118
  1166. data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +0 -152
  1167. data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +0 -148
  1168. data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +0 -219
  1169. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +0 -88
  1170. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +0 -117
  1171. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +0 -98
  1172. data/spec/spec_tests/data/unified/invalid/expectedEventsForClient-ignoreExtraEvents-type.yml +0 -15
  1173. data/spec/spec_tests/sdam_integration_spec.rb +0 -16
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -23,82 +23,82 @@ module Mongo
23
23
  # @since 2.0.0
24
24
  module Roles
25
25
 
26
- # @see http://docs.mongodb.org/manual/reference/built-in-roles/#backup
26
+ # @see https://www.mongodb.com/docs/manual/reference/built-in-roles/#backup
27
27
  #
28
28
  # @since 2.0.0
29
29
  BACKUP = 'backup'.freeze
30
30
 
31
- # @see http://docs.mongodb.org/manual/reference/built-in-roles/#clusterAdmin
31
+ # @see https://www.mongodb.com/docs/manual/reference/built-in-roles/#clusterAdmin
32
32
  #
33
33
  # @since 2.0.0
34
34
  CLUSTER_ADMIN = 'clusterAdmin'.freeze
35
35
 
36
- # @see http://docs.mongodb.org/manual/reference/built-in-roles/#clusterManager
36
+ # @see https://www.mongodb.com/docs/manual/reference/built-in-roles/#clusterManager
37
37
  #
38
38
  # @since 2.0.0
39
39
  CLUSTER_MANAGER = 'clusterManager'.freeze
40
40
 
41
- # @see http://docs.mongodb.org/manual/reference/built-in-roles/#clusterMonitor
41
+ # @see https://www.mongodb.com/docs/manual/reference/built-in-roles/#clusterMonitor
42
42
  #
43
43
  # @since 2.0.0
44
44
  CLUSTER_MONITOR = 'clusterMonitor'.freeze
45
45
 
46
- # @see http://docs.mongodb.org/manual/reference/built-in-roles/#dbAdmin
46
+ # @see https://www.mongodb.com/docs/manual/reference/built-in-roles/#dbAdmin
47
47
  #
48
48
  # @since 2.0.0
49
49
  DATABASE_ADMIN = 'dbAdmin'.freeze
50
50
 
51
- # @see http://docs.mongodb.org/manual/reference/built-in-roles/#dbAdminAnyDatabase
51
+ # @see https://www.mongodb.com/docs/manual/reference/built-in-roles/#dbAdminAnyDatabase
52
52
  #
53
53
  # @since 2.0.0
54
54
  DATABASE_ADMIN_ANY_DATABASE = 'dbAdminAnyDatabase'.freeze
55
55
 
56
- # @see http://docs.mongodb.org/manual/reference/built-in-roles/#dbOwner
56
+ # @see https://www.mongodb.com/docs/manual/reference/built-in-roles/#dbOwner
57
57
  #
58
58
  # @since 2.0.0
59
59
  DATABASE_OWNER = 'dbOwner'.freeze
60
60
 
61
- # @see http://docs.mongodb.org/manual/reference/built-in-roles/#hostManager
61
+ # @see https://www.mongodb.com/docs/manual/reference/built-in-roles/#hostManager
62
62
  #
63
63
  # @since 2.0.0
64
64
  HOST_MANAGER = 'hostManager'.freeze
65
65
 
66
- # @see http://docs.mongodb.org/manual/reference/built-in-roles/#read
66
+ # @see https://www.mongodb.com/docs/manual/reference/built-in-roles/#read
67
67
  #
68
68
  # @since 2.0.0
69
69
  READ = 'read'.freeze
70
70
 
71
- # @see http://docs.mongodb.org/manual/reference/built-in-roles/#readAnyDatabase
71
+ # @see https://www.mongodb.com/docs/manual/reference/built-in-roles/#readAnyDatabase
72
72
  #
73
73
  # @since 2.0.0
74
74
  READ_ANY_DATABASE = 'readAnyDatabase'.freeze
75
75
 
76
- # @see http://docs.mongodb.org/manual/reference/built-in-roles/#readWriteAnyDatabase
76
+ # @see https://www.mongodb.com/docs/manual/reference/built-in-roles/#readWriteAnyDatabase
77
77
  #
78
78
  # @since 2.0.0
79
79
  READ_WRITE_ANY_DATABASE = 'readWriteAnyDatabase'.freeze
80
80
 
81
- # @see http://docs.mongodb.org/manual/reference/built-in-roles/#readWrite
81
+ # @see https://www.mongodb.com/docs/manual/reference/built-in-roles/#readWrite
82
82
  #
83
83
  # @since 2.0.0
84
84
  READ_WRITE = 'readWrite'.freeze
85
85
 
86
- # @see http://docs.mongodb.org/manual/reference/built-in-roles/#restore
86
+ # @see https://www.mongodb.com/docs/manual/reference/built-in-roles/#restore
87
87
  #
88
88
  # @since 2.0.0
89
89
  RESTORE = 'restore'.freeze
90
90
 
91
- # @see http://docs.mongodb.org/manual/reference/built-in-roles/#root
91
+ # @see https://www.mongodb.com/docs/manual/reference/built-in-roles/#root
92
92
  #
93
93
  # @since 2.0.0
94
94
  ROOT = 'root'.freeze
95
95
 
96
- # @see http://docs.mongodb.org/manual/reference/built-in-roles/#userAdmin
96
+ # @see https://www.mongodb.com/docs/manual/reference/built-in-roles/#userAdmin
97
97
  #
98
98
  # @since 2.0.0
99
99
  USER_ADMIN = 'userAdmin'.freeze
100
100
 
101
- # @see http://docs.mongodb.org/manual/reference/built-in-roles/#userAdminAnyDatabase
101
+ # @see https://www.mongodb.com/docs/manual/reference/built-in-roles/#userAdminAnyDatabase
102
102
  #
103
103
  # @since 2.0.0
104
104
  USER_ADMIN_ANY_DATABASE = 'userAdminAnyDatabase'.freeze
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2018-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2018-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright Ayumu Nojima (野島 歩) and Martin J. Dürst (duerst@it.aoyama.ac.jp)
5
5
 
@@ -1,5 +1,6 @@
1
- # frozen_string_literal: true
2
1
  # encoding: us-ascii
2
+ # frozen_string_literal: true
3
+ # rubocop:todo all
3
4
 
4
5
  # automatically generated by template/unicode_norm_gen.tmpl
5
6
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2018-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
data/lib/mongo/auth.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2019-2020 MongoDB Inc.
5
5
  #
data/lib/mongo/bson.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2015-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2015-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2015-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2015-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2015-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2015-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2015-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2015-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -115,7 +115,8 @@ module Mongo
115
115
  # )
116
116
  #
117
117
  # @param [ Mongo::Collection ] collection The collection.
118
- # @param [ Array<Hash, BSON::Document> ] requests The requests, cannot be empty.
118
+ # @param [ Enumerable<Hash, BSON::Document> ] requests The requests,
119
+ # cannot be empty.
119
120
  # @param [ Hash, BSON::Document ] options The options.
120
121
  #
121
122
  # @since 2.1.0
@@ -330,10 +331,9 @@ module Mongo
330
331
  # ArgumentError ]
331
332
  # if the document is invalid.
332
333
  def validate_requests!
333
- if @requests.empty?
334
- raise ArgumentError, "Bulk write requests cannot be empty"
335
- end
334
+ requests_empty = true
336
335
  @requests.each do |req|
336
+ requests_empty = false
337
337
  if op = req.keys.first
338
338
  if [:update_one, :update_many].include?(op)
339
339
  if doc = maybe_first(req.dig(op, :update))
@@ -359,6 +359,8 @@ module Mongo
359
359
  end
360
360
  end
361
361
  end
362
+ end.tap do
363
+ raise ArgumentError, "Bulk write requests cannot be empty" if requests_empty
362
364
  end
363
365
  end
364
366
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2020 MongoDB Inc.
5
5
  #
data/lib/mongo/client.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -71,6 +71,7 @@ module Mongo
71
71
  :local_threshold,
72
72
  :logger,
73
73
  :log_prefix,
74
+ :max_connecting,
74
75
  :max_idle_time,
75
76
  :max_pool_size,
76
77
  :max_read_retries,
@@ -80,6 +81,7 @@ module Mongo
80
81
  :monitoring_io,
81
82
  :password,
82
83
  :platform,
84
+ :populator_io,
83
85
  :read,
84
86
  :read_concern,
85
87
  :read_retry_interval,
@@ -265,6 +267,12 @@ module Mongo
265
267
  # @option options [ String ] :log_prefix A custom log prefix to use when
266
268
  # logging. This option is experimental and subject to change in a future
267
269
  # version of the driver.
270
+ # @option options [ Integer ] :max_connecting The maximum number of
271
+ # connections that can be connecting simultaneously. The default is 2.
272
+ # This option should be increased if there are many threads that share
273
+ # the same client and the application is experiencing timeouts
274
+ # while waiting for connections to be established.
275
+ # selecting a server for an operation. The default is 2.
268
276
  # @option options [ Integer ] :max_idle_time The maximum seconds a socket can remain idle
269
277
  # since it has been checked in to the pool.
270
278
  # @option options [ Integer ] :max_pool_size The maximum size of the
@@ -462,6 +470,12 @@ module Mongo
462
470
  # and schemaMap, an error will be raised.
463
471
  # - :bypass_query_analysis => Boolean | nil, when true disables automatic
464
472
  # analysis of outgoing commands.
473
+ # - :crypt_shared_lib_path => [ String | nil ] Path that should
474
+ # be the used to load the crypt shared library. Providing this option
475
+ # overrides default crypt shared library load paths for libmongocrypt.
476
+ # - :crypt_shared_lib_required => [ Boolean | nil ] Whether
477
+ # crypt shared library is required. If 'true', an error will be raised
478
+ # if a crypt_shared library cannot be loaded by libmongocrypt.
465
479
  #
466
480
  # Notes on automatic encryption:
467
481
  # - Automatic encryption is an enterprise only feature that only applies
@@ -590,9 +604,9 @@ module Mongo
590
604
 
591
605
  rescue
592
606
  begin
593
- @cluster.disconnect!
607
+ @cluster.close
594
608
  rescue => e
595
- log_warn("Eror disconnecting cluster in client constructor's exception handler: #{e.class}: #{e}")
609
+ log_warn("Eror closing cluster in client constructor's exception handler: #{e.class}: #{e}")
596
610
  # Drop this exception so that the original exception is raised
597
611
  end
598
612
  raise
@@ -853,6 +867,10 @@ module Mongo
853
867
  @write_concern ||= WriteConcern.get(options[:write_concern] || options[:write])
854
868
  end
855
869
 
870
+ def closed?
871
+ !!@closed
872
+ end
873
+
856
874
  # Close all connections.
857
875
  #
858
876
  # @return [ true ] Always true.
@@ -860,6 +878,7 @@ module Mongo
860
878
  # @since 2.1.0
861
879
  def close
862
880
  @connect_lock.synchronize do
881
+ @closed = true
863
882
  do_close
864
883
  end
865
884
  true
@@ -893,6 +912,8 @@ module Mongo
893
912
  if @options[:auto_encryption_options]
894
913
  build_encrypter
895
914
  end
915
+
916
+ @closed = false
896
917
  end
897
918
 
898
919
  true
@@ -1127,6 +1148,9 @@ module Mongo
1127
1148
  #
1128
1149
  # @api private
1129
1150
  def with_session(options = {}, &block)
1151
+ # TODO: Add this back in RUBY-3174.
1152
+ # assert_not_closed
1153
+
1130
1154
  session = get_session(options)
1131
1155
 
1132
1156
  yield session
@@ -1189,7 +1213,7 @@ module Mongo
1189
1213
 
1190
1214
  # Implementation for #close, assumes the connect lock is already acquired.
1191
1215
  def do_close
1192
- @cluster.disconnect!
1216
+ @cluster.close
1193
1217
  close_encrypter
1194
1218
  end
1195
1219
 
@@ -1301,6 +1325,7 @@ module Mongo
1301
1325
  key = k.to_sym
1302
1326
  if VALID_OPTIONS.include?(key)
1303
1327
  validate_max_min_pool_size!(key, opts)
1328
+ validate_max_connecting!(key, opts)
1304
1329
  validate_read!(key, opts)
1305
1330
  if key == :compressors
1306
1331
  compressors = valid_compressors(v)
@@ -1563,6 +1588,23 @@ module Mongo
1563
1588
  true
1564
1589
  end
1565
1590
 
1591
+ # Validates whether the max_connecting option is valid.
1592
+ #
1593
+ # @param [ Symbol ] option The option to validate.
1594
+ # @param [ Hash ] opts The client options.
1595
+ #
1596
+ # @return [ true ] If the option is valid.
1597
+ # @raise [ Error::InvalidMaxConnecting ] If the option is invalid.
1598
+ def validate_max_connecting!(option, opts)
1599
+ if option == :max_connecting && opts.key?(:max_connecting)
1600
+ max_connecting = opts[:max_connecting] || Server::ConnectionPool::DEFAULT_MAX_CONNECTING
1601
+ if max_connecting <= 0
1602
+ raise Error::InvalidMaxConnecting.new(opts[:max_connecting])
1603
+ end
1604
+ end
1605
+ true
1606
+ end
1607
+
1566
1608
  def validate_read!(option, opts)
1567
1609
  if option == :read && opts.has_key?(:read)
1568
1610
  read = opts[:read]
@@ -1570,7 +1612,7 @@ module Mongo
1570
1612
  # for custom classes implementing key access ([]).
1571
1613
  # Instead reject common cases of strings and symbols.
1572
1614
  if read.is_a?(String) || read.is_a?(Symbol)
1573
- raise Error::InvalidReadOption.new(read, 'must be a hash')
1615
+ raise Error::InvalidReadOption.new(read, "the read preference must be specified as a hash: { mode: #{read.inspect} }")
1574
1616
  end
1575
1617
 
1576
1618
  if mode = read[:mode]
@@ -1582,5 +1624,11 @@ module Mongo
1582
1624
  end
1583
1625
  true
1584
1626
  end
1627
+
1628
+ def assert_not_closed
1629
+ if closed?
1630
+ raise Error::ClientClosed, "The client was closed and is not usable for operations. Call #reconnect to reset this client instance or create a new client instance"
1631
+ end
1632
+ end
1585
1633
  end
1586
1634
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2019-2020 MongoDB Inc.
5
5
  #
@@ -120,6 +120,46 @@ module Mongo
120
120
  @encrypter.encrypt(value, options)
121
121
  end
122
122
 
123
+ # Encrypts a Match Expression or Aggregate Expression to query a range index.
124
+ #
125
+ # @example Encrypt Match Expression.
126
+ # encryption.encrypt_expression(
127
+ # {'$and' => [{'field' => {'$gt' => 10}}, {'field' => {'$lt' => 20 }}]}
128
+ # )
129
+ # @example Encrypt Aggregate Expression.
130
+ # encryption.encrypt_expression(
131
+ # {'$and' => [{'$gt' => ['$field', 10]}, {'$lt' => ['$field', 20]}}
132
+ # )
133
+ # {$and: [{$gt: [<fieldpath>, <value1>]}, {$lt: [<fieldpath>, <value2>]}]
134
+ # Only supported when queryType is "rangePreview" and algorithm is "RangePreview".
135
+ # @note: The Range algorithm is experimental only. It is not intended
136
+ # for public use. It is subject to breaking changes.
137
+ #
138
+ # @param [ Hash ] expression Expression to encrypt.
139
+ # # @param [ Hash ] options
140
+ # @option options [ BSON::Binary ] :key_id A BSON::Binary object of type :uuid
141
+ # representing the UUID of the encryption key as it is stored in the key
142
+ # vault collection.
143
+ # @option options [ String ] :key_alt_name The alternate name for the
144
+ # encryption key.
145
+ # @option options [ String ] :algorithm The algorithm used to encrypt the
146
+ # expression. The only allowed value is "RangePreview"
147
+ # @option options [ Integer | nil ] :contention_factor Contention factor
148
+ # to be applied If not provided, it defaults to a value of 0.
149
+ # @option options [ String | nil ] query_type Query type to be applied.
150
+ # The only allowed value is "rangePreview".
151
+ #
152
+ # @note The :key_id and :key_alt_name options are mutually exclusive. Only
153
+ # one is required to perform explicit encryption.
154
+ #
155
+ # @return [ BSON::Binary ] A BSON Binary object of subtype 6 (ciphertext)
156
+ # representing the encrypted expression.
157
+ #
158
+ # @raise [ ArgumentError ] if disallowed values in options are set.
159
+ def encrypt_expression(expression, options = {})
160
+ @encrypter.encrypt_expression(expression, options)
161
+ end
162
+
123
163
  # Decrypts a value that has already been encrypted.
124
164
  #
125
165
  # @param [ BSON::Binary ] value A BSON Binary object of subtype 6 (ciphertext)
@@ -205,5 +245,66 @@ module Mongo
205
245
  @encrypter.rewrap_many_data_key(filter, opts)
206
246
  end
207
247
 
248
+ # Create collection with encrypted fields.
249
+ #
250
+ # If :encryption_fields contains a keyId with a null value, a data key
251
+ # will be automatically generated and assigned to keyId value.
252
+ #
253
+ # @note This method does not update the :encrypted_fields_map in the client's
254
+ # :auto_encryption_options. Therefore, in order to use the collection
255
+ # created by this method with automatic encryption, the user must create
256
+ # a new client after calling this function with the :encrypted_fields returned.
257
+ #
258
+ # @param [ Mongo::Database ] database Database to create collection in.
259
+ # @param [ String ] coll_name Name of collection to create.
260
+ # @param [ Hash ] coll_opts Options for collection to create.
261
+ # @param [ String ] kms_provider KMS provider to encrypt fields.
262
+ # @param [ Hash | nil ] master_key Document describing master key to encrypt fields.
263
+ #
264
+ # @return [ Array<Operation::Result, Hash> ] The result of the create
265
+ # collection operation and the encrypted fields map used to create
266
+ # the collection.
267
+ def create_encrypted_collection(database, coll_name, coll_opts, kms_provider, master_key)
268
+ raise ArgumentError, 'coll_opts must contain :encrypted_fields' unless coll_opts[:encrypted_fields]
269
+
270
+ encrypted_fields = create_data_keys(coll_opts[:encrypted_fields], kms_provider, master_key)
271
+ begin
272
+ new_coll_opts = coll_opts.dup.merge(encrypted_fields: encrypted_fields)
273
+ [database[coll_name].create(new_coll_opts), encrypted_fields]
274
+ rescue Mongo::Error => e
275
+ raise Error::CryptError, "Error creating collection with encrypted fields \
276
+ #{encrypted_fields}: #{e.class}: #{e.message}"
277
+ end
278
+ end
279
+
280
+ private
281
+
282
+ # Create data keys for fields in encrypted_fields that has :keyId key,
283
+ # but the value is nil.
284
+ #
285
+ # @param [ Hash ] encrypted_fields Encrypted fields map.
286
+ # @param [ String ] kms_provider KMS provider to encrypt fields.
287
+ # @param [ Hash | nil ] master_key Document describing master key to encrypt fields.
288
+ #
289
+ # @return [ Hash ] Encrypted fields map with keyIds for fields
290
+ # that did not have one.
291
+ def create_data_keys(encrypted_fields, kms_provider, master_key)
292
+ encrypted_fields = encrypted_fields.dup
293
+ # We must return the partially formed encrypted_fields hash if an error
294
+ # occurs - https://github.com/mongodb/specifications/blob/master/source/client-side-encryption/client-side-encryption.rst#create-encrypted-collection-helper
295
+ # Thefore, we do this in a loop instead of using #map.
296
+ encrypted_fields[:fields].size.times do |i|
297
+ field = encrypted_fields[:fields][i]
298
+ next unless field.is_a?(Hash) && field.fetch(:keyId, false).nil?
299
+
300
+ begin
301
+ encrypted_fields[:fields][i][:keyId] = create_data_key(kms_provider, master_key: master_key)
302
+ rescue Error::CryptError => e
303
+ raise Error::CryptError, "Error creating data key for field #{field[:path]} \
304
+ with encrypted fields #{encrypted_fields}: #{e.class}: #{e.message}"
305
+ end
306
+ end
307
+ encrypted_fields
308
+ end
208
309
  end
209
310
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -197,11 +197,7 @@ module Mongo
197
197
  op.execute(server, context: Operation::Context.new(options: options))
198
198
 
199
199
  if session = kill_spec.session
200
- if session.ended?
201
- if Lint.enabled?
202
- raise Error::LintError, "Ended session for a garbage collected cursor"
203
- end
204
- elsif session.implicit?
200
+ if session.implicit?
205
201
  session.end_session
206
202
  end
207
203
  end