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,13 +1,15 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  require 'spec_helper'
5
5
 
6
+ DEFAULT_LOCAL_HOST = '127.0.0.1:27017'
7
+ ALT_LOCAL_HOST = '127.0.0.1:27010'
8
+
6
9
  # NB: tests for .new, #initialize, #use, #with and #dup are in
7
10
  # client_construction_spec.rb.
8
11
 
9
12
  describe Mongo::Client do
10
-
11
13
  let(:subscriber) { Mrss::EventSubscriber.new }
12
14
 
13
15
  let(:monitored_client) do
@@ -17,24 +19,21 @@ describe Mongo::Client do
17
19
  end
18
20
 
19
21
  describe '#==' do
20
-
21
22
  let(:client) do
22
23
  new_local_client_nmio(
23
- ['127.0.0.1:27017'],
24
- :read => { :mode => :primary },
25
- :database => SpecConfig.instance.test_db
24
+ [ DEFAULT_LOCAL_HOST ],
25
+ read: { mode: :primary },
26
+ database: SpecConfig.instance.test_db
26
27
  )
27
28
  end
28
29
 
29
30
  context 'when the other is a client' do
30
-
31
31
  context 'when the options and cluster are equal' do
32
-
33
32
  let(:other) do
34
33
  new_local_client_nmio(
35
- ['127.0.0.1:27017'],
36
- :read => { :mode => :primary },
37
- :database => SpecConfig.instance.test_db
34
+ [ DEFAULT_LOCAL_HOST ],
35
+ read: { mode: :primary },
36
+ database: SpecConfig.instance.test_db
38
37
  )
39
38
  end
40
39
 
@@ -44,12 +43,11 @@ describe Mongo::Client do
44
43
  end
45
44
 
46
45
  context 'when the options are not equal' do
47
-
48
46
  let(:other) do
49
47
  new_local_client_nmio(
50
- ['127.0.0.1:27017'],
51
- :read => { :mode => :secondary },
52
- :database => SpecConfig.instance.test_db
48
+ [ DEFAULT_LOCAL_HOST ],
49
+ read: { mode: :secondary },
50
+ database: SpecConfig.instance.test_db
53
51
  )
54
52
  end
55
53
 
@@ -59,12 +57,11 @@ describe Mongo::Client do
59
57
  end
60
58
 
61
59
  context 'when cluster is not equal' do
62
-
63
60
  let(:other) do
64
61
  new_local_client_nmio(
65
- ['127.0.0.1:27010'],
66
- :read => { :mode => :primary },
67
- :database => SpecConfig.instance.test_db
62
+ [ ALT_LOCAL_HOST ],
63
+ read: { mode: :primary },
64
+ database: SpecConfig.instance.test_db
68
65
  )
69
66
  end
70
67
 
@@ -75,7 +72,6 @@ describe Mongo::Client do
75
72
  end
76
73
 
77
74
  context 'when the other is not a client' do
78
-
79
75
  it 'returns false' do
80
76
  expect(client).not_to eq('test')
81
77
  end
@@ -83,14 +79,12 @@ describe Mongo::Client do
83
79
  end
84
80
 
85
81
  describe '#[]' do
86
-
87
82
  let(:client) do
88
- new_local_client_nmio(['127.0.0.1:27017'],
89
- :database => SpecConfig.instance.test_db)
83
+ new_local_client_nmio([ DEFAULT_LOCAL_HOST ],
84
+ database: SpecConfig.instance.test_db)
90
85
  end
91
86
 
92
87
  shared_examples_for 'a collection switching object' do
93
-
94
88
  before do
95
89
  client.use(:dbtest)
96
90
  end
@@ -101,7 +95,6 @@ describe Mongo::Client do
101
95
  end
102
96
 
103
97
  context 'when provided a string' do
104
-
105
98
  let(:collection) do
106
99
  client['users']
107
100
  end
@@ -110,7 +103,6 @@ describe Mongo::Client do
110
103
  end
111
104
 
112
105
  context 'when provided a symbol' do
113
-
114
106
  let(:collection) do
115
107
  client[:users]
116
108
  end
@@ -120,24 +112,21 @@ describe Mongo::Client do
120
112
  end
121
113
 
122
114
  describe '#eql' do
123
-
124
115
  let(:client) do
125
116
  new_local_client_nmio(
126
- ['127.0.0.1:27017'],
127
- :read => { :mode => :primary },
128
- :database => SpecConfig.instance.test_db
117
+ [ DEFAULT_LOCAL_HOST ],
118
+ read: { mode: :primary },
119
+ database: SpecConfig.instance.test_db
129
120
  )
130
121
  end
131
122
 
132
123
  context 'when the other is a client' do
133
-
134
124
  context 'when the options and cluster are equal' do
135
-
136
125
  let(:other) do
137
126
  new_local_client_nmio(
138
- ['127.0.0.1:27017'],
139
- :read => { :mode => :primary },
140
- :database => SpecConfig.instance.test_db
127
+ [ DEFAULT_LOCAL_HOST ],
128
+ read: { mode: :primary },
129
+ database: SpecConfig.instance.test_db
141
130
  )
142
131
  end
143
132
 
@@ -147,12 +136,11 @@ describe Mongo::Client do
147
136
  end
