mongo 2.18.2 → 2.19.3

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 (1153) 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/auth/aws/credentials.rb +38 -0
  14. data/lib/mongo/auth/aws/credentials_cache.rb +75 -0
  15. data/lib/mongo/auth/aws/credentials_retriever.rb +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 +1 -1
  54. data/lib/mongo/caching_cursor.rb +1 -1
  55. data/lib/mongo/client.rb +52 -4
  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 +16 -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 -1
  86. data/lib/mongo/collection/view.rb +2 -1
  87. data/lib/mongo/collection.rb +52 -13
  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/crypt/explicit_encryption_expression_context.rb +30 -0
  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 -1
  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/error/client_closed.rb +24 -0
  143. data/lib/mongo/error/closed_stream.rb +1 -1
  144. data/lib/mongo/error/connection_check_out_timeout.rb +1 -1
  145. data/lib/mongo/error/connection_perished.rb +3 -1
  146. data/lib/mongo/error/connection_unavailable.rb +27 -0
  147. data/lib/mongo/error/credential_check_error.rb +1 -1
  148. data/lib/mongo/error/crypt_error.rb +1 -1
  149. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  150. data/lib/mongo/error/failed_string_prep_validation.rb +1 -1
  151. data/lib/mongo/error/file_not_found.rb +1 -1
  152. data/lib/mongo/error/handshake_error.rb +1 -1
  153. data/lib/mongo/error/insufficient_iteration_count.rb +1 -1
  154. data/lib/mongo/error/internal_driver_error.rb +1 -1
  155. data/lib/mongo/error/invalid_address.rb +1 -1
  156. data/lib/mongo/error/invalid_application_name.rb +1 -1
  157. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  158. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  159. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  160. data/lib/mongo/error/invalid_config_option.rb +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/error/invalid_max_connecting.rb +28 -0
  167. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  168. data/lib/mongo/error/invalid_nonce.rb +1 -1
  169. data/lib/mongo/error/invalid_read_concern.rb +1 -1
  170. data/lib/mongo/error/invalid_read_option.rb +1 -1
  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/error/pool_cleared_error.rb +40 -0
  204. data/lib/mongo/error/pool_closed_error.rb +4 -17
  205. data/lib/mongo/error/pool_error.rb +45 -0
  206. data/lib/mongo/error/pool_paused_error.rb +40 -0
  207. data/lib/mongo/error/raise_original_error.rb +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/error/server_not_usable.rb +36 -0
  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 +1 -1
  294. data/lib/mongo/operation/collections_info/result.rb +1 -1
  295. data/lib/mongo/operation/collections_info.rb +1 -1
  296. data/lib/mongo/operation/command/op_msg.rb +1 -1
  297. data/lib/mongo/operation/command.rb +1 -1
  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 +1 -1
  301. data/lib/mongo/operation/create/op_msg.rb +1 -1
  302. data/lib/mongo/operation/create.rb +1 -1
  303. data/lib/mongo/operation/create_index/op_msg.rb +1 -1
  304. data/lib/mongo/operation/create_index.rb +1 -1
  305. data/lib/mongo/operation/create_search_indexes/op_msg.rb +31 -0
  306. data/lib/mongo/operation/create_search_indexes.rb +15 -0
  307. data/lib/mongo/operation/create_user/op_msg.rb +1 -1
  308. data/lib/mongo/operation/create_user.rb +1 -1
  309. data/lib/mongo/operation/delete/bulk_result.rb +1 -1
  310. data/lib/mongo/operation/delete/op_msg.rb +1 -1
  311. data/lib/mongo/operation/delete/result.rb +1 -1
  312. data/lib/mongo/operation/delete.rb +1 -1
  313. data/lib/mongo/operation/distinct/op_msg.rb +1 -1
  314. data/lib/mongo/operation/distinct.rb +1 -1
  315. data/lib/mongo/operation/drop/op_msg.rb +1 -1
  316. data/lib/mongo/operation/drop.rb +1 -1
  317. data/lib/mongo/operation/drop_database/op_msg.rb +1 -1
  318. data/lib/mongo/operation/drop_database.rb +1 -1
  319. data/lib/mongo/operation/drop_index/op_msg.rb +1 -1
  320. data/lib/mongo/operation/drop_index.rb +1 -1
  321. data/lib/mongo/operation/drop_search_index/op_msg.rb +33 -0
  322. data/lib/mongo/operation/drop_search_index.rb +15 -0
  323. data/lib/mongo/operation/explain/op_msg.rb +1 -1
  324. data/lib/mongo/operation/explain/result.rb +1 -1
  325. data/lib/mongo/operation/explain.rb +1 -1
  326. data/lib/mongo/operation/find/builder/command.rb +1 -1
  327. data/lib/mongo/operation/find/builder/flags.rb +1 -1
  328. data/lib/mongo/operation/find/builder/modifiers.rb +1 -1
  329. data/lib/mongo/operation/find/builder.rb +1 -1
  330. data/lib/mongo/operation/find/op_msg.rb +1 -1
  331. data/lib/mongo/operation/find/result.rb +1 -1
  332. data/lib/mongo/operation/find.rb +1 -1
  333. data/lib/mongo/operation/get_more/command_builder.rb +1 -1
  334. data/lib/mongo/operation/get_more/op_msg.rb +1 -1
  335. data/lib/mongo/operation/get_more/result.rb +1 -1
  336. data/lib/mongo/operation/get_more.rb +1 -1
  337. data/lib/mongo/operation/indexes/op_msg.rb +1 -1
  338. data/lib/mongo/operation/indexes/result.rb +1 -1
  339. data/lib/mongo/operation/indexes.rb +1 -1
  340. data/lib/mongo/operation/insert/bulk_result.rb +1 -1
  341. data/lib/mongo/operation/insert/op_msg.rb +1 -1
  342. data/lib/mongo/operation/insert/result.rb +1 -1
  343. data/lib/mongo/operation/insert.rb +1 -1
  344. data/lib/mongo/operation/kill_cursors/command_builder.rb +1 -1
  345. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -1
  346. data/lib/mongo/operation/kill_cursors.rb +1 -1
  347. data/lib/mongo/operation/list_collections/op_msg.rb +1 -1
  348. data/lib/mongo/operation/list_collections/result.rb +1 -1
  349. data/lib/mongo/operation/list_collections.rb +1 -1
  350. data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
  351. data/lib/mongo/operation/map_reduce/result.rb +1 -1
  352. data/lib/mongo/operation/map_reduce.rb +1 -1
  353. data/lib/mongo/operation/op_msg_base.rb +1 -1
  354. data/lib/mongo/operation/parallel_scan/op_msg.rb +1 -1
  355. data/lib/mongo/operation/parallel_scan/result.rb +1 -1
  356. data/lib/mongo/operation/parallel_scan.rb +1 -1
  357. data/lib/mongo/operation/remove_user/op_msg.rb +1 -1
  358. data/lib/mongo/operation/remove_user.rb +1 -1
  359. data/lib/mongo/operation/result.rb +1 -1
  360. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -1
  361. data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -1
  362. data/lib/mongo/operation/shared/executable.rb +1 -1
  363. data/lib/mongo/operation/shared/executable_no_validate.rb +1 -1
  364. data/lib/mongo/operation/shared/executable_transaction_label.rb +1 -1
  365. data/lib/mongo/operation/shared/idable.rb +1 -1
  366. data/lib/mongo/operation/shared/limited.rb +1 -1
  367. data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
  368. data/lib/mongo/operation/shared/op_msg_executable.rb +1 -1
  369. data/lib/mongo/operation/shared/polymorphic_lookup.rb +1 -1
  370. data/lib/mongo/operation/shared/polymorphic_result.rb +1 -1
  371. data/lib/mongo/operation/shared/read_preference_supported.rb +1 -1
  372. data/lib/mongo/operation/shared/response_handling.rb +1 -1
  373. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -1
  374. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +1 -1
  375. data/lib/mongo/operation/shared/sessions_supported.rb +1 -2
  376. data/lib/mongo/operation/shared/specifiable.rb +8 -1
  377. data/lib/mongo/operation/shared/validatable.rb +1 -1
  378. data/lib/mongo/operation/shared/write.rb +1 -1
  379. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
  380. data/lib/mongo/operation/update/bulk_result.rb +1 -1
  381. data/lib/mongo/operation/update/op_msg.rb +1 -1
  382. data/lib/mongo/operation/update/result.rb +1 -1
  383. data/lib/mongo/operation/update.rb +1 -1
  384. data/lib/mongo/operation/update_search_index/op_msg.rb +34 -0
  385. data/lib/mongo/operation/update_search_index.rb +15 -0
  386. data/lib/mongo/operation/update_user/op_msg.rb +1 -1
  387. data/lib/mongo/operation/update_user.rb +1 -1
  388. data/lib/mongo/operation/users_info/op_msg.rb +1 -1
  389. data/lib/mongo/operation/users_info/result.rb +1 -1
  390. data/lib/mongo/operation/users_info.rb +1 -1
  391. data/lib/mongo/operation/write_command/op_msg.rb +1 -1
  392. data/lib/mongo/operation/write_command.rb +1 -1
  393. data/lib/mongo/operation.rb +4 -1
  394. data/lib/mongo/options/mapper.rb +1 -1
  395. data/lib/mongo/options/redacted.rb +1 -1
  396. data/lib/mongo/options.rb +1 -1
  397. data/lib/mongo/protocol/bit_vector.rb +4 -2
  398. data/lib/mongo/protocol/caching_hash.rb +4 -21
  399. data/lib/mongo/protocol/compressed.rb +1 -1
  400. data/lib/mongo/protocol/get_more.rb +1 -1
  401. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  402. data/lib/mongo/protocol/message.rb +5 -9
  403. data/lib/mongo/protocol/msg.rb +2 -1
  404. data/lib/mongo/protocol/query.rb +1 -1
  405. data/lib/mongo/protocol/registry.rb +1 -1
  406. data/lib/mongo/protocol/reply.rb +1 -1
  407. data/lib/mongo/protocol/serializers.rb +25 -18
  408. data/lib/mongo/protocol.rb +1 -1
  409. data/lib/mongo/query_cache.rb +1 -1
  410. data/lib/mongo/retryable/base_worker.rb +91 -0
  411. data/lib/mongo/retryable/read_worker.rb +296 -0
  412. data/lib/mongo/retryable/write_worker.rb +364 -0
  413. data/lib/mongo/retryable.rb +31 -502
  414. data/lib/mongo/search_index/view.rb +232 -0
  415. data/lib/mongo/semaphore.rb +2 -2
  416. data/lib/mongo/server/app_metadata/environment.rb +259 -0
  417. data/lib/mongo/server/app_metadata/platform.rb +114 -0
  418. data/lib/mongo/server/app_metadata/truncator.rb +142 -0
  419. data/lib/mongo/server/app_metadata.rb +75 -108
  420. data/lib/mongo/server/connection.rb +61 -20
  421. data/lib/mongo/server/connection_base.rb +1 -1
  422. data/lib/mongo/server/connection_common.rb +1 -1
  423. data/lib/mongo/server/connection_pool/generation_manager.rb +56 -12
  424. data/lib/mongo/server/connection_pool/populator.rb +33 -31
  425. data/lib/mongo/server/connection_pool.rb +726 -265
  426. data/lib/mongo/server/description/features.rb +2 -2
  427. data/lib/mongo/server/description/load_balancer.rb +1 -1
  428. data/lib/mongo/server/description.rb +7 -6
  429. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  430. data/lib/mongo/server/monitor/connection.rb +1 -1
  431. data/lib/mongo/server/monitor.rb +11 -7
  432. data/lib/mongo/server/pending_connection.rb +1 -1
  433. data/lib/mongo/server/push_monitor/connection.rb +1 -1
  434. data/lib/mongo/server/push_monitor.rb +1 -1
  435. data/lib/mongo/server/round_trip_time_averager.rb +1 -1
  436. data/lib/mongo/server.rb +96 -30
  437. data/lib/mongo/server_selector/base.rb +24 -3
  438. data/lib/mongo/server_selector/nearest.rb +1 -1
  439. data/lib/mongo/server_selector/primary.rb +1 -1
  440. data/lib/mongo/server_selector/primary_preferred.rb +1 -1
  441. data/lib/mongo/server_selector/secondary.rb +1 -1
  442. data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
  443. data/lib/mongo/server_selector.rb +1 -1
  444. data/lib/mongo/session/server_session.rb +1 -1
  445. data/lib/mongo/session/session_pool.rb +1 -1
  446. data/lib/mongo/session.rb +1 -1
  447. data/lib/mongo/socket/ocsp_cache.rb +1 -1
  448. data/lib/mongo/socket/ocsp_verifier.rb +1 -1
  449. data/lib/mongo/socket/ssl.rb +1 -1
  450. data/lib/mongo/socket/tcp.rb +1 -1
  451. data/lib/mongo/socket/unix.rb +1 -1
  452. data/lib/mongo/socket.rb +29 -2
  453. data/lib/mongo/srv/monitor.rb +1 -3
  454. data/lib/mongo/srv/resolver.rb +1 -1
  455. data/lib/mongo/srv/result.rb +1 -1
  456. data/lib/mongo/srv.rb +1 -1
  457. data/lib/mongo/timeout.rb +2 -2
  458. data/lib/mongo/topology_version.rb +1 -1
  459. data/lib/mongo/uri/options_mapper.rb +322 -81
  460. data/lib/mongo/uri/srv_protocol.rb +1 -1
  461. data/lib/mongo/uri.rb +41 -13
  462. data/lib/mongo/utils.rb +1 -1
  463. data/lib/mongo/version.rb +2 -2
  464. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  465. data/lib/mongo/write_concern/base.rb +1 -1
  466. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  467. data/lib/mongo/write_concern.rb +1 -1
  468. data/lib/mongo.rb +3 -1
  469. data/mongo.gemspec +5 -2
  470. data/spec/atlas/atlas_connectivity_spec.rb +2 -6
  471. data/spec/atlas/operations_spec.rb +4 -13
  472. data/spec/integration/auth_spec.rb +1 -1
  473. data/spec/integration/awaited_ismaster_spec.rb +1 -1
  474. data/spec/integration/aws_auth_credentials_cache_spec.rb +51 -0
  475. data/spec/integration/aws_auth_request_spec.rb +2 -2
  476. data/spec/integration/aws_credentials_retriever_spec.rb +32 -2
  477. data/spec/integration/aws_lambda_examples_spec.rb +1 -1
  478. data/spec/integration/bson_symbol_spec.rb +1 -1
  479. data/spec/integration/bulk_insert_spec.rb +1 -1
  480. data/spec/integration/bulk_write_error_message_spec.rb +1 -0
  481. data/spec/integration/bulk_write_spec.rb +1 -1
  482. data/spec/integration/change_stream_examples_spec.rb +1 -1
  483. data/spec/integration/change_stream_spec.rb +6 -1
  484. data/spec/integration/check_clean_slate_spec.rb +1 -1
  485. data/spec/integration/client_authentication_options_spec.rb +1 -1
  486. data/spec/integration/client_connectivity_spec.rb +1 -1
  487. data/spec/integration/client_construction_aws_auth_spec.rb +12 -3
  488. data/spec/integration/client_construction_spec.rb +23 -1
  489. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +1 -1
  490. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +1 -1
  491. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +1 -1
  492. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +1 -1
  493. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +10 -5
  494. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +38 -2
  495. data/spec/integration/client_side_encryption/automatic_data_encryption_keys_prose_spec.rb +153 -0
  496. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +1 -1
  497. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +1 -1
  498. data/spec/integration/client_side_encryption/client_close_spec.rb +1 -1
  499. data/spec/integration/client_side_encryption/corpus_spec.rb +1 -1
  500. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +3 -3
  501. data/spec/integration/client_side_encryption/data_key_spec.rb +1 -1
  502. data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +59 -58
  503. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +1 -1
  504. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +36 -33
  505. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +1 -1
  506. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +3 -3
  507. data/spec/integration/client_side_encryption/kms_tls_spec.rb +1 -1
  508. data/spec/integration/client_side_encryption/mongocryptd_prose_spec.rb +105 -0
  509. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +49 -0
  510. data/spec/integration/client_side_encryption/on_demand_azure_credentials_spec.rb +46 -0
  511. data/spec/integration/client_side_encryption/on_demand_gcp_credentials_spec.rb +47 -0
  512. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +14 -11
  513. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +536 -0
  514. data/spec/integration/client_side_encryption/rewrap_prose_spec.rb +114 -0
  515. data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +20 -16
  516. data/spec/integration/client_side_encryption/views_spec.rb +1 -1
  517. data/spec/integration/client_spec.rb +8 -3
  518. data/spec/integration/client_update_spec.rb +7 -3
  519. data/spec/integration/collection_indexes_prose_spec.rb +1 -1
  520. data/spec/integration/command_monitoring_spec.rb +1 -1
  521. data/spec/integration/command_spec.rb +1 -1
  522. data/spec/integration/connect_single_rs_name_spec.rb +1 -1
  523. data/spec/integration/connection/faas_env_spec.rb +62 -0
  524. data/spec/integration/connection_pool_populator_spec.rb +27 -7
  525. data/spec/integration/connection_spec.rb +1 -1
  526. data/spec/integration/crud_spec.rb +1 -1
  527. data/spec/integration/cursor_pinning_spec.rb +6 -2
  528. data/spec/integration/cursor_reaping_spec.rb +1 -1
  529. data/spec/integration/docs_examples_spec.rb +2 -2
  530. data/spec/integration/error_detection_spec.rb +1 -1
  531. data/spec/integration/find_options_spec.rb +227 -0
  532. data/spec/integration/fork_reconnect_spec.rb +2 -2
  533. data/spec/integration/get_more_spec.rb +1 -1
  534. data/spec/integration/grid_fs_bucket_spec.rb +1 -1
  535. data/spec/integration/heartbeat_events_spec.rb +1 -1
  536. data/spec/integration/map_reduce_spec.rb +5 -1
  537. data/spec/integration/mmapv1_spec.rb +1 -1
  538. data/spec/integration/mongos_pinning_spec.rb +1 -1
  539. data/spec/integration/ocsp_connectivity_spec.rb +1 -1
  540. data/spec/integration/ocsp_verifier_cache_spec.rb +1 -1
  541. data/spec/integration/ocsp_verifier_spec.rb +2 -2
  542. data/spec/integration/operation_failure_code_spec.rb +1 -1
  543. data/spec/integration/operation_failure_message_spec.rb +1 -0
  544. data/spec/integration/query_cache_spec.rb +90 -3
  545. data/spec/integration/query_cache_transactions_spec.rb +1 -1
  546. data/spec/integration/read_concern_spec.rb +1 -1
  547. data/spec/integration/read_preference_spec.rb +1 -1
  548. data/spec/integration/reconnect_spec.rb +4 -1
  549. data/spec/integration/retryable_errors_spec.rb +1 -1
  550. data/spec/integration/retryable_reads_errors_spec.rb +110 -0
  551. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
  552. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
  553. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +1 -1
  554. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +1 -1
  555. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +1 -1
  556. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +1 -1
  557. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +1 -1
  558. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +1 -1
  559. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +1 -1
  560. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +1 -1
  561. data/spec/integration/retryable_writes/shared/supports_retries.rb +1 -1
  562. data/spec/integration/retryable_writes_errors_spec.rb +160 -2
  563. data/spec/integration/sdam_error_handling_spec.rb +65 -4
  564. data/spec/integration/sdam_events_spec.rb +1 -1
  565. data/spec/integration/sdam_prose_spec.rb +3 -3
  566. data/spec/integration/search_indexes_prose_spec.rb +168 -0
  567. data/spec/integration/secondary_reads_spec.rb +1 -0
  568. data/spec/integration/server_description_spec.rb +1 -1
  569. data/spec/integration/server_monitor_spec.rb +1 -1
  570. data/spec/integration/server_selection_spec.rb +1 -1
  571. data/spec/integration/server_selector_spec.rb +5 -3
  572. data/spec/integration/server_spec.rb +23 -26
  573. data/spec/integration/shell_examples_spec.rb +1 -1
  574. data/spec/integration/size_limit_spec.rb +1 -1
  575. data/spec/integration/snappy_compression_spec.rb +1 -1
  576. data/spec/integration/snapshot_query_examples_spec.rb +9 -7
  577. data/spec/integration/srv_monitoring_spec.rb +2 -1
  578. data/spec/integration/srv_spec.rb +3 -3
  579. data/spec/integration/ssl_uri_options_spec.rb +1 -1
  580. data/spec/integration/step_down_spec.rb +5 -3
  581. data/spec/integration/time_zone_querying_spec.rb +1 -1
  582. data/spec/integration/transaction_pinning_spec.rb +18 -4
  583. data/spec/integration/transactions_api_examples_spec.rb +1 -1
  584. data/spec/integration/transactions_examples_spec.rb +1 -1
  585. data/spec/integration/truncated_utf8_spec.rb +1 -1
  586. data/spec/integration/versioned_api_examples_spec.rb +2 -2
  587. data/spec/integration/x509_auth_spec.rb +1 -1
  588. data/spec/integration/zlib_compression_spec.rb +1 -1
  589. data/spec/integration/zstd_compression_spec.rb +1 -1
  590. data/spec/kerberos/kerberos_spec.rb +1 -1
  591. data/spec/lite_spec_helper.rb +47 -12
  592. data/spec/mongo/address/ipv4_spec.rb +1 -1
  593. data/spec/mongo/address/ipv6_spec.rb +1 -1
  594. data/spec/mongo/address/unix_spec.rb +1 -1
  595. data/spec/mongo/address/validator_spec.rb +1 -1
  596. data/spec/mongo/address_spec.rb +8 -2
  597. data/spec/mongo/auth/aws/credential_cache_spec.rb +63 -0
  598. data/spec/mongo/auth/aws/credentials_retriever_spec.rb +90 -0
  599. data/spec/mongo/auth/aws/credentials_spec.rb +46 -0
  600. data/spec/mongo/auth/aws/request_region_spec.rb +1 -1
  601. data/spec/mongo/auth/aws/request_spec.rb +1 -1
  602. data/spec/mongo/auth/cr_spec.rb +2 -22
  603. data/spec/mongo/auth/gssapi/conversation_spec.rb +1 -1
  604. data/spec/mongo/auth/invalid_mechanism_spec.rb +1 -1
  605. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  606. data/spec/mongo/auth/ldap_spec.rb +1 -1
  607. data/spec/mongo/auth/scram/conversation_spec.rb +1 -1
  608. data/spec/mongo/auth/scram256/conversation_spec.rb +1 -1
  609. data/spec/mongo/auth/scram_negotiation_spec.rb +1 -1
  610. data/spec/mongo/auth/scram_spec.rb +1 -1
  611. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +1 -1
  612. data/spec/mongo/auth/stringprep_spec.rb +1 -1
  613. data/spec/mongo/auth/user/view_spec.rb +96 -1
  614. data/spec/mongo/auth/user_spec.rb +1 -1
  615. data/spec/mongo/auth/x509/conversation_spec.rb +1 -1
  616. data/spec/mongo/auth/x509_spec.rb +1 -1
  617. data/spec/mongo/auth_spec.rb +1 -1
  618. data/spec/mongo/bson_spec.rb +1 -1
  619. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +1 -1
  620. data/spec/mongo/bulk_write/result_spec.rb +1 -1
  621. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +1 -1
  622. data/spec/mongo/bulk_write_spec.rb +1 -1
  623. data/spec/mongo/caching_cursor_spec.rb +1 -1
  624. data/spec/mongo/client_construction_spec.rb +619 -693
  625. data/spec/mongo/client_encryption_spec.rb +1 -1
  626. data/spec/mongo/client_spec.rb +172 -231
  627. data/spec/mongo/cluster/cursor_reaper_spec.rb +1 -1
  628. data/spec/mongo/cluster/periodic_executor_spec.rb +1 -1
  629. data/spec/mongo/cluster/socket_reaper_spec.rb +1 -1
  630. data/spec/mongo/cluster/topology/replica_set_spec.rb +1 -1
  631. data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
  632. data/spec/mongo/cluster/topology/single_spec.rb +1 -1
  633. data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
  634. data/spec/mongo/cluster/topology_spec.rb +1 -1
  635. data/spec/mongo/cluster_spec.rb +156 -154
  636. data/spec/mongo/cluster_time_spec.rb +1 -1
  637. data/spec/mongo/collection/view/aggregation_spec.rb +1 -1
  638. data/spec/mongo/collection/view/builder/find_command_spec.rb +1 -1
  639. data/spec/mongo/collection/view/builder/op_query_spec.rb +1 -1
  640. data/spec/mongo/collection/view/change_stream_resume_spec.rb +1 -1
  641. data/spec/mongo/collection/view/change_stream_spec.rb +1 -1
  642. data/spec/mongo/collection/view/explainable_spec.rb +1 -1
  643. data/spec/mongo/collection/view/immutable_spec.rb +1 -1
  644. data/spec/mongo/collection/view/iterable_spec.rb +1 -1
  645. data/spec/mongo/collection/view/map_reduce_spec.rb +11 -1
  646. data/spec/mongo/collection/view/readable_spec.rb +139 -1
  647. data/spec/mongo/collection/view/writable_spec.rb +1 -1
  648. data/spec/mongo/collection/view_spec.rb +1 -1
  649. data/spec/mongo/collection_crud_spec.rb +1 -1
  650. data/spec/mongo/collection_ddl_spec.rb +116 -66
  651. data/spec/mongo/collection_spec.rb +11 -7
  652. data/spec/mongo/condition_variable_spec.rb +104 -0
  653. data/spec/mongo/config/options_spec.rb +1 -0
  654. data/spec/mongo/config_spec.rb +2 -1
  655. data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
  656. data/spec/mongo/crypt/auto_encrypter_spec.rb +8 -1
  657. data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
  658. data/spec/mongo/crypt/binary_spec.rb +1 -1
  659. data/spec/mongo/crypt/binding/binary_spec.rb +1 -1
  660. data/spec/mongo/crypt/binding/context_spec.rb +1 -1
  661. data/spec/mongo/crypt/binding/helpers_spec.rb +1 -1
  662. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +1 -1
  663. data/spec/mongo/crypt/binding/status_spec.rb +1 -1
  664. data/spec/mongo/crypt/binding/version_spec.rb +19 -5
  665. data/spec/mongo/crypt/binding_unloaded_spec.rb +1 -1
  666. data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
  667. data/spec/mongo/crypt/encryption_io_spec.rb +1 -1
  668. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
  669. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +3 -3
  670. data/spec/mongo/crypt/handle_spec.rb +19 -4
  671. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +1 -1
  672. data/spec/mongo/crypt/hooks_spec.rb +2 -2
  673. data/spec/mongo/crypt/kms/azure/credentials_retriever_spec.rb +86 -0
  674. data/spec/mongo/crypt/kms/credentials_spec.rb +17 -1
  675. data/spec/mongo/crypt/kms_spec.rb +1 -1
  676. data/spec/mongo/crypt/status_spec.rb +1 -1
  677. data/spec/mongo/crypt_spec.rb +21 -0
  678. data/spec/mongo/cursor/builder/get_more_command_spec.rb +1 -1
  679. data/spec/mongo/cursor/builder/op_get_more_spec.rb +1 -1
  680. data/spec/mongo/cursor_spec.rb +58 -11
  681. data/spec/mongo/database_spec.rb +1 -1
  682. data/spec/mongo/distinguishing_semaphore_spec.rb +7 -7
  683. data/spec/mongo/error/bulk_write_error_spec.rb +1 -1
  684. data/spec/mongo/error/crypt_error_spec.rb +1 -1
  685. data/spec/mongo/error/max_bson_size_spec.rb +1 -1
  686. data/spec/mongo/error/no_server_available_spec.rb +1 -1
  687. data/spec/mongo/error/notable_spec.rb +1 -1
  688. data/spec/mongo/error/operation_failure_heavy_spec.rb +1 -1
  689. data/spec/mongo/error/operation_failure_spec.rb +1 -1
  690. data/spec/mongo/error/parser_spec.rb +1 -1
  691. data/spec/mongo/error/unsupported_option_spec.rb +1 -1
  692. data/spec/mongo/event/publisher_spec.rb +1 -1
  693. data/spec/mongo/event/subscriber_spec.rb +1 -1
  694. data/spec/mongo/grid/file/chunk_spec.rb +1 -1
  695. data/spec/mongo/grid/file/info_spec.rb +1 -1
  696. data/spec/mongo/grid/file_spec.rb +1 -1
  697. data/spec/mongo/grid/fs_bucket_spec.rb +1 -1
  698. data/spec/mongo/grid/stream/read_spec.rb +1 -1
  699. data/spec/mongo/grid/stream/write_spec.rb +1 -1
  700. data/spec/mongo/grid/stream_spec.rb +1 -1
  701. data/spec/mongo/id_spec.rb +2 -2
  702. data/spec/mongo/index/view_spec.rb +4 -4
  703. data/spec/mongo/lint_spec.rb +2 -2
  704. data/spec/mongo/logger_spec.rb +1 -1
  705. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +1 -1
  706. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +2 -2
  707. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +2 -2
  708. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +2 -2
  709. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +2 -2
  710. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +2 -2
  711. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +2 -2
  712. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +2 -2
  713. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +2 -2
  714. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +2 -2
  715. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +2 -2
  716. data/spec/mongo/monitoring/event/command_failed_spec.rb +1 -1
  717. data/spec/mongo/monitoring/event/command_started_spec.rb +1 -1
  718. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +1 -1
  719. data/spec/mongo/monitoring/event/secure_spec.rb +1 -1
  720. data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
  721. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -1
  722. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
  723. data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +1 -1
  724. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
  725. data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
  726. data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
  727. data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
  728. data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
  729. data/spec/mongo/monitoring_spec.rb +1 -1
  730. data/spec/mongo/operation/aggregate/result_spec.rb +1 -1
  731. data/spec/mongo/operation/aggregate_spec.rb +1 -1
  732. data/spec/mongo/operation/collections_info_spec.rb +1 -1
  733. data/spec/mongo/operation/command_spec.rb +1 -1
  734. data/spec/mongo/operation/create/op_msg_spec.rb +1 -1
  735. data/spec/mongo/operation/create_index_spec.rb +1 -1
  736. data/spec/mongo/operation/create_user_spec.rb +1 -1
  737. data/spec/mongo/operation/delete/bulk_spec.rb +1 -1
  738. data/spec/mongo/operation/delete/op_msg_spec.rb +1 -1
  739. data/spec/mongo/operation/delete_spec.rb +1 -1
  740. data/spec/mongo/operation/drop_index_spec.rb +1 -1
  741. data/spec/mongo/operation/find/builder/flags_spec.rb +1 -1
  742. data/spec/mongo/operation/find/builder/modifiers_spec.rb +1 -1
  743. data/spec/mongo/operation/indexes_spec.rb +1 -1
  744. data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
  745. data/spec/mongo/operation/insert/op_msg_spec.rb +1 -1
  746. data/spec/mongo/operation/insert_spec.rb +1 -1
  747. data/spec/mongo/operation/limited_spec.rb +1 -1
  748. data/spec/mongo/operation/map_reduce_spec.rb +1 -1
  749. data/spec/mongo/operation/read_preference_legacy_spec.rb +1 -1
  750. data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
  751. data/spec/mongo/operation/remove_user_spec.rb +1 -1
  752. data/spec/mongo/operation/result_spec.rb +1 -1
  753. data/spec/mongo/operation/specifiable_spec.rb +1 -1
  754. data/spec/mongo/operation/update/bulk_spec.rb +1 -1
  755. data/spec/mongo/operation/update/op_msg_spec.rb +1 -1
  756. data/spec/mongo/operation/update_spec.rb +1 -1
  757. data/spec/mongo/operation/update_user_spec.rb +1 -1
  758. data/spec/mongo/options/redacted_spec.rb +2 -2
  759. data/spec/mongo/protocol/caching_hash_spec.rb +1 -46
  760. data/spec/mongo/protocol/compressed_spec.rb +1 -1
  761. data/spec/mongo/protocol/get_more_spec.rb +1 -1
  762. data/spec/mongo/protocol/kill_cursors_spec.rb +1 -1
  763. data/spec/mongo/protocol/msg_spec.rb +4 -66
  764. data/spec/mongo/protocol/query_spec.rb +1 -1
  765. data/spec/mongo/protocol/registry_spec.rb +1 -1
  766. data/spec/mongo/protocol/reply_spec.rb +1 -1
  767. data/spec/mongo/query_cache_middleware_spec.rb +1 -1
  768. data/spec/mongo/query_cache_spec.rb +1 -1
  769. data/spec/mongo/retryable_spec.rb +5 -3
  770. data/spec/mongo/semaphore_spec.rb +7 -7
  771. data/spec/mongo/server/app_metadata/environment_spec.rb +209 -0
  772. data/spec/mongo/server/app_metadata/truncator_spec.rb +158 -0
  773. data/spec/mongo/server/app_metadata_spec.rb +44 -66
  774. data/spec/mongo/server/connection_auth_spec.rb +1 -1
  775. data/spec/mongo/server/connection_common_spec.rb +1 -1
  776. data/spec/mongo/server/connection_pool/populator_spec.rb +17 -3
  777. data/spec/mongo/server/connection_pool_spec.rb +447 -10
  778. data/spec/mongo/server/connection_spec.rb +17 -4
  779. data/spec/mongo/server/description/features_spec.rb +1 -1
  780. data/spec/mongo/server/description_query_methods_spec.rb +1 -1
  781. data/spec/mongo/server/description_spec.rb +1 -1
  782. data/spec/mongo/server/monitor/app_metadata_spec.rb +1 -1
  783. data/spec/mongo/server/monitor/connection_spec.rb +3 -3
  784. data/spec/mongo/server/monitor_spec.rb +6 -5
  785. data/spec/mongo/server/push_monitor_spec.rb +1 -1
  786. data/spec/mongo/server/round_trip_time_averager_spec.rb +1 -1
  787. data/spec/mongo/server_selector/nearest_spec.rb +1 -1
  788. data/spec/mongo/server_selector/primary_preferred_spec.rb +1 -1
  789. data/spec/mongo/server_selector/primary_spec.rb +1 -1
  790. data/spec/mongo/server_selector/secondary_preferred_spec.rb +1 -1
  791. data/spec/mongo/server_selector/secondary_spec.rb +1 -1
  792. data/spec/mongo/server_selector_spec.rb +1 -1
  793. data/spec/mongo/server_spec.rb +32 -5
  794. data/spec/mongo/session/server_session_spec.rb +1 -1
  795. data/spec/mongo/session/session_pool_spec.rb +1 -1
  796. data/spec/mongo/session_spec.rb +1 -1
  797. data/spec/mongo/session_transaction_spec.rb +2 -2
  798. data/spec/mongo/socket/ssl_spec.rb +3 -9
  799. data/spec/mongo/socket/tcp_spec.rb +1 -1
  800. data/spec/mongo/socket/unix_spec.rb +1 -1
  801. data/spec/mongo/socket_spec.rb +1 -1
  802. data/spec/mongo/srv/monitor_spec.rb +1 -1
  803. data/spec/mongo/srv/result_spec.rb +1 -1
  804. data/spec/mongo/timeout_spec.rb +1 -1
  805. data/spec/mongo/tls_context_hooks_spec.rb +1 -1
  806. data/spec/mongo/uri/options_mapper_spec.rb +1605 -0
  807. data/spec/mongo/uri/srv_protocol_spec.rb +162 -2
  808. data/spec/mongo/uri_option_parsing_spec.rb +1 -1
  809. data/spec/mongo/uri_spec.rb +143 -2
  810. data/spec/mongo/utils_spec.rb +1 -1
  811. data/spec/mongo/write_concern/acknowledged_spec.rb +1 -1
  812. data/spec/mongo/write_concern/unacknowledged_spec.rb +1 -1
  813. data/spec/mongo/write_concern_spec.rb +1 -1
  814. data/spec/runners/auth.rb +1 -1
  815. data/spec/runners/change_streams/outcome.rb +1 -1
  816. data/spec/runners/change_streams/spec.rb +1 -1
  817. data/spec/runners/change_streams/test.rb +1 -1
  818. data/spec/runners/cmap/verifier.rb +2 -2
  819. data/spec/runners/cmap.rb +188 -45
  820. data/spec/runners/command_monitoring.rb +1 -1
  821. data/spec/runners/connection_string.rb +1 -1
  822. data/spec/runners/crud/context.rb +1 -1
  823. data/spec/runners/crud/operation.rb +2 -2
  824. data/spec/runners/crud/outcome.rb +1 -1
  825. data/spec/runners/crud/requirement.rb +3 -3
  826. data/spec/runners/crud/spec.rb +2 -2
  827. data/spec/runners/crud/test.rb +1 -1
  828. data/spec/runners/crud/test_base.rb +2 -2
  829. data/spec/runners/crud/verifier.rb +3 -3
  830. data/spec/runners/crud.rb +1 -1
  831. data/spec/runners/gridfs.rb +1 -1
  832. data/spec/runners/read_write_concern_document.rb +1 -1
  833. data/spec/runners/sdam/verifier.rb +1 -1
  834. data/spec/runners/sdam.rb +1 -1
  835. data/spec/runners/server_selection.rb +1 -1
  836. data/spec/runners/server_selection_rtt.rb +1 -1
  837. data/spec/runners/transactions/operation.rb +15 -9
  838. data/spec/runners/transactions/spec.rb +1 -1
  839. data/spec/runners/transactions/test.rb +44 -3
  840. data/spec/runners/transactions.rb +1 -1
  841. data/spec/runners/unified/assertions.rb +94 -77
  842. data/spec/runners/unified/change_stream_operations.rb +14 -3
  843. data/spec/runners/unified/client_side_encryption_operations.rb +1 -1
  844. data/spec/runners/unified/crud_operations.rb +11 -2
  845. data/spec/runners/unified/ddl_operations.rb +80 -4
  846. data/spec/runners/unified/entity_map.rb +1 -1
  847. data/spec/runners/unified/error.rb +1 -1
  848. data/spec/runners/unified/event_subscriber.rb +9 -3
  849. data/spec/runners/unified/exceptions.rb +1 -1
  850. data/spec/runners/unified/grid_fs_operations.rb +1 -1
  851. data/spec/runners/unified/search_index_operations.rb +63 -0
  852. data/spec/runners/unified/support_operations.rb +66 -2
  853. data/spec/runners/unified/test.rb +101 -25
  854. data/spec/runners/unified/test_group.rb +1 -1
  855. data/spec/runners/unified/thread_operations.rb +73 -0
  856. data/spec/runners/unified.rb +9 -6
  857. data/spec/shared/lib/mrss/docker_runner.rb +4 -0
  858. data/spec/shared/lib/mrss/lite_constraints.rb +10 -2
  859. data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
  860. data/spec/shared/lib/mrss/utils.rb +28 -6
  861. data/spec/shared/share/Dockerfile.erb +24 -19
  862. data/spec/shared/shlib/server.sh +32 -8
  863. data/spec/shared/shlib/set_env.sh +4 -4
  864. data/spec/solo/clean_exit_spec.rb +4 -11
  865. data/spec/spec_helper.rb +2 -2
  866. data/spec/spec_tests/auth_spec.rb +1 -1
  867. data/spec/spec_tests/change_streams_unified_spec.rb +2 -1
  868. data/spec/spec_tests/client_side_encryption_spec.rb +25 -2
  869. data/spec/spec_tests/client_side_encryption_unified_spec.rb +12 -2
  870. data/spec/spec_tests/cmap_spec.rb +29 -15
  871. data/spec/spec_tests/collection_management_spec.rb +1 -1
  872. data/spec/spec_tests/command_monitoring_unified_spec.rb +1 -1
  873. data/spec/spec_tests/connection_string_spec.rb +1 -1
  874. data/spec/spec_tests/crud_spec.rb +1 -1
  875. data/spec/spec_tests/crud_unified_spec.rb +1 -1
  876. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +41 -0
  877. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +103 -0
  878. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +2 -6
  879. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +1 -1
  880. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1 -3
  881. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1 -3
  882. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +15 -6
  883. data/spec/spec_tests/data/client_side_encryption/awsTemporary.yml +57 -0
  884. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +5 -4
  885. data/spec/spec_tests/data/client_side_encryption/{fle2-BypassQueryAnalysis.yml → fle2v2-BypassQueryAnalysis.yml} +18 -30
  886. data/spec/spec_tests/data/client_side_encryption/{fle2-Compact.yml → fle2v2-Compact.yml} +5 -3
  887. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection-OldServer.yml +61 -0
  888. data/spec/spec_tests/data/client_side_encryption/{fle2-CreateCollection.yml → fle2v2-CreateCollection.yml} +212 -538
  889. data/spec/spec_tests/data/client_side_encryption/{fle2-DecryptExistingData.yml → fle2v2-DecryptExistingData.yml} +4 -2
  890. data/spec/spec_tests/data/client_side_encryption/{fle2-Delete.yml → fle2v2-Delete.yml} +17 -24
  891. data/spec/spec_tests/data/client_side_encryption/{fle2-EncryptedFields-vs-EncryptedFieldsMap.yml → fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml} +5 -6
  892. data/spec/spec_tests/data/client_side_encryption/{fle2-EncryptedFields-vs-jsonSchema.yml → fle2v2-EncryptedFields-vs-jsonSchema.yml} +18 -6
  893. data/spec/spec_tests/data/client_side_encryption/{fle2-EncryptedFieldsMap-defaults.yml → fle2v2-EncryptedFieldsMap-defaults.yml} +6 -5
  894. data/spec/spec_tests/data/client_side_encryption/{fle2-FindOneAndUpdate.yml → fle2v2-FindOneAndUpdate.yml} +31 -44
  895. data/spec/spec_tests/data/client_side_encryption/{fle2-InsertFind-Indexed.yml → fle2v2-InsertFind-Indexed.yml} +16 -6
  896. data/spec/spec_tests/data/client_side_encryption/{fle2-InsertFind-Unindexed.yml → fle2v2-InsertFind-Unindexed.yml} +10 -4
  897. data/spec/spec_tests/data/client_side_encryption/{fle2-MissingKey.yml → fle2v2-MissingKey.yml} +5 -3
  898. data/spec/spec_tests/data/client_side_encryption/{fle2-NoEncryption.yml → fle2v2-NoEncryption.yml} +4 -2
  899. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +241 -0
  900. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +422 -0
  901. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +182 -0
  902. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +239 -0
  903. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +235 -0
  904. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +252 -0
  905. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +1687 -0
  906. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +293 -0
  907. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +905 -0
  908. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +1684 -0
  909. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +1680 -0
  910. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +1697 -0
  911. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +329 -0
  912. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +424 -0
  913. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +226 -0
  914. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +327 -0
  915. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +319 -0
  916. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +336 -0
  917. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +913 -0
  918. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +292 -0
  919. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +518 -0
  920. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +911 -0
  921. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +907 -0
  922. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +924 -0
  923. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +325 -0
  924. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +424 -0
  925. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +224 -0
  926. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +323 -0
  927. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +319 -0
  928. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +338 -0
  929. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +241 -0
  930. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +423 -0
  931. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +182 -0
  932. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +239 -0
  933. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +235 -0
  934. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +254 -0
  935. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +241 -0
  936. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +422 -0
  937. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +182 -0
  938. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +239 -0
  939. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +235 -0
  940. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +254 -0
  941. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +43 -0
  942. data/spec/spec_tests/data/client_side_encryption/{fle2-Update.yml → fle2v2-Update.yml} +33 -44
  943. data/spec/spec_tests/data/client_side_encryption/{fle2-validatorAndPartialFieldExpression.yml → fle2v2-validatorAndPartialFieldExpression.yml} +10 -9
  944. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +1 -1
  945. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +1 -1
  946. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +2 -0
  947. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +2 -0
  948. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +2 -0
  949. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +2 -0
  950. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +3 -1
  951. data/spec/spec_tests/data/cmap/pool-checkin.yml +5 -0
  952. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +2 -0
  953. data/spec/spec_tests/data/cmap/pool-checkout-custom-maxConnecting-is-enforced.yml +50 -0
  954. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +2 -0
  955. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-is-enforced.yml +81 -0
  956. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-timeout.yml +71 -0
  957. data/spec/spec_tests/data/cmap/pool-checkout-minPoolSize-connection-maxConnecting.yml +64 -0
  958. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +2 -0
  959. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +6 -0
  960. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +8 -0
  961. data/spec/spec_tests/data/cmap/pool-checkout-returned-connection-maxConnecting.yml +88 -0
  962. data/spec/spec_tests/data/cmap/pool-clear-interrupt-immediately.yml +49 -0
  963. data/spec/spec_tests/data/cmap/pool-clear-interrupting-pending-connections.yml +43 -0
  964. data/spec/spec_tests/data/cmap/pool-clear-min-size.yml +41 -0
  965. data/spec/spec_tests/data/cmap/pool-clear-paused.yml +18 -0
  966. data/spec/spec_tests/data/cmap/pool-clear-ready.yml +39 -0
  967. data/spec/spec_tests/data/cmap/pool-clear-schedule-run-interruptInUseConnections-false.yml +48 -0
  968. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +2 -0
  969. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +2 -0
  970. data/spec/spec_tests/data/cmap/pool-create-min-size-error.yml +43 -0
  971. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +9 -0
  972. data/spec/spec_tests/data/cmap/pool-ready-ready.yml +22 -0
  973. data/spec/spec_tests/data/cmap/pool-ready.yml +30 -0
  974. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +2 -0
  975. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +6 -1
  976. data/spec/spec_tests/data/collection_management/modifyCollection-errorResponse.yml +59 -0
  977. data/spec/spec_tests/data/collection_management/timeseries-collection.yml +35 -0
  978. data/spec/spec_tests/data/command_monitoring_unified/redacted-commands.yml +8 -0
  979. data/spec/spec_tests/data/command_monitoring_unified/writeConcernError.yml +80 -0
  980. data/spec/spec_tests/data/crud_unified/aggregate-merge-errorResponse.yml +42 -0
  981. data/spec/spec_tests/data/crud_unified/bulkWrite-errorResponse.yml +50 -0
  982. data/spec/spec_tests/data/crud_unified/deleteOne-errorResponse.yml +46 -0
  983. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +44 -0
  984. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-errorResponse.yml +69 -0
  985. data/spec/spec_tests/data/crud_unified/insertOne-errorResponse.yml +46 -0
  986. data/spec/spec_tests/data/crud_unified/updateOne-errorResponse.yml +47 -0
  987. data/spec/spec_tests/data/index_management/createSearchIndex.yml +62 -0
  988. data/spec/spec_tests/data/index_management/createSearchIndexes.yml +83 -0
  989. data/spec/spec_tests/data/index_management/dropSearchIndex.yml +42 -0
  990. data/spec/spec_tests/data/index_management/listSearchIndexes.yml +85 -0
  991. data/spec/spec_tests/data/index_management/updateSearchIndex.yml +45 -0
  992. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +1266 -53
  993. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +1 -1
  994. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +706 -58
  995. data/spec/spec_tests/data/retryable_writes/unified/insertOne-noWritesPerformedError.yml +54 -0
  996. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +1 -1
  997. data/spec/spec_tests/data/sdam/rs/electionId_precedence_setVersion.yml +62 -0
  998. data/spec/spec_tests/data/sdam/rs/null_election_id-pre-6.0.yml +175 -0
  999. data/spec/spec_tests/data/sdam/rs/null_election_id.yml +20 -18
  1000. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0-pre-6.0.yml +87 -0
  1001. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +1 -1
  1002. data/spec/spec_tests/data/sdam/rs/set_version_can_rollback.yml +101 -0
  1003. data/spec/spec_tests/data/sdam/rs/setversion_equal_max_without_electionid.yml +78 -0
  1004. data/spec/spec_tests/data/sdam/rs/setversion_greaterthan_max_without_electionid.yml +79 -0
  1005. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid-pre-6.0.yml +79 -0
  1006. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +9 -10
  1007. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid-pre-6.0.yml +117 -0
  1008. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +23 -21
  1009. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -1
  1010. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +38 -39
  1011. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +38 -39
  1012. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +1 -1
  1013. data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +1 -1
  1014. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +1 -1
  1015. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  1016. data/spec/spec_tests/data/sdam_unified/auth-error.yml +130 -0
  1017. data/spec/spec_tests/data/sdam_unified/auth-misc-command-error.yml +132 -0
  1018. data/spec/spec_tests/data/sdam_unified/auth-network-error.yml +132 -0
  1019. data/spec/spec_tests/data/sdam_unified/auth-network-timeout-error.yml +138 -0
  1020. data/spec/spec_tests/data/sdam_unified/auth-shutdown-error.yml +133 -0
  1021. data/spec/spec_tests/data/sdam_unified/cancel-server-check.yml +143 -0
  1022. data/spec/spec_tests/data/sdam_unified/connectTimeoutMS.yml +130 -0
  1023. data/spec/spec_tests/data/sdam_unified/find-network-error.yml +135 -0
  1024. data/spec/spec_tests/data/sdam_unified/find-network-timeout-error.yml +119 -0
  1025. data/spec/spec_tests/data/sdam_unified/find-shutdown-error.yml +163 -0
  1026. data/spec/spec_tests/data/sdam_unified/hello-command-error.yml +233 -0
  1027. data/spec/spec_tests/data/sdam_unified/hello-network-error.yml +228 -0
  1028. data/spec/spec_tests/data/sdam_unified/hello-timeout.yml +318 -0
  1029. data/spec/spec_tests/data/sdam_unified/insert-network-error.yml +137 -0
  1030. data/spec/spec_tests/data/sdam_unified/insert-shutdown-error.yml +162 -0
  1031. data/spec/spec_tests/data/sdam_unified/interruptInUse-pool-clear.yml +340 -0
  1032. data/spec/spec_tests/data/sdam_unified/minPoolSize-error.yml +125 -0
  1033. data/spec/spec_tests/data/sdam_unified/pool-cleared-error.yml +239 -0
  1034. data/spec/spec_tests/data/sdam_unified/rediscover-quickly-after-step-down.yml +144 -0
  1035. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +6 -5
  1036. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +2 -2
  1037. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +5 -4
  1038. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +1 -1
  1039. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +4 -3
  1040. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +4 -3
  1041. data/spec/spec_tests/data/sessions_unified/implicit-sessions-default-causal-consistency.yml +119 -0
  1042. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +1 -1
  1043. data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +1 -1
  1044. data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +1 -1
  1045. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor-malformed.yml +31 -0
  1046. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor.yml +31 -0
  1047. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError-malformed.yml +34 -0
  1048. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError.yml +35 -0
  1049. data/spec/spec_tests/data/unified/valid-pass/assertNumberConnectionsCheckedOut.yml +17 -0
  1050. data/spec/spec_tests/data/unified/valid-pass/collectionData-createOptions.yml +37 -0
  1051. data/spec/spec_tests/data/unified/valid-pass/entity-client-cmap-events.yml +40 -0
  1052. data/spec/spec_tests/data/unified/valid-pass/entity-client-storeEventsAsEntities.yml +37 -0
  1053. data/spec/spec_tests/data/unified/valid-pass/expectedError-errorResponse.yml +39 -0
  1054. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-eventType.yml +66 -0
  1055. data/spec/spec_tests/data/unified/valid-pass/ignoreResultAndError.yml +34 -0
  1056. data/spec/spec_tests/data/unified/valid-pass/observeSensitiveCommands.yml +255 -0
  1057. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +18 -0
  1058. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +18 -12
  1059. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +3 -3
  1060. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +2 -2
  1061. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +1 -1
  1062. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +1 -1
  1063. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +4 -4
  1064. data/spec/spec_tests/gridfs_spec.rb +1 -1
  1065. data/spec/spec_tests/gridfs_unified_spec.rb +1 -1
  1066. data/spec/spec_tests/index_management_unified_spec.rb +13 -0
  1067. data/spec/spec_tests/load_balancers_spec.rb +1 -1
  1068. data/spec/spec_tests/max_staleness_spec.rb +1 -1
  1069. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
  1070. data/spec/spec_tests/read_write_concern_document_spec.rb +1 -1
  1071. data/spec/spec_tests/read_write_concern_operaton_spec.rb +1 -1
  1072. data/spec/spec_tests/retryable_reads_spec.rb +3 -1
  1073. data/spec/spec_tests/retryable_reads_unified_spec.rb +1 -1
  1074. data/spec/spec_tests/retryable_writes_spec.rb +1 -1
  1075. data/spec/spec_tests/retryable_writes_unified_spec.rb +1 -1
  1076. data/spec/spec_tests/sdam_monitoring_spec.rb +1 -1
  1077. data/spec/spec_tests/sdam_spec.rb +5 -1
  1078. data/spec/spec_tests/sdam_unified_spec.rb +13 -0
  1079. data/spec/spec_tests/seed_list_discovery_spec.rb +1 -1
  1080. data/spec/spec_tests/server_selection_rtt_spec.rb +1 -1
  1081. data/spec/spec_tests/server_selection_spec.rb +1 -1
  1082. data/spec/spec_tests/sessions_unified_spec.rb +1 -1
  1083. data/spec/spec_tests/transactions_api_spec.rb +1 -1
  1084. data/spec/spec_tests/transactions_spec.rb +1 -1
  1085. data/spec/spec_tests/transactions_unified_spec.rb +1 -1
  1086. data/spec/spec_tests/unified_spec.rb +1 -6
  1087. data/spec/spec_tests/uri_options_spec.rb +1 -1
  1088. data/spec/spec_tests/versioned_api_spec.rb +1 -1
  1089. data/spec/stress/cleanup_spec.rb +1 -1
  1090. data/spec/stress/connection_pool_stress_spec.rb +1 -62
  1091. data/spec/stress/connection_pool_timing_spec.rb +9 -34
  1092. data/spec/stress/fork_reconnect_stress_spec.rb +7 -8
  1093. data/spec/stress/push_monitor_close_spec.rb +1 -1
  1094. data/spec/support/authorization.rb +1 -1
  1095. data/spec/support/aws_utils/base.rb +1 -1
  1096. data/spec/support/aws_utils/inspector.rb +1 -1
  1097. data/spec/support/aws_utils/orchestrator.rb +20 -8
  1098. data/spec/support/aws_utils/provisioner.rb +1 -1
  1099. data/spec/support/aws_utils.rb +4 -3
  1100. data/spec/support/background_thread_registry.rb +1 -1
  1101. data/spec/support/certificates/atlas-ocsp-ca.crt +67 -67
  1102. data/spec/support/certificates/atlas-ocsp.crt +103 -103
  1103. data/spec/support/certificates/retrieve-atlas-cert +2 -0
  1104. data/spec/support/client_registry.rb +6 -2
  1105. data/spec/support/client_registry_macros.rb +1 -1
  1106. data/spec/support/cluster_tools.rb +13 -8
  1107. data/spec/support/common_shortcuts.rb +30 -5
  1108. data/spec/support/constraints.rb +15 -1
  1109. data/spec/support/crypt/{encryptedFields.json → encrypted_fields/encryptedFields.json} +0 -1
  1110. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +30 -0
  1111. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +21 -0
  1112. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +29 -0
  1113. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +21 -0
  1114. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +30 -0
  1115. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +27 -0
  1116. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +27 -0
  1117. data/spec/support/crypt.rb +13 -3
  1118. data/spec/support/dns.rb +1 -1
  1119. data/spec/support/faas/app/aws_lambda/mongodb/Gemfile.lock +19 -0
  1120. data/spec/support/json_ext_formatter.rb +1 -1
  1121. data/spec/support/keyword_struct.rb +1 -1
  1122. data/spec/support/local_resource_registry.rb +1 -1
  1123. data/spec/support/macros.rb +1 -0
  1124. data/spec/support/matchers.rb +5 -5
  1125. data/spec/support/mongos_macros.rb +7 -0
  1126. data/spec/support/monitoring_ext.rb +1 -1
  1127. data/spec/support/primary_socket.rb +1 -1
  1128. data/spec/support/sdam_formatter_integration.rb +1 -1
  1129. data/spec/support/shared/app_metadata.rb +15 -3
  1130. data/spec/support/shared/auth_context.rb +1 -0
  1131. data/spec/support/shared/protocol.rb +1 -1
  1132. data/spec/support/shared/scram_conversation.rb +1 -1
  1133. data/spec/support/shared/server_selector.rb +1 -1
  1134. data/spec/support/shared/session.rb +1 -1
  1135. data/spec/support/spec_config.rb +45 -3
  1136. data/spec/support/spec_setup.rb +1 -1
  1137. data/spec/support/using_hash.rb +11 -2
  1138. data/spec/support/utils.rb +277 -249
  1139. data.tar.gz.sig +0 -0
  1140. metadata +1504 -1191
  1141. metadata.gz.sig +0 -0
  1142. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +0 -96
  1143. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +0 -88
  1144. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +0 -85
  1145. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +0 -118
  1146. data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +0 -152
  1147. data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +0 -148
  1148. data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +0 -219
  1149. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +0 -88
  1150. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +0 -117
  1151. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +0 -98
  1152. data/spec/spec_tests/data/unified/invalid/expectedEventsForClient-ignoreExtraEvents-type.yml +0 -15
  1153. data/spec/spec_tests/sdam_integration_spec.rb +0 -16
