mongo 2.3.1 → 2.16.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 (1820) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/CONTRIBUTING.md +12 -54
  4. data/LICENSE +1 -1
  5. data/README.md +74 -44
  6. data/Rakefile +110 -22
  7. data/lib/mongo/active_support.rb +20 -0
  8. data/lib/mongo/address/ipv4.rb +41 -8
  9. data/lib/mongo/address/ipv6.rb +64 -12
  10. data/lib/mongo/address/unix.rb +12 -6
  11. data/lib/mongo/address/validator.rb +102 -0
  12. data/lib/mongo/address.rb +163 -59
  13. data/lib/mongo/auth/aws/conversation.rb +128 -0
  14. data/lib/mongo/auth/aws/credentials_retriever.rb +222 -0
  15. data/lib/mongo/auth/aws/request.rb +286 -0
  16. data/lib/mongo/auth/aws.rb +40 -0
  17. data/lib/mongo/auth/base.rb +138 -0
  18. data/lib/mongo/auth/conversation_base.rb +87 -0
  19. data/lib/mongo/auth/cr/conversation.rb +29 -73
  20. data/lib/mongo/auth/cr.rb +17 -35
  21. data/lib/mongo/auth/credential_cache.rb +54 -0
  22. data/lib/mongo/auth/gssapi/conversation.rb +100 -0
  23. data/lib/mongo/auth/gssapi.rb +41 -0
  24. data/lib/mongo/auth/ldap/conversation.rb +14 -53
  25. data/lib/mongo/auth/ldap.rb +14 -33
  26. data/lib/mongo/auth/roles.rb +4 -1
  27. data/lib/mongo/auth/sasl_conversation_base.rb +102 -0
  28. data/lib/mongo/auth/scram/conversation.rb +13 -411
  29. data/lib/mongo/auth/scram.rb +45 -37
  30. data/lib/mongo/auth/scram256/conversation.rb +66 -0
  31. data/lib/mongo/auth/scram256.rb +34 -0
  32. data/lib/mongo/auth/scram_conversation_base.rb +378 -0
  33. data/lib/mongo/auth/stringprep/profiles/sasl.rb +77 -0
  34. data/lib/mongo/auth/stringprep/tables.rb +3236 -0
  35. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +175 -0
  36. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1171 -0
  37. data/lib/mongo/auth/stringprep.rb +118 -0
  38. data/lib/mongo/auth/user/view.rb +62 -24
  39. data/lib/mongo/auth/user.rb +76 -10
  40. data/lib/mongo/auth/x509/conversation.rb +28 -50
  41. data/lib/mongo/auth/x509.rb +29 -31
  42. data/lib/mongo/auth.rb +96 -17
  43. data/lib/mongo/background_thread.rb +173 -0
  44. data/lib/mongo/bson.rb +4 -1
  45. data/lib/mongo/bulk_write/combineable.rb +26 -2
  46. data/lib/mongo/bulk_write/ordered_combiner.rb +4 -1
  47. data/lib/mongo/bulk_write/result.rb +5 -2
  48. data/lib/mongo/bulk_write/result_combiner.rb +21 -8
  49. data/lib/mongo/bulk_write/transformable.rb +36 -12
  50. data/lib/mongo/bulk_write/unordered_combiner.rb +4 -1
  51. data/lib/mongo/bulk_write/validatable.rb +16 -2
  52. data/lib/mongo/bulk_write.rb +146 -51
  53. data/lib/mongo/caching_cursor.rb +77 -0
  54. data/lib/mongo/client.rb +1181 -92
  55. data/lib/mongo/client_encryption.rb +106 -0
  56. data/lib/mongo/cluster/periodic_executor.rb +105 -0
  57. data/lib/mongo/cluster/reapers/cursor_reaper.rb +192 -0
  58. data/lib/mongo/cluster/reapers/socket_reaper.rb +65 -0
  59. data/lib/mongo/cluster/sdam_flow.rb +626 -0
  60. data/lib/mongo/cluster/topology/base.rb +225 -0
  61. data/lib/mongo/cluster/topology/load_balanced.rb +102 -0
  62. data/lib/mongo/cluster/topology/no_replica_set_options.rb +37 -0
  63. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +172 -0
  64. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +30 -0
  65. data/lib/mongo/cluster/topology/sharded.rb +38 -92
  66. data/lib/mongo/cluster/topology/single.rb +46 -86
  67. data/lib/mongo/cluster/topology/unknown.rb +39 -121
  68. data/lib/mongo/cluster/topology.rb +92 -20
  69. data/lib/mongo/cluster.rb +889 -228
  70. data/lib/mongo/cluster_time.rb +142 -0
  71. data/lib/mongo/collection/view/aggregation.rb +52 -14
  72. data/lib/mongo/collection/view/builder/aggregation.rb +52 -7
  73. data/lib/mongo/collection/view/builder/map_reduce.rb +39 -37
  74. data/lib/mongo/collection/view/builder.rb +4 -5
  75. data/lib/mongo/collection/view/change_stream/retryable.rb +43 -0
  76. data/lib/mongo/collection/view/change_stream.rb +372 -0
  77. data/lib/mongo/collection/view/explainable.rb +32 -10
  78. data/lib/mongo/collection/view/immutable.rb +5 -2
  79. data/lib/mongo/collection/view/iterable.rb +145 -24
  80. data/lib/mongo/collection/view/map_reduce.rb +101 -38
  81. data/lib/mongo/collection/view/readable.rb +292 -70
  82. data/lib/mongo/collection/view/writable.rb +327 -65
  83. data/lib/mongo/collection/view.rb +74 -30
  84. data/lib/mongo/collection.rb +387 -63
  85. data/lib/mongo/crypt/auto_decryption_context.rb +43 -0
  86. data/lib/mongo/crypt/auto_encrypter.rb +182 -0
  87. data/lib/mongo/crypt/auto_encryption_context.rb +47 -0
  88. data/lib/mongo/crypt/binary.rb +158 -0
  89. data/lib/mongo/crypt/binding.rb +1232 -0
  90. data/lib/mongo/crypt/context.rb +138 -0
  91. data/lib/mongo/crypt/data_key_context.rb +165 -0
  92. data/lib/mongo/crypt/encryption_io.rb +309 -0
  93. data/lib/mongo/crypt/explicit_decryption_context.rb +43 -0
  94. data/lib/mongo/crypt/explicit_encrypter.rb +120 -0
  95. data/lib/mongo/crypt/explicit_encryption_context.rb +92 -0
  96. data/lib/mongo/crypt/handle.rb +318 -0
  97. data/lib/mongo/crypt/hooks.rb +93 -0
  98. data/lib/mongo/crypt/kms_context.rb +70 -0
  99. data/lib/mongo/crypt/status.rb +134 -0
  100. data/lib/mongo/crypt.rb +36 -0
  101. data/lib/mongo/cursor/kill_spec.rb +38 -0
  102. data/lib/mongo/cursor.rb +290 -63
  103. data/lib/mongo/database/view.rb +107 -26
  104. data/lib/mongo/database.rb +242 -31
  105. data/lib/mongo/dbref.rb +13 -3
  106. data/lib/mongo/distinguishing_semaphore.rb +58 -0
  107. data/lib/mongo/error/auth_error.rb +32 -0
  108. data/lib/mongo/error/bad_load_balancer_target.rb +26 -0
  109. data/lib/mongo/error/bulk_write_error.rb +38 -3
  110. data/lib/mongo/error/change_stream_resumable.rb +40 -0
  111. data/lib/mongo/error/closed_stream.rb +5 -2
  112. data/lib/mongo/error/connection_check_out_timeout.rb +51 -0
  113. data/lib/mongo/error/connection_perished.rb +26 -0
  114. data/lib/mongo/error/credential_check_error.rb +29 -0
  115. data/lib/mongo/error/crypt_error.rb +34 -0
  116. data/lib/mongo/error/extra_file_chunk.rb +4 -1
  117. data/lib/mongo/error/failed_string_prep_validation.rb +41 -0
  118. data/lib/mongo/error/file_not_found.rb +4 -1
  119. data/lib/mongo/error/handshake_error.rb +27 -0
  120. data/lib/mongo/error/insufficient_iteration_count.rb +41 -0
  121. data/lib/mongo/error/internal_driver_error.rb +25 -0
  122. data/lib/mongo/error/invalid_address.rb +27 -0
  123. data/lib/mongo/error/invalid_application_name.rb +41 -0
  124. data/lib/mongo/error/invalid_bulk_operation.rb +4 -1
  125. data/lib/mongo/error/invalid_bulk_operation_type.rb +4 -1
  126. data/lib/mongo/error/invalid_collection_name.rb +4 -1
  127. data/lib/mongo/error/invalid_cursor_operation.rb +30 -0
  128. data/lib/mongo/error/invalid_database_name.rb +4 -1
  129. data/lib/mongo/error/invalid_document.rb +4 -1
  130. data/lib/mongo/error/invalid_file.rb +4 -1
  131. data/lib/mongo/error/invalid_file_revision.rb +4 -1
  132. data/lib/mongo/error/invalid_min_pool_size.rb +38 -0
  133. data/lib/mongo/error/invalid_nonce.rb +5 -2
  134. data/lib/mongo/error/invalid_read_concern.rb +31 -0
  135. data/lib/mongo/error/invalid_read_option.rb +38 -0
  136. data/lib/mongo/error/invalid_replacement_document.rb +4 -1
  137. data/lib/mongo/error/invalid_server_auth_host.rb +25 -0
  138. data/lib/mongo/error/invalid_server_auth_response.rb +26 -0
  139. data/lib/mongo/error/invalid_server_preference.rb +37 -5
  140. data/lib/mongo/error/invalid_session.rb +40 -0
  141. data/lib/mongo/error/invalid_signature.rb +4 -1
  142. data/lib/mongo/error/invalid_transaction_operation.rb +85 -0
  143. data/lib/mongo/error/invalid_txt_record.rb +30 -0
  144. data/lib/mongo/error/invalid_update_document.rb +4 -1
  145. data/lib/mongo/error/invalid_uri.rb +11 -7
  146. data/lib/mongo/error/invalid_write_concern.rb +6 -3
  147. data/lib/mongo/error/kms_error.rb +25 -0
  148. data/lib/mongo/error/lint_error.rb +38 -0
  149. data/lib/mongo/error/max_bson_size.rb +18 -4
  150. data/lib/mongo/error/max_message_size.rb +4 -1
  151. data/lib/mongo/error/mismatched_domain.rb +30 -0
  152. data/lib/mongo/error/missing_file_chunk.rb +4 -1
  153. data/lib/mongo/error/missing_password.rb +32 -0
  154. data/lib/mongo/error/missing_resume_token.rb +42 -0
  155. data/lib/mongo/error/missing_scram_server_signature.rb +30 -0
  156. data/lib/mongo/error/missing_service_id.rb +26 -0
  157. data/lib/mongo/error/mongocryptd_spawn_error.rb +25 -0
  158. data/lib/mongo/error/multi_index_drop.rb +4 -1
  159. data/lib/mongo/error/need_primary_server.rb +4 -1
  160. data/lib/mongo/error/no_server_available.rb +17 -5
  161. data/lib/mongo/error/no_service_connection_available.rb +49 -0
  162. data/lib/mongo/error/no_srv_records.rb +29 -0
  163. data/lib/mongo/error/notable.rb +90 -0
  164. data/lib/mongo/error/operation_failure.rb +266 -13
  165. data/lib/mongo/error/parser.rb +220 -15
  166. data/lib/mongo/error/pool_closed_error.rb +53 -0
  167. data/lib/mongo/error/raise_original_error.rb +32 -0
  168. data/lib/mongo/error/sdam_error_detection.rb +83 -0
  169. data/lib/mongo/error/server_api_conflict.rb +26 -0
  170. data/lib/mongo/error/server_api_not_supported.rb +27 -0
  171. data/lib/mongo/error/server_certificate_revoked.rb +25 -0
  172. data/lib/mongo/error/session_ended.rb +30 -0
  173. data/lib/mongo/error/sessions_not_supported.rb +38 -0
  174. data/lib/mongo/error/socket_error.rb +8 -2
  175. data/lib/mongo/error/socket_timeout_error.rb +8 -2
  176. data/lib/mongo/error/unchangeable_collection_option.rb +4 -1
  177. data/lib/mongo/error/unexpected_chunk_length.rb +4 -1
  178. data/lib/mongo/error/unexpected_response.rb +4 -1
  179. data/lib/mongo/error/unknown_payload_type.rb +44 -0
  180. data/lib/mongo/error/unmet_dependency.rb +24 -0
  181. data/lib/mongo/error/unsupported_array_filters.rb +59 -0
  182. data/lib/mongo/error/unsupported_collation.rb +59 -0
  183. data/lib/mongo/error/unsupported_features.rb +4 -19
  184. data/lib/mongo/error/unsupported_message_type.rb +26 -0
  185. data/lib/mongo/error/unsupported_option.rb +104 -0
  186. data/lib/mongo/error/write_retryable.rb +30 -0
  187. data/lib/mongo/error.rb +147 -2
  188. data/lib/mongo/event/base.rb +45 -0
  189. data/lib/mongo/event/listeners.rb +4 -1
  190. data/lib/mongo/event/publisher.rb +4 -1
  191. data/lib/mongo/event/subscriber.rb +4 -1
  192. data/lib/mongo/event.rb +18 -8
  193. data/lib/mongo/grid/file/chunk.rb +10 -7
  194. data/lib/mongo/grid/file/info.rb +38 -5
  195. data/lib/mongo/grid/file.rb +9 -1
  196. data/lib/mongo/grid/fs_bucket.rb +147 -65
  197. data/lib/mongo/grid/stream/read.rb +68 -30
  198. data/lib/mongo/grid/stream/write.rb +37 -12
  199. data/lib/mongo/grid/stream.rb +4 -1
  200. data/lib/mongo/grid.rb +4 -1
  201. data/lib/mongo/id.rb +69 -0
  202. data/lib/mongo/index/view.rb +112 -38
  203. data/lib/mongo/index.rb +5 -1
  204. data/lib/mongo/lint.rb +105 -0
  205. data/lib/mongo/loggable.rb +9 -2
  206. data/lib/mongo/logger.rb +7 -6
  207. data/lib/mongo/monitoring/cmap_log_subscriber.rb +56 -0
  208. data/lib/mongo/monitoring/command_log_subscriber.rb +25 -5
  209. data/lib/mongo/monitoring/event/cmap/base.rb +31 -0
  210. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +88 -0
  211. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +59 -0
  212. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +74 -0
  213. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +75 -0
  214. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +106 -0
  215. data/lib/mongo/monitoring/event/cmap/connection_created.rb +67 -0
  216. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +67 -0
  217. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +63 -0
  218. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +68 -0
  219. data/lib/mongo/monitoring/event/cmap/pool_created.rb +75 -0
  220. data/lib/mongo/monitoring/event/cmap.rb +28 -0
  221. data/lib/mongo/monitoring/event/command_failed.rb +59 -8
  222. data/lib/mongo/monitoring/event/command_started.rb +102 -6
  223. data/lib/mongo/monitoring/event/command_succeeded.rb +45 -6
  224. data/lib/mongo/monitoring/event/secure.rb +59 -5
  225. data/lib/mongo/monitoring/event/server_closed.rb +62 -0
  226. data/lib/mongo/monitoring/event/server_description_changed.rb +99 -0
  227. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +92 -0
  228. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +65 -0
  229. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +84 -0
  230. data/lib/mongo/monitoring/event/server_opening.rb +62 -0
  231. data/lib/mongo/monitoring/event/topology_changed.rb +63 -0
  232. data/lib/mongo/monitoring/event/topology_closed.rb +57 -0
  233. data/lib/mongo/monitoring/event/topology_opening.rb +57 -0
  234. data/lib/mongo/monitoring/event.rb +15 -1
  235. data/lib/mongo/monitoring/publishable.rb +60 -44
  236. data/lib/mongo/monitoring/sdam_log_subscriber.rb +57 -0
  237. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +33 -0
  238. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +44 -0
  239. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +33 -0
  240. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +43 -0
  241. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +33 -0
  242. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +33 -0
  243. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +65 -0
  244. data/lib/mongo/monitoring.rb +245 -61
  245. data/lib/mongo/operation/aggregate/command.rb +55 -0
  246. data/lib/mongo/operation/aggregate/op_msg.rb +34 -0
  247. data/lib/mongo/operation/aggregate/result.rb +104 -0
  248. data/lib/mongo/operation/aggregate.rb +39 -0
  249. data/lib/mongo/operation/collections_info/command.rb +48 -0
  250. data/lib/mongo/operation/collections_info/result.rb +59 -0
  251. data/lib/mongo/operation/collections_info.rb +51 -0
  252. data/lib/mongo/operation/command/command.rb +41 -0
  253. data/lib/mongo/operation/command/op_msg.rb +31 -0
  254. data/lib/mongo/operation/command.rb +34 -0
  255. data/lib/mongo/operation/context.rb +120 -0
  256. data/lib/mongo/operation/count/command.rb +47 -0
  257. data/lib/mongo/operation/count/op_msg.rb +38 -0
  258. data/lib/mongo/operation/count.rb +34 -0
  259. data/lib/mongo/operation/create/command.rb +47 -0
  260. data/lib/mongo/operation/create/op_msg.rb +39 -0
  261. data/lib/mongo/operation/create.rb +34 -0
  262. data/lib/mongo/operation/create_index/command.rb +61 -0
  263. data/lib/mongo/operation/create_index/op_msg.rb +54 -0
  264. data/lib/mongo/operation/create_index.rb +34 -0
  265. data/lib/mongo/operation/create_user/command.rb +46 -0
  266. data/lib/mongo/operation/create_user/op_msg.rb +38 -0
  267. data/lib/mongo/operation/create_user.rb +34 -0
  268. data/lib/mongo/operation/delete/bulk_result.rb +51 -0
  269. data/lib/mongo/operation/delete/command.rb +52 -0
  270. data/lib/mongo/operation/delete/legacy.rb +64 -0
  271. data/lib/mongo/operation/delete/op_msg.rb +55 -0
  272. data/lib/mongo/operation/delete/result.rb +48 -0
  273. data/lib/mongo/operation/delete.rb +41 -0
  274. data/lib/mongo/operation/distinct/command.rb +47 -0
  275. data/lib/mongo/operation/distinct/op_msg.rb +40 -0
  276. data/lib/mongo/operation/distinct.rb +34 -0
  277. data/lib/mongo/operation/drop/command.rb +41 -0
  278. data/lib/mongo/operation/drop/op_msg.rb +32 -0
  279. data/lib/mongo/operation/drop.rb +34 -0
  280. data/lib/mongo/operation/drop_database/command.rb +41 -0
  281. data/lib/mongo/operation/drop_database/op_msg.rb +32 -0
  282. data/lib/mongo/operation/drop_database.rb +34 -0
  283. data/lib/mongo/operation/drop_index/command.rb +45 -0
  284. data/lib/mongo/operation/drop_index/op_msg.rb +38 -0
  285. data/lib/mongo/operation/drop_index.rb +34 -0
  286. data/lib/mongo/operation/explain/command.rb +58 -0
  287. data/lib/mongo/operation/explain/legacy.rb +52 -0
  288. data/lib/mongo/operation/explain/op_msg.rb +48 -0
  289. data/lib/mongo/operation/explain/result.rb +56 -0
  290. data/lib/mongo/operation/explain.rb +36 -0
  291. data/lib/mongo/operation/find/builder/command.rb +110 -0
  292. data/lib/mongo/operation/find/builder/flags.rb +61 -0
  293. data/lib/mongo/operation/find/builder/legacy.rb +123 -0
  294. data/lib/mongo/operation/find/builder/modifiers.rb +89 -0
  295. data/lib/mongo/operation/find/builder.rb +21 -0
  296. data/lib/mongo/operation/find/command.rb +51 -0
  297. data/lib/mongo/operation/find/legacy/result.rb +46 -0
  298. data/lib/mongo/operation/find/legacy.rb +52 -0
  299. data/lib/mongo/operation/find/op_msg.rb +46 -0
  300. data/lib/mongo/operation/find/result.rb +76 -0
  301. data/lib/mongo/operation/find.rb +37 -0
  302. data/lib/mongo/operation/get_more/command.rb +43 -0
  303. data/lib/mongo/operation/get_more/command_builder.rb +38 -0
  304. data/lib/mongo/operation/get_more/legacy.rb +39 -0
  305. data/lib/mongo/operation/get_more/op_msg.rb +34 -0
  306. data/lib/mongo/operation/get_more/result.rb +75 -0
  307. data/lib/mongo/operation/get_more.rb +37 -0
  308. data/lib/mongo/operation/indexes/command.rb +42 -0
  309. data/lib/mongo/operation/indexes/legacy.rb +48 -0
  310. data/lib/mongo/operation/indexes/op_msg.rb +34 -0
  311. data/lib/mongo/operation/indexes/result.rb +105 -0
  312. data/lib/mongo/operation/indexes.rb +50 -0
  313. data/lib/mongo/operation/insert/bulk_result.rb +112 -0
  314. data/lib/mongo/operation/insert/command.rb +59 -0
  315. data/lib/mongo/operation/insert/legacy.rb +68 -0
  316. data/lib/mongo/operation/insert/op_msg.rb +54 -0
  317. data/lib/mongo/operation/insert/result.rb +75 -0
  318. data/lib/mongo/operation/insert.rb +44 -0
  319. data/lib/mongo/operation/kill_cursors/command.rb +48 -0
  320. data/lib/mongo/operation/kill_cursors/command_builder.rb +35 -0
  321. data/lib/mongo/operation/kill_cursors/legacy.rb +41 -0
  322. data/lib/mongo/operation/kill_cursors/op_msg.rb +42 -0
  323. data/lib/mongo/operation/kill_cursors.rb +12 -16
  324. data/lib/mongo/operation/list_collections/command.rb +46 -0
  325. data/lib/mongo/operation/list_collections/op_msg.rb +39 -0
  326. data/lib/mongo/operation/list_collections/result.rb +113 -0
  327. data/lib/mongo/operation/list_collections.rb +35 -0
  328. data/lib/mongo/operation/map_reduce/command.rb +51 -0
  329. data/lib/mongo/operation/map_reduce/op_msg.rb +34 -0
  330. data/lib/mongo/operation/map_reduce/result.rb +142 -0
  331. data/lib/mongo/operation/map_reduce.rb +35 -0
  332. data/lib/mongo/operation/op_msg_base.rb +33 -0
  333. data/lib/mongo/operation/parallel_scan/command.rb +57 -0
  334. data/lib/mongo/operation/parallel_scan/op_msg.rb +46 -0
  335. data/lib/mongo/operation/parallel_scan/result.rb +68 -0
  336. data/lib/mongo/operation/parallel_scan.rb +35 -0
  337. data/lib/mongo/operation/remove_user/command.rb +46 -0
  338. data/lib/mongo/operation/remove_user/op_msg.rb +38 -0
  339. data/lib/mongo/operation/remove_user.rb +34 -0
  340. data/lib/mongo/operation/result.rb +195 -39
  341. data/lib/mongo/operation/shared/bypass_document_validation.rb +46 -0
  342. data/lib/mongo/operation/shared/causal_consistency_supported.rb +45 -0
  343. data/lib/mongo/operation/shared/executable.rb +130 -0
  344. data/lib/mongo/operation/shared/executable_no_validate.rb +32 -0
  345. data/lib/mongo/operation/shared/executable_transaction_label.rb +30 -0
  346. data/lib/mongo/operation/shared/idable.rb +68 -0
  347. data/lib/mongo/operation/shared/limited.rb +42 -0
  348. data/lib/mongo/operation/shared/object_id_generator.rb +40 -0
  349. data/lib/mongo/operation/shared/op_msg_or_command.rb +41 -0
  350. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +44 -0
  351. data/lib/mongo/operation/shared/polymorphic_lookup.rb +36 -0
  352. data/lib/mongo/operation/shared/polymorphic_operation.rb +42 -0
  353. data/lib/mongo/operation/shared/polymorphic_result.rb +50 -0
  354. data/lib/mongo/operation/shared/read_preference_supported.rb +116 -0
  355. data/lib/mongo/operation/shared/response_handling.rb +173 -0
  356. data/lib/mongo/operation/shared/result/aggregatable.rb +74 -0
  357. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +32 -0
  358. data/lib/mongo/operation/shared/sessions_supported.rb +254 -0
  359. data/lib/mongo/operation/shared/specifiable.rb +567 -0
  360. data/lib/mongo/operation/shared/validatable.rb +87 -0
  361. data/lib/mongo/operation/shared/write.rb +90 -0
  362. data/lib/mongo/operation/shared/write_concern_supported.rb +43 -0
  363. data/lib/mongo/operation/update/bulk_result.rb +129 -0
  364. data/lib/mongo/operation/update/command.rb +53 -0
  365. data/lib/mongo/operation/update/legacy/result.rb +112 -0
  366. data/lib/mongo/operation/update/legacy.rb +76 -0
  367. data/lib/mongo/operation/update/op_msg.rb +51 -0
  368. data/lib/mongo/operation/update/result.rb +113 -0
  369. data/lib/mongo/operation/update.rb +41 -0
  370. data/lib/mongo/operation/update_user/command.rb +45 -0
  371. data/lib/mongo/operation/update_user/op_msg.rb +38 -0
  372. data/lib/mongo/operation/update_user.rb +34 -0
  373. data/lib/mongo/operation/users_info/command.rb +46 -0
  374. data/lib/mongo/operation/users_info/op_msg.rb +39 -0
  375. data/lib/mongo/operation/users_info/result.rb +48 -0
  376. data/lib/mongo/operation/users_info.rb +35 -0
  377. data/lib/mongo/operation/write_command/command.rb +51 -0
  378. data/lib/mongo/operation/write_command/op_msg.rb +43 -0
  379. data/lib/mongo/operation/write_command.rb +32 -0
  380. data/lib/mongo/operation.rb +83 -21
  381. data/lib/mongo/options/mapper.rb +13 -3
  382. data/lib/mongo/options/redacted.rb +4 -1
  383. data/lib/mongo/options.rb +4 -1
  384. data/lib/mongo/protocol/bit_vector.rb +8 -4
  385. data/lib/mongo/protocol/compressed.rb +184 -0
  386. data/lib/mongo/protocol/delete.rb +16 -8
  387. data/lib/mongo/protocol/get_more.rb +24 -15
  388. data/lib/mongo/protocol/insert.rb +20 -10
  389. data/lib/mongo/protocol/kill_cursors.rb +22 -21
  390. data/lib/mongo/protocol/message.rb +187 -23
  391. data/lib/mongo/protocol/msg.rb +404 -0
  392. data/lib/mongo/protocol/query.rb +120 -41
  393. data/lib/mongo/protocol/registry.rb +79 -0
  394. data/lib/mongo/protocol/reply.rb +23 -15
  395. data/lib/mongo/protocol/serializers.rb +283 -12
  396. data/lib/mongo/protocol/update.rb +22 -10
  397. data/lib/mongo/protocol.rb +6 -0
  398. data/lib/mongo/query_cache.rb +275 -0
  399. data/lib/mongo/retryable.rb +414 -47
  400. data/lib/mongo/semaphore.rb +49 -0
  401. data/lib/mongo/server/app_metadata.rb +267 -0
  402. data/lib/mongo/server/connection.rb +251 -101
  403. data/lib/mongo/server/connection_base.rb +276 -0
  404. data/lib/mongo/server/connection_common.rb +205 -0
  405. data/lib/mongo/server/connection_pool/generation_manager.rb +71 -0
  406. data/lib/mongo/server/connection_pool/populator.rb +61 -0
  407. data/lib/mongo/server/connection_pool.rb +796 -57
  408. data/lib/mongo/server/description/features.rb +84 -20
  409. data/lib/mongo/server/description/load_balancer.rb +33 -0
  410. data/lib/mongo/server/description.rb +398 -73
  411. data/lib/mongo/server/monitor/app_metadata.rb +37 -0
  412. data/lib/mongo/server/monitor/connection.rb +192 -61
  413. data/lib/mongo/server/monitor.rb +251 -92
  414. data/lib/mongo/server/pending_connection.rb +288 -0
  415. data/lib/mongo/server/push_monitor/connection.rb +31 -0
  416. data/lib/mongo/server/push_monitor.rb +194 -0
  417. data/lib/mongo/server/round_trip_time_averager.rb +76 -0
  418. data/lib/mongo/server.rb +454 -76
  419. data/lib/mongo/server_selector/base.rb +629 -0
  420. data/lib/mongo/server_selector/nearest.rb +44 -28
  421. data/lib/mongo/server_selector/primary.rb +40 -18
  422. data/lib/mongo/server_selector/primary_preferred.rb +47 -26
  423. data/lib/mongo/server_selector/secondary.rb +41 -23
  424. data/lib/mongo/server_selector/secondary_preferred.rb +42 -25
  425. data/lib/mongo/server_selector.rb +27 -8
  426. data/lib/mongo/session/server_session.rb +122 -0
  427. data/lib/mongo/session/session_pool.rb +166 -0
  428. data/lib/mongo/session.rb +1094 -0
  429. data/lib/mongo/socket/ocsp_cache.rb +100 -0
  430. data/lib/mongo/socket/ocsp_verifier.rb +345 -0
  431. data/lib/mongo/socket/ssl.rb +299 -61
  432. data/lib/mongo/socket/tcp.rb +48 -32
  433. data/lib/mongo/socket/unix.rb +24 -34
  434. data/lib/mongo/socket.rb +310 -48
  435. data/lib/mongo/srv/monitor.rb +113 -0
  436. data/lib/mongo/srv/resolver.rb +137 -0
  437. data/lib/mongo/srv/result.rb +128 -0
  438. data/lib/mongo/srv.rb +20 -0
  439. data/lib/mongo/timeout.rb +54 -0
  440. data/lib/mongo/topology_version.rb +92 -0
  441. data/lib/mongo/uri/options_mapper.rb +624 -0
  442. data/lib/mongo/uri/srv_protocol.rb +239 -0
  443. data/lib/mongo/uri.rb +291 -316
  444. data/lib/mongo/utils.rb +111 -0
  445. data/lib/mongo/version.rb +5 -2
  446. data/lib/mongo/write_concern/acknowledged.rb +17 -4
  447. data/lib/mongo/write_concern/base.rb +70 -0
  448. data/lib/mongo/write_concern/unacknowledged.rb +17 -4
  449. data/lib/mongo/write_concern.rb +19 -34
  450. data/lib/mongo.rb +69 -5
  451. data/mongo.gemspec +14 -6
  452. data/spec/NOTES.aws-auth.md +296 -0
  453. data/spec/README.aws-auth.md +318 -0
  454. data/spec/README.md +715 -0
  455. data/spec/USERS.md +72 -0
  456. data/spec/atlas/atlas_connectivity_spec.rb +27 -0
  457. data/spec/atlas/operations_spec.rb +28 -0
  458. data/spec/integration/auth_spec.rb +309 -0
  459. data/spec/integration/awaited_ismaster_spec.rb +31 -0
  460. data/spec/integration/aws_auth_request_spec.rb +77 -0
  461. data/spec/integration/aws_credentials_retriever_spec.rb +106 -0
  462. data/spec/integration/bson_symbol_spec.rb +39 -0
  463. data/spec/integration/bulk_insert_spec.rb +83 -0
  464. data/spec/integration/bulk_write_error_message_spec.rb +41 -0
  465. data/spec/integration/bulk_write_spec.rb +70 -0
  466. data/spec/integration/change_stream_examples_spec.rb +208 -0
  467. data/spec/integration/change_stream_spec.rb +808 -0
  468. data/spec/integration/check_clean_slate_spec.rb +19 -0
  469. data/spec/integration/client_authentication_options_spec.rb +514 -0
  470. data/spec/integration/client_connectivity_spec.rb +41 -0
  471. data/spec/integration/client_construction_aws_auth_spec.rb +194 -0
  472. data/spec/integration/client_construction_spec.rb +293 -0
  473. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +360 -0
  474. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +306 -0
  475. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +75 -0
  476. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +82 -0
  477. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +224 -0
  478. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +604 -0
  479. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +190 -0
  480. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +81 -0
  481. data/spec/integration/client_side_encryption/client_close_spec.rb +66 -0
  482. data/spec/integration/client_side_encryption/corpus_spec.rb +236 -0
  483. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +135 -0
  484. data/spec/integration/client_side_encryption/data_key_spec.rb +168 -0
  485. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +117 -0
  486. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +144 -0
  487. data/spec/integration/client_side_encryption/views_spec.rb +47 -0
  488. data/spec/integration/client_spec.rb +49 -0
  489. data/spec/integration/client_update_spec.rb +157 -0
  490. data/spec/integration/collection_indexes_prose_spec.rb +58 -0
  491. data/spec/integration/command_monitoring_spec.rb +184 -0
  492. data/spec/integration/command_spec.rb +179 -0
  493. data/spec/integration/connect_single_rs_name_spec.rb +75 -0
  494. data/spec/integration/connection_pool_populator_spec.rb +305 -0
  495. data/spec/integration/connection_spec.rb +353 -0
  496. data/spec/integration/crud_spec.rb +366 -0
  497. data/spec/integration/cursor_pinning_spec.rb +121 -0
  498. data/spec/integration/cursor_reaping_spec.rb +143 -0
  499. data/spec/integration/docs_examples_spec.rb +207 -0
  500. data/spec/integration/error_detection_spec.rb +42 -0
  501. data/spec/integration/fork_reconnect_spec.rb +200 -0
  502. data/spec/integration/get_more_spec.rb +42 -0
  503. data/spec/integration/grid_fs_bucket_spec.rb +51 -0
  504. data/spec/integration/heartbeat_events_spec.rb +102 -0
  505. data/spec/integration/map_reduce_spec.rb +77 -0
  506. data/spec/integration/mmapv1_spec.rb +31 -0
  507. data/spec/integration/mongos_pinning_spec.rb +37 -0
  508. data/spec/integration/ocsp_connectivity_spec.rb +29 -0
  509. data/spec/integration/ocsp_verifier_cache_spec.rb +191 -0
  510. data/spec/integration/ocsp_verifier_spec.rb +355 -0
  511. data/spec/integration/operation_failure_code_spec.rb +29 -0
  512. data/spec/integration/operation_failure_message_spec.rb +90 -0
  513. data/spec/integration/query_cache_spec.rb +1093 -0
  514. data/spec/integration/query_cache_transactions_spec.rb +193 -0
  515. data/spec/integration/read_concern_spec.rb +92 -0
  516. data/spec/integration/read_preference_spec.rb +544 -0
  517. data/spec/integration/reconnect_spec.rb +195 -0
  518. data/spec/integration/retryable_errors_spec.rb +286 -0
  519. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +764 -0
  520. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +405 -0
  521. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +18 -0
  522. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +27 -0
  523. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +28 -0
  524. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +220 -0
  525. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +235 -0
  526. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +113 -0
  527. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +22 -0
  528. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +28 -0
  529. data/spec/integration/retryable_writes/shared/supports_retries.rb +19 -0
  530. data/spec/integration/retryable_writes_errors_spec.rb +34 -0
  531. data/spec/integration/sdam_error_handling_spec.rb +426 -0
  532. data/spec/integration/sdam_events_spec.rb +138 -0
  533. data/spec/integration/sdam_prose_spec.rb +67 -0
  534. data/spec/integration/secondary_reads_spec.rb +102 -0
  535. data/spec/integration/server_description_spec.rb +48 -0
  536. data/spec/integration/server_monitor_spec.rb +56 -0
  537. data/spec/integration/server_selection_spec.rb +39 -0
  538. data/spec/integration/server_selector_spec.rb +105 -0
  539. data/spec/integration/server_spec.rb +69 -0
  540. data/spec/integration/shell_examples_spec.rb +984 -0
  541. data/spec/integration/size_limit_spec.rb +115 -0
  542. data/spec/integration/snappy_compression_spec.rb +28 -0
  543. data/spec/integration/srv_monitoring_spec.rb +406 -0
  544. data/spec/integration/srv_spec.rb +59 -0
  545. data/spec/integration/ssl_uri_options_spec.rb +28 -0
  546. data/spec/integration/step_down_spec.rb +207 -0
  547. data/spec/integration/time_zone_querying_spec.rb +55 -0
  548. data/spec/integration/transaction_pinning_spec.rb +120 -0
  549. data/spec/integration/transactions_api_examples_spec.rb +62 -0
  550. data/spec/integration/transactions_examples_spec.rb +235 -0
  551. data/spec/integration/truncated_utf8_spec.rb +26 -0
  552. data/spec/integration/versioned_api_examples_spec.rb +114 -0
  553. data/spec/integration/x509_auth_spec.rb +112 -0
  554. data/spec/integration/zlib_compression_spec.rb +28 -0
  555. data/spec/integration/zstd_compression_spec.rb +29 -0
  556. data/spec/kerberos/kerberos_spec.rb +94 -0
  557. data/spec/lite_spec_helper.rb +167 -0
  558. data/spec/mongo/address/ipv4_spec.rb +8 -1
  559. data/spec/mongo/address/ipv6_spec.rb +36 -1
  560. data/spec/mongo/address/unix_spec.rb +5 -1
  561. data/spec/mongo/address/validator_spec.rb +54 -0
  562. data/spec/mongo/address_spec.rb +120 -7
  563. data/spec/mongo/auth/aws/request_region_spec.rb +45 -0
  564. data/spec/mongo/auth/aws/request_spec.rb +79 -0
  565. data/spec/mongo/auth/cr_spec.rb +34 -23
  566. data/spec/mongo/auth/gssapi/conversation_spec.rb +124 -0
  567. data/spec/mongo/auth/invalid_mechanism_spec.rb +14 -0
  568. data/spec/mongo/auth/ldap/conversation_spec.rb +6 -3
  569. data/spec/mongo/auth/ldap_spec.rb +19 -21
  570. data/spec/mongo/auth/scram/conversation_spec.rb +66 -58
  571. data/spec/mongo/auth/scram256/conversation_spec.rb +174 -0
  572. data/spec/mongo/auth/scram_negotiation_spec.rb +531 -0
  573. data/spec/mongo/auth/scram_spec.rb +97 -39
  574. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +116 -0
  575. data/spec/mongo/auth/stringprep_spec.rb +191 -0
  576. data/spec/mongo/auth/user/view_spec.rb +404 -70
  577. data/spec/mongo/auth/user_spec.rb +165 -12
  578. data/spec/mongo/auth/x509/conversation_spec.rb +72 -0
  579. data/spec/mongo/auth/x509_spec.rb +46 -22
  580. data/spec/mongo/auth_spec.rb +7 -4
  581. data/spec/mongo/bson_spec.rb +3 -0
  582. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +9 -6
  583. data/spec/mongo/bulk_write/result_spec.rb +127 -0
  584. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +7 -4
  585. data/spec/mongo/bulk_write_spec.rb +1534 -254
  586. data/spec/mongo/caching_cursor_spec.rb +73 -0
  587. data/spec/mongo/client_construction_spec.rb +2620 -0
  588. data/spec/mongo/client_encryption_spec.rb +414 -0
  589. data/spec/mongo/client_spec.rb +525 -358
  590. data/spec/mongo/cluster/cursor_reaper_spec.rb +77 -88
  591. data/spec/mongo/cluster/periodic_executor_spec.rb +21 -0
  592. data/spec/mongo/cluster/socket_reaper_spec.rb +46 -0
  593. data/spec/mongo/cluster/topology/replica_set_spec.rb +414 -175
  594. data/spec/mongo/cluster/topology/sharded_spec.rb +72 -47
  595. data/spec/mongo/cluster/topology/single_spec.rb +112 -28
  596. data/spec/mongo/cluster/topology/unknown_spec.rb +44 -108
  597. data/spec/mongo/cluster/topology_spec.rb +139 -19
  598. data/spec/mongo/cluster_spec.rb +509 -144
  599. data/spec/mongo/cluster_time_spec.rb +151 -0
  600. data/spec/mongo/collection/view/aggregation_spec.rb +308 -20
  601. data/spec/mongo/collection/view/builder/find_command_spec.rb +88 -10
  602. data/spec/mongo/collection/view/builder/op_query_spec.rb +7 -0
  603. data/spec/mongo/collection/view/change_stream_resume_spec.rb +397 -0
  604. data/spec/mongo/collection/view/change_stream_spec.rb +547 -0
  605. data/spec/mongo/collection/view/explainable_spec.rb +91 -5
  606. data/spec/mongo/collection/view/immutable_spec.rb +4 -1
  607. data/spec/mongo/collection/view/iterable_spec.rb +41 -0
  608. data/spec/mongo/collection/view/map_reduce_spec.rb +462 -23
  609. data/spec/mongo/collection/view/readable_spec.rb +461 -48
  610. data/spec/mongo/collection/view/writable_spec.rb +1232 -47
  611. data/spec/mongo/collection/view_spec.rb +81 -7
  612. data/spec/mongo/collection_crud_spec.rb +4365 -0
  613. data/spec/mongo/collection_ddl_spec.rb +537 -0
  614. data/spec/mongo/collection_spec.rb +485 -1982
  615. data/spec/mongo/crypt/auto_decryption_context_spec.rb +93 -0
  616. data/spec/mongo/crypt/auto_encrypter_spec.rb +190 -0
  617. data/spec/mongo/crypt/auto_encryption_context_spec.rb +110 -0
  618. data/spec/mongo/crypt/binary_spec.rb +113 -0
  619. data/spec/mongo/crypt/binding/binary_spec.rb +54 -0
  620. data/spec/mongo/crypt/binding/context_spec.rb +255 -0
  621. data/spec/mongo/crypt/binding/helpers_spec.rb +44 -0
  622. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +142 -0
  623. data/spec/mongo/crypt/binding/status_spec.rb +97 -0
  624. data/spec/mongo/crypt/binding/version_spec.rb +20 -0
  625. data/spec/mongo/crypt/binding_unloaded_spec.rb +23 -0
  626. data/spec/mongo/crypt/data_key_context_spec.rb +216 -0
  627. data/spec/mongo/crypt/encryption_io_spec.rb +139 -0
  628. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +75 -0
  629. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +173 -0
  630. data/spec/mongo/crypt/handle_spec.rb +235 -0
  631. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +111 -0
  632. data/spec/mongo/crypt/status_spec.rb +150 -0
  633. data/spec/mongo/cursor/builder/get_more_command_spec.rb +46 -11
  634. data/spec/mongo/cursor/builder/op_get_more_spec.rb +20 -4
  635. data/spec/mongo/cursor_spec.rb +395 -47
  636. data/spec/mongo/database_spec.rb +905 -68
  637. data/spec/mongo/dbref_spec.rb +3 -0
  638. data/spec/mongo/distinguishing_semaphore_spec.rb +66 -0
  639. data/spec/mongo/error/bulk_write_error_spec.rb +52 -0
  640. data/spec/mongo/error/crypt_error_spec.rb +29 -0
  641. data/spec/mongo/error/max_bson_size_spec.rb +38 -0
  642. data/spec/mongo/error/no_server_available_spec.rb +35 -0
  643. data/spec/mongo/error/notable_spec.rb +62 -0
  644. data/spec/mongo/error/operation_failure_heavy_spec.rb +61 -0
  645. data/spec/mongo/error/operation_failure_spec.rb +553 -0
  646. data/spec/mongo/error/parser_spec.rb +432 -11
  647. data/spec/mongo/error/unsupported_option_spec.rb +57 -0
  648. data/spec/mongo/event/publisher_spec.rb +3 -0
  649. data/spec/mongo/event/subscriber_spec.rb +3 -0
  650. data/spec/mongo/grid/file/chunk_spec.rb +7 -4
  651. data/spec/mongo/grid/file/info_spec.rb +6 -3
  652. data/spec/mongo/grid/file_spec.rb +4 -1
  653. data/spec/mongo/grid/fs_bucket_spec.rb +336 -205
  654. data/spec/mongo/grid/stream/read_spec.rb +44 -27
  655. data/spec/mongo/grid/stream/write_spec.rb +93 -36
  656. data/spec/mongo/grid/stream_spec.rb +4 -1
  657. data/spec/mongo/id_spec.rb +38 -0
  658. data/spec/mongo/index/view_spec.rb +832 -70
  659. data/spec/mongo/lint_spec.rb +231 -0
  660. data/spec/mongo/logger_spec.rb +17 -12
  661. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +3 -0
  662. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +26 -0
  663. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +22 -0
  664. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +33 -0
  665. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +33 -0
  666. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +30 -0
  667. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +27 -0
  668. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +27 -0
  669. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +22 -0
  670. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +29 -0
  671. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +36 -0
  672. data/spec/mongo/monitoring/event/command_failed_spec.rb +87 -0
  673. data/spec/mongo/monitoring/event/command_started_spec.rb +30 -5
  674. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +71 -9
  675. data/spec/mongo/monitoring/event/secure_spec.rb +71 -5
  676. data/spec/mongo/monitoring/event/server_closed_spec.rb +38 -0
  677. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +38 -0
  678. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +34 -0
  679. data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +34 -0
  680. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +34 -0
  681. data/spec/mongo/monitoring/event/server_opening_spec.rb +38 -0
  682. data/spec/mongo/monitoring/event/topology_changed_spec.rb +44 -0
  683. data/spec/mongo/monitoring/event/topology_closed_spec.rb +38 -0
  684. data/spec/mongo/monitoring/event/topology_opening_spec.rb +38 -0
  685. data/spec/mongo/monitoring_spec.rb +33 -5
  686. data/spec/mongo/operation/aggregate/result_spec.rb +90 -0
  687. data/spec/mongo/operation/aggregate_spec.rb +76 -0
  688. data/spec/mongo/operation/collections_info_spec.rb +48 -0
  689. data/spec/mongo/operation/command_spec.rb +86 -0
  690. data/spec/mongo/operation/create_index_spec.rb +62 -0
  691. data/spec/mongo/operation/create_user_spec.rb +53 -0
  692. data/spec/mongo/operation/delete/bulk_spec.rb +245 -0
  693. data/spec/mongo/operation/delete/command_spec.rb +115 -0
  694. data/spec/mongo/operation/delete/op_msg_spec.rb +257 -0
  695. data/spec/mongo/operation/delete_spec.rb +233 -0
  696. data/spec/mongo/operation/drop_index_spec.rb +61 -0
  697. data/spec/mongo/operation/find/builder/flags_spec.rb +109 -0
  698. data/spec/mongo/operation/find/builder/modifiers_spec.rb +213 -0
  699. data/spec/mongo/operation/find/legacy_spec.rb +131 -0
  700. data/spec/mongo/operation/get_more_spec.rb +63 -0
  701. data/spec/mongo/operation/indexes_spec.rb +41 -0
  702. data/spec/mongo/operation/insert/bulk_spec.rb +273 -0
  703. data/spec/mongo/operation/insert/command_spec.rb +118 -0
  704. data/spec/mongo/operation/insert/op_msg_spec.rb +288 -0
  705. data/spec/mongo/operation/insert_spec.rb +290 -0
  706. data/spec/mongo/operation/kill_cursors_spec.rb +10 -4
  707. data/spec/mongo/operation/limited_spec.rb +8 -3
  708. data/spec/mongo/operation/map_reduce_spec.rb +131 -0
  709. data/spec/mongo/operation/read_preference_legacy_spec.rb +360 -0
  710. data/spec/mongo/operation/read_preference_op_msg_spec.rb +309 -0
  711. data/spec/mongo/operation/remove_user_spec.rb +52 -0
  712. data/spec/mongo/operation/result_spec.rb +46 -6
  713. data/spec/mongo/operation/specifiable_spec.rb +5 -2
  714. data/spec/mongo/operation/update/bulk_spec.rb +239 -0
  715. data/spec/mongo/operation/update/command_spec.rb +122 -0
  716. data/spec/mongo/operation/update/op_msg_spec.rb +263 -0
  717. data/spec/mongo/operation/update_spec.rb +264 -0
  718. data/spec/mongo/operation/update_user_spec.rb +52 -0
  719. data/spec/mongo/options/redacted_spec.rb +3 -0
  720. data/spec/mongo/protocol/compressed_spec.rb +83 -0
  721. data/spec/mongo/protocol/delete_spec.rb +27 -9
  722. data/spec/mongo/protocol/get_more_spec.rb +29 -11
  723. data/spec/mongo/protocol/insert_spec.rb +27 -9
  724. data/spec/mongo/protocol/kill_cursors_spec.rb +24 -6
  725. data/spec/mongo/protocol/msg_spec.rb +528 -0
  726. data/spec/mongo/protocol/query_spec.rb +62 -14
  727. data/spec/mongo/protocol/registry_spec.rb +34 -0
  728. data/spec/mongo/protocol/reply_spec.rb +18 -1
  729. data/spec/mongo/protocol/update_spec.rb +28 -10
  730. data/spec/mongo/query_cache_middleware_spec.rb +55 -0
  731. data/spec/mongo/query_cache_spec.rb +287 -0
  732. data/spec/mongo/retryable_spec.rb +468 -97
  733. data/spec/mongo/semaphore_spec.rb +54 -0
  734. data/spec/mongo/server/app_metadata_spec.rb +170 -0
  735. data/spec/mongo/server/connection_auth_spec.rb +136 -0
  736. data/spec/mongo/server/connection_common_spec.rb +75 -0
  737. data/spec/mongo/server/connection_pool/populator_spec.rb +106 -0
  738. data/spec/mongo/server/connection_pool_spec.rb +970 -88
  739. data/spec/mongo/server/connection_spec.rb +939 -172
  740. data/spec/mongo/server/description/features_spec.rb +96 -29
  741. data/spec/mongo/server/description_query_methods_spec.rb +291 -0
  742. data/spec/mongo/server/description_spec.rb +627 -575
  743. data/spec/mongo/server/monitor/app_metadata_spec.rb +25 -0
  744. data/spec/mongo/server/monitor/connection_spec.rb +175 -0
  745. data/spec/mongo/server/monitor_spec.rb +180 -103
  746. data/spec/mongo/server/round_trip_time_averager_spec.rb +48 -0
  747. data/spec/mongo/server_selector/nearest_spec.rb +107 -27
  748. data/spec/mongo/server_selector/primary_preferred_spec.rb +110 -30
  749. data/spec/mongo/server_selector/primary_spec.rb +73 -13
  750. data/spec/mongo/server_selector/secondary_preferred_spec.rb +125 -29
  751. data/spec/mongo/server_selector/secondary_spec.rb +102 -22
  752. data/spec/mongo/server_selector_spec.rb +325 -4
  753. data/spec/mongo/server_spec.rb +315 -76
  754. data/spec/mongo/session/server_session_spec.rb +62 -0
  755. data/spec/mongo/session/session_pool_spec.rb +272 -0
  756. data/spec/mongo/session_spec.rb +348 -0
  757. data/spec/mongo/session_transaction_spec.rb +206 -0
  758. data/spec/mongo/socket/ssl_spec.rb +742 -72
  759. data/spec/mongo/socket/tcp_spec.rb +17 -0
  760. data/spec/mongo/socket/unix_spec.rb +13 -9
  761. data/spec/mongo/socket_spec.rb +119 -0
  762. data/spec/mongo/srv/monitor_spec.rb +233 -0
  763. data/spec/mongo/srv/result_spec.rb +57 -0
  764. data/spec/mongo/timeout_spec.rb +42 -0
  765. data/spec/mongo/tls_context_hooks_spec.rb +40 -0
  766. data/spec/mongo/uri/srv_protocol_spec.rb +1108 -0
  767. data/spec/mongo/uri_option_parsing_spec.rb +625 -0
  768. data/spec/mongo/uri_spec.rb +514 -82
  769. data/spec/mongo/utils_spec.rb +56 -0
  770. data/spec/mongo/write_concern/acknowledged_spec.rb +14 -0
  771. data/spec/mongo/write_concern/unacknowledged_spec.rb +14 -0
  772. data/spec/mongo/write_concern_spec.rb +90 -4
  773. data/spec/runners/auth.rb +140 -0
  774. data/spec/runners/change_streams/outcome.rb +45 -0
  775. data/spec/runners/change_streams/spec.rb +60 -0
  776. data/spec/runners/change_streams/test.rb +232 -0
  777. data/spec/runners/cmap/verifier.rb +48 -0
  778. data/spec/runners/cmap.rb +373 -0
  779. data/spec/runners/command_monitoring.rb +346 -0
  780. data/spec/runners/connection_string.rb +385 -0
  781. data/spec/runners/crud/context.rb +30 -0
  782. data/spec/runners/crud/operation.rb +471 -0
  783. data/spec/runners/crud/outcome.rb +56 -0
  784. data/spec/runners/crud/requirement.rb +134 -0
  785. data/spec/runners/crud/spec.rb +73 -0
  786. data/spec/runners/crud/test.rb +123 -0
  787. data/spec/runners/crud/test_base.rb +53 -0
  788. data/spec/runners/crud/verifier.rb +217 -0
  789. data/spec/runners/crud.rb +257 -0
  790. data/spec/runners/gridfs.rb +641 -0
  791. data/spec/runners/read_write_concern_document.rb +70 -0
  792. data/spec/runners/sdam/verifier.rb +112 -0
  793. data/spec/runners/sdam.rb +279 -0
  794. data/spec/runners/server_selection.rb +365 -0
  795. data/spec/runners/server_selection_rtt.rb +41 -0
  796. data/spec/runners/transactions/operation.rb +328 -0
  797. data/spec/runners/transactions/spec.rb +29 -0
  798. data/spec/runners/transactions/test.rb +326 -0
  799. data/spec/runners/transactions.rb +104 -0
  800. data/spec/runners/unified/assertions.rb +281 -0
  801. data/spec/runners/unified/change_stream_operations.rb +29 -0
  802. data/spec/runners/unified/crud_operations.rb +206 -0
  803. data/spec/runners/unified/ddl_operations.rb +106 -0
  804. data/spec/runners/unified/entity_map.rb +42 -0
  805. data/spec/runners/unified/error.rb +28 -0
  806. data/spec/runners/unified/event_subscriber.rb +104 -0
  807. data/spec/runners/unified/exceptions.rb +24 -0
  808. data/spec/runners/unified/grid_fs_operations.rb +58 -0
  809. data/spec/runners/unified/support_operations.rb +261 -0
  810. data/spec/runners/unified/test.rb +426 -0
  811. data/spec/runners/unified/test_group.rb +31 -0
  812. data/spec/runners/unified.rb +99 -0
  813. data/spec/shared/LICENSE +20 -0
  814. data/spec/shared/bin/get-mongodb-download-url +17 -0
  815. data/spec/shared/bin/s3-copy +45 -0
  816. data/spec/shared/bin/s3-upload +69 -0
  817. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  818. data/spec/shared/lib/mrss/cluster_config.rb +231 -0
  819. data/spec/shared/lib/mrss/constraints.rb +385 -0
  820. data/spec/shared/lib/mrss/docker_runner.rb +271 -0
  821. data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
  822. data/spec/shared/lib/mrss/lite_constraints.rb +191 -0
  823. data/spec/shared/lib/mrss/server_version_registry.rb +120 -0
  824. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  825. data/spec/shared/lib/mrss/utils.rb +15 -0
  826. data/spec/shared/share/Dockerfile.erb +323 -0
  827. data/spec/shared/share/haproxy-1.conf +16 -0
  828. data/spec/shared/share/haproxy-2.conf +17 -0
  829. data/spec/shared/shlib/distro.sh +73 -0
  830. data/spec/shared/shlib/server.sh +367 -0
  831. data/spec/shared/shlib/set_env.sh +131 -0
  832. data/spec/solo/clean_exit_spec.rb +24 -0
  833. data/spec/spec_helper.rb +20 -175
  834. data/spec/spec_tests/auth_spec.rb +58 -0
  835. data/spec/spec_tests/change_streams_spec.rb +93 -0
  836. data/spec/spec_tests/change_streams_unified_spec.rb +13 -0
  837. data/spec/spec_tests/client_side_encryption_spec.rb +14 -0
  838. data/spec/spec_tests/cmap_spec.rb +112 -0
  839. data/spec/spec_tests/collection_management_spec.rb +13 -0
  840. data/spec/spec_tests/command_monitoring_spec.rb +71 -0
  841. data/spec/spec_tests/command_monitoring_unified_spec.rb +13 -0
  842. data/spec/spec_tests/connection_string_spec.rb +10 -0
  843. data/spec/spec_tests/crud_spec.rb +22 -0
  844. data/spec/spec_tests/crud_unified_spec.rb +13 -0
  845. data/spec/spec_tests/data/auth/connection-string.yml +366 -0
  846. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +101 -0
  847. data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +1173 -0
  848. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +1105 -0
  849. data/spec/spec_tests/data/change_streams/change-streams.yml +535 -0
  850. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +72 -0
  851. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +134 -0
  852. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +526 -0
  853. data/spec/spec_tests/data/client_side_encryption/badSchema.yml +73 -0
  854. data/spec/spec_tests/data/client_side_encryption/basic.yml +116 -0
  855. data/spec/spec_tests/data/client_side_encryption/bulk.yml +88 -0
  856. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +100 -0
  857. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +42 -0
  858. data/spec/spec_tests/data/client_side_encryption/count.yml +61 -0
  859. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +59 -0
  860. data/spec/spec_tests/data/client_side_encryption/delete.yml +105 -0
  861. data/spec/spec_tests/data/client_side_encryption/distinct.yml +73 -0
  862. data/spec/spec_tests/data/client_side_encryption/explain.yml +64 -0
  863. data/spec/spec_tests/data/client_side_encryption/find.yml +119 -0
  864. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +57 -0
  865. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +57 -0
  866. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +57 -0
  867. data/spec/spec_tests/data/client_side_encryption/getMore.yml +68 -0
  868. data/spec/spec_tests/data/client_side_encryption/insert.yml +102 -0
  869. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +71 -0
  870. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +54 -0
  871. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +72 -0
  872. data/spec/spec_tests/data/client_side_encryption/malformedCiphertext.yml +69 -0
  873. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +20 -0
  874. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +49 -0
  875. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +64 -0
  876. data/spec/spec_tests/data/client_side_encryption/types.yml +527 -0
  877. data/spec/spec_tests/data/client_side_encryption/unsupportedCommand.yml +25 -0
  878. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +77 -0
  879. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +171 -0
  880. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +27 -0
  881. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +27 -0
  882. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +27 -0
  883. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +27 -0
  884. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +24 -0
  885. data/spec/spec_tests/data/cmap/pool-checkin.yml +19 -0
  886. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +19 -0
  887. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +36 -0
  888. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +37 -0
  889. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +35 -0
  890. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +33 -0
  891. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +28 -0
  892. data/spec/spec_tests/data/cmap/pool-close.yml +11 -0
  893. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +71 -0
  894. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +34 -0
  895. data/spec/spec_tests/data/cmap/pool-create-with-options.yml +21 -0
  896. data/spec/spec_tests/data/cmap/pool-create.yml +12 -0
  897. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +124 -0
  898. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +46 -0
  899. data/spec/spec_tests/data/collection_management/timeseries-collection.yml +129 -0
  900. data/spec/spec_tests/data/command_monitoring/bulkWrite.yml +49 -0
  901. data/spec/spec_tests/data/command_monitoring/command.yml +61 -0
  902. data/spec/{support → spec_tests/data}/command_monitoring/deleteMany.yml +0 -0
  903. data/spec/{support → spec_tests/data}/command_monitoring/deleteOne.yml +0 -0
  904. data/spec/spec_tests/data/command_monitoring/find.yml +266 -0
  905. data/spec/spec_tests/data/command_monitoring/insertMany.yml +75 -0
  906. data/spec/{support → spec_tests/data}/command_monitoring/insertOne.yml +0 -0
  907. data/spec/spec_tests/data/command_monitoring/unacknowledgedBulkWrite.yml +34 -0
  908. data/spec/spec_tests/data/command_monitoring/updateMany.yml +65 -0
  909. data/spec/spec_tests/data/command_monitoring/updateOne.yml +90 -0
  910. data/spec/spec_tests/data/command_monitoring_unified/redacted-commands.yml +340 -0
  911. data/spec/spec_tests/data/connection_string/invalid-uris.yml +261 -0
  912. data/spec/spec_tests/data/connection_string/valid-auth.yml +257 -0
  913. data/spec/spec_tests/data/connection_string/valid-db-with-dotted-name.yml +77 -0
  914. data/spec/{support/connection_string_tests → spec_tests/data/connection_string}/valid-host_identifiers.yml +0 -0
  915. data/spec/spec_tests/data/connection_string/valid-options.yml +17 -0
  916. data/spec/spec_tests/data/connection_string/valid-unix_socket-absolute.yml +197 -0
  917. data/spec/spec_tests/data/connection_string/valid-unix_socket-relative.yml +213 -0
  918. data/spec/spec_tests/data/connection_string/valid-warnings.yml +75 -0
  919. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +18 -0
  920. data/spec/spec_tests/data/crud/read/aggregate-out.yml +44 -0
  921. data/spec/spec_tests/data/crud/read/aggregate.yml +21 -0
  922. data/spec/spec_tests/data/crud/read/count-collation.yml +26 -0
  923. data/spec/spec_tests/data/crud/read/count-empty.yml +29 -0
  924. data/spec/spec_tests/data/crud/read/count.yml +74 -0
  925. data/spec/spec_tests/data/crud/read/distinct-collation.yml +18 -0
  926. data/spec/spec_tests/data/crud/read/distinct.yml +32 -0
  927. data/spec/spec_tests/data/crud/read/find-collation.yml +16 -0
  928. data/spec/spec_tests/data/crud/read/find.yml +49 -0
  929. data/spec/spec_tests/data/crud/write/bulkWrite-arrayFilters.yml +45 -0
  930. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +102 -0
  931. data/spec/spec_tests/data/crud/write/bulkWrite.yml +405 -0
  932. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +23 -0
  933. data/spec/spec_tests/data/crud/write/deleteMany.yml +35 -0
  934. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +23 -0
  935. data/spec/spec_tests/data/crud/write/deleteOne.yml +48 -0
  936. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +24 -0
  937. data/spec/spec_tests/data/crud/write/findOneAndDelete.yml +53 -0
  938. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +25 -0
  939. data/spec/spec_tests/data/crud/write/findOneAndReplace-upsert.yml +91 -0
  940. data/spec/spec_tests/data/crud/write/findOneAndReplace-upsert_pre_2.6.yml +88 -0
  941. data/spec/spec_tests/data/crud/write/findOneAndReplace.yml +113 -0
  942. data/spec/spec_tests/data/crud/write/findOneAndUpdate-arrayFilters.yml +69 -0
  943. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +28 -0
  944. data/spec/spec_tests/data/crud/write/findOneAndUpdate.yml +163 -0
  945. data/spec/spec_tests/data/crud/write/insertMany.yml +81 -0
  946. data/spec/spec_tests/data/crud/write/insertOne.yml +18 -0
  947. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +25 -0
  948. data/spec/spec_tests/data/crud/write/replaceOne-pre_2.6.yml +98 -0
  949. data/spec/spec_tests/data/crud/write/replaceOne-upsert.yml +48 -0
  950. data/spec/spec_tests/data/crud/write/replaceOne.yml +102 -0
  951. data/spec/spec_tests/data/crud/write/updateMany-arrayFilters.yml +66 -0
  952. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +29 -0
  953. data/spec/spec_tests/data/crud/write/updateMany-pre_2.6.yml +86 -0
  954. data/spec/spec_tests/data/crud/write/updateMany.yml +87 -0
  955. data/spec/spec_tests/data/crud/write/updateOne-arrayFilters.yml +114 -0
  956. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +26 -0
  957. data/spec/spec_tests/data/crud/write/updateOne-pre_2.6.yml +83 -0
  958. data/spec/spec_tests/data/crud/write/updateOne.yml +84 -0
  959. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +267 -0
  960. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +305 -0
  961. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +103 -0
  962. data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +111 -0
  963. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +103 -0
  964. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +63 -0
  965. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +92 -0
  966. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +103 -0
  967. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +90 -0
  968. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +147 -0
  969. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +164 -0
  970. data/spec/spec_tests/data/crud_v2/db-aggregate.yml +39 -0
  971. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +43 -0
  972. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +62 -0
  973. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +58 -0
  974. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +41 -0
  975. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +60 -0
  976. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +57 -0
  977. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +28 -0
  978. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +44 -0
  979. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +50 -0
  980. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +45 -0
  981. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +60 -0
  982. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +56 -0
  983. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +40 -0
  984. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +59 -0
  985. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +55 -0
  986. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +40 -0
  987. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +58 -0
  988. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +55 -0
  989. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +61 -0
  990. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +60 -0
  991. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +88 -0
  992. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +40 -0
  993. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +38 -0
  994. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +42 -0
  995. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +40 -0
  996. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +40 -0
  997. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +40 -0
  998. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +43 -0
  999. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +40 -0
  1000. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +45 -0
  1001. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +66 -0
  1002. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +65 -0
  1003. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +43 -0
  1004. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +62 -0
  1005. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +61 -0
  1006. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +157 -0
  1007. data/spec/spec_tests/data/gridfs/delete.yml +123 -0
  1008. data/spec/spec_tests/data/gridfs/download.yml +192 -0
  1009. data/spec/{support/gridfs_tests → spec_tests/data/gridfs}/download_by_name.yml +0 -0
  1010. data/spec/{support/gridfs_tests → spec_tests/data/gridfs}/upload.yml +0 -0
  1011. data/spec/spec_tests/data/load_balancers/event-monitoring.yml +99 -0
  1012. data/spec/spec_tests/data/load_balancers/lb-connection-establishment.yml +36 -0
  1013. data/spec/spec_tests/data/load_balancers/non-lb-connection-establishment.yml +56 -0
  1014. data/spec/spec_tests/data/load_balancers/server-selection.yml +50 -0
  1015. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/DefaultNoMaxStaleness.yml +26 -0
  1016. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Incompatible.yml +25 -0
  1017. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +33 -0
  1018. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/MaxStalenessTooSmall.yml +15 -0
  1019. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest.yml +33 -0
  1020. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +33 -0
  1021. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml +16 -0
  1022. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +27 -0
  1023. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +36 -0
  1024. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Secondary.yml +51 -0
  1025. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +26 -0
  1026. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +51 -0
  1027. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml +23 -0
  1028. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml +26 -0
  1029. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Incompatible.yml +25 -0
  1030. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +35 -0
  1031. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat.yml +29 -0
  1032. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml +25 -0
  1033. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +26 -0
  1034. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +23 -0
  1035. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest.yml +33 -0
  1036. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +33 -0
  1037. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +36 -0
  1038. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +27 -0
  1039. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred_incompatible.yml +27 -0
  1040. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +26 -0
  1041. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +59 -0
  1042. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +43 -0
  1043. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +59 -0
  1044. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +43 -0
  1045. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +23 -0
  1046. data/spec/spec_tests/data/max_staleness/Sharded/Incompatible.yml +25 -0
  1047. data/spec/spec_tests/data/max_staleness/Sharded/SmallMaxStaleness.yml +28 -0
  1048. data/spec/spec_tests/data/max_staleness/Single/Incompatible.yml +18 -0
  1049. data/spec/spec_tests/data/max_staleness/Single/SmallMaxStaleness.yml +20 -0
  1050. data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +15 -0
  1051. data/spec/spec_tests/data/read_write_concern/connection-string/read-concern.yml +32 -0
  1052. data/spec/spec_tests/data/read_write_concern/connection-string/write-concern.yml +79 -0
  1053. data/spec/spec_tests/data/read_write_concern/document/read-concern.yml +37 -0
  1054. data/spec/spec_tests/data/read_write_concern/document/write-concern.yml +100 -0
  1055. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-2.6.yml +215 -0
  1056. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.2.yml +58 -0
  1057. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.4.yml +95 -0
  1058. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-4.2.yml +36 -0
  1059. data/spec/spec_tests/data/retryable_reads/aggregate-merge.yml +39 -0
  1060. data/spec/spec_tests/data/retryable_reads/aggregate-serverErrors.yml +157 -0
  1061. data/spec/spec_tests/data/retryable_reads/aggregate.yml +87 -0
  1062. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch-serverErrors.yml +150 -0
  1063. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch.yml +62 -0
  1064. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch-serverErrors.yml +150 -0
  1065. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch.yml +66 -0
  1066. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch-serverErrors.yml +154 -0
  1067. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch.yml +62 -0
  1068. data/spec/spec_tests/data/retryable_reads/count-serverErrors.yml +150 -0
  1069. data/spec/spec_tests/data/retryable_reads/count.yml +64 -0
  1070. data/spec/spec_tests/data/retryable_reads/countDocuments-serverErrors.yml +150 -0
  1071. data/spec/spec_tests/data/retryable_reads/countDocuments.yml +64 -0
  1072. data/spec/spec_tests/data/retryable_reads/distinct-serverErrors.yml +156 -0
  1073. data/spec/spec_tests/data/retryable_reads/distinct.yml +71 -0
  1074. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +60 -0
  1075. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-pre4.9.yml +64 -0
  1076. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +146 -0
  1077. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-pre4.9.yml +150 -0
  1078. data/spec/spec_tests/data/retryable_reads/find-serverErrors.yml +160 -0
  1079. data/spec/spec_tests/data/retryable_reads/find.yml +86 -0
  1080. data/spec/spec_tests/data/retryable_reads/findOne-serverErrors.yml +154 -0
  1081. data/spec/spec_tests/data/retryable_reads/findOne.yml +68 -0
  1082. data/spec/spec_tests/data/retryable_reads/gridfs-download-serverErrors.yml +173 -0
  1083. data/spec/spec_tests/data/retryable_reads/gridfs-download.yml +79 -0
  1084. data/spec/spec_tests/data/retryable_reads/gridfs-downloadByName-serverErrors.yml +174 -0
  1085. data/spec/spec_tests/data/retryable_reads/gridfs-downloadByName.yml +79 -0
  1086. data/spec/spec_tests/data/retryable_reads/listCollectionNames-serverErrors.yml +143 -0
  1087. data/spec/spec_tests/data/retryable_reads/listCollectionNames.yml +59 -0
  1088. data/spec/spec_tests/data/retryable_reads/listCollectionObjects-serverErrors.yml +144 -0
  1089. data/spec/spec_tests/data/retryable_reads/listCollectionObjects.yml +59 -0
  1090. data/spec/spec_tests/data/retryable_reads/listCollections-serverErrors.yml +143 -0
  1091. data/spec/spec_tests/data/retryable_reads/listCollections.yml +59 -0
  1092. data/spec/spec_tests/data/retryable_reads/listDatabaseNames-serverErrors.yml +143 -0
  1093. data/spec/spec_tests/data/retryable_reads/listDatabaseNames.yml +59 -0
  1094. data/spec/spec_tests/data/retryable_reads/listDatabaseObjects-serverErrors.yml +144 -0
  1095. data/spec/spec_tests/data/retryable_reads/listDatabaseObjects.yml +59 -0
  1096. data/spec/spec_tests/data/retryable_reads/listDatabases-serverErrors.yml +144 -0
  1097. data/spec/spec_tests/data/retryable_reads/listDatabases.yml +59 -0
  1098. data/spec/spec_tests/data/retryable_reads/listIndexNames-serverErrors.yml +144 -0
  1099. data/spec/spec_tests/data/retryable_reads/listIndexNames.yml +60 -0
  1100. data/spec/spec_tests/data/retryable_reads/listIndexes-serverErrors.yml +145 -0
  1101. data/spec/spec_tests/data/retryable_reads/listIndexes.yml +60 -0
  1102. data/spec/spec_tests/data/retryable_reads/mapReduce.yml +62 -0
  1103. data/spec/spec_tests/data/retryable_writes/bulkWrite-errorLabels.yml +77 -0
  1104. data/spec/spec_tests/data/retryable_writes/bulkWrite-serverErrors.yml +130 -0
  1105. data/spec/spec_tests/data/retryable_writes/bulkWrite.yml +402 -0
  1106. data/spec/spec_tests/data/retryable_writes/deleteMany.yml +22 -0
  1107. data/spec/spec_tests/data/retryable_writes/deleteOne-errorLabels.yml +48 -0
  1108. data/spec/spec_tests/data/retryable_writes/deleteOne-serverErrors.yml +73 -0
  1109. data/spec/spec_tests/data/retryable_writes/deleteOne.yml +57 -0
  1110. data/spec/spec_tests/data/retryable_writes/findOneAndDelete-errorLabels.yml +49 -0
  1111. data/spec/spec_tests/data/retryable_writes/findOneAndDelete-serverErrors.yml +74 -0
  1112. data/spec/spec_tests/data/retryable_writes/findOneAndDelete.yml +58 -0
  1113. data/spec/spec_tests/data/retryable_writes/findOneAndReplace-errorLabels.yml +52 -0
  1114. data/spec/spec_tests/data/retryable_writes/findOneAndReplace-serverErrors.yml +80 -0
  1115. data/spec/spec_tests/data/retryable_writes/findOneAndReplace.yml +63 -0
  1116. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate-errorLabels.yml +52 -0
  1117. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate-serverErrors.yml +79 -0
  1118. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate.yml +62 -0
  1119. data/spec/spec_tests/data/retryable_writes/insertMany-errorLabels.yml +54 -0
  1120. data/spec/spec_tests/data/retryable_writes/insertMany-serverErrors.yml +84 -0
  1121. data/spec/spec_tests/data/retryable_writes/insertMany.yml +74 -0
  1122. data/spec/spec_tests/data/retryable_writes/insertOne-errorLabels.yml +44 -0
  1123. data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +527 -0
  1124. data/spec/spec_tests/data/retryable_writes/insertOne.yml +61 -0
  1125. data/spec/spec_tests/data/retryable_writes/replaceOne-errorLabels.yml +53 -0
  1126. data/spec/spec_tests/data/retryable_writes/replaceOne-serverErrors.yml +82 -0
  1127. data/spec/spec_tests/data/retryable_writes/replaceOne.yml +66 -0
  1128. data/spec/spec_tests/data/retryable_writes/updateMany.yml +27 -0
  1129. data/spec/spec_tests/data/retryable_writes/updateOne-errorLabels.yml +53 -0
  1130. data/spec/spec_tests/data/retryable_writes/updateOne-serverErrors.yml +82 -0
  1131. data/spec/spec_tests/data/retryable_writes/updateOne.yml +129 -0
  1132. data/spec/spec_tests/data/sdam/errors/error_handling_handshake.yml +55 -0
  1133. data/spec/spec_tests/data/sdam/errors/non-stale-network-error.yml +47 -0
  1134. data/spec/spec_tests/data/sdam/errors/non-stale-network-timeout-error.yml +38 -0
  1135. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.yml +61 -0
  1136. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.yml +61 -0
  1137. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-LegacyNotPrimary.yml +61 -0
  1138. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotPrimaryNoSecondaryOk.yml +61 -0
  1139. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotPrimaryOrSecondary.yml +61 -0
  1140. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotWritablePrimary.yml +61 -0
  1141. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.yml +61 -0
  1142. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-ShutdownInProgress.yml +61 -0
  1143. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.yml +52 -0
  1144. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.yml +52 -0
  1145. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-LegacyNotPrimary.yml +52 -0
  1146. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotPrimaryNoSecondaryOk.yml +52 -0
  1147. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotPrimaryOrSecondary.yml +52 -0
  1148. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotWritablePrimary.yml +52 -0
  1149. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.yml +52 -0
  1150. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-ShutdownInProgress.yml +52 -0
  1151. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.yml +61 -0
  1152. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.yml +61 -0
  1153. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-LegacyNotPrimary.yml +61 -0
  1154. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryNoSecondaryOk.yml +61 -0
  1155. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryOrSecondary.yml +61 -0
  1156. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotWritablePrimary.yml +61 -0
  1157. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.yml +61 -0
  1158. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.yml +61 -0
  1159. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedAtShutdown.yml +47 -0
  1160. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedDueToReplStateChange.yml +47 -0
  1161. data/spec/spec_tests/data/sdam/errors/post-42-LegacyNotPrimary.yml +47 -0
  1162. data/spec/spec_tests/data/sdam/errors/post-42-NotPrimaryNoSecondaryOk.yml +47 -0
  1163. data/spec/spec_tests/data/sdam/errors/post-42-NotPrimaryOrSecondary.yml +47 -0
  1164. data/spec/spec_tests/data/sdam/errors/post-42-NotWritablePrimary.yml +47 -0
  1165. data/spec/spec_tests/data/sdam/errors/post-42-PrimarySteppedDown.yml +47 -0
  1166. data/spec/spec_tests/data/sdam/errors/post-42-ShutdownInProgress.yml +47 -0
  1167. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedAtShutdown.yml +47 -0
  1168. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedDueToReplStateChange.yml +47 -0
  1169. data/spec/spec_tests/data/sdam/errors/pre-42-LegacyNotPrimary.yml +47 -0
  1170. data/spec/spec_tests/data/sdam/errors/pre-42-NotPrimaryNoSecondaryOk.yml +47 -0
  1171. data/spec/spec_tests/data/sdam/errors/pre-42-NotPrimaryOrSecondary.yml +47 -0
  1172. data/spec/spec_tests/data/sdam/errors/pre-42-NotWritablePrimary.yml +47 -0
  1173. data/spec/spec_tests/data/sdam/errors/pre-42-PrimarySteppedDown.yml +47 -0
  1174. data/spec/spec_tests/data/sdam/errors/pre-42-ShutdownInProgress.yml +47 -0
  1175. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +54 -0
  1176. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedAtShutdown.yml +91 -0
  1177. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedDueToReplStateChange.yml +91 -0
  1178. data/spec/spec_tests/data/sdam/errors/stale-generation-NotPrimaryNoSecondaryOk.yml +91 -0
  1179. data/spec/spec_tests/data/sdam/errors/stale-generation-NotPrimaryOrSecondary.yml +91 -0
  1180. data/spec/spec_tests/data/sdam/errors/stale-generation-NotWritablePrimary.yml +91 -0
  1181. data/spec/spec_tests/data/sdam/errors/stale-generation-PrimarySteppedDown.yml +91 -0
  1182. data/spec/spec_tests/data/sdam/errors/stale-generation-ShutdownInProgress.yml +91 -0
  1183. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.yml +91 -0
  1184. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.yml +91 -0
  1185. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-LegacyNotPrimary.yml +91 -0
  1186. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotPrimaryNoSecondaryOk.yml +91 -0
  1187. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotPrimaryOrSecondary.yml +91 -0
  1188. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotWritablePrimary.yml +91 -0
  1189. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.yml +91 -0
  1190. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.yml +91 -0
  1191. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-network.yml +82 -0
  1192. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-timeout.yml +82 -0
  1193. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.yml +91 -0
  1194. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.yml +91 -0
  1195. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-LegacyNotPrimary.yml +91 -0
  1196. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryNoSecondaryOk.yml +91 -0
  1197. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryOrSecondary.yml +91 -0
  1198. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotWritablePrimary.yml +91 -0
  1199. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.yml +91 -0
  1200. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.yml +91 -0
  1201. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-network.yml +82 -0
  1202. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-timeout.yml +82 -0
  1203. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedAtShutdown.yml +65 -0
  1204. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedDueToReplStateChange.yml +65 -0
  1205. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-LegacyNotPrimary.yml +65 -0
  1206. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotPrimaryNoSecondaryOk.yml +65 -0
  1207. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotPrimaryOrSecondary.yml +65 -0
  1208. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotWritablePrimary.yml +65 -0
  1209. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-PrimarySteppedDown.yml +65 -0
  1210. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-ShutdownInProgress.yml +65 -0
  1211. data/spec/spec_tests/data/sdam/errors/write_errors_ignored.yml +42 -0
  1212. data/spec/spec_tests/data/sdam/load-balanced/discover_load_balancer.yml +25 -0
  1213. data/spec/spec_tests/data/sdam/rs/compatible.yml +45 -0
  1214. data/spec/spec_tests/data/sdam/rs/compatible_unknown.yml +34 -0
  1215. data/spec/spec_tests/data/sdam/rs/discover_arbiters.yml +44 -0
  1216. data/spec/spec_tests/data/sdam/rs/discover_arbiters_replicaset.yml +44 -0
  1217. data/spec/spec_tests/data/sdam/rs/discover_ghost.yml +36 -0
  1218. data/spec/spec_tests/data/sdam/rs/discover_ghost_replicaset.yml +42 -0
  1219. data/spec/spec_tests/data/sdam/rs/discover_hidden.yml +51 -0
  1220. data/spec/spec_tests/data/sdam/rs/discover_hidden_replicaset.yml +51 -0
  1221. data/spec/spec_tests/data/sdam/rs/discover_passives.yml +83 -0
  1222. data/spec/spec_tests/data/sdam/rs/discover_passives_replicaset.yml +83 -0
  1223. data/spec/spec_tests/data/sdam/rs/discover_primary.yml +43 -0
  1224. data/spec/spec_tests/data/sdam/rs/discover_primary_replicaset.yml +43 -0
  1225. data/spec/spec_tests/data/sdam/rs/discover_rsother.yml +50 -0
  1226. data/spec/spec_tests/data/sdam/rs/discover_rsother_replicaset.yml +68 -0
  1227. data/spec/spec_tests/data/sdam/rs/discover_secondary.yml +44 -0
  1228. data/spec/spec_tests/data/sdam/rs/discover_secondary_replicaset.yml +44 -0
  1229. data/spec/spec_tests/data/sdam/rs/discovery.yml +207 -0
  1230. data/spec/spec_tests/data/sdam/rs/equal_electionids.yml +57 -0
  1231. data/spec/spec_tests/data/sdam/rs/hosts_differ_from_seeds.yml +37 -0
  1232. data/spec/spec_tests/data/sdam/rs/incompatible_arbiter.yml +36 -0
  1233. data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +34 -0
  1234. data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +36 -0
  1235. data/spec/spec_tests/data/sdam/rs/ls_timeout.yml +249 -0
  1236. data/spec/spec_tests/data/sdam/rs/member_reconfig.yml +74 -0
  1237. data/spec/spec_tests/data/sdam/rs/member_standalone.yml +66 -0
  1238. data/spec/spec_tests/data/sdam/rs/new_primary.yml +80 -0
  1239. data/spec/spec_tests/data/sdam/rs/new_primary_new_electionid.yml +119 -0
  1240. data/spec/spec_tests/data/sdam/rs/new_primary_new_setversion.yml +119 -0
  1241. data/spec/spec_tests/data/sdam/rs/new_primary_wrong_set_name.yml +77 -0
  1242. data/spec/spec_tests/data/sdam/rs/non_rs_member.yml +33 -0
  1243. data/spec/spec_tests/data/sdam/rs/normalize_case.yml +52 -0
  1244. data/spec/spec_tests/data/sdam/rs/normalize_case_me.yml +102 -0
  1245. data/spec/spec_tests/data/sdam/rs/null_election_id.yml +175 -0
  1246. data/spec/spec_tests/data/sdam/rs/primary_becomes_ghost.yml +65 -0
  1247. data/spec/spec_tests/data/sdam/rs/primary_becomes_mongos.yml +58 -0
  1248. data/spec/spec_tests/data/sdam/rs/primary_becomes_standalone.yml +55 -0
  1249. data/spec/spec_tests/data/sdam/rs/primary_changes_set_name.yml +63 -0
  1250. data/spec/spec_tests/data/sdam/rs/primary_disconnect.yml +59 -0
  1251. data/spec/spec_tests/data/sdam/rs/primary_disconnect_electionid.yml +189 -0
  1252. data/spec/spec_tests/data/sdam/rs/primary_disconnect_setversion.yml +189 -0
  1253. data/spec/spec_tests/data/sdam/rs/primary_hint_from_secondary_with_mismatched_me.yml +64 -0
  1254. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me.yml +27 -0
  1255. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me_not_removed.yml +75 -0
  1256. data/spec/spec_tests/data/sdam/rs/primary_reports_new_member.yml +175 -0
  1257. data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +81 -0
  1258. data/spec/spec_tests/data/sdam/rs/primary_wrong_set_name.yml +30 -0
  1259. data/spec/spec_tests/data/sdam/rs/repeated.yml +105 -0
  1260. data/spec/spec_tests/data/sdam/rs/replicaset_rsnp.yml +21 -0
  1261. data/spec/spec_tests/data/sdam/rs/response_from_removed.yml +69 -0
  1262. data/spec/spec_tests/data/sdam/rs/ruby_primary_address_change.yml +31 -0
  1263. data/spec/spec_tests/data/sdam/rs/ruby_secondary_wrong_set_name_with_primary_second.yml +73 -0
  1264. data/spec/spec_tests/data/sdam/rs/sec_not_auth.yml +55 -0
  1265. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +87 -0
  1266. data/spec/spec_tests/data/sdam/rs/secondary_mismatched_me.yml +28 -0
  1267. data/spec/spec_tests/data/sdam/rs/secondary_wrong_set_name.yml +31 -0
  1268. data/spec/spec_tests/data/sdam/rs/secondary_wrong_set_name_with_primary.yml +75 -0
  1269. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +79 -0
  1270. data/spec/spec_tests/data/sdam/rs/stepdown_change_set_name.yml +65 -0
  1271. data/spec/spec_tests/data/sdam/rs/too_new.yml +45 -0
  1272. data/spec/spec_tests/data/sdam/rs/too_old.yml +41 -0
  1273. data/spec/spec_tests/data/sdam/rs/topology_version_equal.yml +68 -0
  1274. data/spec/spec_tests/data/sdam/rs/topology_version_greater.yml +194 -0
  1275. data/spec/spec_tests/data/sdam/rs/topology_version_less.yml +64 -0
  1276. data/spec/spec_tests/data/sdam/rs/unexpected_mongos.yml +29 -0
  1277. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +117 -0
  1278. data/spec/spec_tests/data/sdam/rs/wrong_set_name.yml +38 -0
  1279. data/spec/spec_tests/data/sdam/sharded/compatible.yml +40 -0
  1280. data/spec/spec_tests/data/sdam/sharded/discover_single_mongos.yml +24 -0
  1281. data/spec/spec_tests/data/sdam/sharded/ls_timeout_mongos.yml +101 -0
  1282. data/spec/spec_tests/data/sdam/sharded/mongos_disconnect.yml +113 -0
  1283. data/spec/spec_tests/data/sdam/sharded/multiple_mongoses.yml +52 -0
  1284. data/spec/spec_tests/data/sdam/sharded/non_mongos_removed.yml +47 -0
  1285. data/spec/spec_tests/data/sdam/sharded/normalize_uri_case.yml +32 -0
  1286. data/spec/spec_tests/data/sdam/sharded/ruby_primary_different_address.yml +21 -0
  1287. data/spec/spec_tests/data/sdam/sharded/ruby_primary_mismatched_me.yml +22 -0
  1288. data/spec/spec_tests/data/sdam/sharded/too_new.yml +38 -0
  1289. data/spec/spec_tests/data/sdam/sharded/too_old.yml +38 -0
  1290. data/spec/spec_tests/data/sdam/single/compatible.yml +27 -0
  1291. data/spec/spec_tests/data/sdam/single/direct_connection_external_ip.yml +37 -0
  1292. data/spec/spec_tests/data/sdam/single/direct_connection_mongos.yml +36 -0
  1293. data/spec/spec_tests/data/sdam/single/direct_connection_replicaset.yml +23 -0
  1294. data/spec/spec_tests/data/sdam/single/direct_connection_rsarbiter.yml +38 -0
  1295. data/spec/spec_tests/data/sdam/single/direct_connection_rsprimary.yml +37 -0
  1296. data/spec/spec_tests/data/sdam/single/direct_connection_rssecondary.yml +38 -0
  1297. data/spec/spec_tests/data/sdam/single/direct_connection_standalone.yml +35 -0
  1298. data/spec/spec_tests/data/sdam/single/direct_connection_unavailable_seed.yml +28 -0
  1299. data/spec/spec_tests/data/sdam/single/direct_connection_wrong_set_name.yml +40 -0
  1300. data/spec/spec_tests/data/sdam/single/discover_standalone.yml +35 -0
  1301. data/spec/spec_tests/data/sdam/single/discover_unavailable_seed.yml +28 -0
  1302. data/spec/spec_tests/data/sdam/single/ls_timeout_standalone.yml +36 -0
  1303. data/spec/spec_tests/data/sdam/single/not_ok_response.yml +44 -0
  1304. data/spec/spec_tests/data/sdam/single/ruby_primary_different_address.yml +24 -0
  1305. data/spec/spec_tests/data/sdam/single/ruby_primary_mismatched_me.yml +25 -0
  1306. data/spec/spec_tests/data/sdam/single/standalone_removed.yml +35 -0
  1307. data/spec/spec_tests/data/sdam/single/standalone_using_legacy_hello.yml +34 -0
  1308. data/spec/spec_tests/data/sdam/single/too_new.yml +27 -0
  1309. data/spec/spec_tests/data/sdam/single/too_old.yml +25 -0
  1310. data/spec/spec_tests/data/sdam/single/too_old_then_upgraded.yml +48 -0
  1311. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +96 -0
  1312. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +88 -0
  1313. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +85 -0
  1314. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +118 -0
  1315. data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +160 -0
  1316. data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +158 -0
  1317. data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +225 -0
  1318. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +88 -0
  1319. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +117 -0
  1320. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +98 -0
  1321. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +70 -0
  1322. data/spec/spec_tests/data/sdam_monitoring/load_balancer.yml +65 -0
  1323. data/spec/spec_tests/data/sdam_monitoring/replica_set_other_chain.yml +222 -0
  1324. data/spec/spec_tests/data/sdam_monitoring/replica_set_other_change.yml +225 -0
  1325. data/spec/spec_tests/data/sdam_monitoring/replica_set_primary_address_change.yml +251 -0
  1326. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_me_mismatch.yml +111 -0
  1327. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +113 -0
  1328. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +112 -0
  1329. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary_and_secondary.yml +198 -0
  1330. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary_removal.yml +175 -0
  1331. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +111 -0
  1332. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_second_seed_removal.yml +106 -0
  1333. data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +108 -0
  1334. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +70 -0
  1335. data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +86 -0
  1336. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +73 -0
  1337. data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +90 -0
  1338. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +13 -0
  1339. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +6 -0
  1340. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-multiple-hosts.yml +5 -0
  1341. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +10 -0
  1342. data/spec/spec_tests/data/seed_list_discovery/replica-set/direct-connection-false.yml +10 -0
  1343. data/spec/spec_tests/data/seed_list_discovery/replica-set/direct-connection-true.yml +5 -0
  1344. data/spec/spec_tests/data/seed_list_discovery/replica-set/encoded-userinfo-and-db.yml +15 -0
  1345. data/spec/spec_tests/data/seed_list_discovery/replica-set/loadBalanced-false-txt.yml +10 -0
  1346. data/spec/spec_tests/data/seed_list_discovery/replica-set/longer-parent-in-return.yml +11 -0
  1347. data/spec/spec_tests/data/seed_list_discovery/replica-set/misformatted-option.yml +5 -0
  1348. data/spec/spec_tests/data/seed_list_discovery/replica-set/no-results.yml +5 -0
  1349. data/spec/spec_tests/data/seed_list_discovery/replica-set/not-enough-parts.yml +5 -0
  1350. data/spec/spec_tests/data/seed_list_discovery/replica-set/one-result-default-port.yml +10 -0
  1351. data/spec/spec_tests/data/seed_list_discovery/replica-set/one-txt-record-multiple-strings.yml +10 -0
  1352. data/spec/spec_tests/data/seed_list_discovery/replica-set/one-txt-record.yml +11 -0
  1353. data/spec/spec_tests/data/seed_list_discovery/replica-set/parent-part-mismatch1.yml +5 -0
  1354. data/spec/spec_tests/data/seed_list_discovery/replica-set/parent-part-mismatch2.yml +5 -0
  1355. data/spec/spec_tests/data/seed_list_discovery/replica-set/parent-part-mismatch3.yml +5 -0
  1356. data/spec/spec_tests/data/seed_list_discovery/replica-set/parent-part-mismatch4.yml +5 -0
  1357. data/spec/spec_tests/data/seed_list_discovery/replica-set/parent-part-mismatch5.yml +5 -0
  1358. data/spec/spec_tests/data/seed_list_discovery/replica-set/returned-parent-too-short.yml +5 -0
  1359. data/spec/spec_tests/data/seed_list_discovery/replica-set/returned-parent-wrong.yml +5 -0
  1360. data/spec/spec_tests/data/seed_list_discovery/replica-set/two-results-default-port.yml +11 -0
  1361. data/spec/spec_tests/data/seed_list_discovery/replica-set/two-results-nonstandard-port.yml +11 -0
  1362. data/spec/spec_tests/data/seed_list_discovery/replica-set/two-txt-records.yml +5 -0
  1363. data/spec/spec_tests/data/seed_list_discovery/replica-set/txt-record-not-allowed-option.yml +5 -0
  1364. data/spec/spec_tests/data/seed_list_discovery/replica-set/txt-record-with-overridden-ssl-option.yml +11 -0
  1365. data/spec/spec_tests/data/seed_list_discovery/replica-set/txt-record-with-overridden-uri-option.yml +11 -0
  1366. data/spec/spec_tests/data/seed_list_discovery/replica-set/txt-record-with-unallowed-option.yml +5 -0
  1367. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-admin-database.yml +13 -0
  1368. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-auth.yml +12 -0
  1369. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-port.yml +5 -0
  1370. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-two-hosts.yml +5 -0
  1371. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Nearest.yml +25 -0
  1372. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Nearest_multiple.yml +26 -0
  1373. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +20 -0
  1374. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/PossiblePrimary.yml +15 -0
  1375. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.yml +15 -0
  1376. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Primary.yml +18 -0
  1377. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +25 -0
  1378. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +20 -0
  1379. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Secondary.yml +25 -0
  1380. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +25 -0
  1381. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +20 -0
  1382. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags.yml +31 -0
  1383. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags2.yml +31 -0
  1384. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +20 -0
  1385. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Nearest.yml +32 -0
  1386. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Nearest_multiple.yml +33 -0
  1387. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +25 -0
  1388. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Primary.yml +26 -0
  1389. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +28 -0
  1390. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +28 -0
  1391. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Secondary.yml +30 -0
  1392. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +30 -0
  1393. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +28 -0
  1394. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_tags.yml +28 -0
  1395. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +25 -0
  1396. data/spec/spec_tests/data/server_selection/Sharded/read/Nearest.yml +21 -0
  1397. data/spec/spec_tests/data/server_selection/Sharded/read/Primary.yml +19 -0
  1398. data/spec/spec_tests/data/server_selection/Sharded/read/PrimaryPreferred.yml +21 -0
  1399. data/spec/spec_tests/data/server_selection/Sharded/read/Secondary.yml +21 -0
  1400. data/spec/spec_tests/data/server_selection/Sharded/read/SecondaryPreferred.yml +21 -0
  1401. data/spec/spec_tests/data/server_selection/Single/read/SecondaryPreferred.yml +18 -0
  1402. data/spec/spec_tests/data/server_selection/Unknown/read/SecondaryPreferred.yml +10 -0
  1403. data/spec/{support/server_selection/rtt → spec_tests/data/server_selection_rtt}/first_value.yml +0 -0
  1404. data/spec/{support/server_selection/rtt → spec_tests/data/server_selection_rtt}/first_value_zero.yml +0 -0
  1405. data/spec/{support/server_selection/rtt → spec_tests/data/server_selection_rtt}/value_test_1.yml +0 -0
  1406. data/spec/{support/server_selection/rtt → spec_tests/data/server_selection_rtt}/value_test_2.yml +0 -0
  1407. data/spec/{support/server_selection/rtt → spec_tests/data/server_selection_rtt}/value_test_3.yml +0 -0
  1408. data/spec/{support/server_selection/rtt → spec_tests/data/server_selection_rtt}/value_test_4.yml +0 -0
  1409. data/spec/{support/server_selection/rtt → spec_tests/data/server_selection_rtt}/value_test_5.yml +0 -0
  1410. data/spec/spec_tests/data/transactions/abort.yml +413 -0
  1411. data/spec/spec_tests/data/transactions/bulk.yml +267 -0
  1412. data/spec/spec_tests/data/transactions/causal-consistency.yml +175 -0
  1413. data/spec/spec_tests/data/transactions/commit.yml +603 -0
  1414. data/spec/spec_tests/data/transactions/count.yml +67 -0
  1415. data/spec/spec_tests/data/transactions/create-collection.yml +131 -0
  1416. data/spec/spec_tests/data/transactions/create-index.yml +152 -0
  1417. data/spec/spec_tests/data/transactions/delete.yml +192 -0
  1418. data/spec/spec_tests/data/transactions/error-labels.yml +1030 -0
  1419. data/spec/spec_tests/data/transactions/errors-client.yml +56 -0
  1420. data/spec/spec_tests/data/transactions/errors.yml +133 -0
  1421. data/spec/spec_tests/data/transactions/findOneAndDelete.yml +134 -0
  1422. data/spec/spec_tests/data/transactions/findOneAndReplace.yml +148 -0
  1423. data/spec/spec_tests/data/transactions/findOneAndUpdate.yml +236 -0
  1424. data/spec/spec_tests/data/transactions/insert.yml +390 -0
  1425. data/spec/spec_tests/data/transactions/isolation.yml +133 -0
  1426. data/spec/spec_tests/data/transactions/mongos-pin-auto.yml +1674 -0
  1427. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +350 -0
  1428. data/spec/spec_tests/data/transactions/pin-mongos.yml +559 -0
  1429. data/spec/spec_tests/data/transactions/read-concern.yml +623 -0
  1430. data/spec/spec_tests/data/transactions/read-pref.yml +348 -0
  1431. data/spec/spec_tests/data/transactions/reads.yml +261 -0
  1432. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +126 -0
  1433. data/spec/spec_tests/data/transactions/retryable-abort.yml +1317 -0
  1434. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +134 -0
  1435. data/spec/spec_tests/data/transactions/retryable-commit.yml +1462 -0
  1436. data/spec/spec_tests/data/transactions/retryable-writes.yml +218 -0
  1437. data/spec/spec_tests/data/transactions/run-command.yml +197 -0
  1438. data/spec/spec_tests/data/transactions/transaction-options-repl.yml +117 -0
  1439. data/spec/spec_tests/data/transactions/transaction-options.yml +781 -0
  1440. data/spec/spec_tests/data/transactions/update.yml +246 -0
  1441. data/spec/spec_tests/data/transactions/write-concern.yml +554 -0
  1442. data/spec/spec_tests/data/transactions_api/callback-aborts.yml +170 -0
  1443. data/spec/spec_tests/data/transactions_api/callback-commits.yml +204 -0
  1444. data/spec/spec_tests/data/transactions_api/callback-retry.yml +215 -0
  1445. data/spec/spec_tests/data/transactions_api/commit-retry.yml +324 -0
  1446. data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror-4.2.yml +139 -0
  1447. data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror.yml +175 -0
  1448. data/spec/spec_tests/data/transactions_api/commit-writeconcernerror.yml +216 -0
  1449. data/spec/spec_tests/data/transactions_api/commit.yml +193 -0
  1450. data/spec/spec_tests/data/transactions_api/transaction-options.yml +274 -0
  1451. data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +172 -0
  1452. data/spec/spec_tests/data/unified/valid-fail/operation-failure.yml +31 -0
  1453. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +220 -0
  1454. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +102 -0
  1455. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +184 -0
  1456. data/spec/spec_tests/data/unified/valid-pass/poc-gridfs.yml +155 -0
  1457. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +193 -0
  1458. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +210 -0
  1459. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +215 -0
  1460. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +235 -0
  1461. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +169 -0
  1462. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +170 -0
  1463. data/spec/spec_tests/data/uri_options/auth-options.yml +49 -0
  1464. data/spec/spec_tests/data/uri_options/compression-options.yml +51 -0
  1465. data/spec/spec_tests/data/uri_options/concern-options.yml +55 -0
  1466. data/spec/spec_tests/data/uri_options/connection-options.yml +209 -0
  1467. data/spec/spec_tests/data/uri_options/connection-pool-options.yml +26 -0
  1468. data/spec/spec_tests/data/uri_options/read-preference-options.yml +66 -0
  1469. data/spec/spec_tests/data/uri_options/ruby-auth-options.yml +12 -0
  1470. data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +58 -0
  1471. data/spec/spec_tests/data/uri_options/tls-options.yml +364 -0
  1472. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +417 -0
  1473. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +411 -0
  1474. data/spec/spec_tests/data/versioned_api/runcommand-helper-no-api-version-declared.yml +75 -0
  1475. data/spec/spec_tests/data/versioned_api/test-commands-deprecation-errors.yml +47 -0
  1476. data/spec/spec_tests/data/versioned_api/test-commands-strict-mode.yml +46 -0
  1477. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +128 -0
  1478. data/spec/spec_tests/gridfs_spec.rb +55 -0
  1479. data/spec/spec_tests/load_balancers_spec.rb +15 -0
  1480. data/spec/spec_tests/max_staleness_spec.rb +12 -0
  1481. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +13 -0
  1482. data/spec/spec_tests/read_write_concern_document_spec.rb +77 -0
  1483. data/spec/spec_tests/read_write_concern_operaton_spec.rb +13 -0
  1484. data/spec/spec_tests/retryable_reads_spec.rb +50 -0
  1485. data/spec/spec_tests/retryable_writes_spec.rb +22 -0
  1486. data/spec/spec_tests/sdam_integration_spec.rb +16 -0
  1487. data/spec/spec_tests/sdam_monitoring_spec.rb +101 -0
  1488. data/spec/spec_tests/sdam_spec.rb +242 -0
  1489. data/spec/spec_tests/seed_list_discovery_spec.rb +118 -0
  1490. data/spec/spec_tests/server_selection_rtt_spec.rb +33 -0
  1491. data/spec/spec_tests/server_selection_spec.rb +12 -0
  1492. data/spec/spec_tests/transactions_api_spec.rb +13 -0
  1493. data/spec/spec_tests/transactions_spec.rb +13 -0
  1494. data/spec/spec_tests/transactions_unified_spec.rb +13 -0
  1495. data/spec/spec_tests/unified_spec.rb +18 -0
  1496. data/spec/spec_tests/uri_options_spec.rb +93 -0
  1497. data/spec/spec_tests/versioned_api_spec.rb +13 -0
  1498. data/spec/stress/cleanup_spec.rb +61 -0
  1499. data/spec/stress/connection_pool_stress_spec.rb +204 -0
  1500. data/spec/stress/connection_pool_timing_spec.rb +184 -0
  1501. data/spec/stress/fork_reconnect_stress_spec.rb +108 -0
  1502. data/spec/stress/push_monitor_close_spec.rb +44 -0
  1503. data/spec/support/authorization.rb +61 -153
  1504. data/spec/support/aws_utils/base.rb +137 -0
  1505. data/spec/support/aws_utils/inspector.rb +227 -0
  1506. data/spec/support/aws_utils/orchestrator.rb +373 -0
  1507. data/spec/support/aws_utils/provisioner.rb +363 -0
  1508. data/spec/support/aws_utils.rb +65 -0
  1509. data/spec/support/background_thread_registry.rb +70 -0
  1510. data/spec/support/certificates/README.md +106 -0
  1511. data/spec/support/certificates/atlas-ocsp-ca.crt +110 -0
  1512. data/spec/support/certificates/atlas-ocsp.crt +157 -0
  1513. data/spec/support/certificates/ca.crt +76 -0
  1514. data/spec/support/certificates/client-encrypted.key +30 -0
  1515. data/spec/support/certificates/client-int.crt +78 -0
  1516. data/spec/support/certificates/client-second-level-bundle.pem +179 -0
  1517. data/spec/support/certificates/client-second-level.crt +74 -0
  1518. data/spec/support/certificates/client-second-level.key +27 -0
  1519. data/spec/support/certificates/client-second-level.pem +101 -0
  1520. data/spec/support/certificates/client-x509.crt +78 -0
  1521. data/spec/support/certificates/client-x509.key +27 -0
  1522. data/spec/support/certificates/client-x509.pem +105 -0
  1523. data/spec/support/certificates/client.crt +74 -0
  1524. data/spec/support/certificates/client.key +27 -0
  1525. data/spec/support/certificates/client.pem +90 -90
  1526. data/spec/support/certificates/crl.pem +10 -8
  1527. data/spec/support/certificates/crl_client_revoked.pem +11 -10
  1528. data/spec/support/certificates/multi-ca.crt +152 -0
  1529. data/spec/support/certificates/python-ca.crt +76 -0
  1530. data/spec/support/certificates/server-int.crt +78 -0
  1531. data/spec/support/certificates/server-second-level-bundle.pem +179 -0
  1532. data/spec/support/certificates/server-second-level.crt +74 -0
  1533. data/spec/support/certificates/server-second-level.key +27 -0
  1534. data/spec/support/certificates/server-second-level.pem +101 -0
  1535. data/spec/support/certificates/server.pem +99 -32
  1536. data/spec/support/client_registry.rb +254 -0
  1537. data/spec/support/client_registry_macros.rb +26 -0
  1538. data/spec/support/cluster_tools.rb +379 -0
  1539. data/spec/support/common_shortcuts.rb +374 -0
  1540. data/spec/support/constraints.rb +19 -0
  1541. data/spec/support/crypt/corpus/corpus-key-aws.json +33 -0
  1542. data/spec/support/crypt/corpus/corpus-key-local.json +31 -0
  1543. data/spec/support/crypt/corpus/corpus-schema.json +2057 -0
  1544. data/spec/support/crypt/corpus/corpus.json +3657 -0
  1545. data/spec/support/crypt/corpus/corpus_encrypted.json +4152 -0
  1546. data/spec/support/crypt/data_keys/key_document_aws.json +34 -0
  1547. data/spec/support/crypt/data_keys/key_document_local.json +31 -0
  1548. data/spec/support/crypt/external/external-key.json +31 -0
  1549. data/spec/support/crypt/external/external-schema.json +19 -0
  1550. data/spec/support/crypt/limits/limits-doc.json +102 -0
  1551. data/spec/support/crypt/limits/limits-key.json +31 -0
  1552. data/spec/support/crypt/limits/limits-schema.json +1405 -0
  1553. data/spec/support/crypt/schema_maps/schema_map_aws.json +17 -0
  1554. data/spec/support/crypt/schema_maps/schema_map_aws_key_alt_names.json +12 -0
  1555. data/spec/support/crypt/schema_maps/schema_map_local.json +18 -0
  1556. data/spec/support/crypt/schema_maps/schema_map_local_key_alt_names.json +12 -0
  1557. data/spec/support/crypt.rb +157 -0
  1558. data/spec/support/dns.rb +16 -0
  1559. data/spec/support/json_ext_formatter.rb +16 -0
  1560. data/spec/support/keyword_struct.rb +29 -0
  1561. data/spec/support/local_resource_registry.rb +37 -0
  1562. data/spec/support/matchers.rb +52 -1
  1563. data/spec/support/monitoring_ext.rb +19 -0
  1564. data/spec/support/ocsp +1 -0
  1565. data/spec/support/primary_socket.rb +24 -0
  1566. data/spec/support/sdam_formatter_integration.rb +119 -0
  1567. data/spec/support/session_registry.rb +55 -0
  1568. data/spec/support/shared/app_metadata.rb +167 -0
  1569. data/spec/support/shared/auth_context.rb +16 -0
  1570. data/spec/support/shared/protocol.rb +5 -0
  1571. data/spec/support/shared/scram_conversation.rb +103 -0
  1572. data/spec/support/shared/server_selector.rb +119 -63
  1573. data/spec/support/shared/session.rb +910 -0
  1574. data/spec/support/spec_config.rb +636 -0
  1575. data/spec/support/spec_setup.rb +83 -0
  1576. data/spec/support/using_hash.rb +31 -0
  1577. data/spec/support/utils.rb +598 -0
  1578. data.tar.gz.sig +0 -0
  1579. metadata +2470 -519
  1580. metadata.gz.sig +2 -2
  1581. data/lib/csasl/csasl.bundle +0 -0
  1582. data/lib/mongo/cluster/cursor_reaper.rb +0 -174
  1583. data/lib/mongo/cluster/topology/replica_set.rb +0 -271
  1584. data/lib/mongo/collection/view/builder/find_command.rb +0 -136
  1585. data/lib/mongo/collection/view/builder/flags.rb +0 -62
  1586. data/lib/mongo/collection/view/builder/modifiers.rb +0 -80
  1587. data/lib/mongo/collection/view/builder/op_query.rb +0 -83
  1588. data/lib/mongo/cursor/builder/get_more_command.rb +0 -72
  1589. data/lib/mongo/cursor/builder/kill_cursors_command.rb +0 -90
  1590. data/lib/mongo/cursor/builder/op_get_more.rb +0 -61
  1591. data/lib/mongo/cursor/builder/op_kill_cursors.rb +0 -84
  1592. data/lib/mongo/cursor/builder.rb +0 -18
  1593. data/lib/mongo/event/description_changed.rb +0 -54
  1594. data/lib/mongo/event/primary_elected.rb +0 -53
  1595. data/lib/mongo/event/standalone_discovered.rb +0 -53
  1596. data/lib/mongo/operation/commands/aggregate/result.rb +0 -89
  1597. data/lib/mongo/operation/commands/aggregate.rb +0 -64
  1598. data/lib/mongo/operation/commands/collections_info/result.rb +0 -41
  1599. data/lib/mongo/operation/commands/collections_info.rb +0 -71
  1600. data/lib/mongo/operation/commands/command.rb +0 -47
  1601. data/lib/mongo/operation/commands/find/result.rb +0 -62
  1602. data/lib/mongo/operation/commands/find.rb +0 -27
  1603. data/lib/mongo/operation/commands/get_more/result.rb +0 -62
  1604. data/lib/mongo/operation/commands/get_more.rb +0 -27
  1605. data/lib/mongo/operation/commands/indexes.rb +0 -73
  1606. data/lib/mongo/operation/commands/list_collections/result.rb +0 -94
  1607. data/lib/mongo/operation/commands/list_collections.rb +0 -48
  1608. data/lib/mongo/operation/commands/list_indexes/result.rb +0 -98
  1609. data/lib/mongo/operation/commands/list_indexes.rb +0 -48
  1610. data/lib/mongo/operation/commands/map_reduce/result.rb +0 -119
  1611. data/lib/mongo/operation/commands/map_reduce.rb +0 -49
  1612. data/lib/mongo/operation/commands/parallel_scan/result.rb +0 -64
  1613. data/lib/mongo/operation/commands/parallel_scan.rb +0 -52
  1614. data/lib/mongo/operation/commands/user_query.rb +0 -72
  1615. data/lib/mongo/operation/commands/users_info/result.rb +0 -44
  1616. data/lib/mongo/operation/commands/users_info.rb +0 -48
  1617. data/lib/mongo/operation/commands.rb +0 -26
  1618. data/lib/mongo/operation/executable.rb +0 -42
  1619. data/lib/mongo/operation/limited.rb +0 -37
  1620. data/lib/mongo/operation/object_id_generator.rb +0 -36
  1621. data/lib/mongo/operation/read/get_more.rb +0 -52
  1622. data/lib/mongo/operation/read/query/result.rb +0 -40
  1623. data/lib/mongo/operation/read/query.rb +0 -55
  1624. data/lib/mongo/operation/read.rb +0 -16
  1625. data/lib/mongo/operation/read_preference.rb +0 -61
  1626. data/lib/mongo/operation/specifiable.rb +0 -473
  1627. data/lib/mongo/operation/write/bulk/bulkable.rb +0 -83
  1628. data/lib/mongo/operation/write/bulk/delete/result.rb +0 -71
  1629. data/lib/mongo/operation/write/bulk/delete.rb +0 -71
  1630. data/lib/mongo/operation/write/bulk/insert/result.rb +0 -129
  1631. data/lib/mongo/operation/write/bulk/insert.rb +0 -96
  1632. data/lib/mongo/operation/write/bulk/legacy_mergable.rb +0 -87
  1633. data/lib/mongo/operation/write/bulk/mergable.rb +0 -71
  1634. data/lib/mongo/operation/write/bulk/update/result.rb +0 -205
  1635. data/lib/mongo/operation/write/bulk/update.rb +0 -81
  1636. data/lib/mongo/operation/write/bulk.rb +0 -20
  1637. data/lib/mongo/operation/write/command/create_index.rb +0 -49
  1638. data/lib/mongo/operation/write/command/create_user.rb +0 -42
  1639. data/lib/mongo/operation/write/command/delete.rb +0 -56
  1640. data/lib/mongo/operation/write/command/drop_index.rb +0 -50
  1641. data/lib/mongo/operation/write/command/insert.rb +0 -66
  1642. data/lib/mongo/operation/write/command/remove_user.rb +0 -41
  1643. data/lib/mongo/operation/write/command/update.rb +0 -62
  1644. data/lib/mongo/operation/write/command/update_user.rb +0 -42
  1645. data/lib/mongo/operation/write/command/writable.rb +0 -57
  1646. data/lib/mongo/operation/write/command.rb +0 -23
  1647. data/lib/mongo/operation/write/create_index.rb +0 -67
  1648. data/lib/mongo/operation/write/create_user.rb +0 -50
  1649. data/lib/mongo/operation/write/delete/result.rb +0 -40
  1650. data/lib/mongo/operation/write/delete.rb +0 -71
  1651. data/lib/mongo/operation/write/drop_index.rb +0 -63
  1652. data/lib/mongo/operation/write/gle.rb +0 -49
  1653. data/lib/mongo/operation/write/idable.rb +0 -63
  1654. data/lib/mongo/operation/write/insert/result.rb +0 -62
  1655. data/lib/mongo/operation/write/insert.rb +0 -71
  1656. data/lib/mongo/operation/write/remove_user.rb +0 -48
  1657. data/lib/mongo/operation/write/update/result.rb +0 -160
  1658. data/lib/mongo/operation/write/update.rb +0 -81
  1659. data/lib/mongo/operation/write/update_user.rb +0 -50
  1660. data/lib/mongo/operation/write/write_command_enabled.rb +0 -54
  1661. data/lib/mongo/operation/write.rb +0 -27
  1662. data/lib/mongo/server/connectable.rb +0 -113
  1663. data/lib/mongo/server/connection_pool/queue.rb +0 -197
  1664. data/lib/mongo/server/context.rb +0 -69
  1665. data/lib/mongo/server/description/inspector/description_changed.rb +0 -57
  1666. data/lib/mongo/server/description/inspector/primary_elected.rb +0 -58
  1667. data/lib/mongo/server/description/inspector/standalone_discovered.rb +0 -56
  1668. data/lib/mongo/server/description/inspector.rb +0 -79
  1669. data/lib/mongo/server_selector/selectable.rb +0 -222
  1670. data/lib/mongo/write_concern/normalizable.rb +0 -52
  1671. data/spec/mongo/collection/view/builder/flags_spec.rb +0 -106
  1672. data/spec/mongo/collection/view/builder/modifiers_spec.rb +0 -210
  1673. data/spec/mongo/command_monitoring_spec.rb +0 -64
  1674. data/spec/mongo/connection_string_spec.rb +0 -115
  1675. data/spec/mongo/crud_spec.rb +0 -42
  1676. data/spec/mongo/gridfs_spec.rb +0 -50
  1677. data/spec/mongo/operation/commands/aggregate/result_spec.rb +0 -80
  1678. data/spec/mongo/operation/commands/aggregate_spec.rb +0 -72
  1679. data/spec/mongo/operation/commands/collections_info_spec.rb +0 -40
  1680. data/spec/mongo/operation/commands/command_spec.rb +0 -80
  1681. data/spec/mongo/operation/commands/indexes_spec.rb +0 -31
  1682. data/spec/mongo/operation/commands/map_reduce_spec.rb +0 -125
  1683. data/spec/mongo/operation/read/get_more_spec.rb +0 -53
  1684. data/spec/mongo/operation/read/query_spec.rb +0 -102
  1685. data/spec/mongo/operation/read_preference_spec.rb +0 -245
  1686. data/spec/mongo/operation/write/bulk/delete_spec.rb +0 -223
  1687. data/spec/mongo/operation/write/bulk/insert_spec.rb +0 -250
  1688. data/spec/mongo/operation/write/bulk/update_spec.rb +0 -220
  1689. data/spec/mongo/operation/write/command/delete_spec.rb +0 -106
  1690. data/spec/mongo/operation/write/command/insert_spec.rb +0 -105
  1691. data/spec/mongo/operation/write/command/update_spec.rb +0 -110
  1692. data/spec/mongo/operation/write/create_index_spec.rb +0 -63
  1693. data/spec/mongo/operation/write/create_user_spec.rb +0 -44
  1694. data/spec/mongo/operation/write/delete_spec.rb +0 -215
  1695. data/spec/mongo/operation/write/drop_index_spec.rb +0 -51
  1696. data/spec/mongo/operation/write/insert_spec.rb +0 -291
  1697. data/spec/mongo/operation/write/remove_user_spec.rb +0 -46
  1698. data/spec/mongo/operation/write/update_spec.rb +0 -256
  1699. data/spec/mongo/operation/write/update_user_spec.rb +0 -46
  1700. data/spec/mongo/server/connection_pool/queue_spec.rb +0 -190
  1701. data/spec/mongo/server/description/inspector/description_changed_spec.rb +0 -78
  1702. data/spec/mongo/server/description/inspector/primary_elected_spec.rb +0 -94
  1703. data/spec/mongo/server_discovery_and_monitoring_spec.rb +0 -115
  1704. data/spec/mongo/server_selection_rtt_spec.rb +0 -85
  1705. data/spec/mongo/server_selection_spec.rb +0 -90
  1706. data/spec/support/certificates/ca.pem +0 -17
  1707. data/spec/support/certificates/password_protected.pem +0 -51
  1708. data/spec/support/command_monitoring/bulkWrite.yml +0 -73
  1709. data/spec/support/command_monitoring/command.yml +0 -42
  1710. data/spec/support/command_monitoring/find.yml +0 -268
  1711. data/spec/support/command_monitoring/insertMany.yml +0 -81
  1712. data/spec/support/command_monitoring/updateMany.yml +0 -67
  1713. data/spec/support/command_monitoring/updateOne.yml +0 -95
  1714. data/spec/support/command_monitoring.rb +0 -376
  1715. data/spec/support/connection_string.rb +0 -228
  1716. data/spec/support/connection_string_tests/invalid-uris.yml +0 -193
  1717. data/spec/support/connection_string_tests/valid-auth.yml +0 -256
  1718. data/spec/support/connection_string_tests/valid-options.yml +0 -30
  1719. data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +0 -197
  1720. data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +0 -213
  1721. data/spec/support/connection_string_tests/valid-warnings.yml +0 -55
  1722. data/spec/support/crud/read.rb +0 -164
  1723. data/spec/support/crud/write.rb +0 -243
  1724. data/spec/support/crud.rb +0 -211
  1725. data/spec/support/crud_tests/read/aggregate.yml +0 -43
  1726. data/spec/support/crud_tests/read/count.yml +0 -37
  1727. data/spec/support/crud_tests/read/distinct.yml +0 -33
  1728. data/spec/support/crud_tests/read/find.yml +0 -50
  1729. data/spec/support/crud_tests/write/deleteMany.yml +0 -36
  1730. data/spec/support/crud_tests/write/deleteOne.yml +0 -49
  1731. data/spec/support/crud_tests/write/findOneAndDelete.yml +0 -54
  1732. data/spec/support/crud_tests/write/findOneAndReplace.yml +0 -153
  1733. data/spec/support/crud_tests/write/findOneAndUpdate.yml +0 -161
  1734. data/spec/support/crud_tests/write/insertMany.yml +0 -24
  1735. data/spec/support/crud_tests/write/insertOne.yml +0 -19
  1736. data/spec/support/crud_tests/write/replaceOne.yml +0 -96
  1737. data/spec/support/crud_tests/write/updateMany.yml +0 -83
  1738. data/spec/support/crud_tests/write/updateOne.yml +0 -80
  1739. data/spec/support/gridfs.rb +0 -637
  1740. data/spec/support/gridfs_tests/delete.yml +0 -157
  1741. data/spec/support/gridfs_tests/download.yml +0 -210
  1742. data/spec/support/helpers.rb +0 -140
  1743. data/spec/support/sdam/rs/discover_arbiters.yml +0 -41
  1744. data/spec/support/sdam/rs/discover_passives.yml +0 -77
  1745. data/spec/support/sdam/rs/discover_primary.yml +0 -40
  1746. data/spec/support/sdam/rs/discover_secondary.yml +0 -41
  1747. data/spec/support/sdam/rs/discovery.yml +0 -195
  1748. data/spec/support/sdam/rs/equal_electionids.yml +0 -48
  1749. data/spec/support/sdam/rs/ghost_discovered.yml +0 -39
  1750. data/spec/support/sdam/rs/hosts_differ_from_seeds.yml +0 -34
  1751. data/spec/support/sdam/rs/member_reconfig.yml +0 -68
  1752. data/spec/support/sdam/rs/member_standalone.yml +0 -60
  1753. data/spec/support/sdam/rs/new_primary.yml +0 -74
  1754. data/spec/support/sdam/rs/new_primary_new_electionid.yml +0 -101
  1755. data/spec/support/sdam/rs/new_primary_new_setversion.yml +0 -101
  1756. data/spec/support/sdam/rs/new_primary_wrong_set_name.yml +0 -71
  1757. data/spec/support/sdam/rs/non_rs_member.yml +0 -31
  1758. data/spec/support/sdam/rs/normalize_case.yml +0 -49
  1759. data/spec/support/sdam/rs/null_election_id.yml +0 -151
  1760. data/spec/support/sdam/rs/primary_becomes_standalone.yml +0 -52
  1761. data/spec/support/sdam/rs/primary_changes_set_name.yml +0 -57
  1762. data/spec/support/sdam/rs/primary_disconnect.yml +0 -56
  1763. data/spec/support/sdam/rs/primary_disconnect_electionid.yml +0 -160
  1764. data/spec/support/sdam/rs/primary_disconnect_setversion.yml +0 -160
  1765. data/spec/support/sdam/rs/primary_mismatched_me.yml +0 -37
  1766. data/spec/support/sdam/rs/primary_reports_new_member.yml +0 -163
  1767. data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +0 -75
  1768. data/spec/support/sdam/rs/primary_wrong_set_name.yml +0 -27
  1769. data/spec/support/sdam/rs/response_from_removed.yml +0 -63
  1770. data/spec/support/sdam/rs/rsother_discovered.yml +0 -62
  1771. data/spec/support/sdam/rs/sec_not_auth.yml +0 -49
  1772. data/spec/support/sdam/rs/secondary_mismatched_me.yml +0 -37
  1773. data/spec/support/sdam/rs/secondary_wrong_set_name.yml +0 -28
  1774. data/spec/support/sdam/rs/secondary_wrong_set_name_with_primary.yml +0 -69
  1775. data/spec/support/sdam/rs/set_version_without_electionid.yml +0 -69
  1776. data/spec/support/sdam/rs/setversion_without_electionid.yml +0 -69
  1777. data/spec/support/sdam/rs/stepdown_change_set_name.yml +0 -59
  1778. data/spec/support/sdam/rs/unexpected_mongos.yml +0 -26
  1779. data/spec/support/sdam/rs/use_setversion_without_electionid.yml +0 -99
  1780. data/spec/support/sdam/rs/wrong_set_name.yml +0 -35
  1781. data/spec/support/sdam/sharded/mongos_disconnect.yml +0 -104
  1782. data/spec/support/sdam/sharded/multiple_mongoses.yml +0 -46
  1783. data/spec/support/sdam/sharded/non_mongos_removed.yml +0 -41
  1784. data/spec/support/sdam/sharded/normalize_uri_case.yml +0 -32
  1785. data/spec/support/sdam/sharded/single_mongos.yml +0 -33
  1786. data/spec/support/sdam/single/direct_connection_external_ip.yml +0 -34
  1787. data/spec/support/sdam/single/direct_connection_mongos.yml +0 -33
  1788. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +0 -35
  1789. data/spec/support/sdam/single/direct_connection_rsprimary.yml +0 -34
  1790. data/spec/support/sdam/single/direct_connection_rssecondary.yml +0 -35
  1791. data/spec/support/sdam/single/direct_connection_slave.yml +0 -32
  1792. data/spec/support/sdam/single/direct_connection_standalone.yml +0 -32
  1793. data/spec/support/sdam/single/not_ok_response.yml +0 -38
  1794. data/spec/support/sdam/single/standalone_removed.yml +0 -32
  1795. data/spec/support/sdam/single/unavailable_seed.yml +0 -28
  1796. data/spec/support/server_discovery_and_monitoring.rb +0 -186
  1797. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +0 -26
  1798. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +0 -21
  1799. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +0 -21
  1800. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +0 -26
  1801. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +0 -21
  1802. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +0 -26
  1803. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +0 -26
  1804. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +0 -21
  1805. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +0 -21
  1806. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +0 -33
  1807. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +0 -26
  1808. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +0 -29
  1809. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +0 -29
  1810. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +0 -29
  1811. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +0 -31
  1812. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +0 -31
  1813. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +0 -29
  1814. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +0 -26
  1815. data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +0 -26
  1816. data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +0 -19
  1817. data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +0 -11
  1818. data/spec/support/server_selection.rb +0 -135
  1819. data/spec/support/server_selection_rtt.rb +0 -41
  1820. data/spec/support/travis.rb +0 -14