148
137
 
149
138
  context 'when the options are not equal' do
150
-
151
139
  let(:other) do
152
140
  new_local_client_nmio(
153
- ['127.0.0.1:27017'],
154
- :read => { :mode => :secondary },
155
- :database => SpecConfig.instance.test_db
141
+ [ DEFAULT_LOCAL_HOST ],
142
+ read: { mode: :secondary },
143
+ database: SpecConfig.instance.test_db
156
144
  )
157
145
  end
158
146
 
@@ -162,12 +150,11 @@ describe Mongo::Client do
162
150
  end
163
151
 
164
152
  context 'when the cluster is not equal' do
165
-
166
153
  let(:other) do
167
154
  new_local_client_nmio(
168
- ['127.0.0.1:27010'],
169
- :read => { :mode => :primary },
170
- :database => SpecConfig.instance.test_db
155
+ [ ALT_LOCAL_HOST ],
156
+ read: { mode: :primary },
157
+ database: SpecConfig.instance.test_db
171
158
  )
172
159
  end
173
160
 
@@ -178,12 +165,11 @@ describe Mongo::Client do
178
165
  end
179
166
 
180
167
  context 'when the other is not a client' do
181
-
182
168
  let(:client) do
183
169
  new_local_client_nmio(
184
- ['127.0.0.1:27017'],
185
- :read => { :mode => :primary },
186
- :database => SpecConfig.instance.test_db
170
+ [ DEFAULT_LOCAL_HOST ],
171
+ read: { mode: :primary },
172
+ database: SpecConfig.instance.test_db
187
173
  )
188
174
  end
189
175
 
@@ -194,14 +180,13 @@ describe Mongo::Client do
194
180
  end
195
181
 
196
182
  describe '#hash' do
197
-
198
183
  let(:client) do
199
184
  new_local_client_nmio(
200
- ['127.0.0.1:27017'],
201
- :read => { :mode => :primary },
202
- :local_threshold => 0.010,
203
- :server_selection_timeout => 10000,
204
- :database => SpecConfig.instance.test_db
185
+ [ DEFAULT_LOCAL_HOST ],
186
+ read: { mode: :primary },
187
+ local_threshold: 0.010,
188
+ server_selection_timeout: 10000,
189
+ database: SpecConfig.instance.test_db
205
190
  )
206
191
  end
207
192
 
@@ -209,14 +194,14 @@ describe Mongo::Client do
209
194
  retry_writes: true, retry_reads: true, monitoring_io: false) }
210
195
 
211
196
  let(:options) do
212
- Mongo::Options::Redacted.new(:read => { :mode => :primary },
213
- :local_threshold => 0.010,
214
- :server_selection_timeout => 10000,
215
- :database => SpecConfig.instance.test_db)
197
+ Mongo::Options::Redacted.new(read: { mode: :primary },
198
+ local_threshold: 0.010,
199
+ server_selection_timeout: 10000,
200
+ database: SpecConfig.instance.test_db)
216
201
  end
217
202
 
218
203
  let(:expected) do
219
- [client.cluster, default_options.merge(options)].hash
204
+ [ client.cluster, default_options.merge(options) ].hash
220
205
  end
221
206
 
222
207
  it 'returns a hash of the cluster and options' do
@@ -225,12 +210,11 @@ describe Mongo::Client do
225
210
  end
226
211
 
227
212
  describe '#inspect' do
228
-
229
213
  let(:client) do
230
214
  new_local_client_nmio(
231
- ['127.0.0.1:27017'],
232
- :read => { :mode => :primary },
233
- :database => SpecConfig.instance.test_db
215
+ [ DEFAULT_LOCAL_HOST ],
216
+ read: { mode: :primary },
217
+ database: SpecConfig.instance.test_db
234
218
  )
235
219
  end
236
220
 
@@ -239,14 +223,13 @@ describe Mongo::Client do
239
223
  end
240
224
 
241
225
  context 'when there is sensitive data in the options' do
242
-
243
226
  let(:client) do
244
227
  new_local_client_nmio(
245
- ['127.0.0.1:27017'],
246
- :read => { :mode => :primary },
247
- :database => SpecConfig.instance.test_db,
248
- :password => 'some_password',
249
- :user => 'emily'
228
+ [ DEFAULT_LOCAL_HOST ],
229
+ read: { mode: :primary },
230
+ database: SpecConfig.instance.test_db,
231
+ password: 'some_password',
232
+ user: 'emily'
250
233
  )
251
234
  end
252
235
 
@@ -257,14 +240,12 @@ describe Mongo::Client do
257
240
  end
258
241
 
259
242
  describe '#server_selector' do
260
-
261
243
  context 'when there is a read preference set' do
262
-
263
244
  let(:client) do
264
- new_local_client_nmio(['127.0.0.1:27017'],
265
- :database => SpecConfig.instance.test_db,
266
- :read => mode,
267
- :server_selection_timeout => 2)
245
+ new_local_client_nmio([ DEFAULT_LOCAL_HOST ],
246
+ database: SpecConfig.instance.test_db,
247
+ read: mode,
248
+ server_selection_timeout: 2)
268
249
  end
269
250
 
270
251
  let(:server_selector) do
@@ -272,9 +253,8 @@ describe Mongo::Client do
272
253
  end