@@ -1,10 +1,16 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  require 'lite_spec_helper'
5
5
 
6
6
  describe Mongo::URI do
7
7
 
8
+ shared_examples "roundtrips string" do
9
+ it "returns the correct string for the uri" do
10
+ expect(uri.to_s).to eq(URI::DEFAULT_PARSER.unescape(string))
11
+ end
12
+ end
13
+
8
14
  describe '.get' do
9
15
 
10
16
  let(:uri) { described_class.get(string) }
@@ -64,6 +70,8 @@ describe Mongo::URI do
64
70
  it 'returns a Mongo::URI::SRVProtocol object' do
65
71
  expect(uri).to be_a(Mongo::URI::SRVProtocol)
66
72
  end
73
+
74
+ include_examples "roundtrips string"
67
75
  end
68
76
 
69
77
  context 'when the scheme is invalid' do
@@ -363,6 +371,15 @@ describe Mongo::URI do
363
371
  end
364
372
  end
365
373
 
374
+ describe "#to_s" do
375
+ context "string is a uri" do
376
+ let(:string) { 'mongodb://localhost:27017' }
377
+ it "returns the original string" do
378
+ expect(uri.to_s).to eq(string)
379
+ end
380
+ end
381
+ end
382
+
366
383
  describe '#servers' do
