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,6 +1,9 @@
1
+ # Tests in this file are generated from handshakeError.yml.template.
2
+
1
3
  description: "retryable reads handshake failures"
2
4
 
3
- schemaVersion: "1.3"
5
+ # 1.4 is required for "serverless: forbid".
6
+ schemaVersion: "1.4"
4
7
 
5
8
  runOnRequirements:
6
9
  - minServerVersion: "4.2"
@@ -9,16 +12,20 @@ runOnRequirements:
9
12
 
10
13
  createEntities:
11
14
  - client:
12
- id: &client0 client0
15
+ id: &client client
13
16
  useMultipleMongoses: false
14
- observeEvents: [commandStartedEvent, connectionCheckOutStartedEvent]
17
+ observeEvents:
18
+ - connectionCheckOutStartedEvent
19
+ - commandStartedEvent
20
+ - commandSucceededEvent
21
+ - commandFailedEvent
15
22
  - database:
16
- id: &database0 database0
17
- client: *client0
18
- databaseName: &databaseName retryable-handshake-tests
23
+ id: &database database
24
+ client: *client
25
+ databaseName: &databaseName retryable-reads-handshake-tests
19
26
  - collection:
20
- id: &collection0 collection0
21
- database: *database0
27
+ id: &collection collection
28
+ database: *database
22
29
  collectionName: &collectionName coll
23
30
 
24
31
  initialData:
@@ -30,100 +37,1306 @@ initialData:
30
37
  - { _id: 3, x: 33 }
31
38
 
32
39
  tests:
33
- - description: "find succeeds after retryable handshake network error"
40
+ # Because setting a failPoint creates a connection in the connection pool, run
41
+ # a ping operation that fails immediately after the failPoint operation in
42
+ # order to discard the connection before running the actual operation to be
43
+ # tested. The saslContinue command is used to avoid SDAM errors.
44
+ #
45
+ # Description of events:
46
+ # - Failpoint operation.
47
+ # - Creates a connection in the connection pool that must be closed.
48
+ # - Ping operation.
49
+ # - Triggers failpoint (first time).
50
+ # - Closes the connection made by the fail point operation.
51
+ # - Test operation.
52
+ # - New connection is created.
53
+ # - Triggers failpoint (second time).
54
+ # - Tests whether operation successfully retries the handshake and succeeds.
55
+
56
+ - description: "client.listDatabases succeeds after retryable handshake network error"
34
57
  operations:
35
- - name: failPoint # fail the next connection establishment
58
+ - name: failPoint
36
59
  object: testRunner
37
60
  arguments:
38
- client: *client0
61
+ client: *client
39
62
  failPoint:
40
63
  configureFailPoint: failCommand
41
64
  mode: { times: 2 }
42
65
  data:
43
- # use saslContinue here to avoid SDAM errors
44
- # this failPoint itself will create a usable connection in the connection pool
45
- # so we run a ping (that also fails) in order to discard the connection
46
- # before testing our read operation "find"
47
- failCommands: [saslContinue, ping]
66
+ failCommands: [ping, saslContinue]
48
67
  closeConnection: true
68
+ - name: runCommand
69
+ object: *database
70
+ arguments: { commandName: ping, command: { ping: 1 } }
71
+ expectError: { isError: true }
72
+ - name: listDatabases
73
+ object: *client
74
+ arguments:
75
+ filter: {}
76
+ expectEvents:
77
+ - client: *client
78
+ eventType: cmap
79
+ events:
80
+ - { connectionCheckOutStartedEvent: {} }
81
+ - { connectionCheckOutStartedEvent: {} }
82
+ - { connectionCheckOutStartedEvent: {} }
83
+ - { connectionCheckOutStartedEvent: {} }
84
+ - client: *client
85
+ events:
86
+ - commandStartedEvent:
87
+ command: { ping: 1 }
88
+ databaseName: *databaseName
89
+ - commandFailedEvent:
90
+ commandName: ping
91
+ - commandStartedEvent:
92
+ commandName: listDatabases
93
+ - commandSucceededEvent:
94
+ commandName: listDatabases
49
95
 
96
+ - description: "client.listDatabases succeeds after retryable handshake server error (ShutdownInProgress)"
97
+ operations:
98
+ - name: failPoint
99
+ object: testRunner
100
+ arguments:
101
+ client: *client
102
+ failPoint:
103
+ configureFailPoint: failCommand
104
+ mode: { times: 2 }
105
+ data:
106
+ failCommands: [ping, saslContinue]
107
+ closeConnection: true
50
108
  - name: runCommand
51
- object: *database0
109
+ object: *database
110
+ arguments: { commandName: ping, command: { ping: 1 } }
111
+ expectError: { isError: true }
112
+ - name: listDatabases
113
+ object: *client
52
114
  arguments:
53
- commandName: ping
54
- command: { ping: 1 }
55
- expectError:
56
- isError: true
115
+ filter: {}
116
+ expectEvents:
117
+ - client: *client
118
+ eventType: cmap
119
+ events:
120
+ - { connectionCheckOutStartedEvent: {} }
121
+ - { connectionCheckOutStartedEvent: {} }
122
+ - { connectionCheckOutStartedEvent: {} }
123
+ - { connectionCheckOutStartedEvent: {} }
124
+ - client: *client
125
+ events:
126
+ - commandStartedEvent:
127
+ command: { ping: 1 }
128
+ databaseName: *databaseName
129
+ - commandFailedEvent:
130
+ commandName: ping
131
+ - commandStartedEvent:
132
+ commandName: listDatabases
133
+ - commandSucceededEvent:
134
+ commandName: listDatabases
57
135
 
58
- - name: find
59
- object: *collection0
136
+ - description: "client.listDatabaseNames succeeds after retryable handshake network error"
137
+ operations:
138
+ - name: failPoint
139
+ object: testRunner
60
140
  arguments:
61
- filter: { _id: 2 }
62
- expectResult: [{ _id: 2, x: 22 }]
141
+ client: *client
142
+ failPoint:
143
+ configureFailPoint: failCommand
144
+ mode: { times: 2 }
145
+ data:
146
+ failCommands: [ping, saslContinue]
147
+ closeConnection: true
148
+ - name: runCommand
149
+ object: *database
150
+ arguments: { commandName: ping, command: { ping: 1 } }
151
+ expectError: { isError: true }
152
+ - name: listDatabaseNames
153
+ object: *client
154
+ expectEvents:
155
+ - client: *client
156
+ eventType: cmap
157
+ events:
158
+ - { connectionCheckOutStartedEvent: {} }
159
+ - { connectionCheckOutStartedEvent: {} }
160
+ - { connectionCheckOutStartedEvent: {} }
161
+ - { connectionCheckOutStartedEvent: {} }
162
+ - client: *client
163
+ events:
164
+ - commandStartedEvent:
165
+ command: { ping: 1 }
166
+ databaseName: *databaseName
167
+ - commandFailedEvent:
168
+ commandName: ping
169
+ - commandStartedEvent:
170
+ commandName: listDatabases
171
+ - commandSucceededEvent:
172
+ commandName: listDatabases
63
173
 
174
+ - description: "client.listDatabaseNames succeeds after retryable handshake server error (ShutdownInProgress)"
175
+ operations:
176
+ - name: failPoint
177
+ object: testRunner
178
+ arguments:
179
+ client: *client
180
+ failPoint:
181
+ configureFailPoint: failCommand
182
+ mode: { times: 2 }
183
+ data:
184
+ failCommands: [ping, saslContinue]
185
+ closeConnection: true
186
+ - name: runCommand
187
+ object: *database
188
+ arguments: { commandName: ping, command: { ping: 1 } }
189
+ expectError: { isError: true }
190
+ - name: listDatabaseNames
191
+ object: *client
64
192
  expectEvents:
65
- - client: *client0
193
+ - client: *client
66
194
  eventType: cmap
67
195
  events:
68
196
  - { connectionCheckOutStartedEvent: {} }
69
197
  - { connectionCheckOutStartedEvent: {} }
70
198
  - { connectionCheckOutStartedEvent: {} }
71
199
  - { connectionCheckOutStartedEvent: {} }
72
- - client: *client0
200
+ - client: *client
73
201
  events:
74
202
  - commandStartedEvent:
75
- command:
76
- ping: 1
203
+ command: { ping: 1 }
77
204
  databaseName: *databaseName
205
+ - commandFailedEvent:
206
+ commandName: ping
207
+ - commandStartedEvent:
208
+ commandName: listDatabases
209
+ - commandSucceededEvent:
210
+ commandName: listDatabases
211
+
212
+ - description: "client.createChangeStream succeeds after retryable handshake network error"
213
+ runOnRequirements:
214
+ - serverless: forbid
215
+ operations:
216
+ - name: failPoint
217
+ object: testRunner
218
+ arguments:
219
+ client: *client
220
+ failPoint:
221
+ configureFailPoint: failCommand
222
+ mode: { times: 2 }
223
+ data:
224
+ failCommands: [ping, saslContinue]
225
+ closeConnection: true
226
+ - name: runCommand
227
+ object: *database
228
+ arguments: { commandName: ping, command: { ping: 1 } }
229
+ expectError: { isError: true }
230
+ - name: createChangeStream
231
+ object: *client
232
+ arguments:
233
+ pipeline: []
234
+ saveResultAsEntity: changeStream
235
+ expectEvents:
236
+ - client: *client
237
+ eventType: cmap
238
+ events:
239
+ - { connectionCheckOutStartedEvent: {} }
240
+ - { connectionCheckOutStartedEvent: {} }
241
+ - { connectionCheckOutStartedEvent: {} }
242
+ - { connectionCheckOutStartedEvent: {} }
243
+ - client: *client
244
+ events:
78
245
  - commandStartedEvent:
79
- command:
80
- find: *collectionName
81
- filter: { _id: 2 }
246
+ command: { ping: 1 }
82
247
  databaseName: *databaseName
248
+ - commandFailedEvent:
249
+ commandName: ping
250
+ - commandStartedEvent:
251
+ commandName: aggregate
252
+ - commandSucceededEvent:
253
+ commandName: aggregate
83
254
 
84
- - description: "find succeeds after retryable handshake network error (ShutdownInProgress)"
255
+ - description: "client.createChangeStream succeeds after retryable handshake server error (ShutdownInProgress)"
256
+ runOnRequirements:
257
+ - serverless: forbid
85
258
  operations:
86
- - name: failPoint # fail the next connection establishment
259
+ - name: failPoint
87
260
  object: testRunner
88
261
  arguments:
89
- client: *client0
262
+ client: *client
90
263
  failPoint:
91
264
  configureFailPoint: failCommand
92
265
  mode: { times: 2 }
93
266
  data:
94
- failCommands: [saslContinue, ping]
95
- errorCode: 91 # ShutdownInProgress
267
+ failCommands: [ping, saslContinue]
268
+ closeConnection: true
269
+ - name: runCommand
270
+ object: *database
271
+ arguments: { commandName: ping, command: { ping: 1 } }
272
+ expectError: { isError: true }
273
+ - name: createChangeStream
274
+ object: *client
275
+ arguments:
276
+ pipeline: []
277
+ saveResultAsEntity: changeStream
278
+ expectEvents:
279
+ - client: *client
280
+ eventType: cmap
281
+ events:
282
+ - { connectionCheckOutStartedEvent: {} }
283
+ - { connectionCheckOutStartedEvent: {} }
284
+ - { connectionCheckOutStartedEvent: {} }
285
+ - { connectionCheckOutStartedEvent: {} }
286
+ - client: *client
287
+ events:
288
+ - commandStartedEvent:
289
+ command: { ping: 1 }
290
+ databaseName: *databaseName
291
+ - commandFailedEvent:
292
+ commandName: ping
293
+ - commandStartedEvent:
294
+ commandName: aggregate
295
+ - commandSucceededEvent:
296
+ commandName: aggregate
96
297
 
298
+ - description: "database.aggregate succeeds after retryable handshake network error"
299
+ runOnRequirements:
300
+ - serverless: forbid
301
+ operations:
302
+ - name: failPoint
303
+ object: testRunner
304
+ arguments:
305
+ client: *client
306
+ failPoint:
307
+ configureFailPoint: failCommand
308
+ mode: { times: 2 }
309
+ data:
310
+ failCommands: [ping, saslContinue]
311
+ closeConnection: true
97
312
  - name: runCommand