273
254
 
274
255
  context 'when mode is primary' do
275
-
276
256
  let(:mode) do
277
- { :mode => :primary }
257
+ { mode: :primary }
278
258
  end
279
259
 
280
260
  it 'returns a primary server selector' do
@@ -287,9 +267,8 @@ describe Mongo::Client do
287
267
  end
288
268
 
289
269
  context 'when mode is primary_preferred' do
290
-
291
270
  let(:mode) do
292
- { :mode => :primary_preferred }
271
+ { mode: :primary_preferred }
293
272
  end
294
273
 
295
274
  it 'returns a primary preferred server selector' do
@@ -298,9 +277,8 @@ describe Mongo::Client do
298
277
  end
299
278
 
300
279
  context 'when mode is secondary' do
301
-
302
280
  let(:mode) do
303
- { :mode => :secondary }
281
+ { mode: :secondary }
304
282
  end
305
283
 
306
284
  it 'uses a Secondary server selector' do
@@ -309,9 +287,8 @@ describe Mongo::Client do
309
287
  end
310
288
 
311
289
  context 'when mode is secondary preferred' do
312
-
313
290
  let(:mode) do
314
- { :mode => :secondary_preferred }
291
+ { mode: :secondary_preferred }
315
292
  end
316
293
 
317
294
  it 'uses a Secondary server selector' do
@@ -320,9 +297,8 @@ describe Mongo::Client do
320
297
  end
321
298
 
322
299
  context 'when mode is nearest' do
323
-
324
300
  let(:mode) do
325
- { :mode => :nearest }
301
+ { mode: :nearest }
326
302
  end
327
303
 
328
304
  it 'uses a Secondary server selector' do
@@ -331,11 +307,10 @@ describe Mongo::Client do
331
307
  end
332
308
 
333
309
  context 'when no mode provided' do
334
-
335
310
  let(:client) do
336
- new_local_client_nmio(['127.0.0.1:27017'],
337
- :database => SpecConfig.instance.test_db,
338
- :server_selection_timeout => 2)
311
+ new_local_client_nmio([ DEFAULT_LOCAL_HOST ],
312
+ database: SpecConfig.instance.test_db,
313
+ server_selection_timeout: 2)
339
314
  end
340
315
 
341
316
  it 'returns a primary server selector' do
@@ -344,7 +319,6 @@ describe Mongo::Client do
344
319
  end
345
320
 
346
321
  context 'when the read preference is printed' do
347
-
348
322
  let(:client) do
349
323
  new_local_client_nmio(SpecConfig.instance.addresses, options)
350
324
  end
@@ -360,7 +334,7 @@ describe Mongo::Client do
360
334
  let(:error) do
361
335
  begin
362
336
  client.database.command(ping: 1)
363
- rescue => e
337
+ rescue StandardError => e
364
338
  e
365
339
  end
366
340
  end
@@ -373,12 +347,11 @@ describe Mongo::Client do
373
347
  end
374
348
 
375
349
  describe '#read_preference' do
376
-
377
350
  let(:client) do
378
- new_local_client_nmio(['127.0.0.1:27017'],
379
- :database => SpecConfig.instance.test_db,
380
- :read => mode,
381
- :server_selection_timeout => 2)
351
+ new_local_client_nmio([ DEFAULT_LOCAL_HOST ],
352
+ database: SpecConfig.instance.test_db,
353
+ read: mode,
354
+ server_selection_timeout: 2)
382
355
  end
383
356
 
384
357
  let(:preference) do
@@ -386,9 +359,8 @@ describe Mongo::Client do
386
359
  end
387
360
 
388
361
  context 'when mode is primary' do
389
-
390
362
  let(:mode) do
391
- { :mode => :primary }
363
+ { mode: :primary }
392
364
  end
393
365
 
394
366
  it 'returns a primary read preference' do
@@ -397,9 +369,8 @@ describe Mongo::Client do
397
369
  end
398
370
 
399
371
  context 'when mode is primary_preferred' do
400
-
401
372
  let(:mode) do
402
- { :mode => :primary_preferred }
373
+ { mode: :primary_preferred }
403
374
  end
404
375
 
405
376
  it 'returns a primary preferred read preference' do
@@ -408,9 +379,8 @@ describe Mongo::Client do
408
379
  end
409
380
 
410
381
  context 'when mode is secondary' do
411
-
412
382
  let(:mode) do
413
- { :mode => :secondary }
383
+ { mode: :secondary }
414
384
  end
415
385
 
416
386
  it 'returns a secondary read preference' do
@@ -419,9 +389,8 @@ describe Mongo::Client do
419
389
  end
420
390
 
421
391
  context 'when mode is secondary preferred' do
422
-
423
392
  let(:mode) do
424
- { :mode => :secondary_preferred }
393
+ { mode: :secondary_preferred }
425
394
  end
426
395
 
427
396
  it 'returns a secondary preferred read preference' do
@@ -430,9 +399,8 @@ describe Mongo::Client do
430
399
  end
431
400
 
432
401
  context 'when mode is nearest' do
433
-
434
402
  let(:mode) do
435
- { :mode => :nearest }
403
+ { mode: :nearest }
436
404
  end
437
405
 