367
384
  let(:string) { "#{scheme}#{servers}" }
368
385
 
@@ -372,6 +389,8 @@ describe Mongo::URI do
372
389
  it 'returns an array with the parsed server' do
373
390
  expect(uri.servers).to eq([servers])
374
391
  end
392
+
393
+ include_examples "roundtrips string"
375
394
  end
376
395
 
377
396
  context 'single server with port' do
@@ -380,6 +399,8 @@ describe Mongo::URI do
380
399
  it 'returns an array with the parsed server' do
381
400
  expect(uri.servers).to eq([servers])
382
401
  end
402
+
403
+ include_examples "roundtrips string"
383
404
  end
384
405
 
385
406
  context 'numerical ipv4 server' do
@@ -388,6 +409,8 @@ describe Mongo::URI do
388
409
  it 'returns an array with the parsed server' do
389
410
  expect(uri.servers).to eq([servers])
390
411
  end
412
+
413
+ include_examples "roundtrips string"
391
414
  end
392
415
 
393
416
  context 'numerical ipv6 server' do
@@ -396,6 +419,8 @@ describe Mongo::URI do
396
419
  it 'returns an array with the parsed server' do
397
420
  expect(uri.servers).to eq([servers])
398
421
  end
422
+
423
+ include_examples "roundtrips string"
399
424
  end