@@ -1,4 +1,7 @@
1
- # Copyright (C) 2014-2016 MongoDB, Inc.
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ # Copyright (C) 2014-2020 MongoDB Inc.
2
5
  #
3
6
  # Licensed under the Apache License, Version 2.0 (the "License");
4
7
  # you may not use this file except in compliance with the License.
@@ -50,13 +53,16 @@ module Mongo
50
53
  # Delegate to the cluster for the next primary.
51
54
  def_delegators :cluster, :next_primary
52
55
 
53
- # Convenience delegators to find.
54
- def_delegators :find, :parallel_scan
55
-
56
56
  # Options that can be updated on a new Collection instance via the #with method.
57
57
  #
58
58
  # @since 2.1.0
59
- CHANGEABLE_OPTIONS = [ :read, :read_concern, :write ].freeze
59
+ CHANGEABLE_OPTIONS = [ :read, :read_concern, :write, :write_concern ].freeze
60
+
61
+ # Options that can be used for creating a time-series collection.
62
+ TIME_SERIES_OPTIONS = {
63
+ :time_series => :timeseries,
64
+ :expire_after => :expireAfterSeconds
65
+ }
60
66
 
61
67
  # Check if a collection is equal to another object. Will check the name and
62
68
  # the database for equality.
@@ -83,12 +89,33 @@ module Mongo
83
89
  # @param [ String, Symbol ] name The collection name.
