mongo 2.17.4 → 2.21.0

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 (1580) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +70 -37
  3. data/Rakefile +87 -177
  4. data/bin/mongo_console +2 -0
  5. data/lib/mongo/active_support.rb +1 -1
  6. data/lib/mongo/address/ipv4.rb +1 -1
  7. data/lib/mongo/address/ipv6.rb +1 -1
  8. data/lib/mongo/address/unix.rb +1 -1
  9. data/lib/mongo/address/validator.rb +1 -1
  10. data/lib/mongo/address.rb +23 -4
  11. data/lib/mongo/auth/aws/conversation.rb +1 -5
  12. data/lib/mongo/{operation/drop_database/command.rb → auth/aws/credentials.rb} +15 -18
  13. data/lib/mongo/auth/aws/credentials_cache.rb +75 -0
  14. data/lib/mongo/auth/aws/credentials_retriever.rb +232 -44
  15. data/lib/mongo/auth/aws/request.rb +1 -2
  16. data/lib/mongo/auth/aws.rb +6 -6
  17. data/lib/mongo/auth/base.rb +9 -2
  18. data/lib/mongo/auth/conversation_base.rb +1 -1
  19. data/lib/mongo/auth/cr/conversation.rb +1 -1
  20. data/lib/mongo/auth/cr.rb +1 -1
  21. data/lib/mongo/auth/credential_cache.rb +1 -1
  22. data/lib/mongo/auth/gssapi/conversation.rb +1 -1
  23. data/lib/mongo/auth/gssapi.rb +1 -1
  24. data/lib/mongo/auth/ldap/conversation.rb +1 -1
  25. data/lib/mongo/auth/ldap.rb +1 -1
  26. data/lib/mongo/auth/roles.rb +17 -17
  27. data/lib/mongo/auth/sasl_conversation_base.rb +1 -1
  28. data/lib/mongo/auth/scram/conversation.rb +1 -1
  29. data/lib/mongo/auth/scram.rb +1 -1
  30. data/lib/mongo/auth/scram256/conversation.rb +1 -1
  31. data/lib/mongo/auth/scram256.rb +1 -1
  32. data/lib/mongo/auth/scram_conversation_base.rb +1 -1
  33. data/lib/mongo/auth/stringprep/profiles/sasl.rb +1 -1
  34. data/lib/mongo/auth/stringprep/tables.rb +1 -1
  35. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +1 -1
  36. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +2 -1
  37. data/lib/mongo/auth/stringprep.rb +1 -1
  38. data/lib/mongo/auth/user/view.rb +1 -1
  39. data/lib/mongo/auth/user.rb +1 -1
  40. data/lib/mongo/auth/x509/conversation.rb +1 -1
  41. data/lib/mongo/auth/x509.rb +1 -1
  42. data/lib/mongo/auth.rb +13 -2
  43. data/lib/mongo/background_thread.rb +1 -1
  44. data/lib/mongo/bson.rb +1 -1
  45. data/lib/mongo/bulk_write/combineable.rb +1 -1
  46. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
  47. data/lib/mongo/bulk_write/result.rb +11 -2
  48. data/lib/mongo/bulk_write/result_combiner.rb +3 -5
  49. data/lib/mongo/bulk_write/transformable.rb +1 -1
  50. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
  51. data/lib/mongo/bulk_write/validatable.rb +1 -1
  52. data/lib/mongo/bulk_write.rb +152 -31
  53. data/lib/mongo/caching_cursor.rb +1 -1
  54. data/lib/mongo/client.rb +223 -27
  55. data/lib/mongo/client_encryption.rb +218 -11
  56. data/lib/mongo/cluster/periodic_executor.rb +1 -1
  57. data/lib/mongo/cluster/reapers/cursor_reaper.rb +14 -3
  58. data/lib/mongo/cluster/reapers/socket_reaper.rb +2 -2
  59. data/lib/mongo/cluster/sdam_flow.rb +62 -22
  60. data/lib/mongo/cluster/topology/base.rb +17 -1
  61. data/lib/mongo/cluster/topology/load_balanced.rb +1 -1
  62. data/lib/mongo/cluster/topology/no_replica_set_options.rb +1 -1
  63. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +1 -1
  64. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +1 -1
  65. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  66. data/lib/mongo/cluster/topology/single.rb +1 -1
  67. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  68. data/lib/mongo/cluster/topology.rb +1 -1
  69. data/lib/mongo/cluster.rb +95 -44
  70. data/lib/mongo/cluster_time.rb +1 -1
  71. data/lib/mongo/collection/helpers.rb +43 -0
  72. data/lib/mongo/collection/queryable_encryption.rb +162 -0
  73. data/lib/mongo/collection/view/aggregation/behavior.rb +131 -0
  74. data/lib/mongo/collection/view/aggregation.rb +51 -111
  75. data/lib/mongo/collection/view/builder/aggregation.rb +2 -8
  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 +143 -48
  80. data/lib/mongo/collection/view/explainable.rb +2 -2
  81. data/lib/mongo/collection/view/immutable.rb +1 -1
  82. data/lib/mongo/collection/view/iterable.rb +79 -62
  83. data/lib/mongo/collection/view/map_reduce.rb +41 -15
  84. data/lib/mongo/collection/view/readable.rb +114 -62
  85. data/lib/mongo/collection/view/writable.rb +222 -70
  86. data/lib/mongo/collection/view.rb +44 -4
  87. data/lib/mongo/collection.rb +463 -114
  88. data/lib/mongo/condition_variable.rb +58 -0
  89. data/lib/mongo/config/options.rb +63 -0
  90. data/lib/mongo/config/validators/option.rb +27 -0
  91. data/lib/mongo/config.rb +43 -0
  92. data/lib/mongo/crypt/auto_decryption_context.rb +1 -1
  93. data/lib/mongo/crypt/auto_encrypter.rb +142 -20
  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 +715 -152
  97. data/lib/mongo/crypt/context.rb +83 -11
  98. data/lib/mongo/crypt/data_key_context.rb +13 -105
  99. data/lib/mongo/crypt/encryption_io.rb +133 -69
  100. data/lib/mongo/crypt/explicit_decryption_context.rb +1 -1
  101. data/lib/mongo/crypt/explicit_encrypter.rb +266 -34
  102. data/lib/mongo/crypt/explicit_encryption_context.rb +82 -22
  103. data/lib/mongo/{operation/kill_cursors/legacy.rb → crypt/explicit_encryption_expression_context.rb} +9 -20
  104. data/lib/mongo/crypt/handle.rb +169 -87
  105. data/lib/mongo/crypt/hooks.rb +26 -3
  106. data/lib/mongo/crypt/kms/aws/credentials.rb +83 -0
  107. data/lib/mongo/crypt/kms/aws/master_document.rb +78 -0
  108. data/lib/mongo/crypt/kms/aws.rb +20 -0
  109. data/lib/mongo/crypt/kms/azure/access_token.rb +54 -0
  110. data/lib/mongo/crypt/kms/azure/credentials.rb +103 -0
  111. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +138 -0
  112. data/lib/mongo/crypt/kms/azure/master_document.rb +79 -0
  113. data/lib/mongo/crypt/kms/azure.rb +21 -0
  114. data/lib/mongo/crypt/kms/credentials.rb +96 -0
  115. data/lib/mongo/crypt/kms/gcp/credentials.rb +127 -0
  116. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +83 -0
  117. data/lib/mongo/crypt/kms/gcp/master_document.rb +99 -0
  118. data/lib/mongo/crypt/kms/gcp.rb +21 -0
  119. data/lib/mongo/crypt/kms/kmip/credentials.rb +68 -0
  120. data/lib/mongo/crypt/kms/kmip/master_document.rb +74 -0
  121. data/lib/mongo/crypt/kms/kmip.rb +19 -0
  122. data/lib/mongo/crypt/kms/local/credentials.rb +65 -0
  123. data/lib/mongo/crypt/kms/local/master_document.rb +43 -0
  124. data/lib/mongo/crypt/kms/local.rb +19 -0
  125. data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
  126. data/lib/mongo/crypt/kms.rb +122 -0
  127. data/lib/mongo/crypt/kms_context.rb +1 -1
  128. data/lib/mongo/crypt/rewrap_many_data_key_context.rb +46 -0
  129. data/lib/mongo/crypt/rewrap_many_data_key_result.rb +37 -0
  130. data/lib/mongo/crypt/status.rb +9 -3
  131. data/lib/mongo/crypt.rb +16 -1
  132. data/lib/mongo/csot_timeout_holder.rb +119 -0
  133. data/lib/mongo/cursor/kill_spec.rb +31 -7
  134. data/lib/mongo/cursor/nontailable.rb +27 -0
  135. data/lib/mongo/cursor.rb +141 -35
  136. data/lib/mongo/cursor_host.rb +82 -0
  137. data/lib/mongo/database/view.rb +123 -16
  138. data/lib/mongo/database.rb +149 -35
  139. data/lib/mongo/dbref.rb +2 -106
  140. data/lib/mongo/distinguishing_semaphore.rb +2 -2
  141. data/lib/mongo/error/auth_error.rb +1 -1
  142. data/lib/mongo/error/bad_load_balancer_target.rb +1 -1
  143. data/lib/mongo/error/bulk_write_error.rb +32 -5
  144. data/lib/mongo/error/change_stream_resumable.rb +1 -1
  145. data/lib/mongo/error/client_closed.rb +24 -0
  146. data/lib/mongo/error/closed_stream.rb +1 -1
  147. data/lib/mongo/error/connection_check_out_timeout.rb +1 -1
  148. data/lib/mongo/error/connection_perished.rb +3 -1
  149. data/lib/mongo/error/connection_unavailable.rb +27 -0
  150. data/lib/mongo/error/credential_check_error.rb +1 -1
  151. data/lib/mongo/error/crypt_error.rb +1 -1
  152. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  153. data/lib/mongo/error/failed_string_prep_validation.rb +1 -1
  154. data/lib/mongo/error/file_not_found.rb +1 -1
  155. data/lib/mongo/error/handshake_error.rb +1 -1
  156. data/lib/mongo/error/insufficient_iteration_count.rb +1 -1
  157. data/lib/mongo/error/internal_driver_error.rb +1 -1
  158. data/lib/mongo/error/invalid_address.rb +1 -1
  159. data/lib/mongo/error/invalid_application_name.rb +1 -1
  160. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  161. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  162. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  163. data/lib/mongo/error/invalid_config_option.rb +21 -0
  164. data/lib/mongo/error/invalid_cursor_operation.rb +1 -1
  165. data/lib/mongo/error/invalid_database_name.rb +1 -1
  166. data/lib/mongo/error/invalid_document.rb +1 -1
  167. data/lib/mongo/error/invalid_file.rb +1 -1
  168. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  169. data/lib/mongo/{operation/drop/command.rb → error/invalid_max_connecting.rb} +8 -21
  170. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  171. data/lib/mongo/error/invalid_nonce.rb +1 -1
  172. data/lib/mongo/error/invalid_read_concern.rb +1 -1
  173. data/lib/mongo/error/invalid_read_option.rb +2 -2
  174. data/lib/mongo/error/invalid_replacement_document.rb +28 -10
  175. data/lib/mongo/error/invalid_server_auth_host.rb +1 -1
  176. data/lib/mongo/error/invalid_server_auth_response.rb +1 -1
  177. data/lib/mongo/error/invalid_server_preference.rb +1 -1
  178. data/lib/mongo/error/invalid_session.rb +1 -1
  179. data/lib/mongo/error/invalid_signature.rb +1 -1
  180. data/lib/mongo/error/invalid_transaction_operation.rb +1 -1
  181. data/lib/mongo/error/invalid_txt_record.rb +1 -1
  182. data/lib/mongo/error/invalid_update_document.rb +28 -8
  183. data/lib/mongo/error/invalid_uri.rb +1 -1
  184. data/lib/mongo/error/invalid_write_concern.rb +1 -1
  185. data/lib/mongo/error/kms_error.rb +1 -1
  186. data/lib/mongo/error/labelable.rb +72 -0
  187. data/lib/mongo/error/lint_error.rb +1 -1
  188. data/lib/mongo/error/max_bson_size.rb +1 -1
  189. data/lib/mongo/error/max_message_size.rb +1 -1
  190. data/lib/mongo/error/mismatched_domain.rb +1 -1
  191. data/lib/mongo/error/missing_connection.rb +27 -0
  192. data/lib/mongo/error/missing_file_chunk.rb +9 -3
  193. data/lib/mongo/error/missing_password.rb +1 -1
  194. data/lib/mongo/error/missing_resume_token.rb +1 -1
  195. data/lib/mongo/error/missing_scram_server_signature.rb +1 -1
  196. data/lib/mongo/error/missing_service_id.rb +1 -1
  197. data/lib/mongo/error/mongocryptd_spawn_error.rb +1 -1
  198. data/lib/mongo/error/multi_index_drop.rb +1 -1
  199. data/lib/mongo/error/need_primary_server.rb +1 -1
  200. data/lib/mongo/error/no_server_available.rb +1 -1
  201. data/lib/mongo/error/no_service_connection_available.rb +1 -1
  202. data/lib/mongo/error/no_srv_records.rb +1 -1
  203. data/lib/mongo/error/notable.rb +15 -1
  204. data/lib/mongo/error/operation_failure.rb +213 -260
  205. data/lib/mongo/error/parser.rb +1 -1
  206. data/lib/mongo/{operation/create_user/command.rb → error/pool_cleared_error.rb} +17 -23
  207. data/lib/mongo/error/pool_closed_error.rb +4 -17
  208. data/lib/mongo/{operation/update_user/command.rb → error/pool_error.rb} +21 -21
  209. data/lib/mongo/{operation/drop_index/command.rb → error/pool_paused_error.rb} +17 -22
  210. data/lib/mongo/error/raise_original_error.rb +1 -1
  211. data/lib/mongo/error/read_write_retryable.rb +108 -0
  212. data/lib/mongo/error/sdam_error_detection.rb +1 -1
  213. data/lib/mongo/error/server_api_conflict.rb +1 -1
  214. data/lib/mongo/error/server_api_not_supported.rb +1 -1
  215. data/lib/mongo/error/server_certificate_revoked.rb +1 -1
  216. data/lib/mongo/{operation/get_more/legacy.rb → error/server_not_usable.rb} +13 -16
  217. data/lib/mongo/error/server_timeout_error.rb +12 -0
  218. data/lib/mongo/error/session_ended.rb +1 -1
  219. data/lib/mongo/{operation/command/command.rb → error/session_not_materialized.rb} +8 -20
  220. data/lib/mongo/error/sessions_not_supported.rb +1 -1
  221. data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -1
  222. data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -1
  223. data/lib/mongo/error/socket_error.rb +1 -1
  224. data/lib/mongo/error/socket_timeout_error.rb +4 -2
  225. data/lib/mongo/error/timeout_error.rb +23 -0
  226. data/lib/mongo/{operation/shared/op_msg_or_command.rb → error/transactions_not_supported.rb} +13 -20
  227. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  228. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  229. data/lib/mongo/error/unexpected_response.rb +1 -1
  230. data/lib/mongo/error/unknown_payload_type.rb +1 -1
  231. data/lib/mongo/error/unmet_dependency.rb +1 -1
  232. data/lib/mongo/error/unsupported_array_filters.rb +1 -1
  233. data/lib/mongo/error/unsupported_collation.rb +1 -1
  234. data/lib/mongo/error/unsupported_features.rb +1 -1
  235. data/lib/mongo/error/unsupported_message_type.rb +1 -1
  236. data/lib/mongo/error/unsupported_option.rb +1 -1
  237. data/lib/mongo/error/write_retryable.rb +1 -1
  238. data/lib/mongo/error.rb +16 -38
  239. data/lib/mongo/event/base.rb +1 -1
  240. data/lib/mongo/event/listeners.rb +1 -1
  241. data/lib/mongo/event/publisher.rb +1 -1
  242. data/lib/mongo/event/subscriber.rb +1 -1
  243. data/lib/mongo/event.rb +1 -1
  244. data/lib/mongo/grid/file/chunk.rb +3 -2
  245. data/lib/mongo/grid/file/info.rb +3 -2
  246. data/lib/mongo/grid/file.rb +1 -1
  247. data/lib/mongo/grid/fs_bucket.rb +49 -10
  248. data/lib/mongo/grid/stream/read.rb +22 -2
  249. data/lib/mongo/grid/stream/write.rb +22 -5
  250. data/lib/mongo/grid/stream.rb +1 -1
  251. data/lib/mongo/grid.rb +1 -1
  252. data/lib/mongo/id.rb +1 -1
  253. data/lib/mongo/index/view.rb +96 -19
  254. data/lib/mongo/index.rb +1 -1
  255. data/lib/mongo/lint.rb +1 -1
  256. data/lib/mongo/loggable.rb +3 -3
  257. data/lib/mongo/logger.rb +1 -1
  258. data/lib/mongo/monitoring/cmap_log_subscriber.rb +1 -1
  259. data/lib/mongo/monitoring/command_log_subscriber.rb +1 -1
  260. data/lib/mongo/monitoring/event/cmap/base.rb +1 -1
  261. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -1
  262. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +1 -1
  263. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -1
  264. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +1 -1
  265. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -1
  266. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -1
  267. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -1
  268. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +9 -2
  269. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -1
  270. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -1
  271. data/lib/mongo/monitoring/event/cmap/pool_ready.rb +67 -0
  272. data/lib/mongo/monitoring/event/cmap.rb +2 -1
  273. data/lib/mongo/monitoring/event/command_failed.rb +9 -3
  274. data/lib/mongo/monitoring/event/command_started.rb +2 -2
  275. data/lib/mongo/monitoring/event/command_succeeded.rb +10 -3
  276. data/lib/mongo/monitoring/event/secure.rb +2 -2
  277. data/lib/mongo/monitoring/event/server_closed.rb +1 -1
  278. data/lib/mongo/monitoring/event/server_description_changed.rb +1 -1
  279. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +1 -1
  280. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -1
  281. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +1 -1
  282. data/lib/mongo/monitoring/event/server_opening.rb +1 -1
  283. data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
  284. data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
  285. data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
  286. data/lib/mongo/monitoring/event.rb +1 -1
  287. data/lib/mongo/monitoring/publishable.rb +10 -6
  288. data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
  289. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
  290. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
  291. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
  292. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  293. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +1 -1
  294. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
  295. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -1
  296. data/lib/mongo/monitoring.rb +1 -1
  297. data/lib/mongo/operation/aggregate/op_msg.rb +1 -1
  298. data/lib/mongo/operation/aggregate/result.rb +1 -1
  299. data/lib/mongo/operation/aggregate.rb +2 -3
  300. data/lib/mongo/operation/collections_info/result.rb +6 -3
  301. data/lib/mongo/operation/collections_info.rb +4 -16
  302. data/lib/mongo/operation/command/op_msg.rb +7 -1
  303. data/lib/mongo/operation/command.rb +2 -3
  304. data/lib/mongo/operation/context.rb +64 -8
  305. data/lib/mongo/operation/count/op_msg.rb +5 -2
  306. data/lib/mongo/operation/count.rb +2 -3
  307. data/lib/mongo/operation/create/op_msg.rb +5 -2
  308. data/lib/mongo/operation/create.rb +2 -3
  309. data/lib/mongo/operation/create_index/op_msg.rb +3 -2
  310. data/lib/mongo/operation/create_index.rb +2 -3
  311. data/lib/mongo/operation/create_search_indexes/op_msg.rb +31 -0
  312. data/lib/mongo/operation/create_search_indexes.rb +15 -0
  313. data/lib/mongo/operation/create_user/op_msg.rb +1 -1
  314. data/lib/mongo/operation/create_user.rb +2 -3
  315. data/lib/mongo/operation/delete/bulk_result.rb +1 -1
  316. data/lib/mongo/operation/delete/op_msg.rb +4 -2
  317. data/lib/mongo/operation/delete/result.rb +1 -1
  318. data/lib/mongo/operation/delete.rb +1 -3
  319. data/lib/mongo/operation/distinct/op_msg.rb +5 -2
  320. data/lib/mongo/operation/distinct.rb +2 -3
  321. data/lib/mongo/operation/drop/op_msg.rb +1 -1
  322. data/lib/mongo/operation/drop.rb +2 -3
  323. data/lib/mongo/operation/drop_database/op_msg.rb +1 -1
  324. data/lib/mongo/operation/drop_database.rb +2 -3
  325. data/lib/mongo/operation/drop_index/op_msg.rb +6 -2
  326. data/lib/mongo/operation/drop_index.rb +2 -3
  327. data/lib/mongo/operation/drop_search_index/op_msg.rb +33 -0
  328. data/lib/mongo/operation/drop_search_index.rb +15 -0
  329. data/lib/mongo/operation/explain/op_msg.rb +1 -1
  330. data/lib/mongo/operation/explain/result.rb +1 -1
  331. data/lib/mongo/operation/explain.rb +2 -4
  332. data/lib/mongo/operation/find/builder/command.rb +1 -1
  333. data/lib/mongo/operation/find/builder/flags.rb +1 -1
  334. data/lib/mongo/operation/find/builder/modifiers.rb +1 -1
  335. data/lib/mongo/operation/find/builder.rb +1 -2
  336. data/lib/mongo/operation/find/op_msg.rb +46 -1
  337. data/lib/mongo/operation/find/result.rb +1 -1
  338. data/lib/mongo/operation/find.rb +2 -4
  339. data/lib/mongo/operation/get_more/command_builder.rb +6 -2
  340. data/lib/mongo/operation/get_more/op_msg.rb +34 -1
  341. data/lib/mongo/operation/get_more/result.rb +1 -1
  342. data/lib/mongo/operation/get_more.rb +2 -4
  343. data/lib/mongo/operation/indexes/op_msg.rb +1 -1
  344. data/lib/mongo/operation/indexes/result.rb +1 -1
  345. data/lib/mongo/operation/indexes.rb +2 -18
  346. data/lib/mongo/operation/insert/bulk_result.rb +6 -2
  347. data/lib/mongo/operation/insert/op_msg.rb +9 -5
  348. data/lib/mongo/operation/insert/result.rb +9 -4
  349. data/lib/mongo/operation/insert.rb +1 -3
  350. data/lib/mongo/operation/kill_cursors/command_builder.rb +1 -1
  351. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -1
  352. data/lib/mongo/operation/kill_cursors.rb +2 -4
  353. data/lib/mongo/operation/list_collections/op_msg.rb +5 -2
  354. data/lib/mongo/operation/list_collections/result.rb +2 -2
  355. data/lib/mongo/operation/list_collections.rb +2 -3
  356. data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
  357. data/lib/mongo/operation/map_reduce/result.rb +18 -2
  358. data/lib/mongo/operation/map_reduce.rb +2 -3
  359. data/lib/mongo/operation/op_msg_base.rb +4 -2
  360. data/lib/mongo/operation/parallel_scan/op_msg.rb +1 -1
  361. data/lib/mongo/operation/parallel_scan/result.rb +1 -1
  362. data/lib/mongo/operation/parallel_scan.rb +2 -3
  363. data/lib/mongo/operation/remove_user/op_msg.rb +1 -1
  364. data/lib/mongo/operation/remove_user.rb +2 -3
  365. data/lib/mongo/operation/result.rb +47 -10
  366. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -1
  367. data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -1
  368. data/lib/mongo/operation/shared/executable.rb +60 -18
  369. data/lib/mongo/operation/shared/executable_no_validate.rb +1 -1
  370. data/lib/mongo/operation/shared/executable_transaction_label.rb +1 -1
  371. data/lib/mongo/operation/shared/idable.rb +1 -1
  372. data/lib/mongo/operation/shared/limited.rb +1 -1
  373. data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
  374. data/lib/mongo/operation/shared/{polymorphic_operation.rb → op_msg_executable.rb} +28 -8
  375. data/lib/mongo/operation/shared/polymorphic_lookup.rb +1 -1
  376. data/lib/mongo/operation/shared/polymorphic_result.rb +1 -1
  377. data/lib/mongo/operation/shared/read_preference_supported.rb +1 -1
  378. data/lib/mongo/operation/shared/response_handling.rb +32 -33
  379. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -1
  380. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +1 -1
  381. data/lib/mongo/operation/shared/sessions_supported.rb +2 -3
  382. data/lib/mongo/operation/shared/specifiable.rb +8 -1
  383. data/lib/mongo/operation/shared/timed.rb +52 -0
  384. data/lib/mongo/operation/shared/validatable.rb +1 -1
  385. data/lib/mongo/operation/shared/write.rb +22 -13
  386. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
  387. data/lib/mongo/operation/update/bulk_result.rb +1 -1
  388. data/lib/mongo/operation/update/op_msg.rb +5 -3
  389. data/lib/mongo/operation/update/result.rb +1 -1
  390. data/lib/mongo/operation/update.rb +1 -3
  391. data/lib/mongo/operation/update_search_index/op_msg.rb +34 -0
  392. data/lib/mongo/operation/update_search_index.rb +15 -0
  393. data/lib/mongo/operation/update_user/op_msg.rb +1 -1
  394. data/lib/mongo/operation/update_user.rb +2 -3
  395. data/lib/mongo/operation/users_info/op_msg.rb +1 -1
  396. data/lib/mongo/operation/users_info/result.rb +1 -1
  397. data/lib/mongo/operation/users_info.rb +2 -3
  398. data/lib/mongo/operation/write_command/op_msg.rb +1 -1
  399. data/lib/mongo/operation/write_command.rb +2 -3
  400. data/lib/mongo/operation.rb +6 -4
  401. data/lib/mongo/options/mapper.rb +1 -1
  402. data/lib/mongo/options/redacted.rb +1 -1
  403. data/lib/mongo/options.rb +1 -1
  404. data/lib/mongo/protocol/bit_vector.rb +4 -2
  405. data/lib/mongo/protocol/caching_hash.rb +52 -0
  406. data/lib/mongo/protocol/compressed.rb +1 -1
  407. data/lib/mongo/protocol/get_more.rb +1 -1
  408. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  409. data/lib/mongo/protocol/message.rb +6 -13
  410. data/lib/mongo/protocol/msg.rb +25 -4
  411. data/lib/mongo/protocol/query.rb +1 -1
  412. data/lib/mongo/protocol/registry.rb +1 -1
  413. data/lib/mongo/protocol/reply.rb +1 -1
  414. data/lib/mongo/protocol/serializers.rb +25 -18
  415. data/lib/mongo/protocol.rb +2 -4
  416. data/lib/mongo/query_cache.rb +36 -21
  417. data/lib/mongo/retryable/base_worker.rb +116 -0
  418. data/lib/mongo/retryable/read_worker.rb +338 -0
  419. data/lib/mongo/retryable/write_worker.rb +398 -0
  420. data/lib/mongo/retryable.rb +37 -454
  421. data/lib/mongo/search_index/view.rb +232 -0
  422. data/lib/mongo/semaphore.rb +2 -2
  423. data/lib/mongo/server/app_metadata/environment.rb +314 -0
  424. data/lib/mongo/server/app_metadata/platform.rb +114 -0
  425. data/lib/mongo/server/app_metadata/truncator.rb +142 -0
  426. data/lib/mongo/server/app_metadata.rb +76 -108
  427. data/lib/mongo/server/connection.rb +102 -22
  428. data/lib/mongo/server/connection_base.rb +25 -3
  429. data/lib/mongo/server/connection_common.rb +5 -2
  430. data/lib/mongo/server/connection_pool/generation_manager.rb +56 -12
  431. data/lib/mongo/server/connection_pool/populator.rb +33 -31
  432. data/lib/mongo/server/connection_pool.rb +758 -251
  433. data/lib/mongo/server/description/features.rb +5 -2
  434. data/lib/mongo/server/description/load_balancer.rb +1 -1
  435. data/lib/mongo/server/description.rb +32 -13
  436. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  437. data/lib/mongo/server/monitor/connection.rb +2 -1
  438. data/lib/mongo/server/monitor.rb +43 -24
  439. data/lib/mongo/server/pending_connection.rb +26 -9
  440. data/lib/mongo/server/push_monitor/connection.rb +1 -1
  441. data/lib/mongo/server/push_monitor.rb +14 -4
  442. data/lib/mongo/server/{round_trip_time_averager.rb → round_trip_time_calculator.rb} +26 -8
  443. data/lib/mongo/server.rb +114 -39
  444. data/lib/mongo/server_selector/base.rb +75 -12
  445. data/lib/mongo/server_selector/nearest.rb +1 -1
  446. data/lib/mongo/server_selector/primary.rb +1 -1
  447. data/lib/mongo/server_selector/primary_preferred.rb +1 -1
  448. data/lib/mongo/server_selector/secondary.rb +1 -1
  449. data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
  450. data/lib/mongo/server_selector.rb +1 -1
  451. data/lib/mongo/session/server_session/dirtyable.rb +52 -0
  452. data/lib/mongo/session/server_session.rb +4 -1
  453. data/lib/mongo/session/session_pool.rb +21 -19
  454. data/lib/mongo/session.rb +221 -44
  455. data/lib/mongo/socket/ocsp_cache.rb +1 -1
  456. data/lib/mongo/socket/ocsp_verifier.rb +5 -6
  457. data/lib/mongo/socket/ssl.rb +132 -19
  458. data/lib/mongo/socket/tcp.rb +44 -7
  459. data/lib/mongo/socket/unix.rb +1 -1
  460. data/lib/mongo/socket.rb +183 -27
  461. data/lib/mongo/srv/monitor.rb +1 -3
  462. data/lib/mongo/srv/resolver.rb +25 -4
  463. data/lib/mongo/srv/result.rb +1 -1
  464. data/lib/mongo/srv.rb +1 -1
  465. data/lib/mongo/timeout.rb +2 -2
  466. data/lib/mongo/topology_version.rb +1 -1
  467. data/lib/mongo/uri/options_mapper.rb +325 -81
  468. data/lib/mongo/uri/srv_protocol.rb +2 -2
  469. data/lib/mongo/uri.rb +61 -17
  470. data/lib/mongo/utils.rb +1 -1
  471. data/lib/mongo/version.rb +1 -5
  472. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  473. data/lib/mongo/write_concern/base.rb +1 -1
  474. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  475. data/lib/mongo/write_concern.rb +1 -1
  476. data/lib/mongo.rb +26 -1
  477. data/mongo.gemspec +14 -14
  478. data/spec/README.md +23 -5
  479. data/spec/atlas/atlas_connectivity_spec.rb +10 -10
  480. data/spec/atlas/operations_spec.rb +7 -12
  481. data/spec/faas/ruby-sam-app/Gemfile +9 -0
  482. data/spec/faas/ruby-sam-app/mongodb/Gemfile +4 -0
  483. data/spec/faas/ruby-sam-app/mongodb/app.rb +149 -0
  484. data/spec/faas/ruby-sam-app/template.yaml +48 -0
  485. data/spec/integration/auth_spec.rb +1 -1
  486. data/spec/integration/awaited_ismaster_spec.rb +1 -1
  487. data/spec/integration/aws_auth_credentials_cache_spec.rb +51 -0
  488. data/spec/integration/aws_auth_request_spec.rb +2 -2
  489. data/spec/integration/aws_credentials_retriever_spec.rb +32 -2
  490. data/spec/integration/aws_lambda_examples_spec.rb +68 -0
  491. data/spec/integration/bson_symbol_spec.rb +1 -1
  492. data/spec/integration/bulk_insert_spec.rb +1 -1
  493. data/spec/integration/bulk_write_error_message_spec.rb +33 -0
  494. data/spec/integration/bulk_write_spec.rb +1 -1
  495. data/spec/integration/change_stream_examples_spec.rb +1 -1
  496. data/spec/integration/change_stream_spec.rb +12 -6
  497. data/spec/integration/check_clean_slate_spec.rb +1 -1
  498. data/spec/integration/client_authentication_options_spec.rb +1 -1
  499. data/spec/integration/client_connectivity_spec.rb +1 -1
  500. data/spec/integration/client_construction_aws_auth_spec.rb +12 -3
  501. data/spec/integration/client_construction_spec.rb +97 -9
  502. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +10 -10
  503. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +169 -169
  504. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +3 -3
  505. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +1 -1
  506. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +41 -5
  507. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +537 -387
  508. data/spec/integration/client_side_encryption/automatic_data_encryption_keys_prose_spec.rb +153 -0
  509. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +3 -3
  510. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +3 -3
  511. data/spec/integration/client_side_encryption/client_close_spec.rb +2 -2
  512. data/spec/integration/client_side_encryption/corpus_spec.rb +75 -38
  513. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +40 -43
  514. data/spec/integration/client_side_encryption/data_key_spec.rb +98 -8
  515. data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +159 -0
  516. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +60 -1
  517. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +150 -0
  518. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +7 -7
  519. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +436 -0
  520. data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
  521. data/spec/integration/client_side_encryption/mongocryptd_prose_spec.rb +105 -0
  522. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +49 -0
  523. data/spec/integration/client_side_encryption/on_demand_azure_credentials_spec.rb +46 -0
  524. data/spec/integration/client_side_encryption/on_demand_gcp_credentials_spec.rb +47 -0
  525. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +114 -0
  526. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +583 -0
  527. data/spec/integration/client_side_encryption/rewrap_prose_spec.rb +114 -0
  528. data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +89 -0
  529. data/spec/integration/client_side_encryption/views_spec.rb +2 -2
  530. data/spec/integration/client_side_operations_timeout/encryption_prose_spec.rb +131 -0
  531. data/spec/integration/client_spec.rb +8 -3
  532. data/spec/integration/client_update_spec.rb +7 -3
  533. data/spec/integration/collection_indexes_prose_spec.rb +1 -1
  534. data/spec/integration/command_monitoring_spec.rb +1 -1
  535. data/spec/integration/command_spec.rb +2 -24
  536. data/spec/integration/connect_single_rs_name_spec.rb +1 -1
  537. data/spec/integration/connection/faas_env_spec.rb +62 -0
  538. data/spec/integration/connection_pool_populator_spec.rb +29 -7
  539. data/spec/integration/connection_spec.rb +1 -1
  540. data/spec/integration/crud_spec.rb +13 -1
  541. data/spec/integration/cursor_pinning_spec.rb +21 -62
  542. data/spec/integration/cursor_reaping_spec.rb +2 -2
  543. data/spec/integration/docs_examples_spec.rb +3 -3
  544. data/spec/integration/error_detection_spec.rb +1 -1
  545. data/spec/integration/fork_reconnect_spec.rb +17 -10
  546. data/spec/integration/get_more_spec.rb +1 -1
  547. data/spec/integration/grid_fs_bucket_spec.rb +4 -4
  548. data/spec/integration/heartbeat_events_spec.rb +1 -1
  549. data/spec/integration/map_reduce_spec.rb +5 -1
  550. data/spec/integration/mmapv1_spec.rb +1 -1
  551. data/spec/integration/mongos_pinning_spec.rb +1 -1
  552. data/spec/integration/ocsp_connectivity_spec.rb +1 -1
  553. data/spec/integration/ocsp_verifier_cache_spec.rb +1 -1
  554. data/spec/integration/ocsp_verifier_spec.rb +5 -2
  555. data/spec/integration/operation_failure_code_spec.rb +2 -2
  556. data/spec/integration/operation_failure_message_spec.rb +4 -3
  557. data/spec/integration/query_cache_spec.rb +124 -33
  558. data/spec/integration/query_cache_transactions_spec.rb +1 -1
  559. data/spec/integration/read_concern_spec.rb +1 -1
  560. data/spec/integration/read_preference_spec.rb +1 -1
  561. data/spec/integration/reconnect_spec.rb +6 -1
  562. data/spec/integration/retryable_errors_spec.rb +3 -3
  563. data/spec/integration/retryable_reads_errors_spec.rb +275 -0
  564. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +2 -2
  565. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
  566. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +1 -1
  567. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +1 -1
  568. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +1 -1
  569. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +1 -1
  570. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +1 -1
  571. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +1 -1
  572. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +1 -1
  573. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +1 -1
  574. data/spec/integration/retryable_writes/shared/supports_retries.rb +1 -1
  575. data/spec/integration/retryable_writes_errors_spec.rb +316 -2
  576. data/spec/integration/sdam_error_handling_spec.rb +69 -5
  577. data/spec/integration/sdam_events_spec.rb +1 -1
  578. data/spec/integration/sdam_prose_spec.rb +3 -3
  579. data/spec/integration/search_indexes_prose_spec.rb +172 -0
  580. data/spec/integration/secondary_reads_spec.rb +1 -0
  581. data/spec/integration/server_description_spec.rb +1 -1
  582. data/spec/integration/server_monitor_spec.rb +3 -2
  583. data/spec/integration/server_selection_spec.rb +1 -1
  584. data/spec/integration/server_selector_spec.rb +5 -3
  585. data/spec/integration/server_spec.rb +26 -28
  586. data/spec/integration/shell_examples_spec.rb +1 -1
  587. data/spec/integration/size_limit_spec.rb +5 -2
  588. data/spec/integration/snappy_compression_spec.rb +1 -1
  589. data/spec/integration/snapshot_query_examples_spec.rb +129 -0
  590. data/spec/integration/srv_monitoring_spec.rb +40 -1
  591. data/spec/integration/srv_spec.rb +4 -3
  592. data/spec/integration/ssl_uri_options_spec.rb +1 -1
  593. data/spec/integration/step_down_spec.rb +25 -7
  594. data/spec/integration/time_zone_querying_spec.rb +1 -1
  595. data/spec/integration/transaction_pinning_spec.rb +20 -6
  596. data/spec/integration/transactions_api_examples_spec.rb +3 -1
  597. data/spec/integration/transactions_examples_spec.rb +1 -1
  598. data/spec/integration/truncated_utf8_spec.rb +1 -1
  599. data/spec/integration/versioned_api_examples_spec.rb +38 -32
  600. data/spec/integration/x509_auth_spec.rb +1 -1
  601. data/spec/integration/zlib_compression_spec.rb +1 -1
  602. data/spec/integration/zstd_compression_spec.rb +1 -1
  603. data/spec/kerberos/kerberos_spec.rb +5 -1
  604. data/spec/lite_spec_helper.rb +63 -26
  605. data/spec/mongo/address/ipv4_spec.rb +1 -1
  606. data/spec/mongo/address/ipv6_spec.rb +8 -1
  607. data/spec/mongo/address/unix_spec.rb +1 -1
  608. data/spec/mongo/address/validator_spec.rb +1 -1
  609. data/spec/mongo/address_spec.rb +15 -2
  610. data/spec/mongo/auth/aws/credential_cache_spec.rb +63 -0
  611. data/spec/mongo/auth/aws/credentials_retriever_spec.rb +90 -0
  612. data/spec/mongo/auth/aws/credentials_spec.rb +46 -0
  613. data/spec/mongo/auth/aws/request_region_spec.rb +1 -1
  614. data/spec/mongo/auth/aws/request_spec.rb +1 -1
  615. data/spec/mongo/auth/cr_spec.rb +2 -22
  616. data/spec/mongo/auth/gssapi/conversation_spec.rb +1 -1
  617. data/spec/mongo/auth/invalid_mechanism_spec.rb +1 -1
  618. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  619. data/spec/mongo/auth/ldap_spec.rb +1 -1
  620. data/spec/mongo/auth/scram/conversation_spec.rb +24 -24
  621. data/spec/mongo/auth/scram256/conversation_spec.rb +21 -21
  622. data/spec/mongo/auth/scram_negotiation_spec.rb +2 -1
  623. data/spec/mongo/auth/scram_spec.rb +1 -1
  624. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +1 -1
  625. data/spec/mongo/auth/stringprep_spec.rb +1 -1
  626. data/spec/mongo/auth/user/view_spec.rb +96 -1
  627. data/spec/mongo/auth/user_spec.rb +1 -1
  628. data/spec/mongo/auth/x509/conversation_spec.rb +1 -1
  629. data/spec/mongo/auth/x509_spec.rb +1 -1
  630. data/spec/mongo/auth_spec.rb +1 -1
  631. data/spec/mongo/bson_spec.rb +1 -1
  632. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +1 -1
  633. data/spec/mongo/bulk_write/result_spec.rb +16 -2
  634. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +1 -1
  635. data/spec/mongo/bulk_write_spec.rb +142 -21
  636. data/spec/mongo/caching_cursor_spec.rb +2 -2
  637. data/spec/mongo/client_construction_spec.rb +734 -631
  638. data/spec/mongo/client_encryption_spec.rb +12 -23
  639. data/spec/mongo/client_spec.rb +547 -156
  640. data/spec/mongo/cluster/cursor_reaper_spec.rb +22 -4
  641. data/spec/mongo/cluster/periodic_executor_spec.rb +1 -1
  642. data/spec/mongo/cluster/socket_reaper_spec.rb +1 -1
  643. data/spec/mongo/cluster/topology/replica_set_spec.rb +1 -1
  644. data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
  645. data/spec/mongo/cluster/topology/single_spec.rb +1 -1
  646. data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
  647. data/spec/mongo/cluster/topology_spec.rb +1 -1
  648. data/spec/mongo/cluster_spec.rb +193 -199
  649. data/spec/mongo/cluster_time_spec.rb +1 -1
  650. data/spec/mongo/collection/view/aggregation_spec.rb +142 -43
  651. data/spec/mongo/collection/view/builder/find_command_spec.rb +1 -1
  652. data/spec/mongo/collection/view/builder/op_query_spec.rb +1 -1
  653. data/spec/mongo/collection/view/change_stream_resume_spec.rb +1 -1
  654. data/spec/mongo/collection/view/change_stream_spec.rb +6 -6
  655. data/spec/mongo/collection/view/explainable_spec.rb +3 -1
  656. data/spec/mongo/collection/view/immutable_spec.rb +1 -1
  657. data/spec/mongo/collection/view/iterable_spec.rb +1 -1
  658. data/spec/mongo/collection/view/map_reduce_spec.rb +11 -1
  659. data/spec/mongo/collection/view/readable_spec.rb +744 -2
  660. data/spec/mongo/collection/view/writable_spec.rb +145 -33
  661. data/spec/mongo/collection/view_spec.rb +1 -1
  662. data/spec/mongo/collection_crud_spec.rb +122 -15
  663. data/spec/mongo/collection_ddl_spec.rb +116 -66
  664. data/spec/mongo/collection_spec.rb +47 -2
  665. data/spec/mongo/condition_variable_spec.rb +104 -0
  666. data/spec/mongo/config/options_spec.rb +76 -0
  667. data/spec/mongo/config_spec.rb +74 -0
  668. data/spec/mongo/crypt/auto_decryption_context_spec.rb +18 -2
  669. data/spec/mongo/crypt/auto_encrypter_spec.rb +272 -12
  670. data/spec/mongo/crypt/auto_encryption_context_spec.rb +18 -2
  671. data/spec/mongo/crypt/binary_spec.rb +1 -1
  672. data/spec/mongo/crypt/binding/binary_spec.rb +1 -1
  673. data/spec/mongo/crypt/binding/context_spec.rb +68 -18
  674. data/spec/mongo/crypt/binding/helpers_spec.rb +1 -1
  675. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +18 -47
  676. data/spec/mongo/crypt/binding/status_spec.rb +1 -1
  677. data/spec/mongo/crypt/binding/version_spec.rb +48 -1
  678. data/spec/mongo/crypt/binding_unloaded_spec.rb +15 -1
  679. data/spec/mongo/crypt/data_key_context_spec.rb +46 -116
  680. data/spec/mongo/crypt/encryption_io_spec.rb +3 -1
  681. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +33 -2
  682. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +95 -2
  683. data/spec/mongo/crypt/handle_spec.rb +187 -156
  684. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +1 -1
  685. data/spec/mongo/crypt/hooks_spec.rb +30 -0
  686. data/spec/mongo/crypt/kms/azure/credentials_retriever_spec.rb +86 -0
  687. data/spec/mongo/crypt/kms/credentials_spec.rb +373 -0
  688. data/spec/mongo/crypt/kms_spec.rb +62 -0
  689. data/spec/mongo/crypt/status_spec.rb +1 -1
  690. data/spec/mongo/crypt_spec.rb +21 -0
  691. data/spec/mongo/cursor/builder/get_more_command_spec.rb +1 -1
  692. data/spec/mongo/cursor/builder/op_get_more_spec.rb +1 -1
  693. data/spec/mongo/cursor_spec.rb +119 -19
  694. data/spec/mongo/database_spec.rb +67 -2
  695. data/spec/mongo/distinguishing_semaphore_spec.rb +7 -7
  696. data/spec/mongo/error/bulk_write_error_spec.rb +1 -1
  697. data/spec/mongo/error/crypt_error_spec.rb +1 -1
  698. data/spec/mongo/error/max_bson_size_spec.rb +1 -1
  699. data/spec/mongo/error/no_server_available_spec.rb +1 -1
  700. data/spec/mongo/error/notable_spec.rb +1 -1
  701. data/spec/mongo/error/operation_failure_heavy_spec.rb +51 -2
  702. data/spec/mongo/error/operation_failure_spec.rb +1 -1
  703. data/spec/mongo/error/parser_spec.rb +1 -1
  704. data/spec/mongo/error/unsupported_option_spec.rb +1 -1
  705. data/spec/mongo/event/publisher_spec.rb +1 -1
  706. data/spec/mongo/event/subscriber_spec.rb +1 -1
  707. data/spec/mongo/grid/file/chunk_spec.rb +1 -1
  708. data/spec/mongo/grid/file/info_spec.rb +1 -1
  709. data/spec/mongo/grid/file_spec.rb +1 -1
  710. data/spec/mongo/grid/fs_bucket_spec.rb +1 -1
  711. data/spec/mongo/grid/stream/read_spec.rb +1 -1
  712. data/spec/mongo/grid/stream/write_spec.rb +1 -1
  713. data/spec/mongo/grid/stream_spec.rb +1 -1
  714. data/spec/mongo/id_spec.rb +2 -2
  715. data/spec/mongo/index/view_spec.rb +126 -1
  716. data/spec/mongo/lint_spec.rb +2 -2
  717. data/spec/mongo/logger_spec.rb +1 -1
  718. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +1 -1
  719. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +2 -2
  720. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +2 -2
  721. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +2 -2
  722. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +2 -2
  723. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +2 -2
  724. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +2 -2
  725. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +2 -2
  726. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +2 -2
  727. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +2 -2
  728. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +2 -2
  729. data/spec/mongo/monitoring/event/command_failed_spec.rb +1 -1
  730. data/spec/mongo/monitoring/event/command_started_spec.rb +1 -1
  731. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +1 -1
  732. data/spec/mongo/monitoring/event/secure_spec.rb +1 -1
  733. data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
  734. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -1
  735. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
  736. data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +1 -1
  737. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
  738. data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
  739. data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
  740. data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
  741. data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
  742. data/spec/mongo/monitoring_spec.rb +1 -1
  743. data/spec/mongo/operation/aggregate/result_spec.rb +1 -1
  744. data/spec/mongo/operation/aggregate_spec.rb +1 -1
  745. data/spec/mongo/operation/collections_info_spec.rb +1 -1
  746. data/spec/mongo/operation/command_spec.rb +1 -1
  747. data/spec/mongo/operation/context_spec.rb +79 -0
  748. data/spec/mongo/operation/create/op_msg_spec.rb +240 -0
  749. data/spec/mongo/operation/create_index_spec.rb +1 -1
  750. data/spec/mongo/operation/create_user_spec.rb +1 -1
  751. data/spec/mongo/operation/delete/bulk_spec.rb +1 -1
  752. data/spec/mongo/operation/delete/op_msg_spec.rb +20 -10
  753. data/spec/mongo/operation/delete_spec.rb +1 -31
  754. data/spec/mongo/operation/drop_index_spec.rb +1 -1
  755. data/spec/mongo/operation/find/builder/flags_spec.rb +1 -1
  756. data/spec/mongo/operation/find/builder/modifiers_spec.rb +1 -1
  757. data/spec/mongo/operation/find/op_msg_spec.rb +66 -0
  758. data/spec/mongo/operation/get_more/op_msg_spec.rb +65 -0
  759. data/spec/mongo/operation/indexes_spec.rb +1 -1
  760. data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
  761. data/spec/mongo/operation/insert/op_msg_spec.rb +131 -126
  762. data/spec/mongo/operation/insert_spec.rb +2 -34
  763. data/spec/mongo/operation/limited_spec.rb +1 -1
  764. data/spec/mongo/operation/map_reduce_spec.rb +1 -1
  765. data/spec/mongo/operation/read_preference_legacy_spec.rb +1 -1
  766. data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
  767. data/spec/mongo/operation/remove_user_spec.rb +1 -1
  768. data/spec/mongo/operation/result_spec.rb +21 -1
  769. data/spec/mongo/operation/shared/csot/examples.rb +113 -0
  770. data/spec/mongo/operation/specifiable_spec.rb +1 -1
  771. data/spec/mongo/operation/update/bulk_spec.rb +1 -1
  772. data/spec/mongo/operation/update/op_msg_spec.rb +14 -5
  773. data/spec/mongo/operation/update_spec.rb +1 -30
  774. data/spec/mongo/operation/update_user_spec.rb +1 -1
  775. data/spec/mongo/options/redacted_spec.rb +2 -2
  776. data/spec/mongo/protocol/caching_hash_spec.rb +37 -0
  777. data/spec/mongo/protocol/compressed_spec.rb +1 -1
  778. data/spec/mongo/protocol/get_more_spec.rb +1 -1
  779. data/spec/mongo/protocol/kill_cursors_spec.rb +1 -1
  780. data/spec/mongo/protocol/msg_spec.rb +45 -66
  781. data/spec/mongo/protocol/query_spec.rb +1 -1
  782. data/spec/mongo/protocol/registry_spec.rb +1 -1
  783. data/spec/mongo/protocol/reply_spec.rb +1 -1
  784. data/spec/mongo/query_cache_middleware_spec.rb +1 -1
  785. data/spec/mongo/query_cache_spec.rb +245 -226
  786. data/spec/mongo/retryable/write_worker_spec.rb +39 -0
  787. data/spec/mongo/retryable_spec.rb +38 -6
  788. data/spec/mongo/semaphore_spec.rb +7 -7
  789. data/spec/mongo/server/app_metadata/environment_spec.rb +344 -0
  790. data/spec/mongo/server/app_metadata/truncator_spec.rb +158 -0
  791. data/spec/mongo/server/app_metadata_spec.rb +53 -65
  792. data/spec/mongo/server/connection_auth_spec.rb +4 -2
  793. data/spec/mongo/server/connection_common_spec.rb +14 -2
  794. data/spec/mongo/server/connection_pool/populator_spec.rb +17 -3
  795. data/spec/mongo/server/connection_pool_spec.rb +567 -63
  796. data/spec/mongo/server/connection_spec.rb +93 -163
  797. data/spec/mongo/server/description/features_spec.rb +25 -1
  798. data/spec/mongo/server/description_query_methods_spec.rb +1 -1
  799. data/spec/mongo/server/description_spec.rb +1 -1
  800. data/spec/mongo/server/monitor/app_metadata_spec.rb +1 -1
  801. data/spec/mongo/server/monitor/connection_spec.rb +3 -3
  802. data/spec/mongo/server/monitor_spec.rb +6 -5
  803. data/spec/mongo/server/push_monitor_spec.rb +3 -9
  804. data/spec/mongo/server/round_trip_time_calculator_spec.rb +120 -0
  805. data/spec/mongo/server_selector/nearest_spec.rb +1 -1
  806. data/spec/mongo/server_selector/primary_preferred_spec.rb +1 -1
  807. data/spec/mongo/server_selector/primary_spec.rb +1 -1
  808. data/spec/mongo/server_selector/secondary_preferred_spec.rb +1 -1
  809. data/spec/mongo/server_selector/secondary_spec.rb +1 -1
  810. data/spec/mongo/server_selector_spec.rb +1 -1
  811. data/spec/mongo/server_spec.rb +32 -5
  812. data/spec/mongo/session/server_session_spec.rb +1 -1
  813. data/spec/mongo/session/session_pool_spec.rb +2 -17
  814. data/spec/mongo/session_spec.rb +27 -7
  815. data/spec/mongo/session_transaction_spec.rb +19 -3
  816. data/spec/mongo/socket/ssl_spec.rb +21 -26
  817. data/spec/mongo/socket/tcp_spec.rb +1 -1
  818. data/spec/mongo/socket/unix_spec.rb +1 -1
  819. data/spec/mongo/socket_spec.rb +1 -1
  820. data/spec/mongo/srv/monitor_spec.rb +1 -1
  821. data/spec/mongo/srv/result_spec.rb +1 -1
  822. data/spec/mongo/timeout_spec.rb +1 -1
  823. data/spec/mongo/tls_context_hooks_spec.rb +1 -1
  824. data/spec/mongo/uri/options_mapper_spec.rb +1605 -0
  825. data/spec/mongo/uri/srv_protocol_spec.rb +263 -4
  826. data/spec/mongo/uri_option_parsing_spec.rb +1 -1
  827. data/spec/mongo/uri_spec.rb +168 -11
  828. data/spec/mongo/utils_spec.rb +1 -1
  829. data/spec/mongo/write_concern/acknowledged_spec.rb +1 -1
  830. data/spec/mongo/write_concern/unacknowledged_spec.rb +1 -1
  831. data/spec/mongo/write_concern_spec.rb +1 -1
  832. data/spec/runners/auth.rb +1 -1
  833. data/spec/runners/change_streams/outcome.rb +1 -1
  834. data/spec/runners/change_streams/spec.rb +1 -1
  835. data/spec/runners/change_streams/test.rb +3 -3
  836. data/spec/runners/cmap/verifier.rb +2 -2
  837. data/spec/runners/cmap.rb +188 -45
  838. data/spec/runners/command_monitoring.rb +1 -1
  839. data/spec/runners/connection_string.rb +9 -1
  840. data/spec/runners/crud/context.rb +1 -1
  841. data/spec/runners/crud/operation.rb +15 -6
  842. data/spec/runners/crud/outcome.rb +1 -1
  843. data/spec/runners/crud/requirement.rb +12 -7
  844. data/spec/runners/crud/spec.rb +6 -1
  845. data/spec/runners/crud/test.rb +2 -10
  846. data/spec/runners/crud/test_base.rb +2 -2
  847. data/spec/runners/crud/verifier.rb +12 -4
  848. data/spec/runners/crud.rb +2 -2
  849. data/spec/runners/gridfs.rb +1 -1
  850. data/spec/runners/read_write_concern_document.rb +1 -1
  851. data/spec/runners/sdam/verifier.rb +1 -1
  852. data/spec/runners/sdam.rb +1 -1
  853. data/spec/runners/server_selection.rb +1 -1
  854. data/spec/runners/server_selection_rtt.rb +1 -1
  855. data/spec/runners/transactions/operation.rb +19 -15
  856. data/spec/runners/transactions/spec.rb +3 -3
  857. data/spec/runners/transactions/test.rb +75 -22
  858. data/spec/runners/transactions.rb +12 -9
  859. data/spec/runners/unified/ambiguous_operations.rb +13 -0
  860. data/spec/runners/unified/assertions.rb +163 -50
  861. data/spec/runners/unified/change_stream_operations.rb +22 -9
  862. data/spec/runners/unified/client_side_encryption_operations.rb +83 -0
  863. data/spec/runners/unified/crud_operations.rb +129 -22
  864. data/spec/runners/unified/ddl_operations.rb +160 -8
  865. data/spec/runners/unified/entity_map.rb +1 -1
  866. data/spec/runners/unified/error.rb +3 -2
  867. data/spec/runners/unified/event_subscriber.rb +9 -3
  868. data/spec/runners/unified/exceptions.rb +1 -1
  869. data/spec/runners/unified/grid_fs_operations.rb +59 -3
  870. data/spec/runners/unified/search_index_operations.rb +63 -0
  871. data/spec/runners/unified/support_operations.rb +115 -11
  872. data/spec/runners/unified/test.rb +204 -36
  873. data/spec/runners/unified/test_group.rb +1 -1
  874. data/spec/runners/unified/thread_operations.rb +73 -0
  875. data/spec/runners/unified.rb +15 -5
  876. data/spec/solo/clean_exit_spec.rb +7 -7
  877. data/spec/spec_helper.rb +2 -3
  878. data/spec/spec_tests/auth_spec.rb +1 -1
  879. data/spec/spec_tests/change_streams_unified_spec.rb +2 -1
  880. data/spec/spec_tests/client_side_encryption_spec.rb +25 -2
  881. data/spec/spec_tests/client_side_encryption_unified_spec.rb +26 -0
  882. data/spec/spec_tests/client_side_operations_timeout_spec.rb +15 -0
  883. data/spec/spec_tests/cmap_spec.rb +29 -15
  884. data/spec/spec_tests/collection_management_spec.rb +1 -1
  885. data/spec/spec_tests/command_monitoring_unified_spec.rb +1 -1
  886. data/spec/spec_tests/connection_string_spec.rb +1 -1
  887. data/spec/spec_tests/crud_spec.rb +1 -11
  888. data/spec/spec_tests/crud_unified_spec.rb +1 -1
  889. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +43 -0
  890. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +105 -0
  891. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +122 -0
  892. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
  893. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1169 -0
  894. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1069 -0
  895. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +307 -0
  896. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +859 -4
  897. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
  898. data/spec/spec_tests/data/client_side_encryption/awsTemporary.yml +57 -0
  899. data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
  900. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +14 -3
  901. data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
  902. data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
  903. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
  904. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +5 -4
  905. data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
  906. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
  907. data/spec/spec_tests/data/client_side_encryption/create-and-createIndexes.yml +58 -0
  908. data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
  909. data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
  910. data/spec/spec_tests/data/client_side_encryption/explain.yml +3 -10
  911. data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
  912. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
  913. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
  914. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
  915. data/spec/spec_tests/data/client_side_encryption/fle2v2-BypassQueryAnalysis.yml +90 -0
  916. data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +83 -0
  917. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection-OldServer.yml +61 -0
  918. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +938 -0
  919. data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +67 -0
  920. data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +101 -0
  921. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +80 -0
  922. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +103 -0
  923. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +59 -0
  924. data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +201 -0
  925. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +97 -0
  926. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +90 -0
  927. data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +44 -0
  928. data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +45 -0
  929. data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +211 -0
  930. data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +170 -0
  931. data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
  932. data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
  933. data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
  934. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
  935. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
  936. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
  937. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +3 -1
  938. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
  939. data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
  940. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
  941. data/spec/spec_tests/data/client_side_encryption/timeoutMS.yml +67 -0
  942. data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
  943. data/spec/spec_tests/data/client_side_encryption/unified/addKeyAltName.yml +194 -0
  944. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +67 -0
  945. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey.yml +309 -0
  946. data/spec/spec_tests/data/client_side_encryption/unified/deleteKey.yml +159 -0
  947. data/spec/spec_tests/data/client_side_encryption/unified/getKey.yml +105 -0
  948. data/spec/spec_tests/data/client_side_encryption/unified/getKeyByAltName.yml +104 -0
  949. data/spec/spec_tests/data/client_side_encryption/unified/getKeys.yml +122 -0
  950. data/spec/spec_tests/data/client_side_encryption/unified/removeKeyAltName.yml +157 -0
  951. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-decrypt_failure.yml +69 -0
  952. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-encrypt_failure.yml +122 -0
  953. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +432 -0
  954. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
  955. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
  956. data/spec/spec_tests/data/client_side_encryption/validatorAndPartialFieldExpression.yml +166 -0
  957. data/spec/spec_tests/data/client_side_operations_timeout/bulkWrite.yml +87 -0
  958. data/spec/spec_tests/data/client_side_operations_timeout/change-streams.yml +358 -0
  959. data/spec/spec_tests/data/client_side_operations_timeout/close-cursors.yml +129 -0
  960. data/spec/spec_tests/data/client_side_operations_timeout/command-execution.yml +250 -0
  961. data/spec/spec_tests/data/client_side_operations_timeout/convenient-transactions.yml +113 -0
  962. data/spec/spec_tests/data/client_side_operations_timeout/cursors.yml +70 -0
  963. data/spec/spec_tests/data/client_side_operations_timeout/deprecated-options.yml +3982 -0
  964. data/spec/spec_tests/data/client_side_operations_timeout/error-transformations.yml +96 -0
  965. data/spec/spec_tests/data/client_side_operations_timeout/global-timeoutMS.yml +3236 -0
  966. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-advanced.yml +207 -0
  967. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-delete.yml +152 -0
  968. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-download.yml +182 -0
  969. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-find.yml +100 -0
  970. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-upload.yml +249 -0
  971. data/spec/spec_tests/data/client_side_operations_timeout/legacy-timeouts.yml +204 -0
  972. data/spec/spec_tests/data/client_side_operations_timeout/non-tailable-cursors.yml +307 -0
  973. data/spec/spec_tests/data/client_side_operations_timeout/override-collection-timeoutMS.yml +1877 -0
  974. data/spec/spec_tests/data/client_side_operations_timeout/override-operation-timeoutMS.yml +1918 -0
  975. data/spec/spec_tests/data/client_side_operations_timeout/retryability-legacy-timeouts.yml +1676 -0
  976. data/spec/spec_tests/data/client_side_operations_timeout/retryability-timeoutMS.yml +2824 -0
  977. data/spec/spec_tests/data/client_side_operations_timeout/sessions-inherit-timeoutMS.yml +168 -0
  978. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-operation-timeoutMS.yml +171 -0
  979. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-timeoutMS.yml +168 -0
  980. data/spec/spec_tests/data/client_side_operations_timeout/tailable-awaitData.yml +247 -0
  981. data/spec/spec_tests/data/client_side_operations_timeout/tailable-non-awaitData.yml +181 -0
  982. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +2 -0
  983. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +2 -0
  984. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +2 -0
  985. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +2 -0
  986. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +3 -1
  987. data/spec/spec_tests/data/cmap/pool-checkin.yml +5 -0
  988. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +2 -0
  989. data/spec/spec_tests/data/cmap/pool-checkout-custom-maxConnecting-is-enforced.yml +50 -0
  990. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +2 -0
  991. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-is-enforced.yml +81 -0
  992. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-timeout.yml +71 -0
  993. data/spec/spec_tests/data/cmap/pool-checkout-minPoolSize-connection-maxConnecting.yml +64 -0
  994. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +2 -0
  995. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +6 -0
  996. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +8 -0
  997. data/spec/spec_tests/data/cmap/pool-checkout-returned-connection-maxConnecting.yml +88 -0
  998. data/spec/spec_tests/data/cmap/pool-clear-interrupting-pending-connections.yml +43 -0
  999. data/spec/spec_tests/data/cmap/pool-clear-min-size.yml +41 -0
  1000. data/spec/spec_tests/data/cmap/pool-clear-paused.yml +18 -0
  1001. data/spec/spec_tests/data/cmap/pool-clear-ready.yml +39 -0
  1002. data/spec/spec_tests/data/cmap/pool-clear-schedule-run-interruptInUseConnections-false.yml +48 -0
  1003. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +2 -0
  1004. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +2 -0
  1005. data/spec/spec_tests/data/cmap/pool-create-min-size-error.yml +43 -0
  1006. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +9 -0
  1007. data/spec/spec_tests/data/cmap/pool-ready-ready.yml +22 -0
  1008. data/spec/spec_tests/data/cmap/pool-ready.yml +30 -0
  1009. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +2 -0
  1010. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +6 -1
  1011. data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
  1012. data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
  1013. data/spec/spec_tests/data/collection_management/modifyCollection-errorResponse.yml +59 -0
  1014. data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
  1015. data/spec/spec_tests/data/collection_management/timeseries-collection.yml +35 -0
  1016. data/spec/spec_tests/data/command_monitoring_unified/bulkWrite.yml +68 -0
  1017. data/spec/spec_tests/data/command_monitoring_unified/command.yml +50 -0
  1018. data/spec/spec_tests/data/command_monitoring_unified/deleteMany.yml +79 -0
  1019. data/spec/spec_tests/data/command_monitoring_unified/deleteOne.yml +79 -0
  1020. data/spec/spec_tests/data/command_monitoring_unified/find.yml +254 -0
  1021. data/spec/spec_tests/data/command_monitoring_unified/insertMany.yml +79 -0
  1022. data/spec/spec_tests/data/command_monitoring_unified/insertOne.yml +77 -0
  1023. data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
  1024. data/spec/spec_tests/data/command_monitoring_unified/redacted-commands.yml +8 -0
  1025. data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
  1026. data/spec/spec_tests/data/command_monitoring_unified/unacknowledgedBulkWrite.yml +55 -0
  1027. data/spec/spec_tests/data/command_monitoring_unified/updateMany.yml +87 -0
  1028. data/spec/spec_tests/data/command_monitoring_unified/updateOne.yml +118 -0
  1029. data/spec/spec_tests/data/command_monitoring_unified/writeConcernError.yml +80 -0
  1030. data/spec/spec_tests/data/connection_string/invalid-uris.yml +0 -10
  1031. data/spec/spec_tests/data/connection_string/valid-options.yml +13 -0
  1032. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +1 -1
  1033. data/spec/spec_tests/data/crud/read/count-collation.yml +1 -1
  1034. data/spec/spec_tests/data/crud/read/distinct-collation.yml +1 -1
  1035. data/spec/spec_tests/data/crud/read/find-collation.yml +1 -1
  1036. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +1 -1
  1037. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +1 -1
  1038. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +1 -1
  1039. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +1 -1
  1040. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +1 -1
  1041. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +1 -1
  1042. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +1 -1
  1043. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +1 -1
  1044. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +1 -1
  1045. data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
  1046. data/spec/spec_tests/data/crud_unified/aggregate-merge-errorResponse.yml +42 -0
  1047. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
  1048. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
  1049. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +6 -0
  1050. data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
  1051. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
  1052. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
  1053. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
  1054. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
  1055. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
  1056. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
  1057. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
  1058. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
  1059. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
  1060. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
  1061. data/spec/spec_tests/data/crud_unified/bulkWrite-errorResponse.yml +50 -0
  1062. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
  1063. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
  1064. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
  1065. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
  1066. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
  1067. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
  1068. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
  1069. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
  1070. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
  1071. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
  1072. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
  1073. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
  1074. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
  1075. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
  1076. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
  1077. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +6 -0
  1078. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
  1079. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
  1080. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
  1081. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
  1082. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
  1083. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
  1084. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +2 -0
  1085. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
  1086. data/spec/spec_tests/data/crud_unified/deleteOne-errorResponse.yml +46 -0
  1087. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
  1088. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
  1089. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
  1090. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
  1091. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +2 -0
  1092. data/spec/spec_tests/data/crud_unified/distinct-comment.yml +98 -0
  1093. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
  1094. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +49 -135
  1095. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
  1096. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
  1097. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
  1098. data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
  1099. data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +377 -0
  1100. data/spec/spec_tests/data/crud_unified/find.yml +68 -0
  1101. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
  1102. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
  1103. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
  1104. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
  1105. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
  1106. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +2 -4
  1107. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
  1108. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
  1109. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
  1110. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
  1111. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
  1112. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
  1113. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
  1114. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
  1115. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-errorResponse.yml +69 -0
  1116. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
  1117. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
  1118. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
  1119. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
  1120. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
  1121. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
  1122. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
  1123. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
  1124. data/spec/spec_tests/data/crud_unified/insertOne-errorResponse.yml +46 -0
  1125. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
  1126. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
  1127. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
  1128. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
  1129. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
  1130. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
  1131. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
  1132. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
  1133. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
  1134. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
  1135. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
  1136. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
  1137. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +5 -1
  1138. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
  1139. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
  1140. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
  1141. data/spec/spec_tests/data/crud_unified/updateOne-errorResponse.yml +47 -0
  1142. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
  1143. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
  1144. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
  1145. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
  1146. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +5 -1
  1147. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
  1148. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
  1149. data/spec/spec_tests/data/gridfs_unified/delete.yml +198 -0
  1150. data/spec/spec_tests/data/gridfs_unified/download.yml +241 -0
  1151. data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +159 -0
  1152. data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +92 -0
  1153. data/spec/spec_tests/data/gridfs_unified/upload.yml +288 -0
  1154. data/spec/spec_tests/data/index_management/createSearchIndex.yml +64 -0
  1155. data/spec/spec_tests/data/index_management/createSearchIndexes.yml +86 -0
  1156. data/spec/spec_tests/data/index_management/dropSearchIndex.yml +43 -0
  1157. data/spec/spec_tests/data/index_management/listSearchIndexes.yml +91 -0
  1158. data/spec/spec_tests/data/index_management/updateSearchIndex.yml +46 -0
  1159. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
  1160. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
  1161. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +1342 -0
  1162. data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
  1163. data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
  1164. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
  1165. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
  1166. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
  1167. data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
  1168. data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
  1169. data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
  1170. data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
  1171. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +93 -0
  1172. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +785 -0
  1173. data/spec/spec_tests/data/retryable_writes/unified/insertOne-noWritesPerformedError.yml +54 -0
  1174. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +75 -0
  1175. data/spec/spec_tests/data/run_command_unified/runCommand.yml +319 -0
  1176. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
  1177. data/spec/spec_tests/data/sdam/rs/electionId_precedence_setVersion.yml +62 -0
  1178. data/spec/spec_tests/data/sdam/rs/null_election_id-pre-6.0.yml +175 -0
  1179. data/spec/spec_tests/data/sdam/rs/null_election_id.yml +20 -18
  1180. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0-pre-6.0.yml +87 -0
  1181. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +1 -1
  1182. data/spec/spec_tests/data/sdam/rs/set_version_can_rollback.yml +101 -0
  1183. data/spec/spec_tests/data/sdam/rs/setversion_equal_max_without_electionid.yml +78 -0
  1184. data/spec/spec_tests/data/sdam/rs/setversion_greaterthan_max_without_electionid.yml +79 -0
  1185. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid-pre-6.0.yml +79 -0
  1186. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +9 -10
  1187. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid-pre-6.0.yml +117 -0
  1188. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +23 -21
  1189. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -1
  1190. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +38 -39
  1191. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +38 -39
  1192. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +1 -1
  1193. data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +1 -1
  1194. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +1 -1
  1195. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  1196. data/spec/spec_tests/data/sdam_unified/auth-error.yml +130 -0
  1197. data/spec/spec_tests/data/sdam_unified/auth-misc-command-error.yml +132 -0
  1198. data/spec/spec_tests/data/sdam_unified/auth-network-error.yml +132 -0
  1199. data/spec/spec_tests/data/sdam_unified/auth-network-timeout-error.yml +138 -0
  1200. data/spec/spec_tests/data/sdam_unified/auth-shutdown-error.yml +133 -0
  1201. data/spec/spec_tests/data/sdam_unified/cancel-server-check.yml +143 -0
  1202. data/spec/spec_tests/data/sdam_unified/connectTimeoutMS.yml +130 -0
  1203. data/spec/spec_tests/data/sdam_unified/find-network-error.yml +135 -0
  1204. data/spec/spec_tests/data/sdam_unified/find-network-timeout-error.yml +119 -0
  1205. data/spec/spec_tests/data/sdam_unified/find-shutdown-error.yml +163 -0
  1206. data/spec/spec_tests/data/sdam_unified/hello-command-error.yml +233 -0
  1207. data/spec/spec_tests/data/sdam_unified/hello-network-error.yml +228 -0
  1208. data/spec/spec_tests/data/sdam_unified/hello-timeout.yml +318 -0
  1209. data/spec/spec_tests/data/sdam_unified/insert-network-error.yml +137 -0
  1210. data/spec/spec_tests/data/sdam_unified/insert-shutdown-error.yml +162 -0
  1211. data/spec/spec_tests/data/sdam_unified/interruptInUse-pool-clear.yml +340 -0
  1212. data/spec/spec_tests/data/sdam_unified/minPoolSize-error.yml +125 -0
  1213. data/spec/spec_tests/data/sdam_unified/pool-cleared-error.yml +239 -0
  1214. data/spec/spec_tests/data/sdam_unified/rediscover-quickly-after-step-down.yml +144 -0
  1215. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +6 -5
  1216. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
  1217. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +2 -2
  1218. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +5 -4
  1219. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
  1220. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
  1221. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +11 -0
  1222. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +11 -0
  1223. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
  1224. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
  1225. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
  1226. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
  1227. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
  1228. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
  1229. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
  1230. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
  1231. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
  1232. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
  1233. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
  1234. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
  1235. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
  1236. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
  1237. data/spec/spec_tests/data/sessions_unified/driver-sessions-dirty-session-errors.yml +351 -0
  1238. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
  1239. data/spec/spec_tests/data/sessions_unified/implicit-sessions-default-causal-consistency.yml +119 -0
  1240. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +9 -3
  1241. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +1 -1
  1242. data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +1 -1
  1243. data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
  1244. data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
  1245. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
  1246. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -2
  1247. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
  1248. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
  1249. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
  1250. data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
  1251. data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
  1252. data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +1 -1
  1253. data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +118 -0
  1254. data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +118 -0
  1255. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor-malformed.yml +31 -0
  1256. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor.yml +31 -0
  1257. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError-malformed.yml +34 -0
  1258. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError.yml +35 -0
  1259. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
  1260. data/spec/spec_tests/data/unified/valid-pass/assertNumberConnectionsCheckedOut.yml +17 -0
  1261. data/spec/spec_tests/data/unified/valid-pass/collectionData-createOptions.yml +37 -0
  1262. data/spec/spec_tests/data/unified/valid-pass/entity-client-cmap-events.yml +40 -0
  1263. data/spec/spec_tests/data/unified/valid-pass/entity-client-storeEventsAsEntities.yml +37 -0
  1264. data/spec/spec_tests/data/unified/valid-pass/expectedError-errorResponse.yml +39 -0
  1265. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-eventType.yml +66 -0
  1266. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
  1267. data/spec/spec_tests/data/unified/valid-pass/ignoreResultAndError.yml +34 -0
  1268. data/spec/spec_tests/data/unified/valid-pass/observeSensitiveCommands.yml +255 -0
  1269. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +22 -1
  1270. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
  1271. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +19 -13
  1272. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +3 -3
  1273. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +9 -9
  1274. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +3 -4
  1275. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +1 -1
  1276. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +1 -1
  1277. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +6 -5
  1278. data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
  1279. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
  1280. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
  1281. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +4 -4
  1282. data/spec/spec_tests/gridfs_spec.rb +1 -1
  1283. data/spec/spec_tests/gridfs_unified_spec.rb +13 -0
  1284. data/spec/spec_tests/index_management_unified_spec.rb +13 -0
  1285. data/spec/spec_tests/load_balancers_spec.rb +1 -1
  1286. data/spec/spec_tests/max_staleness_spec.rb +1 -1
  1287. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
  1288. data/spec/spec_tests/read_write_concern_document_spec.rb +1 -1
  1289. data/spec/spec_tests/read_write_concern_operaton_spec.rb +1 -1
  1290. data/spec/spec_tests/retryable_reads_spec.rb +7 -2
  1291. data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
  1292. data/spec/spec_tests/retryable_writes_spec.rb +5 -2
  1293. data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
  1294. data/spec/spec_tests/run_command_unified_spec.rb +13 -0
  1295. data/spec/spec_tests/sdam_monitoring_spec.rb +1 -1
  1296. data/spec/spec_tests/sdam_spec.rb +5 -1
  1297. data/spec/spec_tests/sdam_unified_spec.rb +15 -0
  1298. data/spec/spec_tests/seed_list_discovery_spec.rb +11 -2
  1299. data/spec/spec_tests/server_selection_rtt_spec.rb +7 -7
  1300. data/spec/spec_tests/server_selection_spec.rb +1 -1
  1301. data/spec/spec_tests/sessions_unified_spec.rb +1 -1
  1302. data/spec/spec_tests/transactions_api_spec.rb +1 -1
  1303. data/spec/spec_tests/transactions_spec.rb +1 -1
  1304. data/spec/spec_tests/transactions_unified_spec.rb +3 -2
  1305. data/spec/spec_tests/unified_spec.rb +2 -2
  1306. data/spec/spec_tests/uri_options_spec.rb +1 -1
  1307. data/spec/spec_tests/versioned_api_spec.rb +1 -1
  1308. data/spec/stress/cleanup_spec.rb +1 -1
  1309. data/spec/stress/connection_pool_stress_spec.rb +1 -62
  1310. data/spec/stress/connection_pool_timing_spec.rb +12 -36
  1311. data/spec/stress/fork_reconnect_stress_spec.rb +10 -10
  1312. data/spec/stress/push_monitor_close_spec.rb +1 -1
  1313. data/spec/support/authorization.rb +2 -2
  1314. data/spec/support/aws_utils/base.rb +1 -1
  1315. data/spec/support/aws_utils/inspector.rb +1 -1
  1316. data/spec/support/aws_utils/orchestrator.rb +20 -8
  1317. data/spec/support/aws_utils/provisioner.rb +1 -1
  1318. data/spec/support/aws_utils.rb +4 -3
  1319. data/spec/support/background_thread_registry.rb +4 -14
  1320. data/spec/support/certificates/atlas-ocsp-ca.crt +89 -79
  1321. data/spec/support/certificates/atlas-ocsp.crt +117 -122
  1322. data/spec/support/certificates/retrieve-atlas-cert +40 -0
  1323. data/spec/support/client_registry.rb +6 -2
  1324. data/spec/support/client_registry_macros.rb +1 -1
  1325. data/spec/support/cluster_tools.rb +17 -12
  1326. data/spec/support/common_shortcuts.rb +53 -6
  1327. data/spec/support/constraints.rb +21 -1
  1328. data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
  1329. data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
  1330. data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
  1331. data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
  1332. data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
  1333. data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
  1334. data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
  1335. data/spec/support/crypt/corpus/corpus.json +4999 -37
  1336. data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
  1337. data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
  1338. data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
  1339. data/spec/support/crypt/encrypted_fields/encryptedFields.json +32 -0
  1340. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +30 -0
  1341. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +21 -0
  1342. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +29 -0
  1343. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +21 -0
  1344. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +30 -0
  1345. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +27 -0
  1346. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +27 -0
  1347. data/spec/support/crypt/keys/key1-document.json +30 -0
  1348. data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
  1349. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  1350. data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
  1351. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  1352. data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
  1353. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  1354. data/spec/support/crypt.rb +269 -14
  1355. data/spec/support/dns.rb +1 -1
  1356. data/spec/support/json_ext_formatter.rb +1 -1
  1357. data/spec/support/keyword_struct.rb +1 -1
  1358. data/spec/support/local_resource_registry.rb +1 -1
  1359. data/spec/support/macros.rb +29 -0
  1360. data/spec/support/matchers.rb +5 -5
  1361. data/spec/support/mongos_macros.rb +24 -0
  1362. data/spec/support/monitoring_ext.rb +1 -1
  1363. data/spec/support/ocsp +1 -1
  1364. data/spec/support/primary_socket.rb +1 -1
  1365. data/spec/support/recording_logger.rb +27 -0
  1366. data/spec/support/sdam_formatter_integration.rb +1 -1
  1367. data/spec/support/shared/app_metadata.rb +15 -3
  1368. data/spec/support/shared/auth_context.rb +1 -0
  1369. data/spec/support/shared/protocol.rb +1 -1
  1370. data/spec/support/shared/scram_conversation.rb +3 -2
  1371. data/spec/support/shared/server_selector.rb +1 -1
  1372. data/spec/support/shared/session.rb +16 -10
  1373. data/spec/support/spec_config.rb +133 -2
  1374. data/spec/support/spec_setup.rb +3 -3
  1375. data/spec/support/using_hash.rb +11 -2
  1376. data/spec/support/utils.rb +280 -229
  1377. metadata +1790 -1289
  1378. checksums.yaml.gz.sig +0 -0
  1379. data/lib/mongo/operation/aggregate/command.rb +0 -55
  1380. data/lib/mongo/operation/collections_info/command.rb +0 -48
  1381. data/lib/mongo/operation/count/command.rb +0 -47
  1382. data/lib/mongo/operation/create/command.rb +0 -47
  1383. data/lib/mongo/operation/create_index/command.rb +0 -61
  1384. data/lib/mongo/operation/delete/command.rb +0 -52
  1385. data/lib/mongo/operation/delete/legacy.rb +0 -64
  1386. data/lib/mongo/operation/distinct/command.rb +0 -47
  1387. data/lib/mongo/operation/explain/command.rb +0 -58
  1388. data/lib/mongo/operation/explain/legacy.rb +0 -52
  1389. data/lib/mongo/operation/find/builder/legacy.rb +0 -123
  1390. data/lib/mongo/operation/find/command.rb +0 -51
  1391. data/lib/mongo/operation/find/legacy/result.rb +0 -46
  1392. data/lib/mongo/operation/find/legacy.rb +0 -52
  1393. data/lib/mongo/operation/get_more/command.rb +0 -43
  1394. data/lib/mongo/operation/indexes/command.rb +0 -42
  1395. data/lib/mongo/operation/indexes/legacy.rb +0 -48
  1396. data/lib/mongo/operation/insert/command.rb +0 -59
  1397. data/lib/mongo/operation/insert/legacy.rb +0 -68
  1398. data/lib/mongo/operation/kill_cursors/command.rb +0 -48
  1399. data/lib/mongo/operation/list_collections/command.rb +0 -46
  1400. data/lib/mongo/operation/map_reduce/command.rb +0 -51
  1401. data/lib/mongo/operation/parallel_scan/command.rb +0 -57
  1402. data/lib/mongo/operation/remove_user/command.rb +0 -46
  1403. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +0 -44
  1404. data/lib/mongo/operation/update/command.rb +0 -53
  1405. data/lib/mongo/operation/update/legacy/result.rb +0 -112
  1406. data/lib/mongo/operation/update/legacy.rb +0 -76
  1407. data/lib/mongo/operation/users_info/command.rb +0 -46
  1408. data/lib/mongo/operation/write_command/command.rb +0 -51
  1409. data/lib/mongo/protocol/delete.rb +0 -172
  1410. data/lib/mongo/protocol/insert.rb +0 -181
  1411. data/lib/mongo/protocol/update.rb +0 -214
  1412. data/spec/mongo/dbref_spec.rb +0 -152
  1413. data/spec/mongo/operation/delete/command_spec.rb +0 -115
  1414. data/spec/mongo/operation/find/legacy_spec.rb +0 -131
  1415. data/spec/mongo/operation/get_more_spec.rb +0 -63
  1416. data/spec/mongo/operation/insert/command_spec.rb +0 -118
  1417. data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
  1418. data/spec/mongo/operation/update/command_spec.rb +0 -122
  1419. data/spec/mongo/protocol/delete_spec.rb +0 -185
  1420. data/spec/mongo/protocol/insert_spec.rb +0 -179
  1421. data/spec/mongo/protocol/update_spec.rb +0 -204
  1422. data/spec/mongo/server/round_trip_time_averager_spec.rb +0 -48
  1423. data/spec/shared/LICENSE +0 -20
  1424. data/spec/shared/bin/get-mongodb-download-url +0 -17
  1425. data/spec/shared/bin/s3-copy +0 -45
  1426. data/spec/shared/bin/s3-upload +0 -69
  1427. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  1428. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  1429. data/spec/shared/lib/mrss/constraints.rb +0 -385
  1430. data/spec/shared/lib/mrss/docker_runner.rb +0 -271
  1431. data/spec/shared/lib/mrss/event_subscriber.rb +0 -200
  1432. data/spec/shared/lib/mrss/lite_constraints.rb +0 -191
  1433. data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
  1434. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  1435. data/spec/shared/lib/mrss/utils.rb +0 -15
  1436. data/spec/shared/share/Dockerfile.erb +0 -323
  1437. data/spec/shared/share/haproxy-1.conf +0 -16
  1438. data/spec/shared/share/haproxy-2.conf +0 -17
  1439. data/spec/shared/shlib/distro.sh +0 -73
  1440. data/spec/shared/shlib/server.sh +0 -367
  1441. data/spec/shared/shlib/set_env.sh +0 -131
  1442. data/spec/spec_tests/change_streams_spec.rb +0 -93
  1443. data/spec/spec_tests/command_monitoring_spec.rb +0 -71
  1444. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -101
  1445. data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +0 -1173
  1446. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
  1447. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -535
  1448. data/spec/spec_tests/data/command_monitoring/bulkWrite.yml +0 -49
  1449. data/spec/spec_tests/data/command_monitoring/command.yml +0 -61
  1450. data/spec/spec_tests/data/command_monitoring/deleteMany.yml +0 -55
  1451. data/spec/spec_tests/data/command_monitoring/deleteOne.yml +0 -55
  1452. data/spec/spec_tests/data/command_monitoring/find.yml +0 -266
  1453. data/spec/spec_tests/data/command_monitoring/insertMany.yml +0 -75
  1454. data/spec/spec_tests/data/command_monitoring/insertOne.yml +0 -51
  1455. data/spec/spec_tests/data/command_monitoring/unacknowledgedBulkWrite.yml +0 -34
  1456. data/spec/spec_tests/data/command_monitoring/updateMany.yml +0 -65
  1457. data/spec/spec_tests/data/command_monitoring/updateOne.yml +0 -90
  1458. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
  1459. data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -111
  1460. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
  1461. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
  1462. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
  1463. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
  1464. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
  1465. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
  1466. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
  1467. data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -39
  1468. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
  1469. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
  1470. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
  1471. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
  1472. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
  1473. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
  1474. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
  1475. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
  1476. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
  1477. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
  1478. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
  1479. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
  1480. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
  1481. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
  1482. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
  1483. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
  1484. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
  1485. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
  1486. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
  1487. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
  1488. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
  1489. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
  1490. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
  1491. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
  1492. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
  1493. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
  1494. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
  1495. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
  1496. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
  1497. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
  1498. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
  1499. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
  1500. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
  1501. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
  1502. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
  1503. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
  1504. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +0 -60
  1505. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +0 -146
  1506. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +0 -96
  1507. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +0 -88
  1508. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +0 -85
  1509. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +0 -118
  1510. data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +0 -160
  1511. data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +0 -158
  1512. data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +0 -225
  1513. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +0 -88
  1514. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +0 -117
  1515. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +0 -98
  1516. data/spec/spec_tests/sdam_integration_spec.rb +0 -16
  1517. data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
  1518. data/spec/support/session_registry.rb +0 -55
  1519. data.tar.gz.sig +0 -0
  1520. metadata.gz.sig +0 -0
  1521. /data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
  1522. /data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
  1523. /data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
  1524. /data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
  1525. /data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
  1526. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
  1527. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
  1528. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
  1529. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +0 -0
  1530. /data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
  1531. /data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
  1532. /data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
  1533. /data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
  1534. /data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
  1535. /data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
  1536. /data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
  1537. /data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
  1538. /data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
  1539. /data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
  1540. /data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
  1541. /data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
  1542. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
  1543. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
  1544. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
  1545. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
  1546. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
  1547. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
  1548. /data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
  1549. /data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
  1550. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
  1551. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
  1552. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
  1553. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
  1554. /data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
  1555. /data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
  1556. /data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
  1557. /data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
  1558. /data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
  1559. /data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
  1560. /data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
  1561. /data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
  1562. /data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
  1563. /data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
  1564. /data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
  1565. /data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
  1566. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
  1567. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
  1568. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
  1569. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
  1570. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
  1571. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
  1572. /data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
  1573. /data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
  1574. /data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
  1575. /data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
  1576. /data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
  1577. /data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
  1578. /data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
  1579. /data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
  1580. /data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