400
425
 
401
426
  context 'unix socket server' do
@@ -404,6 +429,8 @@ describe Mongo::URI do
404
429
  it 'returns an array with the parsed server' do
405
430
  expect(uri.servers).to eq([URI::DEFAULT_PARSER.unescape(servers)])
406
431
  end
432
+
433
+ include_examples "roundtrips string"
407
434
  end
408
435
 
409
436
  context 'multiple servers' do
@@ -412,6 +439,8 @@ describe Mongo::URI do
412
439
  it 'returns an array with the parsed servers' do
413
440
  expect(uri.servers).to eq(servers.split(','))
414
441
  end
442
+
443
+ include_examples "roundtrips string"
415
444
  end
416
445
 
417
446
  context 'multiple servers with ports' do
@@ -420,6 +449,8 @@ describe Mongo::URI do
420
449
  it 'returns an array with the parsed servers' do
421
450
  expect(uri.servers).to eq(servers.split(','))
422
451
  end
452
+
453
+ include_examples "roundtrips string"
423
454
  end
424
455
  end
425
456
 
@@ -447,6 +478,8 @@ describe Mongo::URI do
447
478
  it 'includes the password in the options' do
448
479
  expect(options[:password]).to eq(password)
449
480
  end
481
+
482
+ include_examples "roundtrips string"
450
483
  end