84
90
  # @param [ Hash ] options The collection options.
85
91
  #
92
+ # @option options [ Hash ] :write Deprecated. Equivalent to :write_concern
93
+ # option.
94
+ # @option options [ Hash ] :write_concern The write concern options.
95
+ # Can be :w => Integer|String, :fsync => Boolean, :j => Boolean.
96
+ # @option options [ Hash ] :time_series Create a time-series collection.
97
+ # See https://docs.mongodb.com/manual/core/timeseries-collections/ for more
98
+ # information about time-series collection.
99
+ # @option options [ Integer ] :expire_after Number indicating
100
+ # after how many seconds old time-series data should be deleted.
101
+ #
86
102
  # @since 2.0.0
87
103
  def initialize(database, name, options = {})
88
104
  raise Error::InvalidCollectionName.new unless name
105
+ if options[:write] && options[:write_concern] && options[:write] != options[:write_concern]
106
+ raise ArgumentError, "If :write and :write_concern are both given, they must be identical: #{options.inspect}"
107
+ end
89
108
  @database = database
90
109
  @name = name.to_s.freeze
91
- @options = options.freeze
110
+ @options = options.dup
111
+ =begin WriteConcern object support
112
+ if @options[:write_concern].is_a?(WriteConcern::Base)
113
+ # Cache the instance so that we do not needlessly reconstruct it.
114
+ @write_concern = @options[:write_concern]
115
+ @options[:write_concern] = @write_concern.options
116
+ end
117
+ =end
118
+ @options.freeze
92
119
  end