438
406
  it 'returns a nearest read preference' do
@@ -441,11 +409,10 @@ describe Mongo::Client do
441
409
  end
442
410
 
443
411
  context 'when no mode provided' do
444
-
445
412
  let(:client) do
446
- new_local_client_nmio(['127.0.0.1:27017'],
447
- :database => SpecConfig.instance.test_db,
448
- :server_selection_timeout => 2)
413
+ new_local_client_nmio([ DEFAULT_LOCAL_HOST ],
414
+ database: SpecConfig.instance.test_db,
415
+ server_selection_timeout: 2)
449
416
  end
450
417
 
451
418
  it 'returns nil' do
@@ -455,12 +422,10 @@ describe Mongo::Client do
455
422
  end
456
423
 
457
424
  describe '#write_concern' do
458
-
459
425
  let(:concern) { client.write_concern }
460
426
 
461
427
  context 'when no option was provided to the client' do
462
-
463
- let(:client) { new_local_client_nmio(['127.0.0.1:27017'], :database => SpecConfig.instance.test_db) }
428
+ let(:client) { new_local_client_nmio([ DEFAULT_LOCAL_HOST ], database: SpecConfig.instance.test_db) }
464
429
 
465
430
  it 'does not set the write concern' do
466
431
  expect(concern).to be_nil
@@ -468,24 +433,20 @@ describe Mongo::Client do
468
433
  end
469
434
 
470
435
  context 'when an option is provided' do
471
-
472
436
  context 'when the option is acknowledged' do
473
-
474
437
  let(:client) do
475
- new_local_client_nmio(['127.0.0.1:27017'], :write => { :j => true }, :database => SpecConfig.instance.test_db)
438
+ new_local_client_nmio([ DEFAULT_LOCAL_HOST ], write: { j: true }, database: SpecConfig.instance.test_db)
476
439
  end
477
440
 
478
441
  it 'returns a acknowledged write concern' do
479
- expect(concern.get_last_error).to eq(:getlasterror => 1, :j => true)
442
+ expect(concern.get_last_error).to eq(getlasterror: 1, j: true)
480
443
  end
481
444
  end
482
445
 
483
446
  context 'when the option is unacknowledged' do
484
-
485
447
  context 'when the w is 0' do
486
-
487
448
  let(:client) do
488
- new_local_client_nmio(['127.0.0.1:27017'], :write => { :w => 0 }, :database => SpecConfig.instance.test_db)
449
+ new_local_client_nmio([ DEFAULT_LOCAL_HOST ], write: { w: 0 }, database: SpecConfig.instance.test_db)
489
450
  end
490
451
 
491
452
  it 'returns an unacknowledged write concern' do
@@ -494,9 +455,8 @@ describe Mongo::Client do
494
455
  end
495
456
 
496
457
  context 'when the w is -1' do
497
-
498
458
  let(:client) do
499
- new_local_client_nmio(['127.0.0.1:27017'], :write => { :w => -1 }, :database => SpecConfig.instance.test_db)
459
+ new_local_client_nmio([ DEFAULT_LOCAL_HOST ], write: { w: -1 }, database: SpecConfig.instance.test_db)
500
460
  end
501
461
 
502
462
  it 'raises an error' do
@@ -510,15 +470,15 @@ describe Mongo::Client do
510
470
  end
511
471
 
512
472
  [
513
- [:max_read_retries, 1],
514
- [:read_retry_interval, 5],
515
- [:max_write_retries, 1],
473
+ [ :max_read_retries, 1 ],
474
+ [ :read_retry_interval, 5 ],
475
+ [ :max_write_retries, 1 ],
516
476
  ].each do |opt, default|
517
477
  describe "##{opt}" do
518
478
  let(:client_options) { {} }
519
479
 
520
480
  let(:client) do
521
- new_local_client_nmio(['127.0.0.1:27017'], client_options)
481
+ new_local_client_nmio([ DEFAULT_LOCAL_HOST ], client_options)
522
482
  end
523
483
 
524
484
  it "defaults to #{default}" do
@@ -528,7 +488,7 @@ describe Mongo::Client do
528
488
  end
529
489
 
530
490
  context 'specified on client' do
531
- let(:client_options) { {opt => 2} }
491
+ let(:client_options) { { opt => 2 } }
532
492
 
533
493
  it 'inherits from client' do
534
494
  expect(client.options[opt]).to eq(2)
@@ -550,24 +510,21 @@ describe Mongo::Client do
550
510
  end
551
511
 
552
512
  describe '#database' do
553
-
554
513
  let(:database) { client.database }
555
514
 
556
515
  context 'when client has :server_api option' do
557
-
558
516
  let(:client) do
559
- new_local_client_nmio(['localhost'], server_api: {version: '1'})
517
+ new_local_client_nmio([ 'localhost' ], server_api: { version: '1' })
560
518
  end
561
519
 
562
520
  it 'is not transfered to the collection' do
563
- database.options[:server_api].should be nil
521
+ expect(database.options[:server_api]).to be_nil
564
522
  end
565
523
  end
566
524
 
567
525
  end
568
526
 
569
527
  describe '#database_names' do
570
-
571
528
  it 'returns a list of database names' do