451
484
 
452
485
  describe '#credentials' do
@@ -460,6 +493,10 @@ describe Mongo::URI do
460
493
  it 'returns the username' do
461
494
  expect(uri.credentials[:user]).to eq(user)
462
495
  end
496
+
497
+ it "roundtrips string without the colon" do
498
+ expect(uri.to_s).to eq("mongodb://tyler@localhost")
499
+ end
463
500
  end
464
501
 
465
502
  context 'username and password provided' do
@@ -473,6 +510,8 @@ describe Mongo::URI do
473
510
  it 'returns the password' do
474
511
  expect(uri.credentials[:password]).to eq(password)
475
512
  end
513
+
514
+ include_examples "roundtrips string"
476
515
  end
477
516
  end
478
517
 
@@ -485,6 +524,8 @@ describe Mongo::URI do
485
524
  it 'returns the database name' do
486
525
  expect(uri.database).to eq(db)
487
526
  end
527
+
528
+ include_examples "roundtrips string"
488
529
  end
489
530
  end
490
531
 
@@ -498,6 +539,8 @@ describe Mongo::URI do
498
539
  it 'returns an empty hash' do
499
540
  expect(uri.uri_options).to be_empty
500
541
  end
542
+
543
+ include_examples "roundtrips string"
501
544
  end