93
120
 
94
121
  # Get the read concern for this collection instance.
@@ -100,7 +127,19 @@ module Mongo
100
127
  #
101
128
  # @since 2.2.0
102
129
  def read_concern
103
- @read_concern ||= options[:read_concern]
130
+ options[:read_concern] || database.read_concern
131
+ end
132
+
133
+ # Get the server selector on this collection.
134
+ #
135
+ # @example Get the server selector.
136
+ # collection.server_selector
137
+ #
138
+ # @return [ Mongo::ServerSelector ] The server selector.
139
+ #
140
+ # @since 2.0.0
141
+ def server_selector
142
+ @server_selector ||= ServerSelector.get(read_preference || database.server_selector)
104
143
  end
105
144
 
106
145
  # Get the read preference on this collection.
@@ -108,11 +147,11 @@ module Mongo
108
147
  # @example Get the read preference.
109
148
  # collection.read_preference
110
149
  #
111
- # @return [ Mongo::ServerSelector ] The read preference.
150
+ # @return [ Hash ] The read preference.
112
151
  #
113
152
  # @since 2.0.0
114
153
  def read_preference
115
- @read_preference ||= ServerSelector.get(options[:read] || database.read_preference)
154
+ @read_preference ||= options[:read] || database.read_preference
116
155
  end