98
- object: *database0
313
+ object: *database
314
+ arguments: { commandName: ping, command: { ping: 1 } }
315
+ expectError: { isError: true }
316
+ - name: aggregate
317
+ object: *database
99
318
  arguments:
100
- commandName: ping
101
- command: { ping: 1 }
102
- expectError:
103
- isError: true
319
+ pipeline: [ { $listLocalSessions: {} }, { $limit: 1 } ]
320
+ expectEvents:
321
+ - client: *client
322
+ eventType: cmap
323
+ events:
324
+ - { connectionCheckOutStartedEvent: {} }
325
+ - { connectionCheckOutStartedEvent: {} }
326
+ - { connectionCheckOutStartedEvent: {} }
327
+ - { connectionCheckOutStartedEvent: {} }
328
+ - client: *client
329
+ events:
330
+ - commandStartedEvent:
331
+ command: { ping: 1 }
332
+ databaseName: *databaseName
333
+ - commandFailedEvent:
334
+ commandName: ping
335
+ - commandStartedEvent:
336
+ commandName: aggregate
337
+ - commandSucceededEvent:
338
+ commandName: aggregate
104
339
 
105
- - name: find
106
- object: *collection0
340
+ - description: "database.aggregate succeeds after retryable handshake server error (ShutdownInProgress)"
341
+ runOnRequirements:
342
+ - serverless: forbid
343
+ operations:
344
+ - name: failPoint
345
+ object: testRunner
346
+ arguments:
347
+ client: *client
348
+ failPoint:
349
+ configureFailPoint: failCommand
350
+ mode: { times: 2 }
351
+ data:
352
+ failCommands: [ping, saslContinue]
353
+ closeConnection: true
354
+ - name: runCommand
355
+ object: *database
356
+ arguments: { commandName: ping, command: { ping: 1 } }
357
+ expectError: { isError: true }
358
+ - name: aggregate
359
+ object: *database
360
+ arguments:
361
+ pipeline: [ { $listLocalSessions: {} }, { $limit: 1 } ]
362
+ expectEvents:
363
+ - client: *client
364
+ eventType: cmap
365
+ events:
366
+ - { connectionCheckOutStartedEvent: {} }
367
+ - { connectionCheckOutStartedEvent: {} }
368
+ - { connectionCheckOutStartedEvent: {} }
369
+ - { connectionCheckOutStartedEvent: {} }
370
+ - client: *client
371
+ events:
372
+ - commandStartedEvent:
373
+ command: { ping: 1 }
374
+ databaseName: *databaseName
375
+ - commandFailedEvent:
376
+ commandName: ping
377
+ - commandStartedEvent:
378
+ commandName: aggregate
379
+ - commandSucceededEvent:
380
+ commandName: aggregate
381
+
382
+ - description: "database.listCollections succeeds after retryable handshake network error"
383
+ operations:
384
+ - name: failPoint
385
+ object: testRunner
386
+ arguments:
387
+ client: *client
388
+ failPoint:
389
+ configureFailPoint: failCommand
390
+ mode: { times: 2 }
391
+ data:
392
+ failCommands: [ping, saslContinue]
393
+ closeConnection: true
394
+ - name: runCommand
395
+ object: *database
396
+ arguments: { commandName: ping, command: { ping: 1 } }
397
+ expectError: { isError: true }
398
+ - name: listCollections
399
+ object: *database
400
+ arguments:
401
+ filter: {}
402
+ expectEvents:
403
+ - client: *client
404
+ eventType: cmap
405
+ events:
406
+ - { connectionCheckOutStartedEvent: {} }
407
+ - { connectionCheckOutStartedEvent: {} }
408
+ - { connectionCheckOutStartedEvent: {} }
409
+ - { connectionCheckOutStartedEvent: {} }
410
+ - client: *client
411
+ events:
412
+ - commandStartedEvent:
413
+ command: { ping: 1 }
414
+ databaseName: *databaseName
415
+ - commandFailedEvent:
416
+ commandName: ping
417
+ - commandStartedEvent:
418
+ commandName: listCollections
419
+ - commandSucceededEvent:
420
+ commandName: listCollections
421
+
422
+ - description: "database.listCollections succeeds after retryable handshake server error (ShutdownInProgress)"
423
+ operations:
424
+ - name: failPoint
425
+ object: testRunner
426
+ arguments:
427
+ client: *client
428
+ failPoint:
429
+ configureFailPoint: failCommand
430
+ mode: { times: 2 }
431
+ data:
432
+ failCommands: [ping, saslContinue]
433
+ closeConnection: true
434
+ - name: runCommand
435
+ object: *database
436
+ arguments: { commandName: ping, command: { ping: 1 } }
437
+ expectError: { isError: true }
438
+ - name: listCollections
439
+ object: *database
440
+ arguments:
441
+ filter: {}
442
+ expectEvents:
443
+ - client: *client
444
+ eventType: cmap
445
+ events:
446
+ - { connectionCheckOutStartedEvent: {} }
447
+ - { connectionCheckOutStartedEvent: {} }
448
+ - { connectionCheckOutStartedEvent: {} }
449
+ - { connectionCheckOutStartedEvent: {} }
450
+ - client: *client
451
+ events:
452
+ - commandStartedEvent:
453
+ command: { ping: 1 }
454
+ databaseName: *databaseName
455
+ - commandFailedEvent:
456
+ commandName: ping
457
+ - commandStartedEvent:
458
+ commandName: listCollections
459
+ - commandSucceededEvent:
460
+ commandName: listCollections
461
+
462
+ - description: "database.listCollectionNames succeeds after retryable handshake network error"
463
+ operations:
464
+ - name: failPoint
465
+ object: testRunner
466
+ arguments:
467
+ client: *client
468
+ failPoint:
469
+ configureFailPoint: failCommand
470
+ mode: { times: 2 }
471
+ data:
472
+ failCommands: [ping, saslContinue]
473
+ closeConnection: true
474
+ - name: runCommand
475
+ object: *database
476
+ arguments: { commandName: ping, command: { ping: 1 } }
477
+ expectError: { isError: true }
478
+ - name: listCollectionNames
479
+ object: *database
480
+ arguments:
481
+ filter: {}
482
+ expectEvents:
483
+ - client: *client
484
+ eventType: cmap
485
+ events:
486
+ - { connectionCheckOutStartedEvent: {} }
487
+ - { connectionCheckOutStartedEvent: {} }
488
+ - { connectionCheckOutStartedEvent: {} }
489
+ - { connectionCheckOutStartedEvent: {} }
490
+ - client: *client
491
+ events:
492
+ - commandStartedEvent:
493
+ command: { ping: 1 }
494
+ databaseName: *databaseName
495
+ - commandFailedEvent:
496
+ commandName: ping
497
+ - commandStartedEvent:
498
+ commandName: listCollections
499
+ - commandSucceededEvent:
500
+ commandName: listCollections
501
+
502
+ - description: "database.listCollectionNames succeeds after retryable handshake server error (ShutdownInProgress)"
503
+ operations:
504
+ - name: failPoint
505
+ object: testRunner
107
506
  arguments:
108
- filter: { _id: 2 }
109
- expectResult: [{ _id: 2, x: 22 }]
507
+ client: *client
508
+ failPoint:
509
+ configureFailPoint: failCommand
510
+ mode: { times: 2 }
511
+ data:
512
+ failCommands: [ping, saslContinue]
513
+ closeConnection: true
514
+ - name: runCommand
515
+ object: *database
516
+ arguments: { commandName: ping, command: { ping: 1 } }
517
+ expectError: { isError: true }
518
+ - name: listCollectionNames
519
+ object: *database
520
+ arguments:
521
+ filter: {}
522
+ expectEvents:
523
+ - client: *client
524
+ eventType: cmap
525
+ events:
526
+ - { connectionCheckOutStartedEvent: {} }
527
+ - { connectionCheckOutStartedEvent: {} }
528
+ - { connectionCheckOutStartedEvent: {} }
529
+ - { connectionCheckOutStartedEvent: {} }
530
+ - client: *client
531
+ events:
532
+ - commandStartedEvent:
533
+ command: { ping: 1 }
534
+ databaseName: *databaseName
535
+ - commandFailedEvent:
536
+ commandName: ping
537
+ - commandStartedEvent:
538
+ commandName: listCollections
539
+ - commandSucceededEvent:
540
+ commandName: listCollections
110
541
 
542
+ - description: "database.createChangeStream succeeds after retryable handshake network error"
543
+ runOnRequirements:
544
+ - serverless: forbid
545
+ operations:
546
+ - name: failPoint
547
+ object: testRunner
548
+ arguments:
549
+ client: *client
550
+ failPoint:
551
+ configureFailPoint: failCommand
552
+ mode: { times: 2 }
553
+ data:
554
+ failCommands: [ping, saslContinue]
555
+ closeConnection: true
556
+ - name: runCommand
557
+ object: *database
558
+ arguments: { commandName: ping, command: { ping: 1 } }
559
+ expectError: { isError: true }
560
+ - name: createChangeStream
561
+ object: *database
562
+ arguments:
563
+ pipeline: []
564
+ saveResultAsEntity: changeStream
111
565
  expectEvents:
112
- - client: *client0
566
+ - client: *client
113
567
  eventType: cmap
114
568
  events:
115
569
  - { connectionCheckOutStartedEvent: {} }
116
570
  - { connectionCheckOutStartedEvent: {} }
117
571
  - { connectionCheckOutStartedEvent: {} }
118
572
  - { connectionCheckOutStartedEvent: {} }
119
- - client: *client0
573
+ - client: *client
120
574
  events:
121
575
  - commandStartedEvent:
122
- command:
123
- ping: 1
576
+ command: { ping: 1 }
124
577
  databaseName: *databaseName
578
+ - commandFailedEvent:
579
+ commandName: ping
580
+ - commandStartedEvent:
581
+ commandName: aggregate
582
+ - commandSucceededEvent:
583
+ commandName: aggregate
584
+
585
+ - description: "database.createChangeStream succeeds after retryable handshake server error (ShutdownInProgress)"
586
+ runOnRequirements:
587
+ - serverless: forbid
588
+ operations:
589
+ - name: failPoint
590
+ object: testRunner
591
+ arguments:
592
+ client: *client
593
+ failPoint:
594
+ configureFailPoint: failCommand
595
+ mode: { times: 2 }
596
+ data:
597
+ failCommands: [ping, saslContinue]
598
+ closeConnection: true
599
+ - name: runCommand
600
+ object: *database
601
+ arguments: { commandName: ping, command: { ping: 1 } }
602
+ expectError: { isError: true }
603
+ - name: createChangeStream
604
+ object: *database
605
+ arguments:
606
+ pipeline: []
607
+ saveResultAsEntity: changeStream
608
+ expectEvents:
609
+ - client: *client
610
+ eventType: cmap
611
+ events:
612
+ - { connectionCheckOutStartedEvent: {} }
613
+ - { connectionCheckOutStartedEvent: {} }
614
+ - { connectionCheckOutStartedEvent: {} }
615
+ - { connectionCheckOutStartedEvent: {} }
616
+ - client: *client
617
+ events:
125
618
  - commandStartedEvent:
126
- command:
127
- find: *collectionName
128
- filter: { _id: 2 }
619
+ command: { ping: 1 }
129
620
  databaseName: *databaseName