502
545
 
503
546
  context 'write concern options provided' do
@@ -514,6 +557,8 @@ describe Mongo::URI do
514
557
  client = new_local_client_nmio(string)
515
558
  expect(client.options[:write_concern]).to eq(concern)
516
559
  end
560
+
561
+ include_examples "roundtrips string"
517
562
  end
518
563
 
519
564
  context 'w=majority' do
@@ -528,6 +573,8 @@ describe Mongo::URI do
528
573
  client = new_local_client_nmio(string)
529
574
  expect(client.options[:write_concern]).to eq(concern)
530
575
  end
576
+
577
+ include_examples "roundtrips string"
531
578
  end
532
579
 
533
580
  context 'journal' do
@@ -542,6 +589,8 @@ describe Mongo::URI do
542
589
  client = new_local_client_nmio(string)
543
590
  expect(client.options[:write_concern]).to eq(concern)
544
591
  end
592
+
593
+ include_examples "roundtrips string"
545
594
  end
546
595
 
547
596
  context 'fsync' do
@@ -556,6 +605,8 @@ describe Mongo::URI do
556
605
  client = new_local_client_nmio(string)
557
606
  expect(client.options[:write_concern]).to eq(concern)
558
607
  end
608
+
609
+ include_examples "roundtrips string"
559
610
  end