117
156
 
118
157
  # Get the write concern on this collection.
@@ -124,18 +163,40 @@ module Mongo
124
163
  #
125
164
  # @since 2.0.0
126
165
  def write_concern
127
- @write_concern ||= options[:write] ? WriteConcern.get(options[:write]) :
128
- database.write_concern
166
+ @write_concern ||= WriteConcern.get(
167
+ options[:write_concern] || options[:write] || database.write_concern)
168
+ end
169
+
170
+ # Get the write concern for the collection, given the session.
171
+ #
172
+ # If the session is in a transaction and the collection
173
+ # has an unacknowledged write concern, remove the write
174
+ # concern's :w option. Otherwise, return the unmodified
175
+ # write concern.
176
+ #
177
+ # @return [ Mongo::WriteConcern ] The write concern.
178
+ #
179
+ # @api private
180
+ def write_concern_with_session(session)
181
+ wc = write_concern
182
+ if session && session.in_transaction?
183
+ if wc && !wc.acknowledged?
184
+ opts = wc.options.dup
185
+ opts.delete(:w)
186
+ return WriteConcern.get(opts)
187
+ end
188
+ end
189
+ wc
129
190
  end
130
191
 
131
192
  # Provides a new collection with either a new read preference or new write concern
132
193
  # merged over the existing read preference / write concern.