621
+ - commandFailedEvent:
622
+ commandName: ping
623
+ - commandStartedEvent:
624
+ commandName: aggregate
625
+ - commandSucceededEvent:
626
+ commandName: aggregate
627
+
628
+ - description: "collection.aggregate succeeds after retryable handshake network error"
629
+ operations:
630
+ - name: failPoint
631
+ object: testRunner
632
+ arguments:
633
+ client: *client
634
+ failPoint:
635
+ configureFailPoint: failCommand
636
+ mode: { times: 2 }
637
+ data:
638
+ failCommands: [ping, saslContinue]
639
+ closeConnection: true
640
+ - name: runCommand
641
+ object: *database
642
+ arguments: { commandName: ping, command: { ping: 1 } }
643
+ expectError: { isError: true }
644
+ - name: aggregate
645
+ object: *collection
646
+ arguments:
647
+ pipeline: []
648
+ expectEvents:
649
+ - client: *client
650
+ eventType: cmap
651
+ events:
652
+ - { connectionCheckOutStartedEvent: {} }
653
+ - { connectionCheckOutStartedEvent: {} }
654
+ - { connectionCheckOutStartedEvent: {} }
655
+ - { connectionCheckOutStartedEvent: {} }
656
+ - client: *client
657
+ events:
658
+ - commandStartedEvent:
659
+ command: { ping: 1 }
660
+ databaseName: *databaseName
661
+ - commandFailedEvent:
662
+ commandName: ping
663
+ - commandStartedEvent:
664
+ commandName: aggregate
665
+ - commandSucceededEvent:
666
+ commandName: aggregate
667
+
668
+ - description: "collection.aggregate succeeds after retryable handshake server error (ShutdownInProgress)"
669
+ operations:
670
+ - name: failPoint
671
+ object: testRunner
672
+ arguments:
673
+ client: *client
674
+ failPoint:
675
+ configureFailPoint: failCommand
676
+ mode: { times: 2 }
677
+ data:
678
+ failCommands: [ping, saslContinue]
679
+ closeConnection: true
680
+ - name: runCommand
681
+ object: *database
682
+ arguments: { commandName: ping, command: { ping: 1 } }
683
+ expectError: { isError: true }
684
+ - name: aggregate
685
+ object: *collection
686
+ arguments:
687
+ pipeline: []
688
+ expectEvents:
689
+ - client: *client
690
+ eventType: cmap
691
+ events:
692
+ - { connectionCheckOutStartedEvent: {} }
693
+ - { connectionCheckOutStartedEvent: {} }
694
+ - { connectionCheckOutStartedEvent: {} }
695
+ - { connectionCheckOutStartedEvent: {} }
696
+ - client: *client
697
+ events:
698
+ - commandStartedEvent:
699
+ command: { ping: 1 }
700
+ databaseName: *databaseName
701
+ - commandFailedEvent:
702
+ commandName: ping
703
+ - commandStartedEvent:
704
+ commandName: aggregate
705
+ - commandSucceededEvent:
706
+ commandName: aggregate
707
+
708
+ - description: "collection.countDocuments succeeds after retryable handshake network error"
709
+ operations:
710
+ - name: failPoint
711
+ object: testRunner
712
+ arguments:
713
+ client: *client
714
+ failPoint:
715
+ configureFailPoint: failCommand
716
+ mode: { times: 2 }
717
+ data:
718
+ failCommands: [ping, saslContinue]
719
+ closeConnection: true
720
+ - name: runCommand
721
+ object: *database
722
+ arguments: { commandName: ping, command: { ping: 1 } }
723
+ expectError: { isError: true }
724
+ - name: countDocuments
725
+ object: *collection
726
+ arguments:
727
+ filter: {}
728
+ expectEvents:
729
+ - client: *client
730
+ eventType: cmap
731
+ events:
732
+ - { connectionCheckOutStartedEvent: {} }
733
+ - { connectionCheckOutStartedEvent: {} }
734
+ - { connectionCheckOutStartedEvent: {} }
735
+ - { connectionCheckOutStartedEvent: {} }
736
+ - client: *client
737
+ events:
738
+ - commandStartedEvent:
739
+ command: { ping: 1 }
740
+ databaseName: *databaseName
741
+ - commandFailedEvent:
742
+ commandName: ping
743
+ - commandStartedEvent:
744
+ commandName: aggregate
745
+ - commandSucceededEvent:
746
+ commandName: aggregate
747
+
748
+ - description: "collection.countDocuments succeeds after retryable handshake server error (ShutdownInProgress)"
749
+ operations:
750
+ - name: failPoint
751
+ object: testRunner
752
+ arguments:
753
+ client: *client
754
+ failPoint:
755
+ configureFailPoint: failCommand
756
+ mode: { times: 2 }
757
+ data:
758
+ failCommands: [ping, saslContinue]
759
+ closeConnection: true
760
+ - name: runCommand
761
+ object: *database
762
+ arguments: { commandName: ping, command: { ping: 1 } }
763
+ expectError: { isError: true }
764
+ - name: countDocuments
765
+ object: *collection
766
+ arguments:
767
+ filter: {}
768
+ expectEvents:
769
+ - client: *client
770
+ eventType: cmap
771
+ events:
772
+ - { connectionCheckOutStartedEvent: {} }
773
+ - { connectionCheckOutStartedEvent: {} }
774
+ - { connectionCheckOutStartedEvent: {} }
775
+ - { connectionCheckOutStartedEvent: {} }
776
+ - client: *client
777
+ events:
778
+ - commandStartedEvent:
779
+ command: { ping: 1 }
780
+ databaseName: *databaseName
781
+ - commandFailedEvent:
782
+ commandName: ping
783
+ - commandStartedEvent:
784
+ commandName: aggregate
785
+ - commandSucceededEvent:
786
+ commandName: aggregate
787
+
788
+ - description: "collection.estimatedDocumentCount succeeds after retryable handshake network error"
789
+ operations:
790
+ - name: failPoint
791
+ object: testRunner
792
+ arguments:
793
+ client: *client
794
+ failPoint:
795
+ configureFailPoint: failCommand
796
+ mode: { times: 2 }
797
+ data:
798
+ failCommands: [ping, saslContinue]
799
+ closeConnection: true
800
+ - name: runCommand
801
+ object: *database
802
+ arguments: { commandName: ping, command: { ping: 1 } }
803
+ expectError: { isError: true }
804
+ - name: estimatedDocumentCount
805
+ object: *collection
806
+ expectEvents:
807
+ - client: *client
808
+ eventType: cmap
809
+ events:
810
+ - { connectionCheckOutStartedEvent: {} }
811
+ - { connectionCheckOutStartedEvent: {} }
812
+ - { connectionCheckOutStartedEvent: {} }
813
+ - { connectionCheckOutStartedEvent: {} }
814
+ - client: *client
815
+ events:
816
+ - commandStartedEvent:
817
+ command: { ping: 1 }
818
+ databaseName: *databaseName
819
+ - commandFailedEvent:
820
+ commandName: ping
821
+ - commandStartedEvent:
822
+ commandName: count
823
+ - commandSucceededEvent:
824
+ commandName: count
825
+
826
+ - description: "collection.estimatedDocumentCount succeeds after retryable handshake server error (ShutdownInProgress)"
827
+ operations:
828
+ - name: failPoint
829
+ object: testRunner
830
+ arguments:
831
+ client: *client
832
+ failPoint:
833
+ configureFailPoint: failCommand
834
+ mode: { times: 2 }
835
+ data:
836
+ failCommands: [ping, saslContinue]
837
+ closeConnection: true
838
+ - name: runCommand
839
+ object: *database
840
+ arguments: { commandName: ping, command: { ping: 1 } }
841
+ expectError: { isError: true }
842
+ - name: estimatedDocumentCount
843
+ object: *collection
844
+ expectEvents:
845
+ - client: *client
846
+ eventType: cmap
847
+ events:
848
+ - { connectionCheckOutStartedEvent: {} }
849
+ - { connectionCheckOutStartedEvent: {} }
850
+ - { connectionCheckOutStartedEvent: {} }
851
+ - { connectionCheckOutStartedEvent: {} }
852
+ - client: *client
853
+ events:
854
+ - commandStartedEvent:
855
+ command: { ping: 1 }
856
+ databaseName: *databaseName
857
+ - commandFailedEvent:
858
+ commandName: ping
859
+ - commandStartedEvent:
860
+ commandName: count
861
+ - commandSucceededEvent:
862
+ commandName: count
863
+
864
+ - description: "collection.distinct succeeds after retryable handshake network error"
865
+ operations:
866
+ - name: failPoint
867
+ object: testRunner
868
+ arguments:
869
+ client: *client
870
+ failPoint:
871
+ configureFailPoint: failCommand
872
+ mode: { times: 2 }
873
+ data:
874
+ failCommands: [ping, saslContinue]
875
+ closeConnection: true
876
+ - name: runCommand
877
+ object: *database
878
+ arguments: { commandName: ping, command: { ping: 1 } }
879
+ expectError: { isError: true }
880
+ - name: distinct
881
+ object: *collection
882
+ arguments:
883
+ fieldName: x
884
+ filter: {}
885
+ expectEvents:
886
+ - client: *client
887
+ eventType: cmap
888
+ events:
889
+ - { connectionCheckOutStartedEvent: {} }
890
+ - { connectionCheckOutStartedEvent: {} }
891
+ - { connectionCheckOutStartedEvent: {} }
892
+ - { connectionCheckOutStartedEvent: {} }
893
+ - client: *client
894
+ events:
895
+ - commandStartedEvent:
896
+ command: { ping: 1 }
897
+ databaseName: *databaseName
898
+ - commandFailedEvent:
899
+ commandName: ping
900
+ - commandStartedEvent:
901
+ commandName: distinct
902
+ - commandSucceededEvent:
903
+ commandName: distinct
904
+
905
+ - description: "collection.distinct succeeds after retryable handshake server error (ShutdownInProgress)"
906
+ operations:
907
+ - name: failPoint
908
+ object: testRunner
909
+ arguments:
910
+ client: *client
911
+ failPoint:
912
+ configureFailPoint: failCommand
913
+ mode: { times: 2 }
914
+ data:
915
+ failCommands: [ping, saslContinue]
916
+ closeConnection: true
917
+ - name: runCommand
918
+ object: *database
919
+ arguments: { commandName: ping, command: { ping: 1 } }
920
+ expectError: { isError: true }
921
+ - name: distinct
922
+ object: *collection
923
+ arguments:
924
+ fieldName: x
925
+ filter: {}
926
+ expectEvents:
927
+ - client: *client
928
+ eventType: cmap
929
+ events:
930
+ - { connectionCheckOutStartedEvent: {} }
931
+ - { connectionCheckOutStartedEvent: {} }
932
+ - { connectionCheckOutStartedEvent: {} }
933
+ - { connectionCheckOutStartedEvent: {} }
934
+ - client: *client
935
+ events:
936
+ - commandStartedEvent:
937
+ command: { ping: 1 }
938
+ databaseName: *databaseName
939
+ - commandFailedEvent:
940
+ commandName: ping
941
+ - commandStartedEvent:
942
+ commandName: distinct
943
+ - commandSucceededEvent:
944
+ commandName: distinct
945
+
946
+ - description: "collection.find succeeds after retryable handshake network error"
947
+ operations:
948
+ - name: failPoint
949
+ object: testRunner
950
+ arguments:
951
+ client: *client
952
+ failPoint:
953
+ configureFailPoint: failCommand
954
+ mode: { times: 2 }
955
+ data:
956
+ failCommands: [ping, saslContinue]
957
+ closeConnection: true
958
+ - name: runCommand
959
+ object: *database
960
+ arguments: { commandName: ping, command: { ping: 1 } }
961
+ expectError: { isError: true }
962
+ - name: find
963
+ object: *collection
964
+ arguments:
965
+ filter: {}
966
+ expectEvents:
967
+ - client: *client
968
+ eventType: cmap
969
+ events:
970
+ - { connectionCheckOutStartedEvent: {} }
971
+ - { connectionCheckOutStartedEvent: {} }
972
+ - { connectionCheckOutStartedEvent: {} }
973
+ - { connectionCheckOutStartedEvent: {} }
974
+ - client: *client
975
+ events:
976
+ - commandStartedEvent:
977
+ command: { ping: 1 }
978
+ databaseName: *databaseName
979
+ - commandFailedEvent:
980
+ commandName: ping
981
+ - commandStartedEvent:
982
+ commandName: find
983
+ - commandSucceededEvent:
984
+ commandName: find
985
+
986
+ - description: "collection.find succeeds after retryable handshake server error (ShutdownInProgress)"
987
+ operations:
988
+ - name: failPoint
989
+ object: testRunner
990
+ arguments:
991
+ client: *client
992
+ failPoint:
993
+ configureFailPoint: failCommand
994
+ mode: { times: 2 }
995
+ data:
996
+ failCommands: [ping, saslContinue]
997
+ closeConnection: true
998
+ - name: runCommand
999
+ object: *database
1000
+ arguments: { commandName: ping, command: { ping: 1 } }
1001
+ expectError: { isError: true }
1002
+ - name: find
1003
+ object: *collection
1004
+ arguments:
1005
+ filter: {}
1006
+ expectEvents:
1007
+ - client: *client
1008
+ eventType: cmap
1009
+ events:
1010
+ - { connectionCheckOutStartedEvent: {} }
1011
+ - { connectionCheckOutStartedEvent: {} }
1012
+ - { connectionCheckOutStartedEvent: {} }
1013
+ - { connectionCheckOutStartedEvent: {} }
1014
+ - client: *client
1015
+ events:
1016
+ - commandStartedEvent:
1017
+ command: { ping: 1 }
1018
+ databaseName: *databaseName
1019
+ - commandFailedEvent:
1020
+ commandName: ping
1021
+ - commandStartedEvent:
1022
+ commandName: find
1023
+ - commandSucceededEvent:
1024
+ commandName: find
1025
+
1026
+ - description: "collection.findOne succeeds after retryable handshake network error"
1027
+ operations:
1028
+ - name: failPoint
1029
+ object: testRunner
1030
+ arguments:
1031
+ client: *client
1032
+ failPoint:
1033
+ configureFailPoint: failCommand
1034
+ mode: { times: 2 }
1035
+ data:
1036
+ failCommands: [ping, saslContinue]
1037
+ closeConnection: true
1038
+ - name: runCommand
1039
+ object: *database
1040
+ arguments: { commandName: ping, command: { ping: 1 } }
1041
+ expectError: { isError: true }
1042
+ - name: findOne
1043
+ object: *collection
1044
+ arguments:
1045
+ filter: {}
1046
+ expectEvents:
1047
+ - client: *client
1048
+ eventType: cmap
1049
+ events:
1050
+ - { connectionCheckOutStartedEvent: {} }
1051
+ - { connectionCheckOutStartedEvent: {} }
1052
+ - { connectionCheckOutStartedEvent: {} }
1053
+ - { connectionCheckOutStartedEvent: {} }
1054
+ - client: *client
1055
+ events:
1056
+ - commandStartedEvent:
1057
+ command: { ping: 1 }
1058
+ databaseName: *databaseName
1059
+ - commandFailedEvent:
1060
+ commandName: ping
1061
+ - commandStartedEvent:
1062
+ commandName: find
1063
+ - commandSucceededEvent:
1064
+ commandName: find
1065
+
1066
+ - description: "collection.findOne succeeds after retryable handshake server error (ShutdownInProgress)"
1067
+ operations:
1068
+ - name: failPoint
1069
+ object: testRunner
1070
+ arguments:
1071
+ client: *client
1072
+ failPoint:
1073
+ configureFailPoint: failCommand
1074
+ mode: { times: 2 }
1075
+ data:
1076
+ failCommands: [ping, saslContinue]
1077
+ closeConnection: true
1078
+ - name: runCommand
1079
+ object: *database
1080
+ arguments: { commandName: ping, command: { ping: 1 } }
1081
+ expectError: { isError: true }
1082
+ - name: findOne
1083
+ object: *collection
1084
+ arguments:
1085
+ filter: {}
1086
+ expectEvents:
1087
+ - client: *client
1088
+ eventType: cmap
1089
+ events:
1090
+ - { connectionCheckOutStartedEvent: {} }
1091
+ - { connectionCheckOutStartedEvent: {} }
1092
+ - { connectionCheckOutStartedEvent: {} }
1093
+ - { connectionCheckOutStartedEvent: {} }
1094
+ - client: *client
1095
+ events:
1096
+ - commandStartedEvent:
1097
+ command: { ping: 1 }
1098
+ databaseName: *databaseName
1099
+ - commandFailedEvent:
1100
+ commandName: ping
1101
+ - commandStartedEvent:
1102
+ commandName: find
1103
+ - commandSucceededEvent:
1104
+ commandName: find
1105
+
1106
+ - description: "collection.listIndexes succeeds after retryable handshake network error"
1107
+ operations:
1108
+ - name: failPoint
1109
+ object: testRunner
1110
+ arguments:
1111
+ client: *client
1112
+ failPoint:
1113
+ configureFailPoint: failCommand
1114
+ mode: { times: 2 }
1115
+ data:
1116
+ failCommands: [ping, saslContinue]
1117
+ closeConnection: true
1118
+ - name: runCommand
1119
+ object: *database
1120
+ arguments: { commandName: ping, command: { ping: 1 } }
1121
+ expectError: { isError: true }
1122
+ - name: listIndexes
1123
+ object: *collection
1124
+ expectEvents:
1125
+ - client: *client
1126
+ eventType: cmap
1127
+ events:
1128
+ - { connectionCheckOutStartedEvent: {} }
1129
+ - { connectionCheckOutStartedEvent: {} }
1130
+ - { connectionCheckOutStartedEvent: {} }
1131
+ - { connectionCheckOutStartedEvent: {} }
1132
+ - client: *client
1133
+ events:
1134
+ - commandStartedEvent:
1135
+ command: { ping: 1 }
1136
+ databaseName: *databaseName
1137
+ - commandFailedEvent:
1138
+ commandName: ping
1139
+ - commandStartedEvent:
1140
+ commandName: listIndexes
1141
+ - commandSucceededEvent:
1142
+ commandName: listIndexes
1143
+
1144
+ - description: "collection.listIndexes succeeds after retryable handshake server error (ShutdownInProgress)"
1145
+ operations:
1146
+ - name: failPoint
1147
+ object: testRunner
1148
+ arguments:
1149
+ client: *client
1150
+ failPoint:
1151
+ configureFailPoint: failCommand
1152
+ mode: { times: 2 }
1153
+ data:
1154
+ failCommands: [ping, saslContinue]
1155
+ closeConnection: true
1156
+ - name: runCommand
1157
+ object: *database
1158
+ arguments: { commandName: ping, command: { ping: 1 } }
1159
+ expectError: { isError: true }
1160
+ - name: listIndexes
1161
+ object: *collection
1162
+ expectEvents:
1163
+ - client: *client
1164
+ eventType: cmap
1165
+ events:
1166
+ - { connectionCheckOutStartedEvent: {} }
1167
+ - { connectionCheckOutStartedEvent: {} }
1168
+ - { connectionCheckOutStartedEvent: {} }
1169
+ - { connectionCheckOutStartedEvent: {} }
1170
+ - client: *client
1171
+ events:
1172
+ - commandStartedEvent:
1173
+ command: { ping: 1 }
1174
+ databaseName: *databaseName
1175
+ - commandFailedEvent:
1176
+ commandName: ping
1177
+ - commandStartedEvent:
1178
+ commandName: listIndexes
1179
+ - commandSucceededEvent:
1180
+ commandName: listIndexes
1181
+
1182
+ - description: "collection.listIndexNames succeeds after retryable handshake network error"
1183
+ operations:
1184
+ - name: failPoint
1185
+ object: testRunner
1186
+ arguments:
1187
+ client: *client
1188
+ failPoint:
1189
+ configureFailPoint: failCommand
1190
+ mode: { times: 2 }
1191
+ data:
1192
+ failCommands: [ping, saslContinue]
1193
+ closeConnection: true
1194
+ - name: runCommand
1195
+ object: *database
1196
+ arguments: { commandName: ping, command: { ping: 1 } }
1197
+ expectError: { isError: true }
1198
+ - name: listIndexNames
1199
+ object: *collection
1200
+ expectEvents:
1201
+ - client: *client
1202
+ eventType: cmap
1203
+ events:
1204
+ - { connectionCheckOutStartedEvent: {} }
1205
+ - { connectionCheckOutStartedEvent: {} }
1206
+ - { connectionCheckOutStartedEvent: {} }
1207
+ - { connectionCheckOutStartedEvent: {} }
1208
+ - client: *client
1209
+ events:
1210
+ - commandStartedEvent:
1211
+ command: { ping: 1 }
1212
+ databaseName: *databaseName
1213
+ - commandFailedEvent:
1214
+ commandName: ping
1215
+ - commandStartedEvent:
1216
+ commandName: listIndexes
1217
+ - commandSucceededEvent:
1218
+ commandName: listIndexes
1219
+
1220
+ - description: "collection.listIndexNames succeeds after retryable handshake server error (ShutdownInProgress)"
1221
+ operations:
1222
+ - name: failPoint
1223
+ object: testRunner
1224
+ arguments:
1225
+ client: *client
1226
+ failPoint:
1227
+ configureFailPoint: failCommand
1228
+ mode: { times: 2 }
1229
+ data:
1230
+ failCommands: [ping, saslContinue]
1231
+ closeConnection: true
1232
+ - name: runCommand
1233
+ object: *database
1234
+ arguments: { commandName: ping, command: { ping: 1 } }
1235
+ expectError: { isError: true }
1236
+ - name: listIndexNames
1237
+ object: *collection
1238
+ expectEvents:
1239
+ - client: *client
1240
+ eventType: cmap
1241
+ events:
1242
+ - { connectionCheckOutStartedEvent: {} }
1243
+ - { connectionCheckOutStartedEvent: {} }
1244
+ - { connectionCheckOutStartedEvent: {} }
1245
+ - { connectionCheckOutStartedEvent: {} }
1246
+ - client: *client
1247
+ events:
1248
+ - commandStartedEvent:
1249
+ command: { ping: 1 }
1250
+ databaseName: *databaseName
1251
+ - commandFailedEvent:
1252
+ commandName: ping
1253
+ - commandStartedEvent:
1254
+ commandName: listIndexes
1255
+ - commandSucceededEvent:
1256
+ commandName: listIndexes
1257
+
1258
+ - description: "collection.createChangeStream succeeds after retryable handshake network error"
1259
+ runOnRequirements:
1260
+ - serverless: forbid
1261
+ operations:
1262
+ - name: failPoint
1263
+ object: testRunner
1264
+ arguments:
1265
+ client: *client
1266
+ failPoint:
1267
+ configureFailPoint: failCommand
1268
+ mode: { times: 2 }
1269
+ data:
1270
+ failCommands: [ping, saslContinue]
1271
+ closeConnection: true
1272
+ - name: runCommand
1273
+ object: *database
1274
+ arguments: { commandName: ping, command: { ping: 1 } }
1275
+ expectError: { isError: true }
1276
+ - name: createChangeStream
1277
+ object: *collection
1278
+ arguments:
1279
+ pipeline: []
1280
+ saveResultAsEntity: changeStream
1281
+ expectEvents:
1282
+ - client: *client
1283
+ eventType: cmap
1284
+ events:
1285
+ - { connectionCheckOutStartedEvent: {} }
1286
+ - { connectionCheckOutStartedEvent: {} }
1287
+ - { connectionCheckOutStartedEvent: {} }
1288
+ - { connectionCheckOutStartedEvent: {} }
1289
+ - client: *client
1290
+ events:
1291
+ - commandStartedEvent:
1292
+ command: { ping: 1 }
1293
+ databaseName: *databaseName
1294
+ - commandFailedEvent:
1295
+ commandName: ping
1296
+ - commandStartedEvent:
1297
+ commandName: aggregate
1298
+ - commandSucceededEvent:
1299
+ commandName: aggregate
1300
+
1301
+ - description: "collection.createChangeStream succeeds after retryable handshake server error (ShutdownInProgress)"
1302
+ runOnRequirements:
1303
+ - serverless: forbid
1304
+ operations:
1305
+ - name: failPoint
1306
+ object: testRunner
1307
+ arguments:
1308
+ client: *client
1309
+ failPoint:
1310
+ configureFailPoint: failCommand
1311
+ mode: { times: 2 }
1312
+ data:
1313
+ failCommands: [ping, saslContinue]
1314
+ closeConnection: true
1315
+ - name: runCommand
1316
+ object: *database
1317
+ arguments: { commandName: ping, command: { ping: 1 } }
1318
+ expectError: { isError: true }
1319
+ - name: createChangeStream
1320
+ object: *collection
1321
+ arguments:
1322
+ pipeline: []
1323
+ saveResultAsEntity: changeStream
1324
+ expectEvents:
1325
+ - client: *client
1326
+ eventType: cmap
1327
+ events:
1328
+ - { connectionCheckOutStartedEvent: {} }
1329
+ - { connectionCheckOutStartedEvent: {} }
1330
+ - { connectionCheckOutStartedEvent: {} }
1331
+ - { connectionCheckOutStartedEvent: {} }
1332
+ - client: *client
1333
+ events:
1334
+ - commandStartedEvent:
1335
+ command: { ping: 1 }
1336
+ databaseName: *databaseName
1337
+ - commandFailedEvent:
1338
+ commandName: ping
1339
+ - commandStartedEvent:
1340
+ commandName: aggregate
1341
+ - commandSucceededEvent:
1342
+ commandName: aggregate