560
611
 
561
612
  context 'wtimeoutMS' do
@@ -571,6 +622,10 @@ describe Mongo::URI do
571
622
  client = new_local_client_nmio(string)
572
623
  expect(client.options[:write_concern]).to eq(concern)
573
624
  end
625
+
626
+ it "roundtrips the string with camelCase" do
627
+ expect(uri.to_s).to eq("mongodb://localhost/?w=2&wTimeoutMS=1234")
628
+ end
574
629
  end
575
630
  end
576
631
 
@@ -589,6 +644,8 @@ describe Mongo::URI do
589
644
  client = new_local_client_nmio(string)
590
645
  expect(client.options[:read]).to eq(read)
591
646
  end
647
+
648
+ include_examples "roundtrips string"
592
649
  end
593
650
 
594
651
  context 'primaryPreferred' do
@@ -603,6 +660,8 @@ describe Mongo::URI do
603
660
  client = new_local_client_nmio(string)
604
661
  expect(client.options[:read]).to eq(read)
605
662
  end
663
+
664
+ include_examples "roundtrips string"
606
665
  end
607
666
 
608
667
  context 'secondary' do
@@ -617,6 +676,8 @@ describe Mongo::URI do
617
676
  client = new_local_client_nmio(string)
618
677
  expect(client.options[:read]).to eq(read)
619
678
  end
679
+
680
+ include_examples "roundtrips string"
620
681
  end
621
682
 
622
683
  context 'secondaryPreferred' do
@@ -631,6 +692,8 @@ describe Mongo::URI do
631
692
  client = new_local_client_nmio(string)
632
693
  expect(client.options[:read]).to eq(read)
633
694
  end
695
+
696
+ include_examples "roundtrips string"
634
697
  end
635
698
 
636
699
  context 'nearest' do
@@ -645,6 +708,8 @@ describe Mongo::URI do
645
708
  client = new_local_client_nmio(string)
646
709
  expect(client.options[:read]).to eq(read)
647
710
  end
711
+
712
+ include_examples "roundtrips string"
648
713
  end
649
714
  end
650
715
 
@@ -667,6 +732,8 @@ describe Mongo::URI do
667
732
  client = new_local_client_nmio(string)
668
733
  expect(client.options[:read]).to eq(read)
669
734
  end
735
+
736
+ include_examples "roundtrips string"
670
737
  end
671
738
 
672
739
  context 'multiple read preference tag sets' do
@@ -686,6 +753,8 @@ describe Mongo::URI do
686
753
  client = new_local_client_nmio(string)
687
754
  expect(client.options[:read]).to eq(read)
688
755
  end
756
+
757
+ include_examples "roundtrips string"
689
758
  end
690
759
  end
691
760
 
@@ -734,6 +803,10 @@ describe Mongo::URI do
734
803
  client = new_local_client_nmio(string)
735
804
  expect(client.read_preference).to eq(BSON::Document.new(mode: :secondary))
736
805
  end
806
+
807
+ it "returns the string without the dropped option" do
808
+ expect(uri.to_s).to eq("mongodb://localhost/?readPreference=secondary")
809
+ end
737
810
  end
738
811
  end
739
812
  end
@@ -750,6 +823,8 @@ describe Mongo::URI do
750
823
  client = new_local_client_nmio(string)
751
824
  expect(client.options[:replica_set]).to eq(rs_name)
752
825
  end
826
+
827
+ include_examples "roundtrips string"
753
828
  end
754
829
 
755
830
  context 'auth mechanism provided' do
@@ -777,6 +852,8 @@ describe Mongo::URI do
777
852
  expect(client.options[:auth_mech]).to eq(expected)
778
853
  end
779
854
 
855
+ include_examples "roundtrips string"
856
+
780
857
  context 'when mechanism_properties are provided' do
781
858
  let(:options) { "authMechanism=#{mechanism}&authMechanismProperties=CANONICALIZE_HOST_NAME:true" }
782
859
 
@@ -806,6 +883,8 @@ describe Mongo::URI do
806
883
  expect(client.options[:auth_mech]).to eq(expected)
807
884
  end
808
885
 
886
+ include_examples "roundtrips string"
887
+
809
888
  context 'when mechanism_properties are provided' do
810
889
  let(:options) { "authMechanism=#{mechanism}&authMechanismProperties=CANONICALIZE_HOST_NAME:true" }
811
890
 
@@ -837,6 +916,8 @@ describe Mongo::URI do
837
916
  expect(client.options[:auth_mech]).to eq(expected)
838
917
  end
839
918
 
919
+ include_examples "roundtrips string"
920
+
840
921
  context 'when auth source is invalid' do
841
922
  let(:options) { "authMechanism=#{mechanism}&authSource=foo" }
842
923
 
@@ -854,12 +935,18 @@ describe Mongo::URI do
854
935
  expect(client.options[:auth_mech_properties]).to eq({ 'canonicalize_host_name' => true, 'service_name' => 'other' })
855
936
  end
856
937
 
938
+ include_examples "roundtrips string"
939
+
857
940
  context 'when a mapping value is missing' do
858
941
  let(:options) { "authMechanism=#{mechanism}&authMechanismProperties=SERVICE_NAME:,CANONICALIZE_HOST_NAME:" }
859
942
 
860
943
  it 'sets the options to defaults' do
861
944
  expect(client.options[:auth_mech_properties]).to eq({ 'service_name' => 'mongodb' })
862
945
  end
946
+
947
+ it "roundtrips the string" do
948
+ expect(uri.to_s).to eq("mongodb://tyler:s3kr4t@localhost/?authMechanism=GSSAPI")
949
+ end
863
950
  end
864
951
 
865
952
  context 'when a mapping value is missing but another is present' do
@@ -868,6 +955,10 @@ describe Mongo::URI do
868
955
  it 'only sets the present value' do
869
956
  expect(client.options[:auth_mech_properties]).to eq({ 'service_name' => 'foo' })
870
957
  end