133
194
  #
134
- # @example Get a collection with changed read preference.
135
- # collection.with(:read => { :mode => :primary_preferred })
195
+ # @example Get a collection with a changed read preference.
196
+ # collection.with(read: { mode: :primary_preferred })
136
197
  #
137
- # @example Get a collection with changed write concern.
138
- # collection.with(:write => { w: 3 })
198
+ # @example Get a collection with a changed write concern.
199
+ # collection.with(write_concern: { w: 3 })
139
200
 
140
201
  # @param [ Hash ] new_options The new options to use.
141
202
  #
@@ -146,7 +207,14 @@ module Mongo
146
207
  new_options.keys.each do |k|
147
208
  raise Error::UnchangeableCollectionOption.new(k) unless CHANGEABLE_OPTIONS.include?(k)
148
209
  end
149
- Collection.new(database, name, options.merge(new_options))
210
+ options = @options.dup
211
+ if options[:write] && new_options[:write_concern]
212
+ options.delete(:write)
213
+ end
214
+ if options[:write_concern] && new_options[:write]
215
+ options.delete(:write_concern)
216
+ end
217
+ Collection.new(database, name, options.update(new_options))
150
218
  end
151
219
 
152
220
  # Is the collection capped?
@@ -158,7 +226,7 @@ module Mongo
158
226
  #