572
529
  expect(root_authorized_client.database_names).to include(
573
530
  'admin'
@@ -597,17 +554,16 @@ describe Mongo::Client do
597
554
  min_server_version '4.4'
598
555
 
599
556
  it 'returns a list of database names and send comment' do
600
- result = monitored_client.database_names({}, comment: "comment")
557
+ result = monitored_client.database_names({}, comment: 'comment')
601
558
  expect(result).to include('admin')
602
- command = subscriber.command_started_events("listDatabases").last&.command
559
+ command = subscriber.command_started_events('listDatabases').last&.command
603
560
  expect(command).not_to be_nil
604
- expect(command["comment"]).to eq("comment")
561
+ expect(command['comment']).to eq('comment')
605
562
  end
606
563
  end
607
564
  end
608
565
 
609
566
  describe '#list_databases' do
610
-
611
567
  it 'returns a list of database info documents' do
612
568
  expect(
613
569
  root_authorized_client.list_databases.collect do |i|
@@ -702,19 +658,18 @@ describe Mongo::Client do
702
658
  min_server_version '4.4'
703
659
 
704
660
  it 'returns a list of database names and send comment' do
705
- result = monitored_client.list_databases({}, false, comment: "comment").collect do |i|
661
+ result = monitored_client.list_databases({}, false, comment: 'comment').collect do |i|
706
662
  i['name']
707
663
  end
708
664
  expect(result).to include('admin')
709
- command = subscriber.command_started_events("listDatabases").last&.command
665
+ command = subscriber.command_started_events('listDatabases').last&.command
710
666
  expect(command).not_to be_nil
711
- expect(command["comment"]).to eq("comment")
667
+ expect(command['comment']).to eq('comment')
712
668
  end
713
669
  end
714
670
  end
715
671
 
716
672
  describe '#list_mongo_databases' do
717
-
718
673
  let(:options) do
719
674
  { read: { mode: :secondary } }
720
675
  end
@@ -758,32 +713,31 @@ describe Mongo::Client do
758
713
  min_server_version '4.4'
759
714
 
760
715
  it 'returns a list of database names and send comment' do
761
- result = monitored_client.list_mongo_databases({}, comment: "comment")
716
+ result = monitored_client.list_mongo_databases({}, comment: 'comment')
762
717
  expect(result).to all(be_a(Mongo::Database))
763
- command = subscriber.command_started_events("listDatabases").last&.command
718
+ command = subscriber.command_started_events('listDatabases').last&.command
764
719
  expect(command).not_to be_nil
765
- expect(command["comment"]).to eq("comment")
720
+ expect(command['comment']).to eq('comment')
766
721
  end
767
722
  end
768
723
  end
769
724
 
770
725
  describe '#close' do
771
726
  let(:client) do
772
- new_local_client_nmio(['127.0.0.1:27017'])
727
+ new_local_client_nmio([ DEFAULT_LOCAL_HOST ])
773
728
  end
774
729
 
775
730
  it 'disconnects the cluster and returns true' do
776
731
  RSpec::Mocks.with_temporary_scope do
777
- expect(client.cluster).to receive(:disconnect!).and_call_original
732
+ expect(client.cluster).to receive(:close).and_call_original
778
733
  expect(client.close).to be(true)
779
734
  end
780
735
  end
781
736
  end
782
737
 
783
738
  describe '#reconnect' do
784
-
785
739
  let(:client) do
786
- new_local_client_nmio([ClusterConfig.instance.primary_address_str])
740
+ new_local_client_nmio([ ClusterConfig.instance.primary_address_str ])
787
741
  end
788
742
 
789
743
  it 'replaces the cluster' do
@@ -806,7 +760,6 @@ describe Mongo::Client do
806
760
  end
807
761
 
808
762
  describe '#collections' do
809
-
810
763
  before do
811
764
  authorized_client.database[:users].drop
812
765
  authorized_client.database[:users].create
@@ -823,7 +776,6 @@ describe Mongo::Client do
823
776
  end
824
777
 
825
778
  describe '#start_session' do
826
-
827
779
  let(:session) do
828
780
  authorized_client.start_session
829
781
  end
@@ -842,7 +794,6 @@ describe Mongo::Client do
842
794
  end
843
795
 
844
796
  context 'when options are provided' do
845
-
846
797
  let(:options) do
847
798
  { causal_consistency: true }
848
799
  end
@@ -857,14 +808,12 @@ describe Mongo::Client do
857
808
  end
858
809
 
859
810
  context 'when options are not provided' do
860
-
861
811
  it 'does not set options on the session' do
862
812
  expect(session.options).to eq({ implicit: false })
863
813
  end
864
814
  end
865
815
 
866
816
  context 'when a session is checked out and checked back in' do
867
-
868
817
  let!(:session_a) do
869
818
  authorized_client.start_session
870
819
  end
@@ -902,7 +851,6 @@ describe Mongo::Client do
902
851
  end
903
852
 
904
853
  context 'when an implicit session is used' do
905
-
906
854
  before do
907
855
  authorized_client.database.command(ping: 1)
908
856
  end
@@ -932,10 +880,10 @@ describe Mongo::Client do
932
880
  end
933
881
 
934
882
  let(:options) do
935
- { :max_pool_size => 1, :retry_writes => true }
883
+ { max_pool_size: 1, retry_writes: true }
936
884
  end
937
885
 
938
- shared_examples "a single connection" do
886
+ shared_examples 'a single connection' do
939
887
  # JRuby, due to being concurrent, does not like rspec setting mocks
940
888
  # in threads while other threads are calling the methods being mocked.
941
889
  # My theory is that rspec removes & redefines methods as part of
@@ -947,226 +895,218 @@ describe Mongo::Client do
947
895
  before do
948
896
  sessions_checked_out = 0
949
897
 
950
- allow_any_instance_of(Mongo::Server).to receive(:with_connection).and_wrap_original do |m, *args, &block|
951
- m.call(*args) do |connection|
898
+ allow_any_instance_of(Mongo::Server).to receive(:with_connection).and_wrap_original do |m, *args, **kwargs, &block|
899
+ m.call(*args, **kwargs) do |connection|
952
900
  sessions_checked_out = 0
953
901
  res = block.call(connection)
954
902
  expect(sessions_checked_out).to be < 2
955
903
  res
956
904
  end
957
905
  end
958
-
959
- allow_any_instance_of(Mongo::Session).to receive(:materialize).and_wrap_original do |m, *args|
960
- sessions_checked_out += 1
961
- m.call(*args).tap do
962
- checked_out_connections = args[0].connection_pool.instance_variable_get("@checked_out_connections")
963
- expect(checked_out_connections.length).to eq 1
964
- end
965
- end
966
906
  end
967
907
 
968
- it 'doesn\'t have any live sessions' do
908
+ it "doesn't have any live sessions" do
969
909
  threads.each do |thread|
970
910
  thread.join
971
911
  end
972
912
  end
973
913
  end
974
914
 
975
- context "when doing three inserts" do
915
+ context 'when doing three inserts' do
976
916
  let(:threads) do
977
917
  (1..3).map do |i|
978
918
  Thread.new do
979
- client['test'].insert_one({test: "test#{i}"})
919
+ client['test'].insert_one({ test: "test#{i}" })
980
920
  end
981
921
  end
982
922
  end
983
923
 
984
- include_examples "a single connection"
924
+ include_examples 'a single connection'
985
925
  end
986
926
 
987
- context "when doing an insert and two updates" do
927
+ context 'when doing an insert and two updates' do
988
928
  let(:threads) do
989
929
  threads = []
990
930
  threads << Thread.new do
991
- client['test'].insert_one({test: "test"})
931
+ client['test'].insert_one({ test: 'test' })
992
932
  end
993
933
  threads << Thread.new do
994
- client['test'].update_one({test: "test"}, { "$set" => { test: "test2" } })
934
+ client['test'].update_one({ test: 'test' }, { '$set' => { test: 'test2' } })
995
935
  end
996
936
  threads << Thread.new do
997
- client['test'].update_one({test: "test"}, { "$set" => { test: "test2" } })
937
+ client['test'].update_one({ test: 'test' }, { '$set' => { test: 'test2' } })
998
938
  end
999
939
  threads
1000
940
  end
1001
941
 
1002
- include_examples "a single connection"
942
+ include_examples 'a single connection'
1003
943
  end
1004
944
 
1005
- context "when doing an insert, update and delete" do
945
+ context 'when doing an insert, update and delete' do
1006
946
  let(:threads) do
1007
947
  threads = []
1008
948
  threads << Thread.new do
1009
- client['test'].insert_one({test: "test"})
949
+ client['test'].insert_one({ test: 'test' })
1010
950
  end
1011
951
  threads << Thread.new do
1012
- client['test'].update_one({test: "test"}, { "$set" => { test: "test2" } })
952
+ client['test'].update_one({ test: 'test' }, { '$set' => { test: 'test2' } })
1013
953
  end
1014
954
  threads << Thread.new do
1015
- client['test'].delete_one({test: "test"})
955
+ client['test'].delete_one({ test: 'test' })
1016
956
  end
1017
957
  threads
1018
958
  end
1019
959
 
1020
- include_examples "a single connection"
960
+ include_examples 'a single connection'
1021
961
  end
1022
962
 
1023
- context "when doing an insert, update and find" do
963
+ context 'when doing an insert, update and find' do
1024
964
  let(:threads) do
1025
965
  threads = []
1026
966
  threads << Thread.new do
1027
- client['test'].insert_one({test: "test"})
967
+ client['test'].insert_one({ test: 'test' })
1028
968
  end
1029
969
  threads << Thread.new do
1030
- client['test'].update_one({test: "test"}, { "$set" => { test: "test2" } })
970
+ client['test'].update_one({ test: 'test' }, { '$set' => { test: 'test2' } })
1031
971
  end
1032
972
  threads << Thread.new do
1033
- client['test'].find({test: "test"}).to_a
973
+ client['test'].find({ test: 'test' }).to_a
1034
974
  end
1035
975
  threads
1036
976
  end
1037
977
 
1038
- include_examples "a single connection"
978
+ include_examples 'a single connection'
1039
979
  end
1040
980
 
1041
- context "when doing an insert, update and bulk write" do
981
+ context 'when doing an insert, update and bulk write' do
1042
982
  let(:threads) do
1043
983
  threads = []
1044
984
  threads << Thread.new do
1045
- client['test'].insert_one({test: "test"})
985
+ client['test'].insert_one({ test: 'test' })
1046
986
  end
1047
987
  threads << Thread.new do
1048
- client['test'].update_one({test: "test"}, { "$set" => { test: "test2" } })
988
+ client['test'].update_one({ test: 'test' }, { '$set' => { test: 'test2' } })
1049
989
  end
1050
990
  threads << Thread.new do
1051
- client['test'].bulk_write([{ insert_one: { test: "test1" } },
1052
- { update_one: { filter: { test: "test1" }, update: { "$set" => { test: "test2" } } } } ])
991
+ client['test'].bulk_write([ { insert_one: { test: 'test1' } },
992
+ { update_one: { filter: { test: 'test1' }, update: { '$set' => { test: 'test2' } } } } ])
1053
993
  end
1054
994
  threads
1055
995
  end
1056
996
 
1057
- include_examples "a single connection"
997
+ include_examples 'a single connection'
1058
998
  end
1059
999
 
1060
- context "when doing an insert, update and find_one_and_delete" do
1000
+ context 'when doing an insert, update and find_one_and_delete' do
1061
1001
  let(:threads) do
1062
1002
  threads = []
1063
1003
  threads << Thread.new do
1064
- client['test'].insert_one({test: "test"})
1004
+ client['test'].insert_one({ test: 'test' })
1065
1005
  end
1066
1006
  threads << Thread.new do
1067
- client['test'].update_one({test: "test"}, { "$set" => { test: "test2" } })
1007
+ client['test'].update_one({ test: 'test' }, { '$set' => { test: 'test2' } })
1068
1008
  end
1069
1009
  threads << Thread.new do
1070
- client['test'].find_one_and_delete({test: "test"})
1010
+ client['test'].find_one_and_delete({ test: 'test' })
1071
1011
  end
1072
1012
  threads
1073
1013
  end
1074
1014
 
1075
- include_examples "a single connection"
1015
+ include_examples 'a single connection'
1076
1016
  end
1077
1017
 
1078
- context "when doing an insert, update and find_one_and_update" do
1018
+ context 'when doing an insert, update and find_one_and_update' do
1079
1019
  let(:threads) do
1080
1020
  threads = []
1081
1021
  threads << Thread.new do
1082
- client['test'].insert_one({test: "test"})
1022
+ client['test'].insert_one({ test: 'test' })
1083
1023
  end
1084
1024
  threads << Thread.new do
1085
- client['test'].update_one({test: "test"}, { "$set" => { test: "test2" } })
1025
+ client['test'].update_one({ test: 'test' }, { '$set' => { test: 'test2' } })
1086
1026
  end
1087
1027
  threads << Thread.new do
1088
- client['test'].find_one_and_update({test: "test"}, {test: "test2"})
1028
+ client['test'].find_one_and_update({ test: 'test' }, { test: 'test2' })
1089
1029
  end
1090
1030
  threads
1091
1031
  end
1092
1032
 
1093
- include_examples "a single connection"
1033
+ include_examples 'a single connection'
1094
1034
  end
1095
1035
 
1096
- context "when doing an insert, update and find_one_and_replace" do
1036
+ context 'when doing an insert, update and find_one_and_replace' do
1097
1037
  let(:threads) do
1098
1038
  threads = []
1099
1039
  threads << Thread.new do
1100
- client['test'].insert_one({test: "test"})
1040
+ client['test'].insert_one({ test: 'test' })
1101
1041
  end
1102
1042
  threads << Thread.new do
1103
- client['test'].update_one({test: "test"}, { "$set" => { test: "test2" } })
1043
+ client['test'].update_one({ test: 'test' }, { '$set' => { test: 'test2' } })
1104
1044
  end
1105
1045
  threads << Thread.new do
1106
- client['test'].find_one_and_replace({test: "test"}, {test: "test2"})
1046
+ client['test'].find_one_and_replace({ test: 'test' }, { test: 'test2' })
1107
1047
  end
1108
1048
  threads
1109
1049
  end
1110
1050
 
1111
- include_examples "a single connection"
1051
+ include_examples 'a single connection'
1112
1052
  end
1113
1053
 
1114
- context "when doing an insert, update and a replace" do
1054
+ context 'when doing an insert, update and a replace' do
1115
1055
  let(:threads) do
1116
1056
  threads = []
1117
1057
  threads << Thread.new do
1118
- client['test'].insert_one({test: "test"})
1058
+ client['test'].insert_one({ test: 'test' })
1119
1059
  end
1120
1060
  threads << Thread.new do
1121
- client['test'].update_one({test: "test"}, { "$set" => { test: "test2" } })
1061
+ client['test'].update_one({ test: 'test' }, { '$set' => { test: 'test2' } })
1122
1062
  end
1123
1063
  threads << Thread.new do
1124
- client['test'].replace_one({test: "test"}, {test: "test2"})
1064
+ client['test'].replace_one({ test: 'test' }, { test: 'test2' })
1125
1065
  end
1126
1066
  threads
1127
1067
  end
1128
1068
 
1129
- include_examples "a single connection"
1069
+ include_examples 'a single connection'
1130
1070
  end
1131
1071
 
1132
- context "when doing all of the operations" do
1072
+ context 'when doing all of the operations' do
1133
1073
  let(:threads) do
1134
1074
  threads = []
1135
1075
  threads << Thread.new do
1136
- client['test'].insert_one({test: "test"})
1076
+ client['test'].insert_one({ test: 'test' })
1137
1077
  end
1138
1078
  threads << Thread.new do
1139
- client['test'].update_one({ test: "test" }, { "$set" => { test: 1 } })
1079
+ client['test'].update_one({ test: 'test' }, { '$set' => { test: 1 } })
1140
1080
  end
1141
1081
  threads << Thread.new do
1142
- client['test'].find_one_and_replace({test: "test"}, {test: "test2"})
1082
+ client['test'].find_one_and_replace({ test: 'test' }, { test: 'test2' })
1143
1083
  end
1144
1084
  threads << Thread.new do
1145
- client['test'].delete_one({test: "test"})
1085
+ client['test'].delete_one({ test: 'test' })
1146
1086
  end
1147
1087
  threads << Thread.new do
1148
- client['test'].find({test: "test"}).to_a
1088
+ client['test'].find({ test: 'test' }).to_a
1149
1089
  end
1150
1090
  threads << Thread.new do
1151
- client['test'].bulk_write([{ insert_one: { test: "test1" } },
1152
- { update_one: { filter: { test: "test1" }, update: { "$set" => { test: "test2" } } } } ])
1091
+ client['test'].bulk_write([ { insert_one: { test: 'test1' } },
1092
+ { update_one: { filter: { test: 'test1' }, update: { '$set' => { test: 'test2' } } } } ])
1153
1093
  end
1154
1094
  threads << Thread.new do
1155
- client['test'].find_one_and_delete({test: "test"})
1095
+ client['test'].find_one_and_delete({ test: 'test' })
1156
1096
  end
1157
1097
  threads << Thread.new do
1158
- client['test'].find_one_and_update({test: "test"}, {test: "test2"})
1098
+ client['test'].find_one_and_update({ test: 'test' }, { test: 'test2' })
1159
1099
  end
1160
1100
  threads << Thread.new do
1161
- client['test'].find_one_and_replace({test: "test"}, {test: "test2"})
1101
+ client['test'].find_one_and_replace({ test: 'test' }, { test: 'test2' })
1162
1102
  end
1163
1103
  threads << Thread.new do
1164
- client['test'].replace_one({test: "test"}, {test: "test2"})
1104
+ client['test'].replace_one({ test: 'test' }, { test: 'test2' })
1165
1105
  end
1166
1106
  threads
1167
1107
  end
1168
1108
 
1169
- include_examples "a single connection"
1109
+ include_examples 'a single connection'
1170
1110
  end
1171
1111
  end
1172
1112
  end
@@ -1219,18 +1159,17 @@ describe Mongo::Client do
1219
1159
  end
1220
1160
 
1221
1161
  describe '#summary' do
1222
-
1223
1162
  context 'monitoring omitted' do
1224
1163
  let(:client) do
1225
1164
  new_local_client_nmio(
1226
- ['127.0.0.1:27017'],
1227
- :read => { :mode => :primary },
1228
- :database => SpecConfig.instance.test_db
1165
+ [ DEFAULT_LOCAL_HOST ],
1166
+ read: { mode: :primary },
1167
+ database: SpecConfig.instance.test_db
1229
1168
  )
1230
1169
  end
1231
1170
 
1232
1171
  it 'indicates lack of monitoring' do
1233
- client.summary.should =~ /servers=.*UNKNOWN.*NO-MONITORING/
1172
+ expect(client.summary).to match /servers=.*UNKNOWN.*NO-MONITORING/
1234
1173
  end
1235
1174
  end
1236
1175
 
@@ -1242,20 +1181,22 @@ describe Mongo::Client do
1242
1181
  end
1243
1182
 
1244
1183
  it 'does not indicate lack of monitoring' do
1245
- client.summary.should =~ /servers=.*(?:STANDALONE|PRIMARY|MONGOS)/
1246
- client.summary.should_not =~ /servers=.*(?:STANDALONE|PRIMARY|MONGOS).*NO-MONITORING/
1184
+ expect(client.summary).to match /servers=.*(?:STANDALONE|PRIMARY|MONGOS)/
1185
+ expect(client.summary).not_to match /servers=.*(?:STANDALONE|PRIMARY|MONGOS).*NO-MONITORING/
1247
1186
  end
1248
1187
  end
1249
1188
 
1250
1189
  context 'background threads killed' do
1251
1190
  let(:client) do
1252
1191
  authorized_client.tap do |client|
1253
- client.cluster.servers.map(&:disconnect!)
1192
+ client.cluster.servers.map do |server|
1193
+ server.monitor&.stop!
1194
+ end
1254
1195
  end
1255
1196
  end
1256
1197
 
1257
1198
  it 'does not indicate lack of monitoring' do
1258
- client.summary.should =~ /servers=.*(STANDALONE|PRIMARY|MONGOS|\bLB\b).*NO-MONITORING/
1199
+ expect(client.summary).to match /servers=.*(STANDALONE|PRIMARY|MONGOS|\bLB\b).*NO-MONITORING/
1259
1200
  end
1260
1201
  end
1261
1202
  end