958
+
959
+ it "roundtrips the string" do
960
+ expect(uri.to_s).to eq("mongodb://tyler:s3kr4t@localhost/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:foo")
961
+ end
871
962
  end
872
963
  end
873
964
  end
@@ -890,6 +981,8 @@ describe Mongo::URI do
890
981
  expect(client.options[:auth_mech]).to eq(expected)
891
982
  end
892
983
 
984
+ include_examples "roundtrips string"
985
+
893
986
  context 'when mechanism_properties are provided' do
894
987
  let(:options) { "authMechanism=#{mechanism}&authMechanismProperties=CANONICALIZE_HOST_NAME:true" }
895
988
 
@@ -920,6 +1013,8 @@ describe Mongo::URI do
920
1013
  expect(client.options[:auth_mech]).to eq(expected)
921
1014
  end
922
1015
 
1016
+ include_examples "roundtrips string"
1017
+
923
1018
  context 'when auth source is invalid' do
924
1019
  let(:options) { "authMechanism=#{mechanism}&authSource=foo" }
925
1020
 
@@ -938,6 +1033,8 @@ describe Mongo::URI do
938
1033
  expect(client.options[:auth_mech]).to eq(expected)
939
1034
  expect(client.options[:user]).to be_nil
940
1035
  end
1036
+
1037
+ include_examples "roundtrips string"
941
1038
  end
942
1039
 
943
1040
  context 'when a password is provided' do
@@ -967,7 +1064,7 @@ describe Mongo::URI do
967
1064
  let(:string) { "#{scheme}#{credentials}@#{servers}/" }
968
1065
 
969
1066
  context 'with no credentials' do
970
- let(:string) { "#{scheme}#{servers}/" }
1067
+ let(:string) { "#{scheme}#{servers}" }
971
1068
 
972
1069
  it 'sets user and password as nil' do
973
1070
  expect(uri.credentials[:user]).to be_nil
@@ -979,6 +1076,8 @@ describe Mongo::URI do
979
1076
  expect(client.options[:user]).to be_nil
980
1077
  expect(client.options[:password]).to be_nil
981
1078
  end
1079
+
1080
+ include_examples "roundtrips string"
982
1081
  end
983
1082
 
984
1083
  context 'with empty credentials' do
@@ -1011,6 +1110,8 @@ describe Mongo::URI do
1011
1110
  client = new_local_client_nmio(string)
1012
1111
  expect(client.options[:auth_source]).to eq(source)
1013
1112
  end
1113
+
1114
+ include_examples "roundtrips string"
1014
1115
  end
1015
1116
  end
1016
1117
 
@@ -1047,6 +1148,7 @@ describe Mongo::URI do
1047
1148
  end
1048
1149
 
1049
1150
  include_examples 'sets options in the expected manner'
1151
+ include_examples "roundtrips string"
1050
1152
  end
1051
1153
 
1052
1154
  context 'canonicalize_host_name' do
@@ -1069,6 +1171,7 @@ describe Mongo::URI do
1069
1171
  end
1070
1172
 
1071
1173
  include_examples 'sets options in the expected manner'
1174
+ include_examples "roundtrips string"
1072
1175
  end
1073
1176
 
1074
1177
  context 'service_realm' do
@@ -1091,6 +1194,7 @@ describe Mongo::URI do
1091
1194
  end
1092
1195
 
1093
1196
  include_examples 'sets options in the expected manner'
1197
+ include_examples "roundtrips string"
1094
1198
  end
1095
1199
 
1096
1200
  context 'multiple properties' do
@@ -1121,6 +1225,7 @@ describe Mongo::URI do
1121
1225
  end
1122
1226
 
1123
1227
  include_examples 'sets options in the expected manner'
1228
+ include_examples "roundtrips string"
1124
1229
  end
1125
1230
  end
1126
1231
 
@@ -1130,6 +1235,8 @@ describe Mongo::URI do
1130
1235
  it 'sets the the connect timeout' do
1131
1236
  expect(uri.uri_options[:connect_timeout]).to eq(4.567)
1132
1237
  end
1238
+
1239
+ include_examples "roundtrips string"
1133
1240
  end
1134
1241
 
1135
1242
  context 'socketTimeoutMS' do
@@ -1138,6 +1245,8 @@ describe Mongo::URI do
1138
1245
  it 'sets the socket timeout' do
1139
1246
  expect(uri.uri_options[:socket_timeout]).to eq(8.910)
1140
1247
  end
1248
+
1249
+ include_examples "roundtrips string"
1141
1250
  end
1142
1251
 
1143
1252
  context 'when providing serverSelectionTimeoutMS' do
@@ -1147,6 +1256,8 @@ describe Mongo::URI do
1147
1256
  it 'sets the the connect timeout' do
1148
1257
  expect(uri.uri_options[:server_selection_timeout]).to eq(3.561)
1149
1258
  end
1259
+
1260
+ include_examples "roundtrips string"
1150
1261
  end
1151
1262
 
1152
1263
  context 'when providing localThresholdMS' do
@@ -1156,6 +1267,8 @@ describe Mongo::URI do
1156
1267
  it 'sets the the connect timeout' do
1157
1268
  expect(uri.uri_options[:local_threshold]).to eq(3.561)
1158
1269
  end
1270
+
1271
+ include_examples "roundtrips string"
1159
1272
  end
1160
1273
 
1161
1274
  context 'when providing maxPoolSize' do
@@ -1166,6 +1279,8 @@ describe Mongo::URI do
1166
1279
  it 'sets the max pool size option' do
1167
1280
  expect(uri.uri_options[:max_pool_size]).to eq(max_pool_size)
1168
1281
  end
1282
+
1283
+ include_examples "roundtrips string"
1169
1284
  end
1170
1285
 
1171
1286
  context 'when providing minPoolSize' do
@@ -1176,6 +1291,8 @@ describe Mongo::URI do
1176
1291
  it 'sets the min pool size option' do
1177
1292
  expect(uri.uri_options[:min_pool_size]).to eq(min_pool_size)
1178
1293
  end
1294
+
1295
+ include_examples "roundtrips string"
1179
1296
  end
1180
1297
 
1181
1298
  context 'when providing srvMaxHosts with non-SRV URI' do
@@ -1211,6 +1328,8 @@ describe Mongo::URI do
1211
1328
  it 'sets the wait queue timeout option' do
1212
1329
  expect(uri.uri_options[:wait_queue_timeout]).to eq(0.5)
1213
1330
  end
1331
+
1332
+ include_examples "roundtrips string"
1214
1333
  end
1215
1334
 
1216
1335
  context 'ssl' do
@@ -1222,6 +1341,10 @@ describe Mongo::URI do
1222
1341
  it 'sets the ssl option to true' do
1223
1342
  expect(uri.uri_options[:ssl]).to be true
1224
1343
  end
1344
+
1345
+ it "returns the ssl as tls from to_s" do
1346
+ expect(uri.to_s).to eq("mongodb://localhost/?tls=true")
1347
+ end
1225
1348
  end
1226
1349
 
1227
1350
  context 'false' do
@@ -1230,6 +1353,10 @@ describe Mongo::URI do
1230
1353
  it 'sets the ssl option to false' do
1231
1354
  expect(uri.uri_options[:ssl]).to be false
1232
1355
  end
1356
+
1357
+ it "returns the ssl as tls from to_s" do
1358
+ expect(uri.to_s).to eq("mongodb://localhost/?tls=false")
1359
+ end
1233
1360
  end
1234
1361
  end
1235
1362
 
@@ -1239,6 +1366,10 @@ describe Mongo::URI do
1239
1366
  it 'do not overshadow top level options' do
1240
1367
  expect(uri.uri_options).not_to be_empty
1241
1368
  end
1369
+
1370
+ it "returns the ssl as tls from to_s" do
1371
+ expect(uri.to_s).to eq("mongodb://localhost/?w=1&tls=true")
1372
+ end
1242
1373
  end
1243
1374
 
1244
1375
  context 'when an invalid option is provided' do
@@ -1275,6 +1406,10 @@ describe Mongo::URI do
1275
1406
  client = new_local_client_nmio(string)
1276
1407
  expect(client.options[:app_name]).to eq('uri_test')
1277
1408
  end
1409
+
1410
+ it "roundtrips the string with camelCase" do
1411
+ expect(uri.to_s).to eq("mongodb://localhost/?appName=uri_test")
1412
+ end
1278
1413
  end
1279
1414
 
1280
1415
  context 'when a supported compressors option is provided' do
@@ -1284,6 +1419,8 @@ describe Mongo::URI do
1284
1419
  client = new_local_client_nmio(string)
1285
1420
  expect(client.options[:compressors]).to eq(['zlib'])
1286
1421
  end
1422
+
1423
+ include_examples "roundtrips string"
1287
1424
  end
1288
1425
 
1289
1426
  context 'when a non-supported compressors option is provided' do
@@ -1297,6 +1434,8 @@ describe Mongo::URI do
1297
1434
  expect(Mongo::Logger.logger).to receive(:warn)
1298
1435
  expect(client.options[:compressors]).to be_nil
1299
1436
  end
1437
+
1438
+ include_examples "roundtrips string"
1300
1439
  end
1301
1440
 
1302
1441
  context 'when a zlibCompressionLevel option is provided' do
@@ -1306,6 +1445,8 @@ describe Mongo::URI do
1306
1445
  client = new_local_client_nmio(string)
1307
1446
  expect(client.options[:zlib_compression_level]).to eq(6)
1308
1447
  end
1448
+
1449
+ include_examples "roundtrips string"
1309
1450
  end
1310
1451
  end
1311
1452
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  require 'lite_spec_helper'
5
5
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  require 'spec_helper'
5
5
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  require 'spec_helper'
5
5
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  require 'lite_spec_helper'
5
5
 
data/spec/runners/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) 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) 2019-2020 MongoDB Inc.
5
5
  #
@@ -41,7 +41,7 @@ module Mongo
41
41
  end
42
42
  end
43
43
 
44
- expect(actual_modified).to eq(expected)
44
+ expect(actual_modified.slice(*expected.keys)).to eq(expected)
45
45
  end
46
46
  end
47
47
  end