159
227
  # @since 2.0.0
160
228
  def capped?
161
- database.command(:collstats => name).documents[0][CAPPED]
229
+ database.read_command(:collstats => name).documents[0][CAPPED]
162
230
  end
163
231
 
164
232
  # Force the collection to be created in the database.
@@ -166,11 +234,53 @@ module Mongo
166
234
  # @example Force the collection to be created.
167
235
  # collection.create
168
236
  #
237
+ # @param [ Hash ] opts The options for the create operation.
238
+ #
239
+ # @option opts [ Session ] :session The session to use for the operation.
240
+ # @option opts [ Hash ] :write_concern The write concern options.
241
+ # @option opts [ Hash ] :time_series Create a time-series collection.
242
+ # @option opts [ Integer ] :expire_after Number indicating
243
+ # after how many seconds old time-series data should be deleted.
244
+ #
169
245
  # @return [ Result ] The result of the command.
170
246
  #
171
247
  # @since 2.0.0
172
- def create
173
- database.command({ :create => name }.merge(options))
248
+ def create(opts = {})
249
+ # Passing read options to create command causes it to break.
250
+ # Filter the read options out.
251
+ # TODO put the list of read options in a class-level constant when
252
+ # we figure out what the full set of them is.
253
+ options = Hash[self.options.reject do |key, value|
254
+ %w(read read_preference read_concern).include?(key.to_s)
255
+ end]
256
+ options.update(Utils.slice_hash(opts, *TIME_SERIES_OPTIONS.keys))
257
+ # Converting Ruby spelled time series options to server style.
258
+ TIME_SERIES_OPTIONS.each do |ruby_key, server_key|
259
+ if options.key?(ruby_key)
260
+ options[server_key] = options.delete(ruby_key)
261
+ end
262
+ end
263
+ operation = { :create => name }.merge(options)
264
+ operation.delete(:write)
265
+ operation.delete(:write_concern)
266
+ client.send(:with_session, opts) do |session|
267
+ write_concern = if opts[:write_concern]
268
+ WriteConcern.get(opts[:write_concern])
269
+ else
270
+ self.write_concern
271
+ end
272
+
273
+ context = Operation::Context.new(client: client, session: session)
274
+ Operation::Create.new(
275
+ selector: operation,
276
+ db_name: database.name,
277
+ write_concern: write_concern,
278
+ session: session,
279
+ # Note that these are collection options, collation isn't
280
+ # taken from options passed to the create method.
281
+ collation: options[:collation] || options['collation'],
282
+ ).execute(next_primary(nil, session), context: context)
283
+ end
174
284
  end
175
285
 
176
286
  # Drop the collection. Will also drop all indexes associated with the
@@ -181,14 +291,36 @@ module Mongo
181
291
  # @example Drop the collection.
182
292
  # collection.drop
183
293
  #
294
+ # @param [ Hash ] opts The options for the drop operation.
295
+ #
296
+ # @option options [ Session ] :session The session to use for the operation.
297
+ # @option opts [ Hash ] :write_concern The write concern options.
298
+ #
184
299
  # @return [ Result ] The result of the command.
185
300
  #
186
301
  # @since 2.0.0
187
- def drop
188
- database.command(:drop => name)
302
+ def drop(opts = {})
303
+ client.send(:with_session, opts) do |session|
304
+ temp_write_concern = write_concern
305
+ write_concern = if opts[:write_concern]
306
+ WriteConcern.get(opts[:write_concern])
307
+ else
308
+ temp_write_concern
309
+ end
310
+ Operation::Drop.new({
311
+ selector: { :drop => name },
312
+ db_name: database.name,
313
+ write_concern: write_concern,
314
+ session: session,
315
+ }).execute(next_primary(nil, session), context: Operation::Context.new(client: client, session: session))
316
+ end
189
317
  rescue Error::OperationFailure => ex
190
- raise ex unless ex.message =~ /ns not found/
191
- false
318
+ # NamespaceNotFound
319
+ if ex.code == 26 || ex.code.nil? && ex.message =~ /ns not found/
320
+ false
321
+ else
322
+ raise
323
+ end
192
324
  end
193
325
 
194
326
  # Find documents in the collection.
@@ -202,24 +334,30 @@ module Mongo
202
334
  # @param [ Hash ] filter The filter to use in the find.
203
335
  # @param [ Hash ] options The options for the find.
204
336
  #
337
+ # @option options [ true, false ] :allow_disk_use When set to true, the
338
+ # server can write temporary data to disk while executing the find
339
+ # operation. This option is only available on MongoDB server versions
340
+ # 4.4 and newer.
205
341
  # @option options [ true, false ] :allow_partial_results Allows the query to get partial
206
342
  # results if some shards are down.
207
343
  # @option options [ Integer ] :batch_size The number of documents returned in each batch
208
344
  # of results from MongoDB.
345
+ # @option options [ Hash ] :collation The collation to use.
209
346
  # @option options [ String ] :comment Associate a comment with the query.
210
347
  # @option options [ :tailable, :tailable_await ] :cursor_type The type of cursor to use.
211
348
  # @option options [ Integer ] :limit The max number of docs to return from the query.
212
- # @option options [ Integer ] :max_time_ms The maximum amount of time to allow the query
213
- # to run in milliseconds.
349
+ # @option options [ Integer ] :max_time_ms
350
+ # The maximum amount of time to allow the query to run, in milliseconds.
214
351
  # @option options [ Hash ] :modifiers A document containing meta-operators modifying the
215
352
  # output or behavior of a query.
216
353
  # @option options [ true, false ] :no_cursor_timeout The server normally times out idle
217
354
  # cursors after an inactivity period (10 minutes) to prevent excess memory use.
218
355
  # Set this option to prevent that.
219
- # @option options [ true, false ] :oplog_replay Internal replication use only - driver
220
- # should not set.
356
+ # @option options [ true, false ] :oplog_replay For internal replication
357
+ # use only, applications should not set this option.
221
358
  # @option options [ Hash ] :projection The fields to include or exclude from each doc
222
359
  # in the result set.
360
+ # @option options [ Session ] :session The session to use.
223
361
  # @option options [ Integer ] :skip The number of docs to skip before returning results.
224
362
  # @option options [ Hash ] :sort The key and direction pairs by which the result set
225
363
  # will be sorted.
@@ -239,24 +377,71 @@ module Mongo
239
377
  # @param [ Array<Hash> ] pipeline The aggregation pipeline.
240
378
  # @param [ Hash ] options The aggregation options.
241
379
  #