@@ -0,0 +1,3236 @@
1
+ # Tests in this file are generated from global-timeoutMS.yml.template.
2
+
3
+ description: "timeoutMS can be configured on a MongoClient"
4
+
5
+ schemaVersion: "1.9"
6
+
7
+ runOnRequirements:
8
+ - minServerVersion: "4.4"
9
+ topologies: ["replicaset", "sharded"]
10
+
11
+ createEntities:
12
+ - client:
13
+ id: &failPointClient failPointClient
14
+ useMultipleMongoses: false
15
+
16
+ initialData:
17
+ - collectionName: &collectionName coll
18
+ databaseName: &databaseName test
19
+ documents: []
20
+
21
+ tests:
22
+ # For each operation, we execute two tests:
23
+ #
24
+ # 1. timeoutMS can be configured to a non-zero value on a MongoClient and is inherited by the operation. Each test
25
+ # constructs a client entity with timeoutMS=250 and configures a fail point to block the operation for 350ms so
26
+ # execution results in a timeout error.
27
+ #
28
+ # 2. timeoutMS can be set to 0 for a MongoClient. Each test constructs a client entity with timeoutMS=0 and
29
+ # configures a fail point to block the operation for 15ms. The tests expect the operation to succeed and the command
30
+ # sent to not contain a maxTimeMS field.
31
+
32
+ - description: "timeoutMS can be configured on a MongoClient - listDatabases on client"
33
+ operations:
34
+ - name: createEntities
35
+ object: testRunner
36
+ arguments:
37
+ entities:
38
+ - client:
39
+ id: &client client
40
+ uriOptions:
41
+ timeoutMS: 250
42
+ useMultipleMongoses: false
43
+ observeEvents:
44
+ - commandStartedEvent
45
+ - database:
46
+ id: &database database
47
+ client: *client
48
+ databaseName: *databaseName
49
+ - collection:
50
+ id: &collection collection
51
+ database: *database
52
+ collectionName: *collectionName
53
+ - name: failPoint
54
+ object: testRunner
55
+ arguments:
56
+ client: *failPointClient
57
+ failPoint:
58
+ configureFailPoint: failCommand
59
+ # Use "times: 2" to workaround a quirk in Python on Windows where
60
+ # socket I/O can timeout ~20ms earlier than expected. With
61
+ # "times: 1" the retry would succeed within the remaining ~20ms.
62
+ mode: { times: 2 }
63
+ data:
64
+ failCommands: ["listDatabases"]
65
+ blockConnection: true
66
+ blockTimeMS: 350
67
+ - name: listDatabases
68
+ object: *client
69
+ arguments:
70
+ filter: {}
71
+
72
+ expectError:
73
+ isTimeoutError: true
74
+ expectEvents:
75
+ - client: *client
76
+ events:
77
+ - commandStartedEvent:
78
+ commandName: listDatabases
79
+ databaseName: admin
80
+ command:
81
+ listDatabases: 1
82
+ maxTimeMS: { $$type: ["int", "long"] }
83
+ - description: "timeoutMS can be set to 0 on a MongoClient - listDatabases on client"
84
+ operations:
85
+ - name: createEntities
86
+ object: testRunner
87
+ arguments:
88
+ entities:
89
+ - client:
90
+ id: &client client
91
+ uriOptions:
92
+ timeoutMS: 0
93
+ useMultipleMongoses: false
94
+ observeEvents:
95
+ - commandStartedEvent
96
+ ignoreCommandMonitoringEvents:
97
+ - killCursors
98
+ - database:
99
+ id: &database database
100
+ client: *client
101
+ databaseName: *databaseName
102
+ - collection:
103
+ id: &collection collection
104
+ database: *database
105
+ collectionName: *collectionName
106
+ - name: failPoint
107
+ object: testRunner
108
+ arguments:
109
+ client: *failPointClient
110
+ failPoint:
111
+ configureFailPoint: failCommand
112
+ mode: { times: 1 }
113
+ data:
114
+ failCommands: ["listDatabases"]
115
+ blockConnection: true
116
+ blockTimeMS: 15
117
+ - name: listDatabases
118
+ object: *client
119
+ arguments:
120
+ filter: {}
121
+
122
+
123
+ expectEvents:
124
+ - client: *client
125
+ events:
126
+ - commandStartedEvent:
127
+ commandName: listDatabases
128
+ databaseName: admin
129
+ command:
130
+ listDatabases: 1
131
+ maxTimeMS: { $$exists: false }
132
+ - description: "timeoutMS can be configured on a MongoClient - listDatabaseNames on client"
133
+ operations:
134
+ - name: createEntities
135
+ object: testRunner
136
+ arguments:
137
+ entities:
138
+ - client:
139
+ id: &client client
140
+ uriOptions:
141
+ timeoutMS: 250
142
+ useMultipleMongoses: false
143
+ observeEvents:
144
+ - commandStartedEvent
145
+ - database:
146
+ id: &database database
147
+ client: *client
148
+ databaseName: *databaseName
149
+ - collection:
150
+ id: &collection collection
151
+ database: *database
152
+ collectionName: *collectionName
153
+ - name: failPoint
154
+ object: testRunner
155
+ arguments:
156
+ client: *failPointClient
157
+ failPoint:
158
+ configureFailPoint: failCommand
159
+ # Use "times: 2" to workaround a quirk in Python on Windows where
160
+ # socket I/O can timeout ~20ms earlier than expected. With
161
+ # "times: 1" the retry would succeed within the remaining ~20ms.
162
+ mode: { times: 2 }
163
+ data:
164
+ failCommands: ["listDatabases"]
165
+ blockConnection: true
166
+ blockTimeMS: 350
167
+ - name: listDatabaseNames
168
+ object: *client
169
+
170
+ expectError:
171
+ isTimeoutError: true
172
+ expectEvents:
173
+ - client: *client
174
+ events:
175
+ - commandStartedEvent:
176
+ commandName: listDatabases
177
+ databaseName: admin
178
+ command:
179
+ listDatabases: 1
180
+ maxTimeMS: { $$type: ["int", "long"] }
181
+ - description: "timeoutMS can be set to 0 on a MongoClient - listDatabaseNames on client"
182
+ operations:
183
+ - name: createEntities
184
+ object: testRunner
185
+ arguments:
186
+ entities:
187
+ - client:
188
+ id: &client client
189
+ uriOptions:
190
+ timeoutMS: 0
191
+ useMultipleMongoses: false
192
+ observeEvents:
193
+ - commandStartedEvent
194
+ ignoreCommandMonitoringEvents:
195
+ - killCursors
196
+ - database:
197
+ id: &database database
198
+ client: *client
199
+ databaseName: *databaseName
200
+ - collection:
201
+ id: &collection collection
202
+ database: *database
203
+ collectionName: *collectionName
204
+ - name: failPoint
205
+ object: testRunner
206
+ arguments:
207
+ client: *failPointClient
208
+ failPoint:
209
+ configureFailPoint: failCommand
210
+ mode: { times: 1 }
211
+ data:
212
+ failCommands: ["listDatabases"]
213
+ blockConnection: true
214
+ blockTimeMS: 15
215
+ - name: listDatabaseNames
216
+ object: *client
217
+
218
+
219
+ expectEvents:
220
+ - client: *client
221
+ events:
222
+ - commandStartedEvent:
223
+ commandName: listDatabases
224
+ databaseName: admin
225
+ command:
226
+ listDatabases: 1
227
+ maxTimeMS: { $$exists: false }
228
+ - description: "timeoutMS can be configured on a MongoClient - createChangeStream on client"
229
+ operations:
230
+ - name: createEntities
231
+ object: testRunner
232
+ arguments:
233
+ entities:
234
+ - client:
235
+ id: &client client
236
+ uriOptions:
237
+ timeoutMS: 250
238
+ useMultipleMongoses: false
239
+ observeEvents:
240
+ - commandStartedEvent
241
+ - database:
242
+ id: &database database
243
+ client: *client
244
+ databaseName: *databaseName
245
+ - collection:
246
+ id: &collection collection
247
+ database: *database
248
+ collectionName: *collectionName
249
+ - name: failPoint
250
+ object: testRunner
251
+ arguments:
252
+ client: *failPointClient
253
+ failPoint:
254
+ configureFailPoint: failCommand
255
+ # Use "times: 2" to workaround a quirk in Python on Windows where
256
+ # socket I/O can timeout ~20ms earlier than expected. With
257
+ # "times: 1" the retry would succeed within the remaining ~20ms.
258
+ mode: { times: 2 }
259
+ data:
260
+ failCommands: ["aggregate"]
261
+ blockConnection: true
262
+ blockTimeMS: 350
263
+ - name: createChangeStream
264
+ object: *client
265
+ arguments:
266
+ pipeline: []
267
+
268
+ expectError:
269
+ isTimeoutError: true
270
+ expectEvents:
271
+ - client: *client
272
+ events:
273
+ - commandStartedEvent:
274
+ commandName: aggregate
275
+ databaseName: admin
276
+ command:
277
+ aggregate: 1
278
+ maxTimeMS: { $$type: ["int", "long"] }
279
+ - description: "timeoutMS can be set to 0 on a MongoClient - createChangeStream on client"
280
+ operations:
281
+ - name: createEntities
282
+ object: testRunner
283
+ arguments:
284
+ entities:
285
+ - client:
286
+ id: &client client
287
+ uriOptions:
288
+ timeoutMS: 0
289
+ useMultipleMongoses: false
290
+ observeEvents:
291
+ - commandStartedEvent
292
+ ignoreCommandMonitoringEvents:
293
+ - killCursors
294
+ - database:
295
+ id: &database database
296
+ client: *client
297
+ databaseName: *databaseName
298
+ - collection:
299
+ id: &collection collection
300
+ database: *database
301
+ collectionName: *collectionName
302
+ - name: failPoint
303
+ object: testRunner
304
+ arguments:
305
+ client: *failPointClient
306
+ failPoint:
307
+ configureFailPoint: failCommand
308
+ mode: { times: 1 }
309
+ data:
310
+ failCommands: ["aggregate"]
311
+ blockConnection: true
312
+ blockTimeMS: 15
313
+ - name: createChangeStream
314
+ object: *client
315
+ arguments:
316
+ pipeline: []
317
+
318
+
319
+ expectEvents:
320
+ - client: *client
321
+ events:
322
+ - commandStartedEvent:
323
+ commandName: aggregate
324
+ databaseName: admin
325
+ command:
326
+ aggregate: 1
327
+ maxTimeMS: { $$exists: false }
328
+ - description: "timeoutMS can be configured on a MongoClient - aggregate on database"
329
+ operations:
330
+ - name: createEntities
331
+ object: testRunner
332
+ arguments:
333
+ entities:
334
+ - client:
335
+ id: &client client
336
+ uriOptions:
337
+ timeoutMS: 250
338
+ useMultipleMongoses: false
339
+ observeEvents:
340
+ - commandStartedEvent
341
+ - database:
342
+ id: &database database
343
+ client: *client
344
+ databaseName: *databaseName
345
+ - collection:
346
+ id: &collection collection
347
+ database: *database
348
+ collectionName: *collectionName
349
+ - name: failPoint
350
+ object: testRunner
351
+ arguments:
352
+ client: *failPointClient
353
+ failPoint:
354
+ configureFailPoint: failCommand
355
+ # Use "times: 2" to workaround a quirk in Python on Windows where
356
+ # socket I/O can timeout ~20ms earlier than expected. With
357
+ # "times: 1" the retry would succeed within the remaining ~20ms.
358
+ mode: { times: 2 }
359
+ data:
360
+ failCommands: ["aggregate"]
361
+ blockConnection: true
362
+ blockTimeMS: 350
363
+ - name: aggregate
364
+ object: *database
365
+ arguments:
366
+ pipeline: [ { $listLocalSessions: {} }, { $limit: 1 } ]
367
+
368
+ expectError:
369
+ isTimeoutError: true
370
+ expectEvents:
371
+ - client: *client
372
+ events:
373
+ - commandStartedEvent:
374
+ commandName: aggregate
375
+ databaseName: *databaseName
376
+ command:
377
+ aggregate: 1
378
+ maxTimeMS: { $$type: ["int", "long"] }
379
+ - description: "timeoutMS can be set to 0 on a MongoClient - aggregate on database"
380
+ operations:
381
+ - name: createEntities
382
+ object: testRunner
383
+ arguments:
384
+ entities:
385
+ - client:
386
+ id: &client client
387
+ uriOptions:
388
+ timeoutMS: 0
389
+ useMultipleMongoses: false
390
+ observeEvents:
391
+ - commandStartedEvent
392
+ ignoreCommandMonitoringEvents:
393
+ - killCursors
394
+ - database:
395
+ id: &database database
396
+ client: *client
397
+ databaseName: *databaseName
398
+ - collection:
399
+ id: &collection collection
400
+ database: *database
401
+ collectionName: *collectionName
402
+ - name: failPoint
403
+ object: testRunner
404
+ arguments:
405
+ client: *failPointClient
406
+ failPoint:
407
+ configureFailPoint: failCommand
408
+ mode: { times: 1 }
409
+ data:
410
+ failCommands: ["aggregate"]
411
+ blockConnection: true
412
+ blockTimeMS: 15
413
+ - name: aggregate
414
+ object: *database
415
+ arguments:
416
+ pipeline: [ { $listLocalSessions: {} }, { $limit: 1 } ]
417
+
418
+
419
+ expectEvents:
420
+ - client: *client
421
+ events:
422
+ - commandStartedEvent:
423
+ commandName: aggregate
424
+ databaseName: *databaseName
425
+ command:
426
+ aggregate: 1
427
+ maxTimeMS: { $$exists: false }
428
+ - description: "timeoutMS can be configured on a MongoClient - listCollections on database"
429
+ operations:
430
+ - name: createEntities
431
+ object: testRunner
432
+ arguments:
433
+ entities:
434
+ - client:
435
+ id: &client client
436
+ uriOptions:
437
+ timeoutMS: 250
438
+ useMultipleMongoses: false
439
+ observeEvents:
440
+ - commandStartedEvent
441
+ - database:
442
+ id: &database database
443
+ client: *client
444
+ databaseName: *databaseName
445
+ - collection:
446
+ id: &collection collection
447
+ database: *database
448
+ collectionName: *collectionName
449
+ - name: failPoint
450
+ object: testRunner
451
+ arguments:
452
+ client: *failPointClient
453
+ failPoint:
454
+ configureFailPoint: failCommand
455
+ # Use "times: 2" to workaround a quirk in Python on Windows where
456
+ # socket I/O can timeout ~20ms earlier than expected. With
457
+ # "times: 1" the retry would succeed within the remaining ~20ms.
458
+ mode: { times: 2 }
459
+ data:
460
+ failCommands: ["listCollections"]
461
+ blockConnection: true
462
+ blockTimeMS: 350
463
+ - name: listCollections
464
+ object: *database
465
+ arguments:
466
+ filter: {}
467
+
468
+ expectError:
469
+ isTimeoutError: true
470
+ expectEvents:
471
+ - client: *client
472
+ events:
473
+ - commandStartedEvent:
474
+ commandName: listCollections
475
+ databaseName: *databaseName
476
+ command:
477
+ listCollections: 1
478
+ maxTimeMS: { $$type: ["int", "long"] }
479
+ - description: "timeoutMS can be set to 0 on a MongoClient - listCollections on database"
480
+ operations:
481
+ - name: createEntities
482
+ object: testRunner
483
+ arguments:
484
+ entities:
485
+ - client:
486
+ id: &client client
487
+ uriOptions:
488
+ timeoutMS: 0
489
+ useMultipleMongoses: false
490
+ observeEvents:
491
+ - commandStartedEvent
492
+ ignoreCommandMonitoringEvents:
493
+ - killCursors
494
+ - database:
495
+ id: &database database
496
+ client: *client
497
+ databaseName: *databaseName
498
+ - collection:
499
+ id: &collection collection
500
+ database: *database
501
+ collectionName: *collectionName
502
+ - name: failPoint
503
+ object: testRunner
504
+ arguments:
505
+ client: *failPointClient
506
+ failPoint:
507
+ configureFailPoint: failCommand
508
+ mode: { times: 1 }
509
+ data:
510
+ failCommands: ["listCollections"]
511
+ blockConnection: true
512
+ blockTimeMS: 15
513
+ - name: listCollections
514
+ object: *database
515
+ arguments:
516
+ filter: {}
517
+
518
+
519
+ expectEvents:
520
+ - client: *client
521
+ events:
522
+ - commandStartedEvent:
523
+ commandName: listCollections
524
+ databaseName: *databaseName
525
+ command:
526
+ listCollections: 1
527
+ maxTimeMS: { $$exists: false }
528
+ - description: "timeoutMS can be configured on a MongoClient - listCollectionNames on database"
529
+ operations:
530
+ - name: createEntities
531
+ object: testRunner
532
+ arguments:
533
+ entities:
534
+ - client:
535
+ id: &client client
536
+ uriOptions:
537
+ timeoutMS: 250
538
+ useMultipleMongoses: false
539
+ observeEvents:
540
+ - commandStartedEvent
541
+ - database:
542
+ id: &database database
543
+ client: *client
544
+ databaseName: *databaseName
545
+ - collection:
546
+ id: &collection collection
547
+ database: *database
548
+ collectionName: *collectionName
549
+ - name: failPoint
550
+ object: testRunner
551
+ arguments:
552
+ client: *failPointClient
553
+ failPoint:
554
+ configureFailPoint: failCommand
555
+ # Use "times: 2" to workaround a quirk in Python on Windows where
556
+ # socket I/O can timeout ~20ms earlier than expected. With
557
+ # "times: 1" the retry would succeed within the remaining ~20ms.
558
+ mode: { times: 2 }
559
+ data:
560
+ failCommands: ["listCollections"]
561
+ blockConnection: true
562
+ blockTimeMS: 350
563
+ - name: listCollectionNames
564
+ object: *database
565
+ arguments:
566
+ filter: {}
567
+
568
+ expectError:
569
+ isTimeoutError: true
570
+ expectEvents:
571
+ - client: *client
572
+ events:
573
+ - commandStartedEvent:
574
+ commandName: listCollections
575
+ databaseName: *databaseName
576
+ command:
577
+ listCollections: 1
578
+ maxTimeMS: { $$type: ["int", "long"] }
579
+ - description: "timeoutMS can be set to 0 on a MongoClient - listCollectionNames on database"
580
+ operations:
581
+ - name: createEntities
582
+ object: testRunner
583
+ arguments:
584
+ entities:
585
+ - client:
586
+ id: &client client
587
+ uriOptions:
588
+ timeoutMS: 0
589
+ useMultipleMongoses: false
590
+ observeEvents:
591
+ - commandStartedEvent
592
+ ignoreCommandMonitoringEvents:
593
+ - killCursors
594
+ - database:
595
+ id: &database database
596
+ client: *client
597
+ databaseName: *databaseName
598
+ - collection:
599
+ id: &collection collection
600
+ database: *database
601
+ collectionName: *collectionName
602
+ - name: failPoint
603
+ object: testRunner
604
+ arguments:
605
+ client: *failPointClient
606
+ failPoint:
607
+ configureFailPoint: failCommand
608
+ mode: { times: 1 }
609
+ data:
610
+ failCommands: ["listCollections"]
611
+ blockConnection: true
612
+ blockTimeMS: 15
613
+ - name: listCollectionNames
614
+ object: *database
615
+ arguments:
616
+ filter: {}
617
+
618
+
619
+ expectEvents:
620
+ - client: *client
621
+ events:
622
+ - commandStartedEvent:
623
+ commandName: listCollections
624
+ databaseName: *databaseName
625
+ command:
626
+ listCollections: 1
627
+ maxTimeMS: { $$exists: false }
628
+ - description: "timeoutMS can be configured on a MongoClient - runCommand on database"
629
+ operations:
630
+ - name: createEntities
631
+ object: testRunner
632
+ arguments:
633
+ entities:
634
+ - client:
635
+ id: &client client
636
+ uriOptions:
637
+ timeoutMS: 250
638
+ useMultipleMongoses: false
639
+ observeEvents:
640
+ - commandStartedEvent
641
+ - database:
642
+ id: &database database
643
+ client: *client
644
+ databaseName: *databaseName
645
+ - collection:
646
+ id: &collection collection
647
+ database: *database
648
+ collectionName: *collectionName
649
+ - name: failPoint
650
+ object: testRunner
651
+ arguments:
652
+ client: *failPointClient
653
+ failPoint:
654
+ configureFailPoint: failCommand
655
+ # Use "times: 2" to workaround a quirk in Python on Windows where
656
+ # socket I/O can timeout ~20ms earlier than expected. With
657
+ # "times: 1" the retry would succeed within the remaining ~20ms.
658
+ mode: { times: 2 }
659
+ data:
660
+ failCommands: ["ping"]
661
+ blockConnection: true
662
+ blockTimeMS: 350
663
+ - name: runCommand
664
+ object: *database
665
+ arguments:
666
+ command: { ping: 1 }
667
+ commandName: ping
668
+
669
+ expectError:
670
+ isTimeoutError: true
671
+ expectEvents:
672
+ - client: *client
673
+ events:
674
+ - commandStartedEvent:
675
+ commandName: ping
676
+ databaseName: *databaseName
677
+ command:
678
+ ping: 1
679
+ maxTimeMS: { $$type: ["int", "long"] }
680
+ - description: "timeoutMS can be set to 0 on a MongoClient - runCommand on database"
681
+ operations:
682
+ - name: createEntities
683
+ object: testRunner
684
+ arguments:
685
+ entities:
686
+ - client:
687
+ id: &client client
688
+ uriOptions:
689
+ timeoutMS: 0
690
+ useMultipleMongoses: false
691
+ observeEvents:
692
+ - commandStartedEvent
693
+ ignoreCommandMonitoringEvents:
694
+ - killCursors
695
+ - database:
696
+ id: &database database
697
+ client: *client
698
+ databaseName: *databaseName
699
+ - collection:
700
+ id: &collection collection
701
+ database: *database
702
+ collectionName: *collectionName
703
+ - name: failPoint
704
+ object: testRunner
705
+ arguments:
706
+ client: *failPointClient
707
+ failPoint:
708
+ configureFailPoint: failCommand
709
+ mode: { times: 1 }
710
+ data:
711
+ failCommands: ["ping"]
712
+ blockConnection: true
713
+ blockTimeMS: 15
714
+ - name: runCommand
715
+ object: *database
716
+ arguments:
717
+ command: { ping: 1 }
718
+ commandName: ping
719
+
720
+
721
+ expectEvents:
722
+ - client: *client
723
+ events:
724
+ - commandStartedEvent:
725
+ commandName: ping
726
+ databaseName: *databaseName
727
+ command:
728
+ ping: 1
729
+ maxTimeMS: { $$exists: false }
730
+ - description: "timeoutMS can be configured on a MongoClient - createChangeStream on database"
731
+ operations:
732
+ - name: createEntities
733
+ object: testRunner
734
+ arguments:
735
+ entities:
736
+ - client:
737
+ id: &client client
738
+ uriOptions:
739
+ timeoutMS: 250
740
+ useMultipleMongoses: false
741
+ observeEvents:
742
+ - commandStartedEvent
743
+ - database:
744
+ id: &database database
745
+ client: *client
746
+ databaseName: *databaseName
747
+ - collection:
748
+ id: &collection collection
749
+ database: *database
750
+ collectionName: *collectionName
751
+ - name: failPoint
752
+ object: testRunner
753
+ arguments:
754
+ client: *failPointClient
755
+ failPoint:
756
+ configureFailPoint: failCommand
757
+ # Use "times: 2" to workaround a quirk in Python on Windows where
758
+ # socket I/O can timeout ~20ms earlier than expected. With
759
+ # "times: 1" the retry would succeed within the remaining ~20ms.
760
+ mode: { times: 2 }
761
+ data:
762
+ failCommands: ["aggregate"]
763
+ blockConnection: true
764
+ blockTimeMS: 350
765
+ - name: createChangeStream
766
+ object: *database
767
+ arguments:
768
+ pipeline: []
769
+
770
+ expectError:
771
+ isTimeoutError: true
772
+ expectEvents:
773
+ - client: *client
774
+ events:
775
+ - commandStartedEvent:
776
+ commandName: aggregate
777
+ databaseName: *databaseName
778
+ command:
779
+ aggregate: 1
780
+ maxTimeMS: { $$type: ["int", "long"] }
781
+ - description: "timeoutMS can be set to 0 on a MongoClient - createChangeStream on database"
782
+ operations:
783
+ - name: createEntities
784
+ object: testRunner
785
+ arguments:
786
+ entities:
787
+ - client:
788
+ id: &client client
789
+ uriOptions:
790
+ timeoutMS: 0
791
+ useMultipleMongoses: false
792
+ observeEvents:
793
+ - commandStartedEvent
794
+ ignoreCommandMonitoringEvents:
795
+ - killCursors
796
+ - database:
797
+ id: &database database
798
+ client: *client
799
+ databaseName: *databaseName
800
+ - collection:
801
+ id: &collection collection
802
+ database: *database
803
+ collectionName: *collectionName
804
+ - name: failPoint
805
+ object: testRunner
806
+ arguments:
807
+ client: *failPointClient
808
+ failPoint:
809
+ configureFailPoint: failCommand
810
+ mode: { times: 1 }
811
+ data:
812
+ failCommands: ["aggregate"]
813
+ blockConnection: true
814
+ blockTimeMS: 15
815
+ - name: createChangeStream
816
+ object: *database
817
+ arguments:
818
+ pipeline: []
819
+
820
+
821
+ expectEvents:
822
+ - client: *client
823
+ events:
824
+ - commandStartedEvent:
825
+ commandName: aggregate
826
+ databaseName: *databaseName
827
+ command:
828
+ aggregate: 1
829
+ maxTimeMS: { $$exists: false }
830
+ - description: "timeoutMS can be configured on a MongoClient - aggregate on collection"
831
+ operations:
832
+ - name: createEntities
833
+ object: testRunner
834
+ arguments:
835
+ entities:
836
+ - client:
837
+ id: &client client
838
+ uriOptions:
839
+ timeoutMS: 250
840
+ useMultipleMongoses: false
841
+ observeEvents:
842
+ - commandStartedEvent
843
+ - database:
844
+ id: &database database
845
+ client: *client
846
+ databaseName: *databaseName
847
+ - collection:
848
+ id: &collection collection
849
+ database: *database
850
+ collectionName: *collectionName
851
+ - name: failPoint
852
+ object: testRunner
853
+ arguments:
854
+ client: *failPointClient
855
+ failPoint:
856
+ configureFailPoint: failCommand
857
+ # Use "times: 2" to workaround a quirk in Python on Windows where
858
+ # socket I/O can timeout ~20ms earlier than expected. With
859
+ # "times: 1" the retry would succeed within the remaining ~20ms.
860
+ mode: { times: 2 }
861
+ data:
862
+ failCommands: ["aggregate"]
863
+ blockConnection: true
864
+ blockTimeMS: 350
865
+ - name: aggregate
866
+ object: *collection
867
+ arguments:
868
+ pipeline: []
869
+
870
+ expectError:
871
+ isTimeoutError: true
872
+ expectEvents:
873
+ - client: *client
874
+ events:
875
+ - commandStartedEvent:
876
+ commandName: aggregate
877
+ databaseName: *databaseName
878
+ command:
879
+ aggregate: *collectionName
880
+ maxTimeMS: { $$type: ["int", "long"] }
881
+ - description: "timeoutMS can be set to 0 on a MongoClient - aggregate on collection"
882
+ operations:
883
+ - name: createEntities
884
+ object: testRunner
885
+ arguments:
886
+ entities:
887
+ - client:
888
+ id: &client client
889
+ uriOptions:
890
+ timeoutMS: 0
891
+ useMultipleMongoses: false
892
+ observeEvents:
893
+ - commandStartedEvent
894
+ ignoreCommandMonitoringEvents:
895
+ - killCursors
896
+ - database:
897
+ id: &database database
898
+ client: *client
899
+ databaseName: *databaseName
900
+ - collection:
901
+ id: &collection collection
902
+ database: *database
903
+ collectionName: *collectionName
904
+ - name: failPoint
905
+ object: testRunner
906
+ arguments:
907
+ client: *failPointClient
908
+ failPoint:
909
+ configureFailPoint: failCommand
910
+ mode: { times: 1 }
911
+ data:
912
+ failCommands: ["aggregate"]
913
+ blockConnection: true
914
+ blockTimeMS: 15
915
+ - name: aggregate
916
+ object: *collection
917
+ arguments:
918
+ pipeline: []
919
+
920
+
921
+ expectEvents:
922
+ - client: *client
923
+ events:
924
+ - commandStartedEvent:
925
+ commandName: aggregate
926
+ databaseName: *databaseName
927
+ command:
928
+ aggregate: *collectionName
929
+ maxTimeMS: { $$exists: false }
930
+ - description: "timeoutMS can be configured on a MongoClient - count on collection"
931
+ operations:
932
+ - name: createEntities
933
+ object: testRunner
934
+ arguments:
935
+ entities:
936
+ - client:
937
+ id: &client client
938
+ uriOptions:
939
+ timeoutMS: 250
940
+ useMultipleMongoses: false
941
+ observeEvents:
942
+ - commandStartedEvent
943
+ - database:
944
+ id: &database database
945
+ client: *client
946
+ databaseName: *databaseName
947
+ - collection:
948
+ id: &collection collection
949
+ database: *database
950
+ collectionName: *collectionName
951
+ - name: failPoint
952
+ object: testRunner
953
+ arguments:
954
+ client: *failPointClient
955
+ failPoint:
956
+ configureFailPoint: failCommand
957
+ # Use "times: 2" to workaround a quirk in Python on Windows where
958
+ # socket I/O can timeout ~20ms earlier than expected. With
959
+ # "times: 1" the retry would succeed within the remaining ~20ms.
960
+ mode: { times: 2 }
961
+ data:
962
+ failCommands: ["count"]
963
+ blockConnection: true
964
+ blockTimeMS: 350
965
+ - name: count
966
+ object: *collection
967
+ arguments:
968
+ filter: {}
969
+
970
+ expectError:
971
+ isTimeoutError: true
972
+ expectEvents:
973
+ - client: *client
974
+ events:
975
+ - commandStartedEvent:
976
+ commandName: count
977
+ databaseName: *databaseName
978
+ command:
979
+ count: *collectionName
980
+ maxTimeMS: { $$type: ["int", "long"] }
981
+ - description: "timeoutMS can be set to 0 on a MongoClient - count on collection"
982
+ operations:
983
+ - name: createEntities
984
+ object: testRunner
985
+ arguments:
986
+ entities:
987
+ - client:
988
+ id: &client client
989
+ uriOptions:
990
+ timeoutMS: 0
991
+ useMultipleMongoses: false
992
+ observeEvents:
993
+ - commandStartedEvent
994
+ ignoreCommandMonitoringEvents:
995
+ - killCursors
996
+ - database:
997
+ id: &database database
998
+ client: *client
999
+ databaseName: *databaseName
1000
+ - collection:
1001
+ id: &collection collection
1002
+ database: *database
1003
+ collectionName: *collectionName
1004
+ - name: failPoint
1005
+ object: testRunner
1006
+ arguments:
1007
+ client: *failPointClient
1008
+ failPoint:
1009
+ configureFailPoint: failCommand
1010
+ mode: { times: 1 }
1011
+ data:
1012
+ failCommands: ["count"]
1013
+ blockConnection: true
1014
+ blockTimeMS: 15
1015
+ - name: count
1016
+ object: *collection
1017
+ arguments:
1018
+ filter: {}
1019
+
1020
+
1021
+ expectEvents:
1022
+ - client: *client
1023
+ events:
1024
+ - commandStartedEvent:
1025
+ commandName: count
1026
+ databaseName: *databaseName
1027
+ command:
1028
+ count: *collectionName
1029
+ maxTimeMS: { $$exists: false }
1030
+ - description: "timeoutMS can be configured on a MongoClient - countDocuments on collection"
1031
+ operations:
1032
+ - name: createEntities
1033
+ object: testRunner
1034
+ arguments:
1035
+ entities:
1036
+ - client:
1037
+ id: &client client
1038
+ uriOptions:
1039
+ timeoutMS: 250
1040
+ useMultipleMongoses: false
1041
+ observeEvents:
1042
+ - commandStartedEvent
1043
+ - database:
1044
+ id: &database database
1045
+ client: *client
1046
+ databaseName: *databaseName
1047
+ - collection:
1048
+ id: &collection collection
1049
+ database: *database
1050
+ collectionName: *collectionName
1051
+ - name: failPoint
1052
+ object: testRunner
1053
+ arguments:
1054
+ client: *failPointClient
1055
+ failPoint:
1056
+ configureFailPoint: failCommand
1057
+ # Use "times: 2" to workaround a quirk in Python on Windows where
1058
+ # socket I/O can timeout ~20ms earlier than expected. With
1059
+ # "times: 1" the retry would succeed within the remaining ~20ms.
1060
+ mode: { times: 2 }
1061
+ data:
1062
+ failCommands: ["aggregate"]
1063
+ blockConnection: true
1064
+ blockTimeMS: 350
1065
+ - name: countDocuments
1066
+ object: *collection
1067
+ arguments:
1068
+ filter: {}
1069
+
1070
+ expectError:
1071
+ isTimeoutError: true
1072
+ expectEvents:
1073
+ - client: *client
1074
+ events:
1075
+ - commandStartedEvent:
1076
+ commandName: aggregate
1077
+ databaseName: *databaseName
1078
+ command:
1079
+ aggregate: *collectionName
1080
+ maxTimeMS: { $$type: ["int", "long"] }
1081
+ - description: "timeoutMS can be set to 0 on a MongoClient - countDocuments on collection"
1082
+ operations:
1083
+ - name: createEntities
1084
+ object: testRunner
1085
+ arguments:
1086
+ entities:
1087
+ - client:
1088
+ id: &client client
1089
+ uriOptions:
1090
+ timeoutMS: 0
1091
+ useMultipleMongoses: false
1092
+ observeEvents:
1093
+ - commandStartedEvent
1094
+ ignoreCommandMonitoringEvents:
1095
+ - killCursors
1096
+ - database:
1097
+ id: &database database
1098
+ client: *client
1099
+ databaseName: *databaseName
1100
+ - collection:
1101
+ id: &collection collection
1102
+ database: *database
1103
+ collectionName: *collectionName
1104
+ - name: failPoint
1105
+ object: testRunner
1106
+ arguments:
1107
+ client: *failPointClient
1108
+ failPoint:
1109
+ configureFailPoint: failCommand
1110
+ mode: { times: 1 }
1111
+ data:
1112
+ failCommands: ["aggregate"]
1113
+ blockConnection: true
1114
+ blockTimeMS: 15
1115
+ - name: countDocuments
1116
+ object: *collection
1117
+ arguments:
1118
+ filter: {}
1119
+
1120
+
1121
+ expectEvents:
1122
+ - client: *client
1123
+ events:
1124
+ - commandStartedEvent:
1125
+ commandName: aggregate
1126
+ databaseName: *databaseName
1127
+ command:
1128
+ aggregate: *collectionName
1129
+ maxTimeMS: { $$exists: false }
1130
+ - description: "timeoutMS can be configured on a MongoClient - estimatedDocumentCount on collection"
1131
+ operations:
1132
+ - name: createEntities
1133
+ object: testRunner
1134
+ arguments:
1135
+ entities:
1136
+ - client:
1137
+ id: &client client
1138
+ uriOptions:
1139
+ timeoutMS: 250
1140
+ useMultipleMongoses: false
1141
+ observeEvents:
1142
+ - commandStartedEvent
1143
+ - database:
1144
+ id: &database database
1145
+ client: *client
1146
+ databaseName: *databaseName
1147
+ - collection:
1148
+ id: &collection collection
1149
+ database: *database
1150
+ collectionName: *collectionName
1151
+ - name: failPoint
1152
+ object: testRunner
1153
+ arguments:
1154
+ client: *failPointClient
1155
+ failPoint:
1156
+ configureFailPoint: failCommand
1157
+ # Use "times: 2" to workaround a quirk in Python on Windows where
1158
+ # socket I/O can timeout ~20ms earlier than expected. With
1159
+ # "times: 1" the retry would succeed within the remaining ~20ms.
1160
+ mode: { times: 2 }
1161
+ data:
1162
+ failCommands: ["count"]
1163
+ blockConnection: true
1164
+ blockTimeMS: 350
1165
+ - name: estimatedDocumentCount
1166
+ object: *collection
1167
+
1168
+ expectError:
1169
+ isTimeoutError: true
1170
+ expectEvents:
1171
+ - client: *client
1172
+ events:
1173
+ - commandStartedEvent:
1174
+ commandName: count
1175
+ databaseName: *databaseName
1176
+ command:
1177
+ count: *collectionName
1178
+ maxTimeMS: { $$type: ["int", "long"] }
1179
+ - description: "timeoutMS can be set to 0 on a MongoClient - estimatedDocumentCount on collection"
1180
+ operations:
1181
+ - name: createEntities
1182
+ object: testRunner
1183
+ arguments:
1184
+ entities:
1185
+ - client:
1186
+ id: &client client
1187
+ uriOptions:
1188
+ timeoutMS: 0
1189
+ useMultipleMongoses: false
1190
+ observeEvents:
1191
+ - commandStartedEvent
1192
+ ignoreCommandMonitoringEvents:
1193
+ - killCursors
1194
+ - database:
1195
+ id: &database database
1196
+ client: *client
1197
+ databaseName: *databaseName
1198
+ - collection:
1199
+ id: &collection collection
1200
+ database: *database
1201
+ collectionName: *collectionName
1202
+ - name: failPoint
1203
+ object: testRunner
1204
+ arguments:
1205
+ client: *failPointClient
1206
+ failPoint:
1207
+ configureFailPoint: failCommand
1208
+ mode: { times: 1 }
1209
+ data:
1210
+ failCommands: ["count"]
1211
+ blockConnection: true
1212
+ blockTimeMS: 15
1213
+ - name: estimatedDocumentCount
1214
+ object: *collection
1215
+
1216
+
1217
+ expectEvents:
1218
+ - client: *client
1219
+ events:
1220
+ - commandStartedEvent:
1221
+ commandName: count
1222
+ databaseName: *databaseName
1223
+ command:
1224
+ count: *collectionName
1225
+ maxTimeMS: { $$exists: false }
1226
+ - description: "timeoutMS can be configured on a MongoClient - distinct on collection"
1227
+ operations:
1228
+ - name: createEntities
1229
+ object: testRunner
1230
+ arguments:
1231
+ entities:
1232
+ - client:
1233
+ id: &client client
1234
+ uriOptions:
1235
+ timeoutMS: 250
1236
+ useMultipleMongoses: false
1237
+ observeEvents:
1238
+ - commandStartedEvent
1239
+ - database:
1240
+ id: &database database
1241
+ client: *client
1242
+ databaseName: *databaseName
1243
+ - collection:
1244
+ id: &collection collection
1245
+ database: *database
1246
+ collectionName: *collectionName
1247
+ - name: failPoint
1248
+ object: testRunner
1249
+ arguments:
1250
+ client: *failPointClient
1251
+ failPoint:
1252
+ configureFailPoint: failCommand
1253
+ # Use "times: 2" to workaround a quirk in Python on Windows where
1254
+ # socket I/O can timeout ~20ms earlier than expected. With
1255
+ # "times: 1" the retry would succeed within the remaining ~20ms.
1256
+ mode: { times: 2 }
1257
+ data:
1258
+ failCommands: ["distinct"]
1259
+ blockConnection: true
1260
+ blockTimeMS: 350
1261
+ - name: distinct
1262
+ object: *collection
1263
+ arguments:
1264
+ fieldName: x
1265
+ filter: {}
1266
+
1267
+ expectError:
1268
+ isTimeoutError: true
1269
+ expectEvents:
1270
+ - client: *client
1271
+ events:
1272
+ - commandStartedEvent:
1273
+ commandName: distinct
1274
+ databaseName: *databaseName
1275
+ command:
1276
+ distinct: *collectionName
1277
+ maxTimeMS: { $$type: ["int", "long"] }
1278
+ - description: "timeoutMS can be set to 0 on a MongoClient - distinct on collection"
1279
+ operations:
1280
+ - name: createEntities
1281
+ object: testRunner
1282
+ arguments:
1283
+ entities:
1284
+ - client:
1285
+ id: &client client
1286
+ uriOptions:
1287
+ timeoutMS: 0
1288
+ useMultipleMongoses: false
1289
+ observeEvents:
1290
+ - commandStartedEvent
1291
+ ignoreCommandMonitoringEvents:
1292
+ - killCursors
1293
+ - database:
1294
+ id: &database database
1295
+ client: *client
1296
+ databaseName: *databaseName
1297
+ - collection:
1298
+ id: &collection collection
1299
+ database: *database
1300
+ collectionName: *collectionName
1301
+ - name: failPoint
1302
+ object: testRunner
1303
+ arguments:
1304
+ client: *failPointClient
1305
+ failPoint:
1306
+ configureFailPoint: failCommand
1307
+ mode: { times: 1 }
1308
+ data:
1309
+ failCommands: ["distinct"]
1310
+ blockConnection: true
1311
+ blockTimeMS: 15
1312
+ - name: distinct
1313
+ object: *collection
1314
+ arguments:
1315
+ fieldName: x
1316
+ filter: {}
1317
+
1318
+
1319
+ expectEvents:
1320
+ - client: *client
1321
+ events:
1322
+ - commandStartedEvent:
1323
+ commandName: distinct
1324
+ databaseName: *databaseName
1325
+ command:
1326
+ distinct: *collectionName
1327
+ maxTimeMS: { $$exists: false }
1328
+ - description: "timeoutMS can be configured on a MongoClient - find on collection"
1329
+ operations:
1330
+ - name: createEntities
1331
+ object: testRunner
1332
+ arguments:
1333
+ entities:
1334
+ - client:
1335
+ id: &client client
1336
+ uriOptions:
1337
+ timeoutMS: 250
1338
+ useMultipleMongoses: false
1339
+ observeEvents:
1340
+ - commandStartedEvent
1341
+ - database:
1342
+ id: &database database
1343
+ client: *client
1344
+ databaseName: *databaseName
1345
+ - collection:
1346
+ id: &collection collection
1347
+ database: *database
1348
+ collectionName: *collectionName
1349
+ - name: failPoint
1350
+ object: testRunner
1351
+ arguments:
1352
+ client: *failPointClient
1353
+ failPoint:
1354
+ configureFailPoint: failCommand
1355
+ # Use "times: 2" to workaround a quirk in Python on Windows where
1356
+ # socket I/O can timeout ~20ms earlier than expected. With
1357
+ # "times: 1" the retry would succeed within the remaining ~20ms.
1358
+ mode: { times: 2 }
1359
+ data:
1360
+ failCommands: ["find"]
1361
+ blockConnection: true
1362
+ blockTimeMS: 350
1363
+ - name: find
1364
+ object: *collection
1365
+ arguments:
1366
+ filter: {}
1367
+
1368
+ expectError:
1369
+ isTimeoutError: true
1370
+ expectEvents:
1371
+ - client: *client
1372
+ events:
1373
+ - commandStartedEvent:
1374
+ commandName: find
1375
+ databaseName: *databaseName
1376
+ command:
1377
+ find: *collectionName
1378
+ maxTimeMS: { $$type: ["int", "long"] }
1379
+ - description: "timeoutMS can be set to 0 on a MongoClient - find on collection"
1380
+ operations:
1381
+ - name: createEntities
1382
+ object: testRunner
1383
+ arguments:
1384
+ entities:
1385
+ - client:
1386
+ id: &client client
1387
+ uriOptions:
1388
+ timeoutMS: 0
1389
+ useMultipleMongoses: false
1390
+ observeEvents:
1391
+ - commandStartedEvent
1392
+ ignoreCommandMonitoringEvents:
1393
+ - killCursors
1394
+ - database:
1395
+ id: &database database
1396
+ client: *client
1397
+ databaseName: *databaseName
1398
+ - collection:
1399
+ id: &collection collection
1400
+ database: *database
1401
+ collectionName: *collectionName
1402
+ - name: failPoint
1403
+ object: testRunner
1404
+ arguments:
1405
+ client: *failPointClient
1406
+ failPoint:
1407
+ configureFailPoint: failCommand
1408
+ mode: { times: 1 }
1409
+ data:
1410
+ failCommands: ["find"]
1411
+ blockConnection: true
1412
+ blockTimeMS: 15
1413
+ - name: find
1414
+ object: *collection
1415
+ arguments:
1416
+ filter: {}
1417
+
1418
+
1419
+ expectEvents:
1420
+ - client: *client
1421
+ events:
1422
+ - commandStartedEvent:
1423
+ commandName: find
1424
+ databaseName: *databaseName
1425
+ command:
1426
+ find: *collectionName
1427
+ maxTimeMS: { $$exists: false }
1428
+ - description: "timeoutMS can be configured on a MongoClient - findOne on collection"
1429
+ operations:
1430
+ - name: createEntities
1431
+ object: testRunner
1432
+ arguments:
1433
+ entities:
1434
+ - client:
1435
+ id: &client client
1436
+ uriOptions:
1437
+ timeoutMS: 250
1438
+ useMultipleMongoses: false
1439
+ observeEvents:
1440
+ - commandStartedEvent
1441
+ - database:
1442
+ id: &database database
1443
+ client: *client
1444
+ databaseName: *databaseName
1445
+ - collection:
1446
+ id: &collection collection
1447
+ database: *database
1448
+ collectionName: *collectionName
1449
+ - name: failPoint
1450
+ object: testRunner
1451
+ arguments:
1452
+ client: *failPointClient
1453
+ failPoint:
1454
+ configureFailPoint: failCommand
1455
+ # Use "times: 2" to workaround a quirk in Python on Windows where
1456
+ # socket I/O can timeout ~20ms earlier than expected. With
1457
+ # "times: 1" the retry would succeed within the remaining ~20ms.
1458
+ mode: { times: 2 }
1459
+ data:
1460
+ failCommands: ["find"]
1461
+ blockConnection: true
1462
+ blockTimeMS: 350
1463
+ - name: findOne
1464
+ object: *collection
1465
+ arguments:
1466
+ filter: {}
1467
+
1468
+ expectError:
1469
+ isTimeoutError: true
1470
+ expectEvents:
1471
+ - client: *client
1472
+ events:
1473
+ - commandStartedEvent:
1474
+ commandName: find
1475
+ databaseName: *databaseName
1476
+ command:
1477
+ find: *collectionName
1478
+ maxTimeMS: { $$type: ["int", "long"] }
1479
+ - description: "timeoutMS can be set to 0 on a MongoClient - findOne on collection"
1480
+ operations:
1481
+ - name: createEntities
1482
+ object: testRunner
1483
+ arguments:
1484
+ entities:
1485
+ - client:
1486
+ id: &client client
1487
+ uriOptions:
1488
+ timeoutMS: 0
1489
+ useMultipleMongoses: false
1490
+ observeEvents:
1491
+ - commandStartedEvent
1492
+ ignoreCommandMonitoringEvents:
1493
+ - killCursors
1494
+ - database:
1495
+ id: &database database
1496
+ client: *client
1497
+ databaseName: *databaseName
1498
+ - collection:
1499
+ id: &collection collection
1500
+ database: *database
1501
+ collectionName: *collectionName
1502
+ - name: failPoint
1503
+ object: testRunner
1504
+ arguments:
1505
+ client: *failPointClient
1506
+ failPoint:
1507
+ configureFailPoint: failCommand
1508
+ mode: { times: 1 }
1509
+ data:
1510
+ failCommands: ["find"]
1511
+ blockConnection: true
1512
+ blockTimeMS: 15
1513
+ - name: findOne
1514
+ object: *collection
1515
+ arguments:
1516
+ filter: {}
1517
+
1518
+
1519
+ expectEvents:
1520
+ - client: *client
1521
+ events:
1522
+ - commandStartedEvent:
1523
+ commandName: find
1524
+ databaseName: *databaseName
1525
+ command:
1526
+ find: *collectionName
1527
+ maxTimeMS: { $$exists: false }
1528
+ - description: "timeoutMS can be configured on a MongoClient - listIndexes on collection"
1529
+ operations:
1530
+ - name: createEntities
1531
+ object: testRunner
1532
+ arguments:
1533
+ entities:
1534
+ - client:
1535
+ id: &client client
1536
+ uriOptions:
1537
+ timeoutMS: 250
1538
+ useMultipleMongoses: false
1539
+ observeEvents:
1540
+ - commandStartedEvent
1541
+ - database:
1542
+ id: &database database
1543
+ client: *client
1544
+ databaseName: *databaseName
1545
+ - collection:
1546
+ id: &collection collection
1547
+ database: *database
1548
+ collectionName: *collectionName
1549
+ - name: failPoint
1550
+ object: testRunner
1551
+ arguments:
1552
+ client: *failPointClient
1553
+ failPoint:
1554
+ configureFailPoint: failCommand
1555
+ # Use "times: 2" to workaround a quirk in Python on Windows where
1556
+ # socket I/O can timeout ~20ms earlier than expected. With
1557
+ # "times: 1" the retry would succeed within the remaining ~20ms.
1558
+ mode: { times: 2 }
1559
+ data:
1560
+ failCommands: ["listIndexes"]
1561
+ blockConnection: true
1562
+ blockTimeMS: 350
1563
+ - name: listIndexes
1564
+ object: *collection
1565
+
1566
+ expectError:
1567
+ isTimeoutError: true
1568
+ expectEvents:
1569
+ - client: *client
1570
+ events:
1571
+ - commandStartedEvent:
1572
+ commandName: listIndexes
1573
+ databaseName: *databaseName
1574
+ command:
1575
+ listIndexes: *collectionName
1576
+ maxTimeMS: { $$type: ["int", "long"] }
1577
+ - description: "timeoutMS can be set to 0 on a MongoClient - listIndexes on collection"
1578
+ operations:
1579
+ - name: createEntities
1580
+ object: testRunner
1581
+ arguments:
1582
+ entities:
1583
+ - client:
1584
+ id: &client client
1585
+ uriOptions:
1586
+ timeoutMS: 0
1587
+ useMultipleMongoses: false
1588
+ observeEvents:
1589
+ - commandStartedEvent
1590
+ ignoreCommandMonitoringEvents:
1591
+ - killCursors
1592
+ - database:
1593
+ id: &database database
1594
+ client: *client
1595
+ databaseName: *databaseName
1596
+ - collection:
1597
+ id: &collection collection
1598
+ database: *database
1599
+ collectionName: *collectionName
1600
+ - name: failPoint
1601
+ object: testRunner
1602
+ arguments:
1603
+ client: *failPointClient
1604
+ failPoint:
1605
+ configureFailPoint: failCommand
1606
+ mode: { times: 1 }
1607
+ data:
1608
+ failCommands: ["listIndexes"]
1609
+ blockConnection: true
1610
+ blockTimeMS: 15
1611
+ - name: listIndexes
1612
+ object: *collection
1613
+
1614
+
1615
+ expectEvents:
1616
+ - client: *client
1617
+ events:
1618
+ - commandStartedEvent:
1619
+ commandName: listIndexes
1620
+ databaseName: *databaseName
1621
+ command:
1622
+ listIndexes: *collectionName
1623
+ maxTimeMS: { $$exists: false }
1624
+ - description: "timeoutMS can be configured on a MongoClient - listIndexNames on collection"
1625
+ operations:
1626
+ - name: createEntities
1627
+ object: testRunner
1628
+ arguments:
1629
+ entities:
1630
+ - client:
1631
+ id: &client client
1632
+ uriOptions:
1633
+ timeoutMS: 250
1634
+ useMultipleMongoses: false
1635
+ observeEvents:
1636
+ - commandStartedEvent
1637
+ - database:
1638
+ id: &database database
1639
+ client: *client
1640
+ databaseName: *databaseName
1641
+ - collection:
1642
+ id: &collection collection
1643
+ database: *database
1644
+ collectionName: *collectionName
1645
+ - name: failPoint
1646
+ object: testRunner
1647
+ arguments:
1648
+ client: *failPointClient
1649
+ failPoint:
1650
+ configureFailPoint: failCommand
1651
+ # Use "times: 2" to workaround a quirk in Python on Windows where
1652
+ # socket I/O can timeout ~20ms earlier than expected. With
1653
+ # "times: 1" the retry would succeed within the remaining ~20ms.
1654
+ mode: { times: 2 }
1655
+ data:
1656
+ failCommands: ["listIndexes"]
1657
+ blockConnection: true
1658
+ blockTimeMS: 350
1659
+ - name: listIndexNames
1660
+ object: *collection
1661
+
1662
+ expectError:
1663
+ isTimeoutError: true
1664
+ expectEvents:
1665
+ - client: *client
1666
+ events:
1667
+ - commandStartedEvent:
1668
+ commandName: listIndexes
1669
+ databaseName: *databaseName
1670
+ command:
1671
+ listIndexes: *collectionName
1672
+ maxTimeMS: { $$type: ["int", "long"] }
1673
+ - description: "timeoutMS can be set to 0 on a MongoClient - listIndexNames on collection"
1674
+ operations:
1675
+ - name: createEntities
1676
+ object: testRunner
1677
+ arguments:
1678
+ entities:
1679
+ - client:
1680
+ id: &client client
1681
+ uriOptions:
1682
+ timeoutMS: 0
1683
+ useMultipleMongoses: false
1684
+ observeEvents:
1685
+ - commandStartedEvent
1686
+ ignoreCommandMonitoringEvents:
1687
+ - killCursors
1688
+ - database:
1689
+ id: &database database
1690
+ client: *client
1691
+ databaseName: *databaseName
1692
+ - collection:
1693
+ id: &collection collection
1694
+ database: *database
1695
+ collectionName: *collectionName
1696
+ - name: failPoint
1697
+ object: testRunner
1698
+ arguments:
1699
+ client: *failPointClient
1700
+ failPoint:
1701
+ configureFailPoint: failCommand
1702
+ mode: { times: 1 }
1703
+ data:
1704
+ failCommands: ["listIndexes"]
1705
+ blockConnection: true
1706
+ blockTimeMS: 15
1707
+ - name: listIndexNames
1708
+ object: *collection
1709
+
1710
+
1711
+ expectEvents:
1712
+ - client: *client
1713
+ events:
1714
+ - commandStartedEvent:
1715
+ commandName: listIndexes
1716
+ databaseName: *databaseName
1717
+ command:
1718
+ listIndexes: *collectionName
1719
+ maxTimeMS: { $$exists: false }
1720
+ - description: "timeoutMS can be configured on a MongoClient - createChangeStream on collection"
1721
+ operations:
1722
+ - name: createEntities
1723
+ object: testRunner
1724
+ arguments:
1725
+ entities:
1726
+ - client:
1727
+ id: &client client
1728
+ uriOptions:
1729
+ timeoutMS: 250
1730
+ useMultipleMongoses: false
1731
+ observeEvents:
1732
+ - commandStartedEvent
1733
+ - database:
1734
+ id: &database database
1735
+ client: *client
1736
+ databaseName: *databaseName
1737
+ - collection:
1738
+ id: &collection collection
1739
+ database: *database
1740
+ collectionName: *collectionName
1741
+ - name: failPoint
1742
+ object: testRunner
1743
+ arguments:
1744
+ client: *failPointClient
1745
+ failPoint:
1746
+ configureFailPoint: failCommand
1747
+ # Use "times: 2" to workaround a quirk in Python on Windows where
1748
+ # socket I/O can timeout ~20ms earlier than expected. With
1749
+ # "times: 1" the retry would succeed within the remaining ~20ms.
1750
+ mode: { times: 2 }
1751
+ data:
1752
+ failCommands: ["aggregate"]
1753
+ blockConnection: true
1754
+ blockTimeMS: 350
1755
+ - name: createChangeStream
1756
+ object: *collection
1757
+ arguments:
1758
+ pipeline: []
1759
+
1760
+ expectError:
1761
+ isTimeoutError: true
1762
+ expectEvents:
1763
+ - client: *client
1764
+ events:
1765
+ - commandStartedEvent:
1766
+ commandName: aggregate
1767
+ databaseName: *databaseName
1768
+ command:
1769
+ aggregate: *collectionName
1770
+ maxTimeMS: { $$type: ["int", "long"] }
1771
+ - description: "timeoutMS can be set to 0 on a MongoClient - createChangeStream on collection"
1772
+ operations:
1773
+ - name: createEntities
1774
+ object: testRunner
1775
+ arguments:
1776
+ entities:
1777
+ - client:
1778
+ id: &client client
1779
+ uriOptions:
1780
+ timeoutMS: 0
1781
+ useMultipleMongoses: false
1782
+ observeEvents:
1783
+ - commandStartedEvent
1784
+ ignoreCommandMonitoringEvents:
1785
+ - killCursors
1786
+ - database:
1787
+ id: &database database
1788
+ client: *client
1789
+ databaseName: *databaseName
1790
+ - collection:
1791
+ id: &collection collection
1792
+ database: *database
1793
+ collectionName: *collectionName
1794
+ - name: failPoint
1795
+ object: testRunner
1796
+ arguments:
1797
+ client: *failPointClient
1798
+ failPoint:
1799
+ configureFailPoint: failCommand
1800
+ mode: { times: 1 }
1801
+ data:
1802
+ failCommands: ["aggregate"]
1803
+ blockConnection: true
1804
+ blockTimeMS: 15
1805
+ - name: createChangeStream
1806
+ object: *collection
1807
+ arguments:
1808
+ pipeline: []
1809
+
1810
+
1811
+ expectEvents:
1812
+ - client: *client
1813
+ events:
1814
+ - commandStartedEvent:
1815
+ commandName: aggregate
1816
+ databaseName: *databaseName
1817
+ command:
1818
+ aggregate: *collectionName
1819
+ maxTimeMS: { $$exists: false }
1820
+ - description: "timeoutMS can be configured on a MongoClient - insertOne on collection"
1821
+ operations:
1822
+ - name: createEntities
1823
+ object: testRunner
1824
+ arguments:
1825
+ entities:
1826
+ - client:
1827
+ id: &client client
1828
+ uriOptions:
1829
+ timeoutMS: 250
1830
+ useMultipleMongoses: false
1831
+ observeEvents:
1832
+ - commandStartedEvent
1833
+ - database:
1834
+ id: &database database
1835
+ client: *client
1836
+ databaseName: *databaseName
1837
+ - collection:
1838
+ id: &collection collection
1839
+ database: *database
1840
+ collectionName: *collectionName
1841
+ - name: failPoint
1842
+ object: testRunner
1843
+ arguments:
1844
+ client: *failPointClient
1845
+ failPoint:
1846
+ configureFailPoint: failCommand
1847
+ # Use "times: 2" to workaround a quirk in Python on Windows where
1848
+ # socket I/O can timeout ~20ms earlier than expected. With
1849
+ # "times: 1" the retry would succeed within the remaining ~20ms.
1850
+ mode: { times: 2 }
1851
+ data:
1852
+ failCommands: ["insert"]
1853
+ blockConnection: true
1854
+ blockTimeMS: 350
1855
+ - name: insertOne
1856
+ object: *collection
1857
+ arguments:
1858
+ document: { x: 1 }
1859
+
1860
+ expectError:
1861
+ isTimeoutError: true
1862
+ expectEvents:
1863
+ - client: *client
1864
+ events:
1865
+ - commandStartedEvent:
1866
+ commandName: insert
1867
+ databaseName: *databaseName
1868
+ command:
1869
+ insert: *collectionName
1870
+ maxTimeMS: { $$type: ["int", "long"] }
1871
+ - description: "timeoutMS can be set to 0 on a MongoClient - insertOne on collection"
1872
+ operations:
1873
+ - name: createEntities
1874
+ object: testRunner
1875
+ arguments:
1876
+ entities:
1877
+ - client:
1878
+ id: &client client
1879
+ uriOptions:
1880
+ timeoutMS: 0
1881
+ useMultipleMongoses: false
1882
+ observeEvents:
1883
+ - commandStartedEvent
1884
+ ignoreCommandMonitoringEvents:
1885
+ - killCursors
1886
+ - database:
1887
+ id: &database database
1888
+ client: *client
1889
+ databaseName: *databaseName
1890
+ - collection:
1891
+ id: &collection collection
1892
+ database: *database
1893
+ collectionName: *collectionName
1894
+ - name: failPoint
1895
+ object: testRunner
1896
+ arguments:
1897
+ client: *failPointClient
1898
+ failPoint:
1899
+ configureFailPoint: failCommand
1900
+ mode: { times: 1 }
1901
+ data:
1902
+ failCommands: ["insert"]
1903
+ blockConnection: true
1904
+ blockTimeMS: 15
1905
+ - name: insertOne
1906
+ object: *collection
1907
+ arguments:
1908
+ document: { x: 1 }
1909
+
1910
+
1911
+ expectEvents:
1912
+ - client: *client
1913
+ events:
1914
+ - commandStartedEvent:
1915
+ commandName: insert
1916
+ databaseName: *databaseName
1917
+ command:
1918
+ insert: *collectionName
1919
+ maxTimeMS: { $$exists: false }
1920
+ - description: "timeoutMS can be configured on a MongoClient - insertMany on collection"
1921
+ operations:
1922
+ - name: createEntities
1923
+ object: testRunner
1924
+ arguments:
1925
+ entities:
1926
+ - client:
1927
+ id: &client client
1928
+ uriOptions:
1929
+ timeoutMS: 250
1930
+ useMultipleMongoses: false
1931
+ observeEvents:
1932
+ - commandStartedEvent
1933
+ - database:
1934
+ id: &database database
1935
+ client: *client
1936
+ databaseName: *databaseName
1937
+ - collection:
1938
+ id: &collection collection
1939
+ database: *database
1940
+ collectionName: *collectionName
1941
+ - name: failPoint
1942
+ object: testRunner
1943
+ arguments:
1944
+ client: *failPointClient
1945
+ failPoint:
1946
+ configureFailPoint: failCommand
1947
+ # Use "times: 2" to workaround a quirk in Python on Windows where
1948
+ # socket I/O can timeout ~20ms earlier than expected. With
1949
+ # "times: 1" the retry would succeed within the remaining ~20ms.
1950
+ mode: { times: 2 }
1951
+ data:
1952
+ failCommands: ["insert"]
1953
+ blockConnection: true
1954
+ blockTimeMS: 350
1955
+ - name: insertMany
1956
+ object: *collection
1957
+ arguments:
1958
+ documents:
1959
+ - { x: 1 }
1960
+
1961
+ expectError:
1962
+ isTimeoutError: true
1963
+ expectEvents:
1964
+ - client: *client
1965
+ events:
1966
+ - commandStartedEvent:
1967
+ commandName: insert
1968
+ databaseName: *databaseName
1969
+ command:
1970
+ insert: *collectionName
1971
+ maxTimeMS: { $$type: ["int", "long"] }
1972
+ - description: "timeoutMS can be set to 0 on a MongoClient - insertMany on collection"
1973
+ operations:
1974
+ - name: createEntities
1975
+ object: testRunner
1976
+ arguments:
1977
+ entities:
1978
+ - client:
1979
+ id: &client client
1980
+ uriOptions:
1981
+ timeoutMS: 0
1982
+ useMultipleMongoses: false
1983
+ observeEvents:
1984
+ - commandStartedEvent
1985
+ ignoreCommandMonitoringEvents:
1986
+ - killCursors
1987
+ - database:
1988
+ id: &database database
1989
+ client: *client
1990
+ databaseName: *databaseName
1991
+ - collection:
1992
+ id: &collection collection
1993
+ database: *database
1994
+ collectionName: *collectionName
1995
+ - name: failPoint
1996
+ object: testRunner
1997
+ arguments:
1998
+ client: *failPointClient
1999
+ failPoint:
2000
+ configureFailPoint: failCommand
2001
+ mode: { times: 1 }
2002
+ data:
2003
+ failCommands: ["insert"]
2004
+ blockConnection: true
2005
+ blockTimeMS: 15
2006
+ - name: insertMany
2007
+ object: *collection
2008
+ arguments:
2009
+ documents:
2010
+ - { x: 1 }
2011
+
2012
+
2013
+ expectEvents:
2014
+ - client: *client
2015
+ events:
2016
+ - commandStartedEvent:
2017
+ commandName: insert
2018
+ databaseName: *databaseName
2019
+ command:
2020
+ insert: *collectionName
2021
+ maxTimeMS: { $$exists: false }
2022
+ - description: "timeoutMS can be configured on a MongoClient - deleteOne on collection"
2023
+ operations:
2024
+ - name: createEntities
2025
+ object: testRunner
2026
+ arguments:
2027
+ entities:
2028
+ - client:
2029
+ id: &client client
2030
+ uriOptions:
2031
+ timeoutMS: 250
2032
+ useMultipleMongoses: false
2033
+ observeEvents:
2034
+ - commandStartedEvent
2035
+ - database:
2036
+ id: &database database
2037
+ client: *client
2038
+ databaseName: *databaseName
2039
+ - collection:
2040
+ id: &collection collection
2041
+ database: *database
2042
+ collectionName: *collectionName
2043
+ - name: failPoint
2044
+ object: testRunner
2045
+ arguments:
2046
+ client: *failPointClient
2047
+ failPoint:
2048
+ configureFailPoint: failCommand
2049
+ # Use "times: 2" to workaround a quirk in Python on Windows where
2050
+ # socket I/O can timeout ~20ms earlier than expected. With
2051
+ # "times: 1" the retry would succeed within the remaining ~20ms.
2052
+ mode: { times: 2 }
2053
+ data:
2054
+ failCommands: ["delete"]
2055
+ blockConnection: true
2056
+ blockTimeMS: 350
2057
+ - name: deleteOne
2058
+ object: *collection
2059
+ arguments:
2060
+ filter: {}
2061
+
2062
+ expectError:
2063
+ isTimeoutError: true
2064
+ expectEvents:
2065
+ - client: *client
2066
+ events:
2067
+ - commandStartedEvent:
2068
+ commandName: delete
2069
+ databaseName: *databaseName
2070
+ command:
2071
+ delete: *collectionName
2072
+ maxTimeMS: { $$type: ["int", "long"] }
2073
+ - description: "timeoutMS can be set to 0 on a MongoClient - deleteOne on collection"
2074
+ operations:
2075
+ - name: createEntities
2076
+ object: testRunner
2077
+ arguments:
2078
+ entities:
2079
+ - client:
2080
+ id: &client client
2081
+ uriOptions:
2082
+ timeoutMS: 0
2083
+ useMultipleMongoses: false
2084
+ observeEvents:
2085
+ - commandStartedEvent
2086
+ ignoreCommandMonitoringEvents:
2087
+ - killCursors
2088
+ - database:
2089
+ id: &database database
2090
+ client: *client
2091
+ databaseName: *databaseName
2092
+ - collection:
2093
+ id: &collection collection
2094
+ database: *database
2095
+ collectionName: *collectionName
2096
+ - name: failPoint
2097
+ object: testRunner
2098
+ arguments:
2099
+ client: *failPointClient
2100
+ failPoint:
2101
+ configureFailPoint: failCommand
2102
+ mode: { times: 1 }
2103
+ data:
2104
+ failCommands: ["delete"]
2105
+ blockConnection: true
2106
+ blockTimeMS: 15
2107
+ - name: deleteOne
2108
+ object: *collection
2109
+ arguments:
2110
+ filter: {}
2111
+
2112
+
2113
+ expectEvents:
2114
+ - client: *client
2115
+ events:
2116
+ - commandStartedEvent:
2117
+ commandName: delete
2118
+ databaseName: *databaseName
2119
+ command:
2120
+ delete: *collectionName
2121
+ maxTimeMS: { $$exists: false }
2122
+ - description: "timeoutMS can be configured on a MongoClient - deleteMany on collection"
2123
+ operations:
2124
+ - name: createEntities
2125
+ object: testRunner
2126
+ arguments:
2127
+ entities:
2128
+ - client:
2129
+ id: &client client
2130
+ uriOptions:
2131
+ timeoutMS: 250
2132
+ useMultipleMongoses: false
2133
+ observeEvents:
2134
+ - commandStartedEvent
2135
+ - database:
2136
+ id: &database database
2137
+ client: *client
2138
+ databaseName: *databaseName
2139
+ - collection:
2140
+ id: &collection collection
2141
+ database: *database
2142
+ collectionName: *collectionName
2143
+ - name: failPoint
2144
+ object: testRunner
2145
+ arguments:
2146
+ client: *failPointClient
2147
+ failPoint:
2148
+ configureFailPoint: failCommand
2149
+ # Use "times: 2" to workaround a quirk in Python on Windows where
2150
+ # socket I/O can timeout ~20ms earlier than expected. With
2151
+ # "times: 1" the retry would succeed within the remaining ~20ms.
2152
+ mode: { times: 2 }
2153
+ data:
2154
+ failCommands: ["delete"]
2155
+ blockConnection: true
2156
+ blockTimeMS: 350
2157
+ - name: deleteMany
2158
+ object: *collection
2159
+ arguments:
2160
+ filter: {}
2161
+
2162
+ expectError:
2163
+ isTimeoutError: true
2164
+ expectEvents:
2165
+ - client: *client
2166
+ events:
2167
+ - commandStartedEvent:
2168
+ commandName: delete
2169
+ databaseName: *databaseName
2170
+ command:
2171
+ delete: *collectionName
2172
+ maxTimeMS: { $$type: ["int", "long"] }
2173
+ - description: "timeoutMS can be set to 0 on a MongoClient - deleteMany on collection"
2174
+ operations:
2175
+ - name: createEntities
2176
+ object: testRunner
2177
+ arguments:
2178
+ entities:
2179
+ - client:
2180
+ id: &client client
2181
+ uriOptions:
2182
+ timeoutMS: 0
2183
+ useMultipleMongoses: false
2184
+ observeEvents:
2185
+ - commandStartedEvent
2186
+ ignoreCommandMonitoringEvents:
2187
+ - killCursors
2188
+ - database:
2189
+ id: &database database
2190
+ client: *client
2191
+ databaseName: *databaseName
2192
+ - collection:
2193
+ id: &collection collection
2194
+ database: *database
2195
+ collectionName: *collectionName
2196
+ - name: failPoint
2197
+ object: testRunner
2198
+ arguments:
2199
+ client: *failPointClient
2200
+ failPoint:
2201
+ configureFailPoint: failCommand
2202
+ mode: { times: 1 }
2203
+ data:
2204
+ failCommands: ["delete"]
2205
+ blockConnection: true
2206
+ blockTimeMS: 15
2207
+ - name: deleteMany
2208
+ object: *collection
2209
+ arguments:
2210
+ filter: {}
2211
+
2212
+
2213
+ expectEvents:
2214
+ - client: *client
2215
+ events:
2216
+ - commandStartedEvent:
2217
+ commandName: delete
2218
+ databaseName: *databaseName
2219
+ command:
2220
+ delete: *collectionName
2221
+ maxTimeMS: { $$exists: false }
2222
+ - description: "timeoutMS can be configured on a MongoClient - replaceOne on collection"
2223
+ operations:
2224
+ - name: createEntities
2225
+ object: testRunner
2226
+ arguments:
2227
+ entities:
2228
+ - client:
2229
+ id: &client client
2230
+ uriOptions:
2231
+ timeoutMS: 250
2232
+ useMultipleMongoses: false
2233
+ observeEvents:
2234
+ - commandStartedEvent
2235
+ - database:
2236
+ id: &database database
2237
+ client: *client
2238
+ databaseName: *databaseName
2239
+ - collection:
2240
+ id: &collection collection
2241
+ database: *database
2242
+ collectionName: *collectionName
2243
+ - name: failPoint
2244
+ object: testRunner
2245
+ arguments:
2246
+ client: *failPointClient
2247
+ failPoint:
2248
+ configureFailPoint: failCommand
2249
+ # Use "times: 2" to workaround a quirk in Python on Windows where
2250
+ # socket I/O can timeout ~20ms earlier than expected. With
2251
+ # "times: 1" the retry would succeed within the remaining ~20ms.
2252
+ mode: { times: 2 }
2253
+ data:
2254
+ failCommands: ["update"]
2255
+ blockConnection: true
2256
+ blockTimeMS: 350
2257
+ - name: replaceOne
2258
+ object: *collection
2259
+ arguments:
2260
+ filter: {}
2261
+ replacement: { x: 1 }
2262
+
2263
+ expectError:
2264
+ isTimeoutError: true
2265
+ expectEvents:
2266
+ - client: *client
2267
+ events:
2268
+ - commandStartedEvent:
2269
+ commandName: update
2270
+ databaseName: *databaseName
2271
+ command:
2272
+ update: *collectionName
2273
+ maxTimeMS: { $$type: ["int", "long"] }
2274
+ - description: "timeoutMS can be set to 0 on a MongoClient - replaceOne on collection"
2275
+ operations:
2276
+ - name: createEntities
2277
+ object: testRunner
2278
+ arguments:
2279
+ entities:
2280
+ - client:
2281
+ id: &client client
2282
+ uriOptions:
2283
+ timeoutMS: 0
2284
+ useMultipleMongoses: false
2285
+ observeEvents:
2286
+ - commandStartedEvent
2287
+ ignoreCommandMonitoringEvents:
2288
+ - killCursors
2289
+ - database:
2290
+ id: &database database
2291
+ client: *client
2292
+ databaseName: *databaseName
2293
+ - collection:
2294
+ id: &collection collection
2295
+ database: *database
2296
+ collectionName: *collectionName
2297
+ - name: failPoint
2298
+ object: testRunner
2299
+ arguments:
2300
+ client: *failPointClient
2301
+ failPoint:
2302
+ configureFailPoint: failCommand
2303
+ mode: { times: 1 }
2304
+ data:
2305
+ failCommands: ["update"]
2306
+ blockConnection: true
2307
+ blockTimeMS: 15
2308
+ - name: replaceOne
2309
+ object: *collection
2310
+ arguments:
2311
+ filter: {}
2312
+ replacement: { x: 1 }
2313
+
2314
+
2315
+ expectEvents:
2316
+ - client: *client
2317
+ events:
2318
+ - commandStartedEvent:
2319
+ commandName: update
2320
+ databaseName: *databaseName
2321
+ command:
2322
+ update: *collectionName
2323
+ maxTimeMS: { $$exists: false }
2324
+ - description: "timeoutMS can be configured on a MongoClient - updateOne on collection"
2325
+ operations:
2326
+ - name: createEntities
2327
+ object: testRunner
2328
+ arguments:
2329
+ entities:
2330
+ - client:
2331
+ id: &client client
2332
+ uriOptions:
2333
+ timeoutMS: 250
2334
+ useMultipleMongoses: false
2335
+ observeEvents:
2336
+ - commandStartedEvent
2337
+ - database:
2338
+ id: &database database
2339
+ client: *client
2340
+ databaseName: *databaseName
2341
+ - collection:
2342
+ id: &collection collection
2343
+ database: *database
2344
+ collectionName: *collectionName
2345
+ - name: failPoint
2346
+ object: testRunner
2347
+ arguments:
2348
+ client: *failPointClient
2349
+ failPoint:
2350
+ configureFailPoint: failCommand
2351
+ # Use "times: 2" to workaround a quirk in Python on Windows where
2352
+ # socket I/O can timeout ~20ms earlier than expected. With
2353
+ # "times: 1" the retry would succeed within the remaining ~20ms.
2354
+ mode: { times: 2 }
2355
+ data:
2356
+ failCommands: ["update"]
2357
+ blockConnection: true
2358
+ blockTimeMS: 350
2359
+ - name: updateOne
2360
+ object: *collection
2361
+ arguments:
2362
+ filter: {}
2363
+ update: { $set: { x: 1 } }
2364
+
2365
+ expectError:
2366
+ isTimeoutError: true
2367
+ expectEvents:
2368
+ - client: *client
2369
+ events:
2370
+ - commandStartedEvent:
2371
+ commandName: update
2372
+ databaseName: *databaseName
2373
+ command:
2374
+ update: *collectionName
2375
+ maxTimeMS: { $$type: ["int", "long"] }
2376
+ - description: "timeoutMS can be set to 0 on a MongoClient - updateOne on collection"
2377
+ operations:
2378
+ - name: createEntities
2379
+ object: testRunner
2380
+ arguments:
2381
+ entities:
2382
+ - client:
2383
+ id: &client client
2384
+ uriOptions:
2385
+ timeoutMS: 0
2386
+ useMultipleMongoses: false
2387
+ observeEvents:
2388
+ - commandStartedEvent
2389
+ ignoreCommandMonitoringEvents:
2390
+ - killCursors
2391
+ - database:
2392
+ id: &database database
2393
+ client: *client
2394
+ databaseName: *databaseName
2395
+ - collection:
2396
+ id: &collection collection
2397
+ database: *database
2398
+ collectionName: *collectionName
2399
+ - name: failPoint
2400
+ object: testRunner
2401
+ arguments:
2402
+ client: *failPointClient
2403
+ failPoint:
2404
+ configureFailPoint: failCommand
2405
+ mode: { times: 1 }
2406
+ data:
2407
+ failCommands: ["update"]
2408
+ blockConnection: true
2409
+ blockTimeMS: 15
2410
+ - name: updateOne
2411
+ object: *collection
2412
+ arguments:
2413
+ filter: {}
2414
+ update: { $set: { x: 1 } }
2415
+
2416
+
2417
+ expectEvents:
2418
+ - client: *client
2419
+ events:
2420
+ - commandStartedEvent:
2421
+ commandName: update
2422
+ databaseName: *databaseName
2423
+ command:
2424
+ update: *collectionName
2425
+ maxTimeMS: { $$exists: false }
2426
+ - description: "timeoutMS can be configured on a MongoClient - updateMany on collection"
2427
+ operations:
2428
+ - name: createEntities
2429
+ object: testRunner
2430
+ arguments:
2431
+ entities:
2432
+ - client:
2433
+ id: &client client
2434
+ uriOptions:
2435
+ timeoutMS: 250
2436
+ useMultipleMongoses: false
2437
+ observeEvents:
2438
+ - commandStartedEvent
2439
+ - database:
2440
+ id: &database database
2441
+ client: *client
2442
+ databaseName: *databaseName
2443
+ - collection:
2444
+ id: &collection collection
2445
+ database: *database
2446
+ collectionName: *collectionName
2447
+ - name: failPoint
2448
+ object: testRunner
2449
+ arguments:
2450
+ client: *failPointClient
2451
+ failPoint:
2452
+ configureFailPoint: failCommand
2453
+ # Use "times: 2" to workaround a quirk in Python on Windows where
2454
+ # socket I/O can timeout ~20ms earlier than expected. With
2455
+ # "times: 1" the retry would succeed within the remaining ~20ms.
2456
+ mode: { times: 2 }
2457
+ data:
2458
+ failCommands: ["update"]
2459
+ blockConnection: true
2460
+ blockTimeMS: 350
2461
+ - name: updateMany
2462
+ object: *collection
2463
+ arguments:
2464
+ filter: {}
2465
+ update: { $set: { x: 1 } }
2466
+
2467
+ expectError:
2468
+ isTimeoutError: true
2469
+ expectEvents:
2470
+ - client: *client
2471
+ events:
2472
+ - commandStartedEvent:
2473
+ commandName: update
2474
+ databaseName: *databaseName
2475
+ command:
2476
+ update: *collectionName
2477
+ maxTimeMS: { $$type: ["int", "long"] }
2478
+ - description: "timeoutMS can be set to 0 on a MongoClient - updateMany on collection"
2479
+ operations:
2480
+ - name: createEntities
2481
+ object: testRunner
2482
+ arguments:
2483
+ entities:
2484
+ - client:
2485
+ id: &client client
2486
+ uriOptions:
2487
+ timeoutMS: 0
2488
+ useMultipleMongoses: false
2489
+ observeEvents:
2490
+ - commandStartedEvent
2491
+ ignoreCommandMonitoringEvents:
2492
+ - killCursors
2493
+ - database:
2494
+ id: &database database
2495
+ client: *client
2496
+ databaseName: *databaseName
2497
+ - collection:
2498
+ id: &collection collection
2499
+ database: *database
2500
+ collectionName: *collectionName
2501
+ - name: failPoint
2502
+ object: testRunner
2503
+ arguments:
2504
+ client: *failPointClient
2505
+ failPoint:
2506
+ configureFailPoint: failCommand
2507
+ mode: { times: 1 }
2508
+ data:
2509
+ failCommands: ["update"]
2510
+ blockConnection: true
2511
+ blockTimeMS: 15
2512
+ - name: updateMany
2513
+ object: *collection
2514
+ arguments:
2515
+ filter: {}
2516
+ update: { $set: { x: 1 } }
2517
+
2518
+
2519
+ expectEvents:
2520
+ - client: *client
2521
+ events:
2522
+ - commandStartedEvent:
2523
+ commandName: update
2524
+ databaseName: *databaseName
2525
+ command:
2526
+ update: *collectionName
2527
+ maxTimeMS: { $$exists: false }
2528
+ - description: "timeoutMS can be configured on a MongoClient - findOneAndDelete on collection"
2529
+ operations:
2530
+ - name: createEntities
2531
+ object: testRunner
2532
+ arguments:
2533
+ entities:
2534
+ - client:
2535
+ id: &client client
2536
+ uriOptions:
2537
+ timeoutMS: 250
2538
+ useMultipleMongoses: false
2539
+ observeEvents:
2540
+ - commandStartedEvent
2541
+ - database:
2542
+ id: &database database
2543
+ client: *client
2544
+ databaseName: *databaseName
2545
+ - collection:
2546
+ id: &collection collection
2547
+ database: *database
2548
+ collectionName: *collectionName
2549
+ - name: failPoint
2550
+ object: testRunner
2551
+ arguments:
2552
+ client: *failPointClient
2553
+ failPoint:
2554
+ configureFailPoint: failCommand
2555
+ # Use "times: 2" to workaround a quirk in Python on Windows where
2556
+ # socket I/O can timeout ~20ms earlier than expected. With
2557
+ # "times: 1" the retry would succeed within the remaining ~20ms.
2558
+ mode: { times: 2 }
2559
+ data:
2560
+ failCommands: ["findAndModify"]
2561
+ blockConnection: true
2562
+ blockTimeMS: 350
2563
+ - name: findOneAndDelete
2564
+ object: *collection
2565
+ arguments:
2566
+ filter: {}
2567
+
2568
+ expectError:
2569
+ isTimeoutError: true
2570
+ expectEvents:
2571
+ - client: *client
2572
+ events:
2573
+ - commandStartedEvent:
2574
+ commandName: findAndModify
2575
+ databaseName: *databaseName
2576
+ command:
2577
+ findAndModify: *collectionName
2578
+ maxTimeMS: { $$type: ["int", "long"] }
2579
+ - description: "timeoutMS can be set to 0 on a MongoClient - findOneAndDelete on collection"
2580
+ operations:
2581
+ - name: createEntities
2582
+ object: testRunner
2583
+ arguments:
2584
+ entities:
2585
+ - client:
2586
+ id: &client client
2587
+ uriOptions:
2588
+ timeoutMS: 0
2589
+ useMultipleMongoses: false
2590
+ observeEvents:
2591
+ - commandStartedEvent
2592
+ ignoreCommandMonitoringEvents:
2593
+ - killCursors
2594
+ - database:
2595
+ id: &database database
2596
+ client: *client
2597
+ databaseName: *databaseName
2598
+ - collection:
2599
+ id: &collection collection
2600
+ database: *database
2601
+ collectionName: *collectionName
2602
+ - name: failPoint
2603
+ object: testRunner
2604
+ arguments:
2605
+ client: *failPointClient
2606
+ failPoint:
2607
+ configureFailPoint: failCommand
2608
+ mode: { times: 1 }
2609
+ data:
2610
+ failCommands: ["findAndModify"]
2611
+ blockConnection: true
2612
+ blockTimeMS: 15
2613
+ - name: findOneAndDelete
2614
+ object: *collection
2615
+ arguments:
2616
+ filter: {}
2617
+
2618
+
2619
+ expectEvents:
2620
+ - client: *client
2621
+ events:
2622
+ - commandStartedEvent:
2623
+ commandName: findAndModify
2624
+ databaseName: *databaseName
2625
+ command:
2626
+ findAndModify: *collectionName
2627
+ maxTimeMS: { $$exists: false }
2628
+ - description: "timeoutMS can be configured on a MongoClient - findOneAndReplace on collection"
2629
+ operations:
2630
+ - name: createEntities
2631
+ object: testRunner
2632
+ arguments:
2633
+ entities:
2634
+ - client:
2635
+ id: &client client
2636
+ uriOptions:
2637
+ timeoutMS: 250
2638
+ useMultipleMongoses: false
2639
+ observeEvents:
2640
+ - commandStartedEvent
2641
+ - database:
2642
+ id: &database database
2643
+ client: *client
2644
+ databaseName: *databaseName
2645
+ - collection:
2646
+ id: &collection collection
2647
+ database: *database
2648
+ collectionName: *collectionName
2649
+ - name: failPoint
2650
+ object: testRunner
2651
+ arguments:
2652
+ client: *failPointClient
2653
+ failPoint:
2654
+ configureFailPoint: failCommand
2655
+ # Use "times: 2" to workaround a quirk in Python on Windows where
2656
+ # socket I/O can timeout ~20ms earlier than expected. With
2657
+ # "times: 1" the retry would succeed within the remaining ~20ms.
2658
+ mode: { times: 2 }
2659
+ data:
2660
+ failCommands: ["findAndModify"]
2661
+ blockConnection: true
2662
+ blockTimeMS: 350
2663
+ - name: findOneAndReplace
2664
+ object: *collection
2665
+ arguments:
2666
+ filter: {}
2667
+ replacement: { x: 1 }
2668
+
2669
+ expectError:
2670
+ isTimeoutError: true
2671
+ expectEvents:
2672
+ - client: *client
2673
+ events:
2674
+ - commandStartedEvent:
2675
+ commandName: findAndModify
2676
+ databaseName: *databaseName
2677
+ command:
2678
+ findAndModify: *collectionName
2679
+ maxTimeMS: { $$type: ["int", "long"] }
2680
+ - description: "timeoutMS can be set to 0 on a MongoClient - findOneAndReplace on collection"
2681
+ operations:
2682
+ - name: createEntities
2683
+ object: testRunner
2684
+ arguments:
2685
+ entities:
2686
+ - client:
2687
+ id: &client client
2688
+ uriOptions:
2689
+ timeoutMS: 0
2690
+ useMultipleMongoses: false
2691
+ observeEvents:
2692
+ - commandStartedEvent
2693
+ ignoreCommandMonitoringEvents:
2694
+ - killCursors
2695
+ - database:
2696
+ id: &database database
2697
+ client: *client
2698
+ databaseName: *databaseName
2699
+ - collection:
2700
+ id: &collection collection
2701
+ database: *database
2702
+ collectionName: *collectionName
2703
+ - name: failPoint
2704
+ object: testRunner
2705
+ arguments:
2706
+ client: *failPointClient
2707
+ failPoint:
2708
+ configureFailPoint: failCommand
2709
+ mode: { times: 1 }
2710
+ data:
2711
+ failCommands: ["findAndModify"]
2712
+ blockConnection: true
2713
+ blockTimeMS: 15
2714
+ - name: findOneAndReplace
2715
+ object: *collection
2716
+ arguments:
2717
+ filter: {}
2718
+ replacement: { x: 1 }
2719
+
2720
+
2721
+ expectEvents:
2722
+ - client: *client
2723
+ events:
2724
+ - commandStartedEvent:
2725
+ commandName: findAndModify
2726
+ databaseName: *databaseName
2727
+ command:
2728
+ findAndModify: *collectionName
2729
+ maxTimeMS: { $$exists: false }
2730
+ - description: "timeoutMS can be configured on a MongoClient - findOneAndUpdate on collection"
2731
+ operations:
2732
+ - name: createEntities
2733
+ object: testRunner
2734
+ arguments:
2735
+ entities:
2736
+ - client:
2737
+ id: &client client
2738
+ uriOptions:
2739
+ timeoutMS: 250
2740
+ useMultipleMongoses: false
2741
+ observeEvents:
2742
+ - commandStartedEvent
2743
+ - database:
2744
+ id: &database database
2745
+ client: *client
2746
+ databaseName: *databaseName
2747
+ - collection:
2748
+ id: &collection collection
2749
+ database: *database
2750
+ collectionName: *collectionName
2751
+ - name: failPoint
2752
+ object: testRunner
2753
+ arguments:
2754
+ client: *failPointClient
2755
+ failPoint:
2756
+ configureFailPoint: failCommand
2757
+ # Use "times: 2" to workaround a quirk in Python on Windows where
2758
+ # socket I/O can timeout ~20ms earlier than expected. With
2759
+ # "times: 1" the retry would succeed within the remaining ~20ms.
2760
+ mode: { times: 2 }
2761
+ data:
2762
+ failCommands: ["findAndModify"]
2763
+ blockConnection: true
2764
+ blockTimeMS: 350
2765
+ - name: findOneAndUpdate
2766
+ object: *collection
2767
+ arguments:
2768
+ filter: {}
2769
+ update: { $set: { x: 1 } }
2770
+
2771
+ expectError:
2772
+ isTimeoutError: true
2773
+ expectEvents:
2774
+ - client: *client
2775
+ events:
2776
+ - commandStartedEvent:
2777
+ commandName: findAndModify
2778
+ databaseName: *databaseName
2779
+ command:
2780
+ findAndModify: *collectionName
2781
+ maxTimeMS: { $$type: ["int", "long"] }
2782
+ - description: "timeoutMS can be set to 0 on a MongoClient - findOneAndUpdate on collection"
2783
+ operations:
2784
+ - name: createEntities
2785
+ object: testRunner
2786
+ arguments:
2787
+ entities:
2788
+ - client:
2789
+ id: &client client
2790
+ uriOptions:
2791
+ timeoutMS: 0
2792
+ useMultipleMongoses: false
2793
+ observeEvents:
2794
+ - commandStartedEvent
2795
+ ignoreCommandMonitoringEvents:
2796
+ - killCursors
2797
+ - database:
2798
+ id: &database database
2799
+ client: *client
2800
+ databaseName: *databaseName
2801
+ - collection:
2802
+ id: &collection collection
2803
+ database: *database
2804
+ collectionName: *collectionName
2805
+ - name: failPoint
2806
+ object: testRunner
2807
+ arguments:
2808
+ client: *failPointClient
2809
+ failPoint:
2810
+ configureFailPoint: failCommand
2811
+ mode: { times: 1 }
2812
+ data:
2813
+ failCommands: ["findAndModify"]
2814
+ blockConnection: true
2815
+ blockTimeMS: 15
2816
+ - name: findOneAndUpdate
2817
+ object: *collection
2818
+ arguments:
2819
+ filter: {}
2820
+ update: { $set: { x: 1 } }
2821
+
2822
+
2823
+ expectEvents:
2824
+ - client: *client
2825
+ events:
2826
+ - commandStartedEvent:
2827
+ commandName: findAndModify
2828
+ databaseName: *databaseName
2829
+ command:
2830
+ findAndModify: *collectionName
2831
+ maxTimeMS: { $$exists: false }
2832
+ - description: "timeoutMS can be configured on a MongoClient - bulkWrite on collection"
2833
+ operations:
2834
+ - name: createEntities
2835
+ object: testRunner
2836
+ arguments:
2837
+ entities:
2838
+ - client:
2839
+ id: &client client
2840
+ uriOptions:
2841
+ timeoutMS: 250
2842
+ useMultipleMongoses: false
2843
+ observeEvents:
2844
+ - commandStartedEvent
2845
+ - database:
2846
+ id: &database database
2847
+ client: *client
2848
+ databaseName: *databaseName
2849
+ - collection:
2850
+ id: &collection collection
2851
+ database: *database
2852
+ collectionName: *collectionName
2853
+ - name: failPoint
2854
+ object: testRunner
2855
+ arguments:
2856
+ client: *failPointClient
2857
+ failPoint:
2858
+ configureFailPoint: failCommand
2859
+ # Use "times: 2" to workaround a quirk in Python on Windows where
2860
+ # socket I/O can timeout ~20ms earlier than expected. With
2861
+ # "times: 1" the retry would succeed within the remaining ~20ms.
2862
+ mode: { times: 2 }
2863
+ data:
2864
+ failCommands: ["insert"]
2865
+ blockConnection: true
2866
+ blockTimeMS: 350
2867
+ - name: bulkWrite
2868
+ object: *collection
2869
+ arguments:
2870
+ requests:
2871
+ - insertOne:
2872
+ document: { _id: 1 }
2873
+
2874
+ expectError:
2875
+ isTimeoutError: true
2876
+ expectEvents:
2877
+ - client: *client
2878
+ events:
2879
+ - commandStartedEvent:
2880
+ commandName: insert
2881
+ databaseName: *databaseName
2882
+ command:
2883
+ insert: *collectionName
2884
+ maxTimeMS: { $$type: ["int", "long"] }
2885
+ - description: "timeoutMS can be set to 0 on a MongoClient - bulkWrite on collection"
2886
+ operations:
2887
+ - name: createEntities
2888
+ object: testRunner
2889
+ arguments:
2890
+ entities:
2891
+ - client:
2892
+ id: &client client
2893
+ uriOptions:
2894
+ timeoutMS: 0
2895
+ useMultipleMongoses: false
2896
+ observeEvents:
2897
+ - commandStartedEvent
2898
+ ignoreCommandMonitoringEvents:
2899
+ - killCursors
2900
+ - database:
2901
+ id: &database database
2902
+ client: *client
2903
+ databaseName: *databaseName
2904
+ - collection:
2905
+ id: &collection collection
2906
+ database: *database
2907
+ collectionName: *collectionName
2908
+ - name: failPoint
2909
+ object: testRunner
2910
+ arguments:
2911
+ client: *failPointClient
2912
+ failPoint:
2913
+ configureFailPoint: failCommand
2914
+ mode: { times: 1 }
2915
+ data:
2916
+ failCommands: ["insert"]
2917
+ blockConnection: true
2918
+ blockTimeMS: 15
2919
+ - name: bulkWrite
2920
+ object: *collection
2921
+ arguments:
2922
+ requests:
2923
+ - insertOne:
2924
+ document: { _id: 1 }
2925
+
2926
+
2927
+ expectEvents:
2928
+ - client: *client
2929
+ events:
2930
+ - commandStartedEvent:
2931
+ commandName: insert
2932
+ databaseName: *databaseName
2933
+ command:
2934
+ insert: *collectionName
2935
+ maxTimeMS: { $$exists: false }
2936
+ - description: "timeoutMS can be configured on a MongoClient - createIndex on collection"
2937
+ operations:
2938
+ - name: createEntities
2939
+ object: testRunner
2940
+ arguments:
2941
+ entities:
2942
+ - client:
2943
+ id: &client client
2944
+ uriOptions:
2945
+ timeoutMS: 250
2946
+ useMultipleMongoses: false
2947
+ observeEvents:
2948
+ - commandStartedEvent
2949
+ - database:
2950
+ id: &database database
2951
+ client: *client
2952
+ databaseName: *databaseName
2953
+ - collection:
2954
+ id: &collection collection
2955
+ database: *database
2956
+ collectionName: *collectionName
2957
+ - name: failPoint
2958
+ object: testRunner
2959
+ arguments:
2960
+ client: *failPointClient
2961
+ failPoint:
2962
+ configureFailPoint: failCommand
2963
+ # Use "times: 2" to workaround a quirk in Python on Windows where
2964
+ # socket I/O can timeout ~20ms earlier than expected. With
2965
+ # "times: 1" the retry would succeed within the remaining ~20ms.
2966
+ mode: { times: 2 }
2967
+ data:
2968
+ failCommands: ["createIndexes"]
2969
+ blockConnection: true
2970
+ blockTimeMS: 350
2971
+ - name: createIndex
2972
+ object: *collection
2973
+ arguments:
2974
+ keys: { x: 1 }
2975
+ name: "x_1"
2976
+
2977
+ expectError:
2978
+ isTimeoutError: true
2979
+ expectEvents:
2980
+ - client: *client
2981
+ events:
2982
+ - commandStartedEvent:
2983
+ commandName: createIndexes
2984
+ databaseName: *databaseName
2985
+ command:
2986
+ createIndexes: *collectionName
2987
+ maxTimeMS: { $$type: ["int", "long"] }
2988
+ - description: "timeoutMS can be set to 0 on a MongoClient - createIndex on collection"
2989
+ operations:
2990
+ - name: createEntities
2991
+ object: testRunner
2992
+ arguments:
2993
+ entities:
2994
+ - client:
2995
+ id: &client client
2996
+ uriOptions:
2997
+ timeoutMS: 0
2998
+ useMultipleMongoses: false
2999
+ observeEvents:
3000
+ - commandStartedEvent
3001
+ ignoreCommandMonitoringEvents:
3002
+ - killCursors
3003
+ - database:
3004
+ id: &database database
3005
+ client: *client
3006
+ databaseName: *databaseName
3007
+ - collection:
3008
+ id: &collection collection
3009
+ database: *database
3010
+ collectionName: *collectionName
3011
+ - name: failPoint
3012
+ object: testRunner
3013
+ arguments:
3014
+ client: *failPointClient
3015
+ failPoint:
3016
+ configureFailPoint: failCommand
3017
+ mode: { times: 1 }
3018
+ data:
3019
+ failCommands: ["createIndexes"]
3020
+ blockConnection: true
3021
+ blockTimeMS: 15
3022
+ - name: createIndex
3023
+ object: *collection
3024
+ arguments:
3025
+ keys: { x: 1 }
3026
+ name: "x_1"
3027
+
3028
+
3029
+ expectEvents:
3030
+ - client: *client
3031
+ events:
3032
+ - commandStartedEvent:
3033
+ commandName: createIndexes
3034
+ databaseName: *databaseName
3035
+ command:
3036
+ createIndexes: *collectionName
3037
+ maxTimeMS: { $$exists: false }
3038
+ - description: "timeoutMS can be configured on a MongoClient - dropIndex on collection"
3039
+ operations:
3040
+ - name: createEntities
3041
+ object: testRunner
3042
+ arguments:
3043
+ entities:
3044
+ - client:
3045
+ id: &client client
3046
+ uriOptions:
3047
+ timeoutMS: 250
3048
+ useMultipleMongoses: false
3049
+ observeEvents:
3050
+ - commandStartedEvent
3051
+ - database:
3052
+ id: &database database
3053
+ client: *client
3054
+ databaseName: *databaseName
3055
+ - collection:
3056
+ id: &collection collection
3057
+ database: *database
3058
+ collectionName: *collectionName
3059
+ - name: failPoint
3060
+ object: testRunner
3061
+ arguments:
3062
+ client: *failPointClient
3063
+ failPoint:
3064
+ configureFailPoint: failCommand
3065
+ # Use "times: 2" to workaround a quirk in Python on Windows where
3066
+ # socket I/O can timeout ~20ms earlier than expected. With
3067
+ # "times: 1" the retry would succeed within the remaining ~20ms.
3068
+ mode: { times: 2 }
3069
+ data:
3070
+ failCommands: ["dropIndexes"]
3071
+ blockConnection: true
3072
+ blockTimeMS: 350
3073
+ - name: dropIndex
3074
+ object: *collection
3075
+ arguments:
3076
+ name: "x_1"
3077
+
3078
+ expectError:
3079
+ isTimeoutError: true
3080
+ expectEvents:
3081
+ - client: *client
3082
+ events:
3083
+ - commandStartedEvent:
3084
+ commandName: dropIndexes
3085
+ databaseName: *databaseName
3086
+ command:
3087
+ dropIndexes: *collectionName
3088
+ maxTimeMS: { $$type: ["int", "long"] }
3089
+ - description: "timeoutMS can be set to 0 on a MongoClient - dropIndex on collection"
3090
+ operations:
3091
+ - name: createEntities
3092
+ object: testRunner
3093
+ arguments:
3094
+ entities:
3095
+ - client:
3096
+ id: &client client
3097
+ uriOptions:
3098
+ timeoutMS: 0
3099
+ useMultipleMongoses: false
3100
+ observeEvents:
3101
+ - commandStartedEvent
3102
+ ignoreCommandMonitoringEvents:
3103
+ - killCursors
3104
+ - database:
3105
+ id: &database database
3106
+ client: *client
3107
+ databaseName: *databaseName
3108
+ - collection:
3109
+ id: &collection collection
3110
+ database: *database
3111
+ collectionName: *collectionName
3112
+ - name: failPoint
3113
+ object: testRunner
3114
+ arguments:
3115
+ client: *failPointClient
3116
+ failPoint:
3117
+ configureFailPoint: failCommand
3118
+ mode: { times: 1 }
3119
+ data:
3120
+ failCommands: ["dropIndexes"]
3121
+ blockConnection: true
3122
+ blockTimeMS: 15
3123
+ - name: dropIndex
3124
+ object: *collection
3125
+ arguments:
3126
+ name: "x_1"
3127
+
3128
+ expectError:
3129
+ isClientError: false
3130
+ isTimeoutError: false
3131
+ expectEvents:
3132
+ - client: *client
3133
+ events:
3134
+ - commandStartedEvent:
3135
+ commandName: dropIndexes
3136
+ databaseName: *databaseName
3137
+ command:
3138
+ dropIndexes: *collectionName
3139
+ maxTimeMS: { $$exists: false }
3140
+ - description: "timeoutMS can be configured on a MongoClient - dropIndexes on collection"
3141
+ operations:
3142
+ - name: createEntities
3143
+ object: testRunner
3144
+ arguments:
3145
+ entities:
3146
+ - client:
3147
+ id: &client client
3148
+ uriOptions:
3149
+ timeoutMS: 250
3150
+ useMultipleMongoses: false
3151
+ observeEvents:
3152
+ - commandStartedEvent
3153
+ - database:
3154
+ id: &database database
3155
+ client: *client
3156
+ databaseName: *databaseName
3157
+ - collection:
3158
+ id: &collection collection
3159
+ database: *database
3160
+ collectionName: *collectionName
3161
+ - name: failPoint
3162
+ object: testRunner
3163
+ arguments:
3164
+ client: *failPointClient
3165
+ failPoint:
3166
+ configureFailPoint: failCommand
3167
+ # Use "times: 2" to workaround a quirk in Python on Windows where
3168
+ # socket I/O can timeout ~20ms earlier than expected. With
3169
+ # "times: 1" the retry would succeed within the remaining ~20ms.
3170
+ mode: { times: 2 }
3171
+ data:
3172
+ failCommands: ["dropIndexes"]
3173
+ blockConnection: true
3174
+ blockTimeMS: 350
3175
+ - name: dropIndexes
3176
+ object: *collection
3177
+
3178
+ expectError:
3179
+ isTimeoutError: true
3180
+ expectEvents:
3181
+ - client: *client
3182
+ events:
3183
+ - commandStartedEvent:
3184
+ commandName: dropIndexes
3185
+ databaseName: *databaseName
3186
+ command:
3187
+ dropIndexes: *collectionName
3188
+ maxTimeMS: { $$type: ["int", "long"] }
3189
+ - description: "timeoutMS can be set to 0 on a MongoClient - dropIndexes on collection"
3190
+ operations:
3191
+ - name: createEntities
3192
+ object: testRunner
3193
+ arguments:
3194
+ entities:
3195
+ - client:
3196
+ id: &client client
3197
+ uriOptions:
3198
+ timeoutMS: 0
3199
+ useMultipleMongoses: false
3200
+ observeEvents:
3201
+ - commandStartedEvent
3202
+ ignoreCommandMonitoringEvents:
3203
+ - killCursors
3204
+ - database:
3205
+ id: &database database
3206
+ client: *client
3207
+ databaseName: *databaseName
3208
+ - collection:
3209
+ id: &collection collection
3210
+ database: *database
3211
+ collectionName: *collectionName
3212
+ - name: failPoint
3213
+ object: testRunner
3214
+ arguments:
3215
+ client: *failPointClient
3216
+ failPoint:
3217
+ configureFailPoint: failCommand
3218
+ mode: { times: 1 }
3219
+ data:
3220
+ failCommands: ["dropIndexes"]
3221
+ blockConnection: true
3222
+ blockTimeMS: 15
3223
+ - name: dropIndexes
3224
+ object: *collection
3225
+
3226
+
3227
+ expectEvents:
3228
+ - client: *client
3229
+ events:
3230
+ - commandStartedEvent:
3231
+ commandName: dropIndexes
3232
+ databaseName: *databaseName
3233
+ command:
3234
+ dropIndexes: *collectionName
3235
+ maxTimeMS: { $$exists: false }
3236
+