242
- # @option options [ true, false ] :allow_disk_use Set to true if disk usage is allowed during
243
- # the aggregation.
244
- # @option options [ Integer ] :batch_size The number of documents to return per batch.
245
- # @option options [ Integer ] :max_time_ms The maximum amount of time in milliseconds to allow the
246
- # aggregation to run.
247
- # @option options [ true, false ] :use_cursor Indicates whether the command will request that the server
248
- # provide results using a cursor.
380
+ # @option options [ true, false ] :allow_disk_use Set to true if disk
381
+ # usage is allowed during the aggregation.
382
+ # @option options [ Integer ] :batch_size The number of documents to return
383
+ # per batch.
249
384
  # @option options [ true, false ] :bypass_document_validation Whether or
250
385
  # not to skip document level validation.
386
+ # @option options [ Hash ] :collation The collation to use.
387
+ # @option options [ String ] :comment Associate a comment with the aggregation.
388
+ # @option options [ String ] :hint The index to use for the aggregation.
389
+ # @option options [ Integer ] :max_time_ms The maximum amount of time in
390
+ # milliseconds to allow the aggregation to run.
391
+ # @option options [ true, false ] :use_cursor Indicates whether the command
392
+ # will request that the server provide results using a cursor. Note that
393
+ # as of server version 3.6, aggregations always provide results using a
394
+ # cursor and this option is therefore not valid.
395
+ # @option options [ Session ] :session The session to use.
251
396
  #
252
397
  # @return [ Aggregation ] The aggregation object.
253
398
  #
254
399
  # @since 2.1.0
255
400
  def aggregate(pipeline, options = {})
256
- View.new(self, {}).aggregate(pipeline, options)
401
+ View.new(self, {}, options).aggregate(pipeline, options)
402
+ end
403
+
404
+ # As of version 3.6 of the MongoDB server, a ``$changeStream`` pipeline
405
+ # stage is supported in the aggregation framework. This stage allows users
406
+ # to request that notifications are sent for all changes to a particular
407
+ # collection.
408
+ #
409
+ # @example Get change notifications for a given collection.
410
+ # collection.watch([{ '$match' => { operationType: { '$in' => ['insert', 'replace'] } } }])
411
+ #
412
+ # @param [ Array<Hash> ] pipeline Optional additional filter operators.
413
+ # @param [ Hash ] options The change stream options.
414
+ #
415
+ # @option options [ String ] :full_document Allowed values: ‘default’,
416
+ # ‘updateLookup’. Defaults to ‘default’. When set to ‘updateLookup’,
417
+ # the change notification for partial updates will include both a delta
418
+ # describing the changes to the document, as well as a copy of the entire
419
+ # document that was changed from some time after the change occurred.
420
+ # @option options [ BSON::Document, Hash ] :resume_after Specifies the
421
+ # logical starting point for the new change stream.
422
+ # @option options [ Integer ] :max_await_time_ms The maximum amount of time
423
+ # for the server to wait on new documents to satisfy a change stream query.
424
+ # @option options [ Integer ] :batch_size The number of documents to return
425
+ # per batch.
426
+ # @option options [ BSON::Document, Hash ] :collation The collation to use.
427
+ # @option options [ Session ] :session The session to use.
428
+ # @option options [ BSON::Timestamp ] :start_at_operation_time Only return
429
+ # changes that occurred at or after the specified timestamp. Any command run
430
+ # against the server will return a cluster time that can be used here.
431
+ # Only recognized by server versions 4.0+.
432
+ #
433
+ # @note A change stream only allows 'majority' read concern.
434
+ # @note This helper method is preferable to running a raw aggregation with
435
+ # a $changeStream stage, for the purpose of supporting resumability.
436
+ #
437
+ # @return [ ChangeStream ] The change stream object.
438
+ #
439
+ # @since 2.5.0
440
+ def watch(pipeline = [], options = {})
441
+ View::ChangeStream.new(View.new(self, {}, options), pipeline, nil, options)
257
442
  end
258
443
 
259
- # Get a count of matching documents in the collection.
444
+ # Gets an estimated number of matching documents in the collection.
260
445
  #
261
446
  # @example Get the count.
262
447
  # collection.count(name: 1)
@@ -269,12 +454,66 @@ module Mongo
269
454
  # @option options [ Integer ] :max_time_ms The maximum amount of time to allow the command to run.
270
455
  # @option options [ Integer ] :skip The number of documents to skip before counting.
271
456
  # @option options [ Hash ] :read The read preference options.
457
+ # @option options [ Hash ] :collation The collation to use.
458
+ # @option options [ Session ] :session The session to use.
272
459
  #
273
460
  # @return [ Integer ] The document count.
274
461
  #
275
462
  # @since 2.1.0
463
+ #
464
+ # @deprecated Use #count_documents or estimated_document_count instead. However, note that the
465
+ # following operators will need to be substituted when switching to #count_documents:
466
+ # * $where should be replaced with $expr (only works on 3.6+)
467
+ # * $near should be replaced with $geoWithin with $center
468
+ # * $nearSphere should be replaced with $geoWithin with $centerSphere
276
469
  def count(filter = nil, options = {})
277
- View.new(self, filter || {}).count(options)
470
+ View.new(self, filter || {}, options).count(options)
471
+ end
472
+
473
+ # Gets the number of documents matching the query. Unlike the deprecated
474
+ # #count method, this will return the exact number of documents matching
475
+ # the filter (or exact number of documents in the collection, if no filter
476
+ # is provided) rather than an estimate.
477
+ #
478
+ # Use #estimated_document_count to retrieve an estimate of the number
479
+ # of documents in the collection using the collection metadata.
480
+ #
481
+ # @param [ Hash ] filter A filter for matching documents.
482
+ # @param [ Hash ] options Options for the operation.
483
+ #
484
+ # @option options :skip [ Integer ] The number of documents to skip.
485
+ # @option options :hint [ Hash ] Override default index selection and force
486
+ # MongoDB to use a specific index for the query. Requires server version 3.6+.
487
+ # @option options :limit [ Integer ] Max number of docs to count.
488
+ # @option options :max_time_ms [ Integer ] The maximum amount of time to allow the
489
+ # command to run.
490
+ # @option options :read [ Hash ] The read preference options.
491
+ # @option options :collation [ Hash ] The collation to use.
492
+ #
493
+ # @return [ Integer ] The document count.
494
+ #
495
+ # @since 2.6.0
496
+ def count_documents(filter = {}, options = {})
497
+ View.new(self, filter, options).count_documents(options)
498
+ end
499
+
500
+ # Gets an estimate of the number of documents in the collection using the
501
+ # collection metadata.
502
+ #
503
+ # Use #count_documents to retrieve the exact number of documents in the
504
+ # collection, or to count documents matching a filter.
505
+ #
506
+ # @param [ Hash ] options Options for the operation.
507
+ #
508
+ # @option opts :max_time_ms [ Integer ] The maximum amount of time to allow
509
+ # the command to run for on the server.
510
+ # @option opts [ Hash ] :read The read preference options.
511
+ #
512
+ # @return [ Integer ] The document count.
513
+ #
514
+ # @since 2.6.0
515
+ def estimated_document_count(options = {})
516
+ View.new(self, {}, options).estimated_document_count(options)
278
517
  end
279
518
 
280
519
  # Get a list of distinct values for a specific field.
@@ -288,12 +527,14 @@ module Mongo
288
527
  #
289
528
  # @option options [ Integer ] :max_time_ms The maximum amount of time to allow the command to run.
290
529
  # @option options [ Hash ] :read The read preference options.
530
+ # @option options [ Hash ] :collation The collation to use.
531
+ # @option options [ Session ] :session The session to use.
291
532
  #
292
533
  # @return [ Array<Object> ] The list of distinct values.
293
534
  #
294
535
  # @since 2.1.0
295
536
  def distinct(field_name, filter = nil, options = {})
296
- View.new(self, filter || {}).distinct(field_name, options)
537
+ View.new(self, filter || {}, options).distinct(field_name, options)
297
538
  end
298
539
 
299
540
  # Get a view of all indexes for this collection. Can be iterated or has
@@ -304,6 +545,8 @@ module Mongo
304
545
  #
305
546
  # @param [ Hash ] options Options for getting a list of all indexes.
306
547
  #
548
+ # @option options [ Session ] :session The session to use.
549
+ #
307
550
  # @return [ View::Index ] The index view.
308
551
  #
309
552
  # @since 2.0.0
@@ -329,22 +572,40 @@ module Mongo
329
572
  # collection.insert_one({ name: 'test' })
330
573
  #
331
574
  # @param [ Hash ] document The document to insert.
332
- # @param [ Hash ] options The insert options.
575
+ # @param [ Hash ] opts The insert options.
576
+ #
577
+ # @option opts [ Session ] :session The session to use for the operation.
333
578
  #
334
579
  # @return [ Result ] The database response wrapper.
335
580
  #
336
581
  # @since 2.0.0
337
- def insert_one(document, options = {})
338
- write_with_retry do
339
- Operation::Write::Insert.new(
340
- :documents => [ document ],
341
- :db_name => database.name,
342
- :coll_name => name,
343
- :write_concern => write_concern,
344
- :bypass_document_validation => !!options[:bypass_document_validation],
345
- :options => options,
346
- :id_generator => client.options[:id_generator]
347
- ).execute(next_primary)
582
+ def insert_one(document, opts = {})
583
+ QueryCache.clear_namespace(namespace)
584
+
585
+ client.send(:with_session, opts) do |session|
586
+ write_concern = if opts[:write_concern]
587
+ WriteConcern.get(opts[:write_concern])
588
+ else
589
+ write_concern_with_session(session)
590
+ end
591
+
592
+ if document.nil?
593
+ raise ArgumentError, "Document to be inserted cannot be nil"
594
+ end
595
+
596
+ write_with_retry(session, write_concern) do |server, txn_num|
597
+ Operation::Insert.new(
598
+ :documents => [ document ],
599
+ :db_name => database.name,
600
+ :coll_name => name,
601
+ :write_concern => write_concern,
602
+ :bypass_document_validation => !!opts[:bypass_document_validation],
603
+ :options => opts,
604
+ :id_generator => client.options[:id_generator],
605
+ :session => session,
606
+ :txn_num => txn_num,
607
+ ).execute(server, context: Operation::Context.new(client: client, session: session))
608
+ end
348
609
  end
349
610
  end
350
611
 
@@ -356,10 +617,16 @@ module Mongo
356
617
  # @param [ Array<Hash> ] documents The documents to insert.
357
618
  # @param [ Hash ] options The insert options.
358
619
  #
620
+ # @option options [ true | false ] :ordered Whether the operations
621
+ # should be executed in order.
622
+ # @option options [ Session ] :session The session to use for the operation.
623
+ #
359
624
  # @return [ Result ] The database response wrapper.
360
625
  #
361
626
  # @since 2.0.0
362
627
  def insert_many(documents, options = {})
628
+ QueryCache.clear_namespace(namespace)
629
+
363
630
  inserts = documents.map{ |doc| { :insert_one => doc }}
364
631
  bulk_write(inserts, options)
365
632
  end
@@ -378,6 +645,7 @@ module Mongo
378
645
  # Can be :w => Integer, :fsync => Boolean, :j => Boolean.
379
646
  # @option options [ true, false ] :bypass_document_validation Whether or
380
647
  # not to skip document level validation.
648
+ # @option options [ Session ] :session The session to use for the set of operations.
381
649
  #
382
650
  # @return [ BulkWrite::Result ] The result of the operation.
383
651
  #
@@ -392,12 +660,18 @@ module Mongo
392
660
  # collection.delete_one
393
661
  #
394
662
  # @param [ Hash ] filter The filter to use.
663
+ # @param [ Hash ] options The options.
664
+ #
665
+ # @option options [ Hash ] :collation The collation to use.
666
+ # @option options [ Session ] :session The session to use.
667
+ # @option options [ Hash | String ] :hint The index to use for this operation.
668
+ # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
395
669
  #
396
670
  # @return [ Result ] The response from the database.
397
671
  #
398
672
  # @since 2.1.0
399
- def delete_one(filter = nil)
400
- find(filter).delete_one
673
+ def delete_one(filter = nil, options = {})
674
+ find(filter, options).delete_one(options)
401
675
  end
402
676
 
403
677
  # Remove documents from the collection.
@@ -406,12 +680,18 @@ module Mongo
406
680
  # collection.delete_many
407
681
  #
408
682
  # @param [ Hash ] filter The filter to use.
683
+ # @param [ Hash ] options The options.
684
+ #
685
+ # @option options [ Hash ] :collation The collation to use.
686
+ # @option options [ Session ] :session The session to use.
687
+ # @option options [ Hash | String ] :hint The index to use for this operation.
688
+ # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
409
689
  #
410
690
  # @return [ Result ] The response from the database.
411
691
  #
412
692
  # @since 2.1.0
413
- def delete_many(filter = nil)
414
- find(filter).delete_many
693
+ def delete_many(filter = nil, options = {})
694
+ find(filter, options).delete_many(options)
415
695
  end
416
696
 
417
697
  # Execute a parallel scan on the collection view.
@@ -424,12 +704,17 @@ module Mongo
424
704
  # collection.parallel_scan(2)
425
705
  #
426
706
  # @param [ Integer ] cursor_count The max number of cursors to return.
707
+ # @param [ Hash ] options The parallel scan command options.
708
+ #
709
+ # @option options [ Integer ] :max_time_ms The maximum amount of time to allow the command
710
+ # to run in milliseconds.
711
+ # @option options [ Session ] :session The session to use.
427
712
  #
428
713
  # @return [ Array<Cursor> ] An array of cursors.
429
714
  #
430
715
  # @since 2.1
431
- def parallel_scan(cursor_count)
432
- find.send(:parallel_scan, cursor_count)
716
+ def parallel_scan(cursor_count, options = {})
717
+ find({}, options).send(:parallel_scan, cursor_count, options)
433
718
  end
434
719
 
435
720
  # Replaces a single document in the collection with the new document.
@@ -445,12 +730,16 @@ module Mongo
445
730
  # document doesn't exist.
446
731
  # @option options [ true, false ] :bypass_document_validation Whether or
447
732
  # not to skip document level validation.
733
+ # @option options [ Hash ] :collation The collation to use.
734
+ # @option options [ Session ] :session The session to use.
735
+ # @option options [ Hash | String ] :hint The index to use for this operation.
736
+ # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
448
737
  #
449
738
  # @return [ Result ] The response from the database.
450
739
  #
451
740
  # @since 2.1.0
452
741
  def replace_one(filter, replacement, options = {})
453
- find(filter).replace_one(replacement, options)
742
+ find(filter, options).replace_one(replacement, options)
454
743
  end
455
744
 
456
745
  # Update documents in the collection.
@@ -459,19 +748,25 @@ module Mongo
459
748
  # collection.update_many({ name: 'test'}, '$set' => { name: 'test1' })
460
749
  #
461
750
  # @param [ Hash ] filter The filter to use.
462
- # @param [ Hash ] update The update statement.
751
+ # @param [ Hash | Array<Hash> ] update The update document or pipeline.
463
752
  # @param [ Hash ] options The options.
464
753
  #
465
754
  # @option options [ true, false ] :upsert Whether to upsert if the
466
755
  # document doesn't exist.
467
756
  # @option options [ true, false ] :bypass_document_validation Whether or
468
757
  # not to skip document level validation.
758
+ # @option options [ Hash ] :collation The collation to use.
759
+ # @option options [ Array ] :array_filters A set of filters specifying to which array elements
760
+ # an update should apply.
761
+ # @option options [ Session ] :session The session to use.
762
+ # @option options [ Hash | String ] :hint The index to use for this operation.
763
+ # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
469
764
  #
470
765
  # @return [ Result ] The response from the database.
471
766
  #
472
767
  # @since 2.1.0
473
768
  def update_many(filter, update, options = {})
474
- find(filter).update_many(update, options)
769
+ find(filter, options).update_many(update, options)
475
770
  end
476
771
 
477
772
  # Update a single document in the collection.
@@ -480,19 +775,25 @@ module Mongo
480
775
  # collection.update_one({ name: 'test'}, '$set' => { name: 'test1'})
481
776
  #
482
777
  # @param [ Hash ] filter The filter to use.
483
- # @param [ Hash ] update The update statement.
778
+ # @param [ Hash | Array<Hash> ] update The update document or pipeline.
484
779
  # @param [ Hash ] options The options.
485
780
  #
486
781
  # @option options [ true, false ] :upsert Whether to upsert if the
487
782
  # document doesn't exist.
488
783
  # @option options [ true, false ] :bypass_document_validation Whether or
489
784
  # not to skip document level validation.
785
+ # @option options [ Hash ] :collation The collation to use.
786
+ # @option options [ Array ] :array_filters A set of filters specifying to which array elements
787
+ # an update should apply.
788
+ # @option options [ Session ] :session The session to use.
789
+ # @option options [ Hash | String ] :hint The index to use for this operation.
790
+ # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
490
791
  #
491
792
  # @return [ Result ] The response from the database.
492
793
  #
493
794
  # @since 2.1.0
494
795
  def update_one(filter, update, options = {})
495
- find(filter).update_one(update, options)
796
+ find(filter, options).update_one(update, options)
496
797
  end
497
798
 
498
799
  # Finds a single document in the database via findAndModify and deletes
@@ -511,12 +812,16 @@ module Mongo
511
812
  # will be sorted.
512
813
  # @option options [ Hash ] :write_concern The write concern options.
513
814
  # Defaults to the collection's write concern.
815
+ # @option options [ Hash ] :collation The collation to use.
816
+ # @option options [ Session ] :session The session to use.
817
+ # @option options [ Hash | String ] :hint The index to use for this operation.
818
+ # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
514
819
  #
515
820
  # @return [ BSON::Document, nil ] The document, if found.
516
821
  #
517
822
  # @since 2.1.0
518
823
  def find_one_and_delete(filter, options = {})
519
- find(filter, options).find_one_and_delete
824
+ find(filter, options).find_one_and_delete(options)
520
825
  end
521
826
 
522
827
  # Finds a single document via findAndModify and updates it, returning the original doc unless
@@ -529,7 +834,7 @@ module Mongo
529
834
  # collection.find_one_and_update({ name: 'test' }, { "$set" => { name: 'test1' }}, :return_document => :after)
530
835
  #
531
836
  # @param [ Hash ] filter The filter to use.
532
- # @param [ BSON::Document ] update The update statement.
837
+ # @param [ Hash | Array<Hash> ] update The update document or pipeline.
533
838
  # @param [ Hash ] options The options.
534
839
  #
535
840
  # @option options [ Integer ] :max_time_ms The maximum amount of time to allow the command
@@ -543,6 +848,12 @@ module Mongo
543
848
  # not to skip document level validation.
544
849
  # @option options [ Hash ] :write_concern The write concern options.
545
850
  # Defaults to the collection's write concern.
851
+ # @option options [ Hash ] :collation The collation to use.
852
+ # @option options [ Array ] :array_filters A set of filters specifying to which array elements
853
+ # an update should apply.
854
+ # @option options [ Session ] :session The session to use.
855
+ # @option options [ Hash | String ] :hint The index to use for this operation.
856
+ # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
546
857
  #
547
858
  # @return [ BSON::Document ] The document.
548
859
  #
@@ -575,6 +886,10 @@ module Mongo
575
886
  # not to skip document level validation.
576
887
  # @option options [ Hash ] :write_concern The write concern options.
577
888
  # Defaults to the collection's write concern.
889
+ # @option options [ Hash ] :collation The collation to use.
890
+ # @option options [ Session ] :session The session to use.
891
+ # @option options [ Hash | String ] :hint The index to use for this operation.
892
+ # May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
578
893
  #
579
894
  # @return [ BSON::Document ] The document.
580
895
  #
@@ -594,5 +909,14 @@ module Mongo
594
909
  def namespace
595
910
  "#{database.name}.#{name}"
596
911
  end
912
+
913
+ # Whether the collection is a system collection.
914
+ #
915
+ # @return [ Boolean ] Whether the system is a system collection.
916
+ #
917
+ # @api private
918
+ def system_collection?
919
+ name.start_with?('system.')
920
+ end
597
921
  end
598
922
  end