mongo 2.14.0 → 2.15.1

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 (1137) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +5 -2
  4. data/Rakefile +8 -15
  5. data/lib/mongo/active_support.rb +3 -0
  6. data/lib/mongo/address/ipv4.rb +3 -0
  7. data/lib/mongo/address/ipv6.rb +3 -0
  8. data/lib/mongo/address/unix.rb +3 -0
  9. data/lib/mongo/address/validator.rb +3 -0
  10. data/lib/mongo/address.rb +3 -0
  11. data/lib/mongo/auth/aws/conversation.rb +4 -4
  12. data/lib/mongo/auth/aws/credentials_retriever.rb +3 -0
  13. data/lib/mongo/auth/aws/request.rb +3 -0
  14. data/lib/mongo/auth/aws.rb +3 -0
  15. data/lib/mongo/auth/base.rb +17 -8
  16. data/lib/mongo/auth/conversation_base.rb +35 -0
  17. data/lib/mongo/auth/cr/conversation.rb +9 -29
  18. data/lib/mongo/auth/cr.rb +3 -0
  19. data/lib/mongo/auth/credential_cache.rb +3 -0
  20. data/lib/mongo/auth/gssapi/conversation.rb +7 -15
  21. data/lib/mongo/auth/gssapi.rb +3 -0
  22. data/lib/mongo/auth/ldap/conversation.rb +6 -14
  23. data/lib/mongo/auth/ldap.rb +3 -0
  24. data/lib/mongo/auth/roles.rb +3 -0
  25. data/lib/mongo/auth/sasl_conversation_base.rb +4 -13
  26. data/lib/mongo/auth/scram/conversation.rb +3 -0
  27. data/lib/mongo/auth/scram.rb +5 -2
  28. data/lib/mongo/auth/scram256/conversation.rb +3 -0
  29. data/lib/mongo/auth/scram256.rb +3 -0
  30. data/lib/mongo/auth/scram_conversation_base.rb +10 -34
  31. data/lib/mongo/auth/stringprep/profiles/sasl.rb +3 -0
  32. data/lib/mongo/auth/stringprep/tables.rb +3 -0
  33. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +2 -2
  34. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1 -1
  35. data/lib/mongo/auth/stringprep.rb +4 -1
  36. data/lib/mongo/auth/user/view.rb +19 -9
  37. data/lib/mongo/auth/user.rb +3 -0
  38. data/lib/mongo/auth/x509/conversation.rb +7 -25
  39. data/lib/mongo/auth/x509.rb +3 -0
  40. data/lib/mongo/auth.rb +4 -1
  41. data/lib/mongo/background_thread.rb +16 -2
  42. data/lib/mongo/bson.rb +3 -0
  43. data/lib/mongo/bulk_write/combineable.rb +3 -0
  44. data/lib/mongo/bulk_write/ordered_combiner.rb +3 -0
  45. data/lib/mongo/bulk_write/result.rb +3 -0
  46. data/lib/mongo/bulk_write/result_combiner.rb +3 -0
  47. data/lib/mongo/bulk_write/transformable.rb +3 -0
  48. data/lib/mongo/bulk_write/unordered_combiner.rb +3 -0
  49. data/lib/mongo/bulk_write/validatable.rb +3 -0
  50. data/lib/mongo/bulk_write.rb +24 -18
  51. data/lib/mongo/caching_cursor.rb +3 -0
  52. data/lib/mongo/client.rb +86 -7
  53. data/lib/mongo/client_encryption.rb +3 -0
  54. data/lib/mongo/cluster/periodic_executor.rb +3 -0
  55. data/lib/mongo/cluster/reapers/cursor_reaper.rb +9 -2
  56. data/lib/mongo/cluster/reapers/socket_reaper.rb +3 -0
  57. data/lib/mongo/cluster/sdam_flow.rb +17 -0
  58. data/lib/mongo/cluster/topology/base.rb +3 -0
  59. data/lib/mongo/cluster/topology/no_replica_set_options.rb +3 -0
  60. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +3 -0
  61. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +3 -0
  62. data/lib/mongo/cluster/topology/sharded.rb +3 -0
  63. data/lib/mongo/cluster/topology/single.rb +3 -0
  64. data/lib/mongo/cluster/topology/unknown.rb +3 -0
  65. data/lib/mongo/cluster/topology.rb +3 -0
  66. data/lib/mongo/cluster.rb +29 -35
  67. data/lib/mongo/cluster_time.rb +3 -0
  68. data/lib/mongo/collection/view/aggregation.rb +4 -1
  69. data/lib/mongo/collection/view/builder/aggregation.rb +3 -0
  70. data/lib/mongo/collection/view/builder/find_command.rb +3 -0
  71. data/lib/mongo/collection/view/builder/flags.rb +3 -0
  72. data/lib/mongo/collection/view/builder/map_reduce.rb +3 -0
  73. data/lib/mongo/collection/view/builder/modifiers.rb +3 -0
  74. data/lib/mongo/collection/view/builder/op_query.rb +3 -0
  75. data/lib/mongo/collection/view/builder.rb +3 -0
  76. data/lib/mongo/collection/view/change_stream/retryable.rb +3 -0
  77. data/lib/mongo/collection/view/change_stream.rb +5 -2
  78. data/lib/mongo/collection/view/explainable.rb +3 -0
  79. data/lib/mongo/collection/view/immutable.rb +3 -0
  80. data/lib/mongo/collection/view/iterable.rb +20 -7
  81. data/lib/mongo/collection/view/map_reduce.rb +5 -2
  82. data/lib/mongo/collection/view/readable.rb +52 -21
  83. data/lib/mongo/collection/view/writable.rb +17 -14
  84. data/lib/mongo/collection/view.rb +3 -0
  85. data/lib/mongo/collection.rb +43 -17
  86. data/lib/mongo/crypt/auto_decryption_context.rb +3 -0
  87. data/lib/mongo/crypt/auto_encrypter.rb +4 -1
  88. data/lib/mongo/crypt/auto_encryption_context.rb +3 -0
  89. data/lib/mongo/crypt/binary.rb +3 -0
  90. data/lib/mongo/crypt/binding.rb +4 -1
  91. data/lib/mongo/crypt/context.rb +3 -0
  92. data/lib/mongo/crypt/data_key_context.rb +3 -0
  93. data/lib/mongo/crypt/encryption_io.rb +3 -0
  94. data/lib/mongo/crypt/explicit_decryption_context.rb +3 -0
  95. data/lib/mongo/crypt/explicit_encrypter.rb +3 -0
  96. data/lib/mongo/crypt/explicit_encryption_context.rb +3 -0
  97. data/lib/mongo/crypt/handle.rb +3 -0
  98. data/lib/mongo/crypt/hooks.rb +3 -0
  99. data/lib/mongo/crypt/kms_context.rb +3 -0
  100. data/lib/mongo/crypt/status.rb +3 -0
  101. data/lib/mongo/crypt.rb +3 -0
  102. data/lib/mongo/cursor/builder/get_more_command.rb +3 -0
  103. data/lib/mongo/cursor/builder/kill_cursors_command.rb +3 -0
  104. data/lib/mongo/cursor/builder/op_get_more.rb +3 -0
  105. data/lib/mongo/cursor/builder/op_kill_cursors.rb +3 -0
  106. data/lib/mongo/cursor/builder.rb +3 -0
  107. data/lib/mongo/cursor.rb +16 -2
  108. data/lib/mongo/database/view.rb +4 -1
  109. data/lib/mongo/database.rb +26 -6
  110. data/lib/mongo/dbref.rb +3 -0
  111. data/lib/mongo/distinguishing_semaphore.rb +3 -0
  112. data/lib/mongo/error/auth_error.rb +3 -0
  113. data/lib/mongo/error/bulk_write_error.rb +20 -3
  114. data/lib/mongo/error/change_stream_resumable.rb +3 -0
  115. data/lib/mongo/error/closed_stream.rb +3 -0
  116. data/lib/mongo/error/connection_check_out_timeout.rb +3 -0
  117. data/lib/mongo/error/connection_perished.rb +3 -0
  118. data/lib/mongo/error/credential_check_error.rb +3 -0
  119. data/lib/mongo/error/crypt_error.rb +3 -0
  120. data/lib/mongo/error/extra_file_chunk.rb +3 -0
  121. data/lib/mongo/error/failed_string_prep_validation.rb +3 -0
  122. data/lib/mongo/error/file_not_found.rb +3 -0
  123. data/lib/mongo/error/handshake_error.rb +3 -0
  124. data/lib/mongo/error/insufficient_iteration_count.rb +3 -0
  125. data/lib/mongo/error/internal_driver_error.rb +25 -0
  126. data/lib/mongo/error/invalid_address.rb +3 -0
  127. data/lib/mongo/error/invalid_application_name.rb +3 -0
  128. data/lib/mongo/error/invalid_bulk_operation.rb +3 -0
  129. data/lib/mongo/error/invalid_bulk_operation_type.rb +3 -0
  130. data/lib/mongo/error/invalid_collection_name.rb +3 -0
  131. data/lib/mongo/error/invalid_cursor_operation.rb +3 -0
  132. data/lib/mongo/error/invalid_database_name.rb +3 -0
  133. data/lib/mongo/error/invalid_document.rb +3 -0
  134. data/lib/mongo/error/invalid_file.rb +3 -0
  135. data/lib/mongo/error/invalid_file_revision.rb +3 -0
  136. data/lib/mongo/error/invalid_min_pool_size.rb +3 -0
  137. data/lib/mongo/error/invalid_nonce.rb +3 -0
  138. data/lib/mongo/error/invalid_read_concern.rb +3 -0
  139. data/lib/mongo/error/invalid_read_option.rb +3 -0
  140. data/lib/mongo/error/invalid_replacement_document.rb +3 -0
  141. data/lib/mongo/error/invalid_server_auth_host.rb +3 -0
  142. data/lib/mongo/error/invalid_server_auth_response.rb +3 -0
  143. data/lib/mongo/error/invalid_server_preference.rb +3 -0
  144. data/lib/mongo/error/invalid_session.rb +3 -0
  145. data/lib/mongo/error/invalid_signature.rb +3 -0
  146. data/lib/mongo/error/invalid_transaction_operation.rb +3 -0
  147. data/lib/mongo/error/invalid_txt_record.rb +3 -0
  148. data/lib/mongo/error/invalid_update_document.rb +3 -0
  149. data/lib/mongo/error/invalid_uri.rb +3 -0
  150. data/lib/mongo/error/invalid_write_concern.rb +3 -0
  151. data/lib/mongo/error/kms_error.rb +3 -0
  152. data/lib/mongo/error/lint_error.rb +3 -0
  153. data/lib/mongo/error/max_bson_size.rb +3 -0
  154. data/lib/mongo/error/max_message_size.rb +3 -0
  155. data/lib/mongo/error/mismatched_domain.rb +3 -0
  156. data/lib/mongo/error/missing_file_chunk.rb +3 -0
  157. data/lib/mongo/error/missing_password.rb +3 -0
  158. data/lib/mongo/error/missing_resume_token.rb +3 -0
  159. data/lib/mongo/error/missing_scram_server_signature.rb +3 -0
  160. data/lib/mongo/error/mongocryptd_spawn_error.rb +3 -0
  161. data/lib/mongo/error/multi_index_drop.rb +3 -0
  162. data/lib/mongo/error/need_primary_server.rb +3 -0
  163. data/lib/mongo/error/no_server_available.rb +3 -0
  164. data/lib/mongo/error/no_srv_records.rb +3 -0
  165. data/lib/mongo/error/notable.rb +3 -0
  166. data/lib/mongo/error/operation_failure.rb +26 -4
  167. data/lib/mongo/error/parser.rb +69 -13
  168. data/lib/mongo/error/pool_closed_error.rb +3 -0
  169. data/lib/mongo/error/raise_original_error.rb +3 -0
  170. data/lib/mongo/error/sdam_error_detection.rb +16 -5
  171. data/lib/mongo/error/server_api_conflict.rb +26 -0
  172. data/lib/mongo/error/server_api_not_supported.rb +27 -0
  173. data/lib/mongo/error/server_certificate_revoked.rb +3 -0
  174. data/lib/mongo/error/session_ended.rb +3 -0
  175. data/lib/mongo/error/sessions_not_supported.rb +3 -0
  176. data/lib/mongo/error/socket_error.rb +3 -0
  177. data/lib/mongo/error/socket_timeout_error.rb +3 -0
  178. data/lib/mongo/error/unchangeable_collection_option.rb +3 -0
  179. data/lib/mongo/error/unexpected_chunk_length.rb +3 -0
  180. data/lib/mongo/error/unexpected_response.rb +3 -0
  181. data/lib/mongo/error/unknown_payload_type.rb +3 -0
  182. data/lib/mongo/error/unmet_dependency.rb +24 -0
  183. data/lib/mongo/error/unsupported_array_filters.rb +3 -0
  184. data/lib/mongo/error/unsupported_collation.rb +3 -0
  185. data/lib/mongo/error/unsupported_features.rb +3 -0
  186. data/lib/mongo/error/unsupported_message_type.rb +3 -0
  187. data/lib/mongo/error/unsupported_option.rb +3 -0
  188. data/lib/mongo/error/write_retryable.rb +3 -0
  189. data/lib/mongo/error.rb +12 -1
  190. data/lib/mongo/event/base.rb +3 -0
  191. data/lib/mongo/event/listeners.rb +3 -0
  192. data/lib/mongo/event/publisher.rb +3 -0
  193. data/lib/mongo/event/subscriber.rb +3 -0
  194. data/lib/mongo/event.rb +3 -0
  195. data/lib/mongo/grid/file/chunk.rb +4 -1
  196. data/lib/mongo/grid/file/info.rb +3 -0
  197. data/lib/mongo/grid/file.rb +3 -0
  198. data/lib/mongo/grid/fs_bucket.rb +65 -44
  199. data/lib/mongo/grid/stream/read.rb +22 -7
  200. data/lib/mongo/grid/stream/write.rb +3 -0
  201. data/lib/mongo/grid/stream.rb +3 -0
  202. data/lib/mongo/grid.rb +3 -0
  203. data/lib/mongo/id.rb +3 -0
  204. data/lib/mongo/index/view.rb +24 -11
  205. data/lib/mongo/index.rb +3 -0
  206. data/lib/mongo/lint.rb +3 -0
  207. data/lib/mongo/loggable.rb +3 -0
  208. data/lib/mongo/logger.rb +3 -0
  209. data/lib/mongo/monitoring/cmap_log_subscriber.rb +3 -0
  210. data/lib/mongo/monitoring/command_log_subscriber.rb +3 -0
  211. data/lib/mongo/monitoring/event/cmap/base.rb +3 -0
  212. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +3 -0
  213. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +3 -0
  214. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +3 -0
  215. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +3 -0
  216. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +3 -0
  217. data/lib/mongo/monitoring/event/cmap/connection_created.rb +3 -0
  218. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +3 -0
  219. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +3 -0
  220. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +3 -0
  221. data/lib/mongo/monitoring/event/cmap/pool_created.rb +3 -0
  222. data/lib/mongo/monitoring/event/cmap.rb +3 -0
  223. data/lib/mongo/monitoring/event/command_failed.rb +32 -5
  224. data/lib/mongo/monitoring/event/command_started.rb +20 -2
  225. data/lib/mongo/monitoring/event/command_succeeded.rb +29 -3
  226. data/lib/mongo/monitoring/event/secure.rb +39 -5
  227. data/lib/mongo/monitoring/event/server_closed.rb +3 -0
  228. data/lib/mongo/monitoring/event/server_description_changed.rb +4 -1
  229. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +32 -18
  230. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +3 -0
  231. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +30 -16
  232. data/lib/mongo/monitoring/event/server_opening.rb +3 -0
  233. data/lib/mongo/monitoring/event/topology_changed.rb +3 -0
  234. data/lib/mongo/monitoring/event/topology_closed.rb +3 -0
  235. data/lib/mongo/monitoring/event/topology_opening.rb +3 -0
  236. data/lib/mongo/monitoring/event.rb +3 -0
  237. data/lib/mongo/monitoring/publishable.rb +32 -10
  238. data/lib/mongo/monitoring/sdam_log_subscriber.rb +3 -0
  239. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +3 -0
  240. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +3 -0
  241. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +3 -0
  242. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +3 -0
  243. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +3 -0
  244. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +3 -0
  245. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +3 -0
  246. data/lib/mongo/monitoring.rb +20 -8
  247. data/lib/mongo/operation/aggregate/command.rb +3 -0
  248. data/lib/mongo/operation/aggregate/op_msg.rb +3 -0
  249. data/lib/mongo/operation/aggregate/result.rb +3 -0
  250. data/lib/mongo/operation/aggregate.rb +3 -0
  251. data/lib/mongo/operation/collections_info/command.rb +5 -2
  252. data/lib/mongo/operation/collections_info/result.rb +3 -0
  253. data/lib/mongo/operation/collections_info.rb +21 -1
  254. data/lib/mongo/operation/command/command.rb +3 -0
  255. data/lib/mongo/operation/command/op_msg.rb +3 -0
  256. data/lib/mongo/operation/command.rb +3 -0
  257. data/lib/mongo/operation/context.rb +102 -0
  258. data/lib/mongo/operation/count/command.rb +3 -0
  259. data/lib/mongo/operation/count/op_msg.rb +3 -0
  260. data/lib/mongo/operation/count.rb +3 -0
  261. data/lib/mongo/operation/create/command.rb +3 -0
  262. data/lib/mongo/operation/create/op_msg.rb +3 -0
  263. data/lib/mongo/operation/create.rb +3 -0
  264. data/lib/mongo/operation/create_index/command.rb +3 -0
  265. data/lib/mongo/operation/create_index/op_msg.rb +3 -0
  266. data/lib/mongo/operation/create_index.rb +3 -0
  267. data/lib/mongo/operation/create_user/command.rb +3 -0
  268. data/lib/mongo/operation/create_user/op_msg.rb +3 -0
  269. data/lib/mongo/operation/create_user.rb +3 -0
  270. data/lib/mongo/operation/delete/bulk_result.rb +3 -0
  271. data/lib/mongo/operation/delete/command.rb +3 -0
  272. data/lib/mongo/operation/delete/legacy.rb +3 -0
  273. data/lib/mongo/operation/delete/op_msg.rb +3 -0
  274. data/lib/mongo/operation/delete/result.rb +3 -0
  275. data/lib/mongo/operation/delete.rb +3 -0
  276. data/lib/mongo/operation/distinct/command.rb +3 -0
  277. data/lib/mongo/operation/distinct/op_msg.rb +3 -0
  278. data/lib/mongo/operation/distinct.rb +3 -0
  279. data/lib/mongo/operation/drop/command.rb +3 -0
  280. data/lib/mongo/operation/drop/op_msg.rb +3 -0
  281. data/lib/mongo/operation/drop.rb +3 -0
  282. data/lib/mongo/operation/drop_database/command.rb +3 -0
  283. data/lib/mongo/operation/drop_database/op_msg.rb +3 -0
  284. data/lib/mongo/operation/drop_database.rb +3 -0
  285. data/lib/mongo/operation/drop_index/command.rb +3 -0
  286. data/lib/mongo/operation/drop_index/op_msg.rb +3 -0
  287. data/lib/mongo/operation/drop_index.rb +3 -0
  288. data/lib/mongo/operation/explain/command.rb +3 -0
  289. data/lib/mongo/operation/explain/legacy.rb +3 -0
  290. data/lib/mongo/operation/explain/op_msg.rb +3 -0
  291. data/lib/mongo/operation/explain/result.rb +3 -0
  292. data/lib/mongo/operation/explain.rb +3 -0
  293. data/lib/mongo/operation/find/command.rb +3 -0
  294. data/lib/mongo/operation/find/legacy/result.rb +3 -0
  295. data/lib/mongo/operation/find/legacy.rb +3 -0
  296. data/lib/mongo/operation/find/op_msg.rb +3 -0
  297. data/lib/mongo/operation/find/result.rb +3 -0
  298. data/lib/mongo/operation/find.rb +3 -0
  299. data/lib/mongo/operation/get_more/command.rb +3 -0
  300. data/lib/mongo/operation/get_more/legacy.rb +3 -0
  301. data/lib/mongo/operation/get_more/op_msg.rb +3 -0
  302. data/lib/mongo/operation/get_more/result.rb +3 -0
  303. data/lib/mongo/operation/get_more.rb +3 -0
  304. data/lib/mongo/operation/indexes/command.rb +3 -0
  305. data/lib/mongo/operation/indexes/legacy.rb +3 -0
  306. data/lib/mongo/operation/indexes/op_msg.rb +3 -0
  307. data/lib/mongo/operation/indexes/result.rb +3 -0
  308. data/lib/mongo/operation/indexes.rb +18 -1
  309. data/lib/mongo/operation/insert/bulk_result.rb +3 -0
  310. data/lib/mongo/operation/insert/command.rb +5 -2
  311. data/lib/mongo/operation/insert/legacy.rb +5 -2
  312. data/lib/mongo/operation/insert/op_msg.rb +5 -2
  313. data/lib/mongo/operation/insert/result.rb +3 -0
  314. data/lib/mongo/operation/insert.rb +3 -0
  315. data/lib/mongo/operation/kill_cursors/command.rb +3 -0
  316. data/lib/mongo/operation/kill_cursors/legacy.rb +3 -0
  317. data/lib/mongo/operation/kill_cursors/op_msg.rb +3 -0
  318. data/lib/mongo/operation/kill_cursors.rb +3 -0
  319. data/lib/mongo/operation/list_collections/command.rb +3 -0
  320. data/lib/mongo/operation/list_collections/op_msg.rb +3 -0
  321. data/lib/mongo/operation/list_collections/result.rb +7 -1
  322. data/lib/mongo/operation/list_collections.rb +3 -0
  323. data/lib/mongo/operation/map_reduce/command.rb +3 -0
  324. data/lib/mongo/operation/map_reduce/op_msg.rb +3 -0
  325. data/lib/mongo/operation/map_reduce/result.rb +3 -0
  326. data/lib/mongo/operation/map_reduce.rb +3 -0
  327. data/lib/mongo/operation/op_msg_base.rb +3 -0
  328. data/lib/mongo/operation/parallel_scan/command.rb +4 -2
  329. data/lib/mongo/operation/parallel_scan/op_msg.rb +3 -0
  330. data/lib/mongo/operation/parallel_scan/result.rb +3 -0
  331. data/lib/mongo/operation/parallel_scan.rb +3 -0
  332. data/lib/mongo/operation/remove_user/command.rb +3 -0
  333. data/lib/mongo/operation/remove_user/op_msg.rb +3 -0
  334. data/lib/mongo/operation/remove_user.rb +3 -0
  335. data/lib/mongo/operation/result.rb +5 -0
  336. data/lib/mongo/operation/shared/bypass_document_validation.rb +3 -0
  337. data/lib/mongo/operation/shared/causal_consistency_supported.rb +3 -0
  338. data/lib/mongo/operation/shared/executable.rb +24 -14
  339. data/lib/mongo/operation/shared/executable_no_validate.rb +5 -2
  340. data/lib/mongo/operation/shared/executable_transaction_label.rb +3 -0
  341. data/lib/mongo/operation/shared/idable.rb +3 -0
  342. data/lib/mongo/operation/shared/limited.rb +3 -0
  343. data/lib/mongo/operation/shared/object_id_generator.rb +3 -0
  344. data/lib/mongo/operation/shared/op_msg_or_command.rb +4 -7
  345. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +4 -7
  346. data/lib/mongo/operation/shared/polymorphic_lookup.rb +3 -0
  347. data/lib/mongo/operation/shared/polymorphic_operation.rb +42 -0
  348. data/lib/mongo/operation/shared/polymorphic_result.rb +3 -0
  349. data/lib/mongo/operation/shared/read_preference_supported.rb +41 -36
  350. data/lib/mongo/operation/shared/response_handling.rb +26 -23
  351. data/lib/mongo/operation/shared/result/aggregatable.rb +3 -0
  352. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +3 -0
  353. data/lib/mongo/operation/shared/sessions_supported.rb +19 -4
  354. data/lib/mongo/operation/shared/specifiable.rb +3 -0
  355. data/lib/mongo/operation/shared/write.rb +11 -18
  356. data/lib/mongo/operation/shared/write_concern_supported.rb +3 -0
  357. data/lib/mongo/operation/update/bulk_result.rb +3 -0
  358. data/lib/mongo/operation/update/command.rb +3 -0
  359. data/lib/mongo/operation/update/legacy/result.rb +3 -0
  360. data/lib/mongo/operation/update/legacy.rb +3 -0
  361. data/lib/mongo/operation/update/op_msg.rb +3 -0
  362. data/lib/mongo/operation/update/result.rb +3 -0
  363. data/lib/mongo/operation/update.rb +3 -0
  364. data/lib/mongo/operation/update_user/command.rb +3 -0
  365. data/lib/mongo/operation/update_user/op_msg.rb +3 -0
  366. data/lib/mongo/operation/update_user.rb +3 -0
  367. data/lib/mongo/operation/users_info/command.rb +3 -0
  368. data/lib/mongo/operation/users_info/op_msg.rb +3 -0
  369. data/lib/mongo/operation/users_info/result.rb +3 -0
  370. data/lib/mongo/operation/users_info.rb +3 -0
  371. data/lib/mongo/operation.rb +5 -2
  372. data/lib/mongo/options/mapper.rb +3 -0
  373. data/lib/mongo/options/redacted.rb +3 -0
  374. data/lib/mongo/options.rb +3 -0
  375. data/lib/mongo/protocol/bit_vector.rb +3 -0
  376. data/lib/mongo/protocol/compressed.rb +54 -5
  377. data/lib/mongo/protocol/delete.rb +3 -0
  378. data/lib/mongo/protocol/get_more.rb +3 -0
  379. data/lib/mongo/protocol/insert.rb +3 -0
  380. data/lib/mongo/protocol/kill_cursors.rb +3 -0
  381. data/lib/mongo/protocol/message.rb +23 -2
  382. data/lib/mongo/protocol/msg.rb +39 -16
  383. data/lib/mongo/protocol/query.rb +18 -14
  384. data/lib/mongo/protocol/registry.rb +3 -0
  385. data/lib/mongo/protocol/reply.rb +3 -0
  386. data/lib/mongo/protocol/serializers.rb +3 -0
  387. data/lib/mongo/protocol/update.rb +3 -0
  388. data/lib/mongo/protocol.rb +3 -0
  389. data/lib/mongo/query_cache.rb +33 -0
  390. data/lib/mongo/retryable.rb +4 -1
  391. data/lib/mongo/semaphore.rb +3 -0
  392. data/lib/mongo/server/app_metadata.rb +89 -33
  393. data/lib/mongo/server/connection.rb +9 -1
  394. data/lib/mongo/server/connection_base.rb +35 -20
  395. data/lib/mongo/server/connection_common.rb +34 -1
  396. data/lib/mongo/server/connection_pool/populator.rb +3 -0
  397. data/lib/mongo/server/connection_pool.rb +11 -6
  398. data/lib/mongo/server/context.rb +3 -0
  399. data/lib/mongo/server/description/features.rb +13 -9
  400. data/lib/mongo/server/description.rb +27 -10
  401. data/lib/mongo/server/monitor/app_metadata.rb +4 -1
  402. data/lib/mongo/server/monitor/connection.rb +57 -47
  403. data/lib/mongo/server/monitor.rb +26 -13
  404. data/lib/mongo/server/pending_connection.rb +37 -20
  405. data/lib/mongo/server/push_monitor/connection.rb +3 -0
  406. data/lib/mongo/server/push_monitor.rb +38 -17
  407. data/lib/mongo/server/round_trip_time_averager.rb +6 -3
  408. data/lib/mongo/server.rb +24 -15
  409. data/lib/mongo/server_selector/base.rb +6 -3
  410. data/lib/mongo/server_selector/nearest.rb +6 -4
  411. data/lib/mongo/server_selector/primary.rb +6 -4
  412. data/lib/mongo/server_selector/primary_preferred.rb +6 -4
  413. data/lib/mongo/server_selector/secondary.rb +6 -4
  414. data/lib/mongo/server_selector/secondary_preferred.rb +8 -11
  415. data/lib/mongo/server_selector.rb +3 -0
  416. data/lib/mongo/session/server_session.rb +3 -0
  417. data/lib/mongo/session/session_pool.rb +7 -2
  418. data/lib/mongo/session.rb +18 -11
  419. data/lib/mongo/socket/ocsp_cache.rb +3 -0
  420. data/lib/mongo/socket/ocsp_verifier.rb +9 -1
  421. data/lib/mongo/socket/ssl.rb +11 -0
  422. data/lib/mongo/socket/tcp.rb +3 -0
  423. data/lib/mongo/socket/unix.rb +3 -0
  424. data/lib/mongo/socket.rb +36 -6
  425. data/lib/mongo/srv/monitor.rb +3 -11
  426. data/lib/mongo/srv/resolver.rb +3 -0
  427. data/lib/mongo/srv/result.rb +3 -0
  428. data/lib/mongo/srv.rb +3 -0
  429. data/lib/mongo/timeout.rb +3 -0
  430. data/lib/mongo/topology_version.rb +4 -1
  431. data/lib/mongo/uri/options_mapper.rb +41 -0
  432. data/lib/mongo/uri/srv_protocol.rb +3 -0
  433. data/lib/mongo/uri.rb +3 -0
  434. data/lib/mongo/utils.rb +45 -0
  435. data/lib/mongo/version.rb +4 -1
  436. data/lib/mongo/write_concern/acknowledged.rb +3 -0
  437. data/lib/mongo/write_concern/base.rb +3 -0
  438. data/lib/mongo/write_concern/unacknowledged.rb +3 -0
  439. data/lib/mongo/write_concern.rb +3 -0
  440. data/lib/mongo.rb +26 -0
  441. data/spec/README.md +24 -1
  442. data/spec/atlas/atlas_connectivity_spec.rb +3 -0
  443. data/spec/atlas/operations_spec.rb +3 -0
  444. data/spec/integration/auth_spec.rb +28 -15
  445. data/spec/integration/awaited_ismaster_spec.rb +8 -5
  446. data/spec/integration/aws_auth_request_spec.rb +3 -0
  447. data/spec/integration/aws_credentials_retriever_spec.rb +3 -0
  448. data/spec/integration/bson_symbol_spec.rb +4 -1
  449. data/spec/integration/bulk_insert_spec.rb +3 -0
  450. data/spec/integration/bulk_write_error_message_spec.rb +41 -0
  451. data/spec/integration/bulk_write_spec.rb +3 -0
  452. data/spec/integration/change_stream_examples_spec.rb +3 -0
  453. data/spec/integration/change_stream_spec.rb +7 -4
  454. data/spec/integration/check_clean_slate_spec.rb +3 -0
  455. data/spec/integration/client_authentication_options_spec.rb +21 -8
  456. data/spec/integration/client_connectivity_spec.rb +4 -1
  457. data/spec/integration/client_construction_aws_auth_spec.rb +3 -0
  458. data/spec/integration/client_construction_spec.rb +3 -0
  459. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +3 -0
  460. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +3 -0
  461. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +3 -0
  462. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +3 -0
  463. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +3 -0
  464. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +3 -0
  465. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +3 -0
  466. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +4 -1
  467. data/spec/integration/client_side_encryption/client_close_spec.rb +3 -0
  468. data/spec/integration/client_side_encryption/corpus_spec.rb +3 -0
  469. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +3 -0
  470. data/spec/integration/client_side_encryption/data_key_spec.rb +3 -0
  471. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +3 -0
  472. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +3 -0
  473. data/spec/integration/client_side_encryption/views_spec.rb +3 -0
  474. data/spec/integration/client_spec.rb +5 -2
  475. data/spec/integration/client_update_spec.rb +3 -0
  476. data/spec/integration/collection_indexes_prose_spec.rb +3 -0
  477. data/spec/integration/command_monitoring_spec.rb +63 -25
  478. data/spec/integration/command_spec.rb +3 -0
  479. data/spec/integration/connect_single_rs_name_spec.rb +6 -3
  480. data/spec/integration/connection_pool_populator_spec.rb +3 -0
  481. data/spec/integration/connection_spec.rb +12 -7
  482. data/spec/integration/crud_spec.rb +31 -0
  483. data/spec/integration/cursor_reaping_spec.rb +3 -0
  484. data/spec/integration/docs_examples_spec.rb +11 -1
  485. data/spec/integration/error_detection_spec.rb +3 -0
  486. data/spec/integration/fork_reconnect_spec.rb +8 -2
  487. data/spec/integration/get_more_spec.rb +3 -0
  488. data/spec/integration/grid_fs_bucket_spec.rb +4 -1
  489. data/spec/integration/heartbeat_events_spec.rb +7 -4
  490. data/spec/integration/mmapv1_spec.rb +3 -0
  491. data/spec/integration/mongos_pinning_spec.rb +3 -0
  492. data/spec/integration/ocsp_connectivity_spec.rb +3 -0
  493. data/spec/integration/ocsp_verifier_cache_spec.rb +3 -0
  494. data/spec/integration/ocsp_verifier_spec.rb +29 -8
  495. data/spec/integration/operation_failure_code_spec.rb +4 -1
  496. data/spec/integration/operation_failure_message_spec.rb +90 -0
  497. data/spec/integration/query_cache_spec.rb +48 -0
  498. data/spec/integration/query_cache_transactions_spec.rb +3 -0
  499. data/spec/integration/read_concern_spec.rb +3 -0
  500. data/spec/integration/read_preference_spec.rb +3 -0
  501. data/spec/integration/reconnect_spec.rb +4 -1
  502. data/spec/integration/retryable_errors_spec.rb +3 -0
  503. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +3 -0
  504. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +3 -0
  505. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +3 -0
  506. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +3 -0
  507. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +3 -0
  508. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +3 -0
  509. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +3 -0
  510. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +3 -0
  511. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +3 -0
  512. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +3 -0
  513. data/spec/integration/retryable_writes/shared/supports_retries.rb +3 -0
  514. data/spec/integration/retryable_writes_errors_spec.rb +3 -0
  515. data/spec/integration/sdam_error_handling_spec.rb +6 -3
  516. data/spec/integration/sdam_events_spec.rb +14 -10
  517. data/spec/integration/sdam_prose_spec.rb +4 -1
  518. data/spec/integration/secondary_reads_spec.rb +102 -0
  519. data/spec/integration/server_description_spec.rb +3 -0
  520. data/spec/integration/server_monitor_spec.rb +4 -1
  521. data/spec/integration/server_selection_spec.rb +3 -0
  522. data/spec/integration/server_selector_spec.rb +3 -0
  523. data/spec/integration/server_spec.rb +3 -0
  524. data/spec/integration/shell_examples_spec.rb +3 -0
  525. data/spec/integration/size_limit_spec.rb +3 -0
  526. data/spec/integration/snappy_compression_spec.rb +28 -0
  527. data/spec/integration/srv_monitoring_spec.rb +4 -1
  528. data/spec/integration/srv_spec.rb +3 -0
  529. data/spec/integration/ssl_uri_options_spec.rb +3 -0
  530. data/spec/integration/step_down_spec.rb +3 -0
  531. data/spec/integration/time_zone_querying_spec.rb +3 -0
  532. data/spec/integration/transactions_api_examples_spec.rb +3 -0
  533. data/spec/integration/transactions_examples_spec.rb +9 -0
  534. data/spec/integration/truncated_utf8_spec.rb +26 -0
  535. data/spec/integration/versioned_api_examples_spec.rb +69 -0
  536. data/spec/integration/x509_auth_spec.rb +4 -1
  537. data/spec/integration/zlib_compression_spec.rb +4 -1
  538. data/spec/integration/zstd_compression_spec.rb +29 -0
  539. data/spec/kerberos/kerberos_spec.rb +3 -0
  540. data/spec/lite_spec_helper.rb +11 -1
  541. data/spec/mongo/address/ipv4_spec.rb +3 -0
  542. data/spec/mongo/address/ipv6_spec.rb +3 -0
  543. data/spec/mongo/address/unix_spec.rb +3 -0
  544. data/spec/mongo/address/validator_spec.rb +3 -0
  545. data/spec/mongo/address_spec.rb +18 -11
  546. data/spec/mongo/auth/aws/request_region_spec.rb +3 -0
  547. data/spec/mongo/auth/aws/request_spec.rb +3 -0
  548. data/spec/mongo/auth/cr_spec.rb +3 -0
  549. data/spec/mongo/auth/gssapi/conversation_spec.rb +3 -0
  550. data/spec/mongo/auth/invalid_mechanism_spec.rb +3 -0
  551. data/spec/mongo/auth/ldap/conversation_spec.rb +4 -1
  552. data/spec/mongo/auth/ldap_spec.rb +8 -1
  553. data/spec/mongo/auth/scram/conversation_spec.rb +3 -0
  554. data/spec/mongo/auth/scram256/conversation_spec.rb +3 -0
  555. data/spec/mongo/auth/scram_negotiation_spec.rb +4 -1
  556. data/spec/mongo/auth/scram_spec.rb +4 -1
  557. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +3 -0
  558. data/spec/mongo/auth/stringprep_spec.rb +3 -0
  559. data/spec/mongo/auth/user/view_spec.rb +3 -0
  560. data/spec/mongo/auth/user_spec.rb +3 -0
  561. data/spec/mongo/auth/x509/conversation_spec.rb +6 -3
  562. data/spec/mongo/auth/x509_spec.rb +3 -0
  563. data/spec/mongo/auth_spec.rb +3 -0
  564. data/spec/mongo/bson_spec.rb +3 -0
  565. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +3 -0
  566. data/spec/mongo/bulk_write/result_spec.rb +3 -0
  567. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +3 -0
  568. data/spec/mongo/bulk_write_spec.rb +3 -0
  569. data/spec/mongo/caching_cursor_spec.rb +3 -0
  570. data/spec/mongo/client_construction_spec.rb +213 -34
  571. data/spec/mongo/client_encryption_spec.rb +3 -0
  572. data/spec/mongo/client_spec.rb +20 -0
  573. data/spec/mongo/cluster/cursor_reaper_spec.rb +3 -0
  574. data/spec/mongo/cluster/periodic_executor_spec.rb +3 -0
  575. data/spec/mongo/cluster/socket_reaper_spec.rb +3 -0
  576. data/spec/mongo/cluster/topology/replica_set_spec.rb +12 -9
  577. data/spec/mongo/cluster/topology/sharded_spec.rb +5 -2
  578. data/spec/mongo/cluster/topology/single_spec.rb +5 -2
  579. data/spec/mongo/cluster/topology/unknown_spec.rb +3 -0
  580. data/spec/mongo/cluster/topology_spec.rb +3 -0
  581. data/spec/mongo/cluster_spec.rb +7 -18
  582. data/spec/mongo/cluster_time_spec.rb +3 -0
  583. data/spec/mongo/collection/view/aggregation_spec.rb +3 -0
  584. data/spec/mongo/collection/view/builder/find_command_spec.rb +3 -0
  585. data/spec/mongo/collection/view/builder/flags_spec.rb +3 -0
  586. data/spec/mongo/collection/view/builder/modifiers_spec.rb +3 -0
  587. data/spec/mongo/collection/view/builder/op_query_spec.rb +3 -0
  588. data/spec/mongo/collection/view/change_stream_resume_spec.rb +7 -2
  589. data/spec/mongo/collection/view/change_stream_spec.rb +16 -0
  590. data/spec/mongo/collection/view/explainable_spec.rb +4 -1
  591. data/spec/mongo/collection/view/immutable_spec.rb +3 -0
  592. data/spec/mongo/collection/view/iterable_spec.rb +3 -0
  593. data/spec/mongo/collection/view/map_reduce_spec.rb +3 -0
  594. data/spec/mongo/collection/view/readable_spec.rb +51 -18
  595. data/spec/mongo/collection/view/writable_spec.rb +3 -0
  596. data/spec/mongo/collection/view_spec.rb +3 -0
  597. data/spec/mongo/collection_crud_spec.rb +4360 -0
  598. data/spec/mongo/collection_ddl_spec.rb +537 -0
  599. data/spec/mongo/collection_spec.rb +8 -4859
  600. data/spec/mongo/crypt/auto_decryption_context_spec.rb +3 -0
  601. data/spec/mongo/crypt/auto_encrypter_spec.rb +3 -0
  602. data/spec/mongo/crypt/auto_encryption_context_spec.rb +3 -0
  603. data/spec/mongo/crypt/binary_spec.rb +3 -0
  604. data/spec/mongo/crypt/binding/binary_spec.rb +3 -0
  605. data/spec/mongo/crypt/binding/context_spec.rb +3 -0
  606. data/spec/mongo/crypt/binding/helpers_spec.rb +3 -0
  607. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +3 -0
  608. data/spec/mongo/crypt/binding/status_spec.rb +3 -0
  609. data/spec/mongo/crypt/binding/version_spec.rb +3 -0
  610. data/spec/mongo/crypt/binding_unloaded_spec.rb +3 -0
  611. data/spec/mongo/crypt/data_key_context_spec.rb +3 -0
  612. data/spec/mongo/crypt/encryption_io_spec.rb +3 -0
  613. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +3 -0
  614. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +3 -0
  615. data/spec/mongo/crypt/handle_spec.rb +3 -0
  616. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +3 -0
  617. data/spec/mongo/crypt/status_spec.rb +3 -0
  618. data/spec/mongo/cursor/builder/get_more_command_spec.rb +7 -2
  619. data/spec/mongo/cursor/builder/op_get_more_spec.rb +7 -2
  620. data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +7 -2
  621. data/spec/mongo/cursor_spec.rb +74 -7
  622. data/spec/mongo/database_spec.rb +75 -10
  623. data/spec/mongo/dbref_spec.rb +3 -0
  624. data/spec/mongo/distinguishing_semaphore_spec.rb +3 -0
  625. data/spec/mongo/error/bulk_write_error_spec.rb +6 -3
  626. data/spec/mongo/error/crypt_error_spec.rb +3 -0
  627. data/spec/mongo/error/max_bson_size_spec.rb +3 -0
  628. data/spec/mongo/error/no_server_available_spec.rb +3 -0
  629. data/spec/mongo/error/notable_spec.rb +3 -0
  630. data/spec/mongo/error/operation_failure_heavy_spec.rb +3 -0
  631. data/spec/mongo/error/operation_failure_spec.rb +94 -31
  632. data/spec/mongo/error/parser_spec.rb +40 -6
  633. data/spec/mongo/error/unsupported_option_spec.rb +3 -0
  634. data/spec/mongo/event/publisher_spec.rb +3 -0
  635. data/spec/mongo/event/subscriber_spec.rb +3 -0
  636. data/spec/mongo/grid/file/chunk_spec.rb +7 -4
  637. data/spec/mongo/grid/file/info_spec.rb +3 -0
  638. data/spec/mongo/grid/file_spec.rb +4 -1
  639. data/spec/mongo/grid/fs_bucket_spec.rb +22 -5
  640. data/spec/mongo/grid/stream/read_spec.rb +33 -10
  641. data/spec/mongo/grid/stream/write_spec.rb +3 -0
  642. data/spec/mongo/grid/stream_spec.rb +3 -0
  643. data/spec/mongo/id_spec.rb +3 -0
  644. data/spec/mongo/index/view_spec.rb +11 -2
  645. data/spec/mongo/lint_spec.rb +3 -0
  646. data/spec/mongo/logger_spec.rb +3 -0
  647. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +3 -0
  648. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +3 -0
  649. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +3 -0
  650. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +3 -0
  651. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +3 -0
  652. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +3 -0
  653. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +3 -0
  654. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +3 -0
  655. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +3 -0
  656. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +3 -0
  657. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +3 -0
  658. data/spec/mongo/monitoring/event/command_failed_spec.rb +59 -2
  659. data/spec/mongo/monitoring/event/command_started_spec.rb +3 -0
  660. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +46 -6
  661. data/spec/mongo/monitoring/event/secure_spec.rb +28 -4
  662. data/spec/mongo/monitoring/event/server_closed_spec.rb +3 -0
  663. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +3 -0
  664. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +4 -1
  665. data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +3 -0
  666. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +4 -1
  667. data/spec/mongo/monitoring/event/server_opening_spec.rb +3 -0
  668. data/spec/mongo/monitoring/event/topology_changed_spec.rb +3 -0
  669. data/spec/mongo/monitoring/event/topology_closed_spec.rb +3 -0
  670. data/spec/mongo/monitoring/event/topology_opening_spec.rb +3 -0
  671. data/spec/mongo/monitoring_spec.rb +3 -0
  672. data/spec/mongo/operation/aggregate/result_spec.rb +7 -2
  673. data/spec/mongo/operation/aggregate_spec.rb +5 -1
  674. data/spec/mongo/operation/collections_info_spec.rb +7 -1
  675. data/spec/mongo/operation/command_spec.rb +11 -5
  676. data/spec/mongo/operation/create_index_spec.rb +9 -3
  677. data/spec/mongo/operation/create_user_spec.rb +9 -3
  678. data/spec/mongo/operation/delete/bulk_spec.rb +12 -6
  679. data/spec/mongo/operation/delete/command_spec.rb +3 -0
  680. data/spec/mongo/operation/delete/op_msg_spec.rb +3 -0
  681. data/spec/mongo/operation/delete_spec.rb +14 -7
  682. data/spec/mongo/operation/drop_index_spec.rb +9 -2
  683. data/spec/mongo/operation/find/legacy_spec.rb +7 -2
  684. data/spec/mongo/operation/get_more_spec.rb +6 -1
  685. data/spec/mongo/operation/indexes_spec.rb +8 -1
  686. data/spec/mongo/operation/insert/bulk_spec.rb +13 -7
  687. data/spec/mongo/operation/insert/command_spec.rb +3 -0
  688. data/spec/mongo/operation/insert/op_msg_spec.rb +3 -0
  689. data/spec/mongo/operation/insert_spec.rb +18 -12
  690. data/spec/mongo/operation/kill_cursors_spec.rb +3 -0
  691. data/spec/mongo/operation/limited_spec.rb +3 -0
  692. data/spec/mongo/operation/map_reduce_spec.rb +8 -2
  693. data/spec/mongo/operation/read_preference_legacy_spec.rb +35 -42
  694. data/spec/mongo/operation/read_preference_op_msg_spec.rb +6 -3
  695. data/spec/mongo/operation/remove_user_spec.rb +9 -3
  696. data/spec/mongo/operation/result_spec.rb +10 -5
  697. data/spec/mongo/operation/specifiable_spec.rb +3 -0
  698. data/spec/mongo/operation/update/bulk_spec.rb +12 -6
  699. data/spec/mongo/operation/update/command_spec.rb +3 -0
  700. data/spec/mongo/operation/update/op_msg_spec.rb +3 -0
  701. data/spec/mongo/operation/update_spec.rb +13 -7
  702. data/spec/mongo/operation/update_user_spec.rb +7 -1
  703. data/spec/mongo/options/redacted_spec.rb +3 -0
  704. data/spec/mongo/protocol/compressed_spec.rb +29 -12
  705. data/spec/mongo/protocol/delete_spec.rb +3 -0
  706. data/spec/mongo/protocol/get_more_spec.rb +3 -0
  707. data/spec/mongo/protocol/insert_spec.rb +3 -0
  708. data/spec/mongo/protocol/kill_cursors_spec.rb +3 -0
  709. data/spec/mongo/protocol/msg_spec.rb +4 -1
  710. data/spec/mongo/protocol/query_spec.rb +6 -3
  711. data/spec/mongo/protocol/registry_spec.rb +3 -0
  712. data/spec/mongo/protocol/reply_spec.rb +3 -0
  713. data/spec/mongo/protocol/update_spec.rb +3 -0
  714. data/spec/mongo/query_cache_middleware_spec.rb +55 -0
  715. data/spec/mongo/query_cache_spec.rb +3 -0
  716. data/spec/mongo/retryable_spec.rb +6 -2
  717. data/spec/mongo/semaphore_spec.rb +3 -0
  718. data/spec/mongo/server/app_metadata_spec.rb +46 -21
  719. data/spec/mongo/server/connection_auth_spec.rb +6 -9
  720. data/spec/mongo/server/connection_common_spec.rb +24 -0
  721. data/spec/mongo/server/connection_pool/populator_spec.rb +6 -1
  722. data/spec/mongo/server/connection_pool_spec.rb +4 -1
  723. data/spec/mongo/server/connection_spec.rb +33 -17
  724. data/spec/mongo/server/description/features_spec.rb +3 -0
  725. data/spec/mongo/server/description_query_methods_spec.rb +4 -1
  726. data/spec/mongo/server/description_spec.rb +624 -611
  727. data/spec/mongo/server/monitor/app_metadata_spec.rb +3 -1
  728. data/spec/mongo/server/monitor/connection_spec.rb +57 -7
  729. data/spec/mongo/server/monitor_spec.rb +22 -11
  730. data/spec/mongo/server/round_trip_time_averager_spec.rb +3 -0
  731. data/spec/mongo/server_selector/nearest_spec.rb +8 -2
  732. data/spec/mongo/server_selector/primary_preferred_spec.rb +8 -2
  733. data/spec/mongo/server_selector/primary_spec.rb +8 -2
  734. data/spec/mongo/server_selector/secondary_preferred_spec.rb +14 -8
  735. data/spec/mongo/server_selector/secondary_spec.rb +8 -2
  736. data/spec/mongo/server_selector_spec.rb +5 -1
  737. data/spec/mongo/server_spec.rb +18 -2
  738. data/spec/mongo/session/server_session_spec.rb +3 -0
  739. data/spec/mongo/session/session_pool_spec.rb +3 -0
  740. data/spec/mongo/session_spec.rb +3 -0
  741. data/spec/mongo/session_transaction_spec.rb +7 -12
  742. data/spec/mongo/socket/ssl_spec.rb +43 -0
  743. data/spec/mongo/socket/tcp_spec.rb +3 -0
  744. data/spec/mongo/socket/unix_spec.rb +3 -0
  745. data/spec/mongo/socket_spec.rb +5 -2
  746. data/spec/mongo/srv/monitor_spec.rb +3 -0
  747. data/spec/mongo/srv/result_spec.rb +3 -0
  748. data/spec/mongo/timeout_spec.rb +3 -0
  749. data/spec/mongo/tls_context_hooks_spec.rb +40 -0
  750. data/spec/mongo/uri/srv_protocol_spec.rb +4 -0
  751. data/spec/mongo/uri_option_parsing_spec.rb +3 -0
  752. data/spec/mongo/uri_spec.rb +3 -0
  753. data/spec/mongo/utils_spec.rb +17 -0
  754. data/spec/mongo/write_concern/acknowledged_spec.rb +3 -0
  755. data/spec/mongo/write_concern/unacknowledged_spec.rb +3 -0
  756. data/spec/mongo/write_concern_spec.rb +3 -0
  757. data/spec/runners/auth.rb +22 -1
  758. data/spec/runners/change_streams/outcome.rb +3 -0
  759. data/spec/runners/change_streams/spec.rb +3 -0
  760. data/spec/runners/change_streams/test.rb +3 -0
  761. data/spec/runners/cmap/verifier.rb +3 -0
  762. data/spec/runners/cmap.rb +3 -0
  763. data/spec/runners/command_monitoring.rb +3 -0
  764. data/spec/runners/connection_string.rb +3 -4
  765. data/spec/runners/crud/context.rb +3 -0
  766. data/spec/runners/crud/operation.rb +3 -0
  767. data/spec/runners/crud/outcome.rb +3 -0
  768. data/spec/runners/crud/requirement.rb +67 -3
  769. data/spec/runners/crud/spec.rb +3 -0
  770. data/spec/runners/crud/test.rb +3 -0
  771. data/spec/runners/crud/test_base.rb +3 -0
  772. data/spec/runners/crud/verifier.rb +11 -0
  773. data/spec/runners/crud.rb +22 -0
  774. data/spec/runners/gridfs.rb +3 -0
  775. data/spec/runners/read_write_concern_document.rb +3 -0
  776. data/spec/runners/sdam/verifier.rb +3 -0
  777. data/spec/runners/sdam.rb +6 -3
  778. data/spec/runners/server_selection.rb +3 -0
  779. data/spec/runners/server_selection_rtt.rb +4 -1
  780. data/spec/runners/transactions/operation.rb +16 -2
  781. data/spec/runners/transactions/spec.rb +3 -0
  782. data/spec/runners/transactions/test.rb +4 -0
  783. data/spec/runners/transactions.rb +3 -0
  784. data/spec/runners/unified/assertions.rb +282 -0
  785. data/spec/runners/unified/change_stream_operations.rb +29 -0
  786. data/spec/runners/unified/crud_operations.rb +206 -0
  787. data/spec/runners/unified/ddl_operations.rb +106 -0
  788. data/spec/runners/unified/entity_map.rb +42 -0
  789. data/spec/runners/unified/error.rb +28 -0
  790. data/spec/runners/unified/event_subscriber.rb +104 -0
  791. data/spec/runners/unified/exceptions.rb +24 -0
  792. data/spec/runners/unified/grid_fs_operations.rb +58 -0
  793. data/spec/runners/unified/support_operations.rb +253 -0
  794. data/spec/runners/unified/test.rb +423 -0
  795. data/spec/runners/unified/test_group.rb +31 -0
  796. data/spec/runners/unified/using_hash.rb +34 -0
  797. data/spec/runners/unified.rb +99 -0
  798. data/spec/shared/bin/get-mongodb-download-url +17 -0
  799. data/spec/shared/bin/s3-copy +45 -0
  800. data/spec/shared/bin/s3-upload +69 -0
  801. data/spec/shared/lib/mrss/cluster_config.rb +226 -0
  802. data/spec/shared/lib/mrss/constraints.rb +82 -6
  803. data/spec/shared/lib/mrss/docker_runner.rb +271 -0
  804. data/spec/shared/lib/mrss/lite_constraints.rb +16 -0
  805. data/spec/shared/lib/mrss/server_version_registry.rb +115 -0
  806. data/spec/shared/lib/mrss/spec_organizer.rb +32 -2
  807. data/spec/shared/lib/mrss/utils.rb +15 -0
  808. data/spec/shared/share/Dockerfile.erb +322 -0
  809. data/spec/shared/share/haproxy-1.conf +16 -0
  810. data/spec/shared/share/haproxy-2.conf +17 -0
  811. data/spec/shared/shlib/distro.sh +73 -0
  812. data/spec/shared/shlib/server.sh +317 -0
  813. data/spec/shared/shlib/set_env.sh +131 -0
  814. data/spec/solo/clean_exit_spec.rb +24 -0
  815. data/spec/spec_helper.rb +8 -3
  816. data/spec/spec_tests/auth_spec.rb +30 -13
  817. data/spec/spec_tests/change_streams_spec.rb +3 -0
  818. data/spec/spec_tests/change_streams_unified_spec.rb +13 -0
  819. data/spec/spec_tests/client_side_encryption_spec.rb +3 -0
  820. data/spec/spec_tests/cmap_spec.rb +3 -0
  821. data/spec/spec_tests/collection_management_spec.rb +13 -0
  822. data/spec/spec_tests/command_monitoring_spec.rb +31 -26
  823. data/spec/spec_tests/command_monitoring_unified_spec.rb +13 -0
  824. data/spec/spec_tests/connection_string_spec.rb +3 -0
  825. data/spec/spec_tests/crud_spec.rb +3 -0
  826. data/spec/spec_tests/crud_unified_spec.rb +13 -0
  827. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +5 -5
  828. data/spec/spec_tests/data/change_streams/{change-streams-resume-whitelist.yml → change-streams-resume-allowlist.yml} +58 -58
  829. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +46 -46
  830. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -1
  831. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +72 -0
  832. data/spec/spec_tests/data/collection_management/timeseries-collection.yml +129 -0
  833. data/spec/spec_tests/data/command_monitoring_unified/redacted-commands.yml +340 -0
  834. data/spec/spec_tests/data/crud/write/bulkWrite.yml +26 -22
  835. data/spec/spec_tests/data/crud/write/insertMany.yml +26 -22
  836. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +267 -0
  837. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +305 -0
  838. data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +1 -0
  839. data/spec/spec_tests/data/crud_v2/db-aggregate.yml +1 -0
  840. data/spec/spec_tests/data/retryable_reads/aggregate-serverErrors.yml +1 -1
  841. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch-serverErrors.yml +6 -5
  842. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch.yml +1 -0
  843. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch-serverErrors.yml +6 -5
  844. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch.yml +1 -0
  845. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch-serverErrors.yml +6 -5
  846. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch.yml +1 -0
  847. data/spec/spec_tests/data/retryable_reads/count-serverErrors.yml +1 -1
  848. data/spec/spec_tests/data/retryable_reads/countDocuments-serverErrors.yml +1 -1
  849. data/spec/spec_tests/data/retryable_reads/distinct-serverErrors.yml +1 -1
  850. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +60 -0
  851. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount.yml → estimatedDocumentCount-pre4.9.yml} +2 -0
  852. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +146 -0
  853. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors.yml → estimatedDocumentCount-serverErrors-pre4.9.yml} +3 -1
  854. data/spec/spec_tests/data/retryable_reads/find-serverErrors.yml +1 -1
  855. data/spec/spec_tests/data/retryable_reads/findOne-serverErrors.yml +1 -1
  856. data/spec/spec_tests/data/retryable_reads/gridfs-download-serverErrors.yml +1 -1
  857. data/spec/spec_tests/data/retryable_reads/gridfs-downloadByName-serverErrors.yml +1 -1
  858. data/spec/spec_tests/data/retryable_reads/listCollectionNames-serverErrors.yml +1 -1
  859. data/spec/spec_tests/data/retryable_reads/listCollectionObjects-serverErrors.yml +1 -1
  860. data/spec/spec_tests/data/retryable_reads/listCollections-serverErrors.yml +1 -1
  861. data/spec/spec_tests/data/retryable_reads/listDatabaseNames-serverErrors.yml +1 -1
  862. data/spec/spec_tests/data/retryable_reads/listDatabaseObjects-serverErrors.yml +1 -1
  863. data/spec/spec_tests/data/retryable_reads/listDatabases-serverErrors.yml +1 -1
  864. data/spec/spec_tests/data/retryable_reads/listIndexNames-serverErrors.yml +1 -1
  865. data/spec/spec_tests/data/retryable_reads/listIndexNames.yml +1 -1
  866. data/spec/spec_tests/data/retryable_reads/listIndexes-serverErrors.yml +1 -1
  867. data/spec/spec_tests/data/retryable_writes/bulkWrite.yml +30 -24
  868. data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +5 -4
  869. data/spec/spec_tests/data/sdam/errors/error_handling_handshake.yml +2 -1
  870. data/spec/spec_tests/data/sdam/errors/non-stale-network-error.yml +2 -1
  871. data/spec/spec_tests/data/sdam/errors/non-stale-network-timeout-error.yml +2 -1
  872. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.yml +2 -1
  873. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.yml +2 -1
  874. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-LegacyNotPrimary.yml +61 -0
  875. data/spec/spec_tests/data/sdam/errors/{non-stale-topologyVersion-greater-NotMasterNoSlaveOk.yml → non-stale-topologyVersion-greater-NotPrimaryNoSecondaryOk.yml} +5 -4
  876. data/spec/spec_tests/data/sdam/errors/{non-stale-topologyVersion-greater-NotMasterOrSecondary.yml → non-stale-topologyVersion-greater-NotPrimaryOrSecondary.yml} +5 -4
  877. data/spec/spec_tests/data/sdam/errors/{non-stale-topologyVersion-greater-NotMaster.yml → non-stale-topologyVersion-greater-NotWritablePrimary.yml} +5 -4
  878. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.yml +2 -1
  879. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-ShutdownInProgress.yml +2 -1
  880. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.yml +2 -1
  881. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.yml +2 -1
  882. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-LegacyNotPrimary.yml +52 -0
  883. data/spec/spec_tests/data/sdam/errors/{non-stale-topologyVersion-missing-NotMasterNoSlaveOk.yml → non-stale-topologyVersion-missing-NotPrimaryNoSecondaryOk.yml} +5 -4
  884. data/spec/spec_tests/data/sdam/errors/{non-stale-topologyVersion-missing-NotMasterOrSecondary.yml → non-stale-topologyVersion-missing-NotPrimaryOrSecondary.yml} +5 -4
  885. data/spec/spec_tests/data/sdam/errors/{non-stale-topologyVersion-missing-NotMaster.yml → non-stale-topologyVersion-missing-NotWritablePrimary.yml} +5 -4
  886. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.yml +2 -1
  887. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-ShutdownInProgress.yml +2 -1
  888. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.yml +2 -1
  889. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.yml +2 -1
  890. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-LegacyNotPrimary.yml +61 -0
  891. data/spec/spec_tests/data/sdam/errors/{non-stale-topologyVersion-proccessId-changed-NotMasterNoSlaveOk.yml → non-stale-topologyVersion-proccessId-changed-NotPrimaryNoSecondaryOk.yml} +5 -4
  892. data/spec/spec_tests/data/sdam/errors/{non-stale-topologyVersion-proccessId-changed-NotMasterOrSecondary.yml → non-stale-topologyVersion-proccessId-changed-NotPrimaryOrSecondary.yml} +5 -4
  893. data/spec/spec_tests/data/sdam/errors/{non-stale-topologyVersion-proccessId-changed-NotMaster.yml → non-stale-topologyVersion-proccessId-changed-NotWritablePrimary.yml} +5 -4
  894. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.yml +2 -1
  895. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.yml +2 -1
  896. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedAtShutdown.yml +2 -1
  897. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedDueToReplStateChange.yml +2 -1
  898. data/spec/spec_tests/data/sdam/errors/post-42-LegacyNotPrimary.yml +47 -0
  899. data/spec/spec_tests/data/sdam/errors/{post-42-NotMasterNoSlaveOk.yml → post-42-NotPrimaryNoSecondaryOk.yml} +5 -4
  900. data/spec/spec_tests/data/sdam/errors/{post-42-NotMasterOrSecondary.yml → post-42-NotPrimaryOrSecondary.yml} +5 -4
  901. data/spec/spec_tests/data/sdam/errors/{post-42-NotMaster.yml → post-42-NotWritablePrimary.yml} +5 -4
  902. data/spec/spec_tests/data/sdam/errors/post-42-PrimarySteppedDown.yml +2 -1
  903. data/spec/spec_tests/data/sdam/errors/post-42-ShutdownInProgress.yml +2 -1
  904. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedAtShutdown.yml +2 -1
  905. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedDueToReplStateChange.yml +2 -1
  906. data/spec/spec_tests/data/sdam/errors/{pre-42-NotMaster.yml → pre-42-LegacyNotPrimary.yml} +6 -5
  907. data/spec/spec_tests/data/sdam/errors/pre-42-NotPrimaryNoSecondaryOk.yml +47 -0
  908. data/spec/spec_tests/data/sdam/errors/{pre-42-NotMasterOrSecondary.yml → pre-42-NotPrimaryOrSecondary.yml} +5 -4
  909. data/spec/spec_tests/data/sdam/errors/{pre-42-NotMasterNoSlaveOk.yml → pre-42-NotWritablePrimary.yml} +6 -5
  910. data/spec/spec_tests/data/sdam/errors/pre-42-PrimarySteppedDown.yml +2 -1
  911. data/spec/spec_tests/data/sdam/errors/pre-42-ShutdownInProgress.yml +2 -1
  912. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +54 -0
  913. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedAtShutdown.yml +4 -2
  914. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedDueToReplStateChange.yml +4 -2
  915. data/spec/spec_tests/data/sdam/errors/{stale-generation-NotMasterNoSlaveOk.yml → stale-generation-NotPrimaryNoSecondaryOk.yml} +7 -5
  916. data/spec/spec_tests/data/sdam/errors/{stale-generation-NotMasterOrSecondary.yml → stale-generation-NotPrimaryOrSecondary.yml} +7 -5
  917. data/spec/spec_tests/data/sdam/errors/{stale-generation-NotMaster.yml → stale-generation-NotWritablePrimary.yml} +7 -5
  918. data/spec/spec_tests/data/sdam/errors/stale-generation-PrimarySteppedDown.yml +4 -2
  919. data/spec/spec_tests/data/sdam/errors/stale-generation-ShutdownInProgress.yml +4 -2
  920. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.yml +4 -2
  921. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.yml +4 -2
  922. data/spec/spec_tests/data/sdam/errors/{stale-generation-afterHandshakeCompletes-NotMaster.yml → stale-generation-afterHandshakeCompletes-LegacyNotPrimary.yml} +8 -6
  923. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotPrimaryNoSecondaryOk.yml +91 -0
  924. data/spec/spec_tests/data/sdam/errors/{stale-generation-afterHandshakeCompletes-NotMasterOrSecondary.yml → stale-generation-afterHandshakeCompletes-NotPrimaryOrSecondary.yml} +7 -5
  925. data/spec/spec_tests/data/sdam/errors/{stale-generation-afterHandshakeCompletes-NotMasterNoSlaveOk.yml → stale-generation-afterHandshakeCompletes-NotWritablePrimary.yml} +8 -6
  926. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.yml +4 -2
  927. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.yml +4 -2
  928. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-network.yml +6 -4
  929. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-timeout.yml +6 -4
  930. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.yml +4 -2
  931. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.yml +4 -2
  932. data/spec/spec_tests/data/sdam/errors/{stale-generation-beforeHandshakeCompletes-NotMaster.yml → stale-generation-beforeHandshakeCompletes-LegacyNotPrimary.yml} +8 -6
  933. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryNoSecondaryOk.yml +91 -0
  934. data/spec/spec_tests/data/sdam/errors/{stale-generation-beforeHandshakeCompletes-NotMasterOrSecondary.yml → stale-generation-beforeHandshakeCompletes-NotPrimaryOrSecondary.yml} +7 -5
  935. data/spec/spec_tests/data/sdam/errors/{stale-generation-beforeHandshakeCompletes-NotMasterNoSlaveOk.yml → stale-generation-beforeHandshakeCompletes-NotWritablePrimary.yml} +8 -6
  936. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.yml +4 -2
  937. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.yml +4 -2
  938. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-network.yml +6 -4
  939. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-timeout.yml +6 -4
  940. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedAtShutdown.yml +2 -1
  941. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedDueToReplStateChange.yml +2 -1
  942. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-LegacyNotPrimary.yml +65 -0
  943. data/spec/spec_tests/data/sdam/errors/{stale-topologyVersion-NotMasterNoSlaveOk.yml → stale-topologyVersion-NotPrimaryNoSecondaryOk.yml} +7 -6
  944. data/spec/spec_tests/data/sdam/errors/{stale-topologyVersion-NotMasterOrSecondary.yml → stale-topologyVersion-NotPrimaryOrSecondary.yml} +7 -6
  945. data/spec/spec_tests/data/sdam/errors/{stale-topologyVersion-NotMaster.yml → stale-topologyVersion-NotWritablePrimary.yml} +7 -6
  946. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-PrimarySteppedDown.yml +2 -1
  947. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-ShutdownInProgress.yml +2 -1
  948. data/spec/spec_tests/data/sdam/errors/write_errors_ignored.yml +42 -0
  949. data/spec/spec_tests/data/sdam/rs/compatible.yml +4 -2
  950. data/spec/spec_tests/data/sdam/rs/compatible_unknown.yml +2 -1
  951. data/spec/spec_tests/data/sdam/rs/discover_arbiters.yml +2 -1
  952. data/spec/spec_tests/data/sdam/rs/discover_arbiters_replicaset.yml +2 -1
  953. data/spec/spec_tests/data/sdam/rs/discover_ghost.yml +2 -1
  954. data/spec/spec_tests/data/sdam/rs/discover_ghost_replicaset.yml +2 -1
  955. data/spec/spec_tests/data/sdam/rs/discover_hidden.yml +2 -1
  956. data/spec/spec_tests/data/sdam/rs/discover_hidden_replicaset.yml +2 -1
  957. data/spec/spec_tests/data/sdam/rs/discover_passives.yml +4 -2
  958. data/spec/spec_tests/data/sdam/rs/discover_passives_replicaset.yml +4 -2
  959. data/spec/spec_tests/data/sdam/rs/discover_primary.yml +2 -1
  960. data/spec/spec_tests/data/sdam/rs/discover_primary_replicaset.yml +2 -1
  961. data/spec/spec_tests/data/sdam/rs/discover_rsother.yml +2 -1
  962. data/spec/spec_tests/data/sdam/rs/discover_rsother_replicaset.yml +4 -2
  963. data/spec/spec_tests/data/sdam/rs/discover_secondary.yml +2 -1
  964. data/spec/spec_tests/data/sdam/rs/discover_secondary_replicaset.yml +2 -1
  965. data/spec/spec_tests/data/sdam/rs/discovery.yml +8 -4
  966. data/spec/spec_tests/data/sdam/rs/equal_electionids.yml +4 -2
  967. data/spec/spec_tests/data/sdam/rs/hosts_differ_from_seeds.yml +2 -1
  968. data/spec/spec_tests/data/sdam/rs/incompatible_arbiter.yml +3 -1
  969. data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +3 -1
  970. data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +3 -1
  971. data/spec/spec_tests/data/sdam/rs/ls_timeout.yml +12 -6
  972. data/spec/spec_tests/data/sdam/rs/member_reconfig.yml +4 -2
  973. data/spec/spec_tests/data/sdam/rs/member_standalone.yml +4 -2
  974. data/spec/spec_tests/data/sdam/rs/new_primary.yml +4 -2
  975. data/spec/spec_tests/data/sdam/rs/new_primary_new_electionid.yml +6 -3
  976. data/spec/spec_tests/data/sdam/rs/new_primary_new_setversion.yml +6 -3
  977. data/spec/spec_tests/data/sdam/rs/new_primary_wrong_set_name.yml +4 -2
  978. data/spec/spec_tests/data/sdam/rs/non_rs_member.yml +1 -0
  979. data/spec/spec_tests/data/sdam/rs/normalize_case.yml +2 -1
  980. data/spec/spec_tests/data/sdam/rs/normalize_case_me.yml +4 -2
  981. data/spec/spec_tests/data/sdam/rs/null_election_id.yml +8 -4
  982. data/spec/spec_tests/data/sdam/rs/primary_becomes_ghost.yml +4 -2
  983. data/spec/spec_tests/data/sdam/rs/primary_becomes_mongos.yml +4 -2
  984. data/spec/spec_tests/data/sdam/rs/primary_becomes_standalone.yml +2 -1
  985. data/spec/spec_tests/data/sdam/rs/primary_changes_set_name.yml +4 -2
  986. data/spec/spec_tests/data/sdam/rs/primary_disconnect.yml +2 -1
  987. data/spec/spec_tests/data/sdam/rs/primary_disconnect_electionid.yml +10 -5
  988. data/spec/spec_tests/data/sdam/rs/primary_disconnect_setversion.yml +10 -5
  989. data/spec/spec_tests/data/sdam/rs/primary_hint_from_secondary_with_mismatched_me.yml +4 -2
  990. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me.yml +2 -1
  991. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me_not_removed.yml +5 -3
  992. data/spec/spec_tests/data/sdam/rs/primary_reports_new_member.yml +8 -4
  993. data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +4 -2
  994. data/spec/spec_tests/data/sdam/rs/primary_wrong_set_name.yml +2 -1
  995. data/spec/spec_tests/data/sdam/rs/repeated.yml +9 -5
  996. data/spec/spec_tests/data/sdam/rs/replicaset_rsnp.yml +2 -1
  997. data/spec/spec_tests/data/sdam/rs/response_from_removed.yml +4 -2
  998. data/spec/spec_tests/data/sdam/rs/sec_not_auth.yml +4 -2
  999. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +4 -2
  1000. data/spec/spec_tests/data/sdam/rs/secondary_mismatched_me.yml +2 -1
  1001. data/spec/spec_tests/data/sdam/rs/secondary_wrong_set_name.yml +2 -1
  1002. data/spec/spec_tests/data/sdam/rs/secondary_wrong_set_name_with_primary.yml +4 -2
  1003. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +4 -2
  1004. data/spec/spec_tests/data/sdam/rs/stepdown_change_set_name.yml +4 -2
  1005. data/spec/spec_tests/data/sdam/rs/too_new.yml +4 -2
  1006. data/spec/spec_tests/data/sdam/rs/too_old.yml +4 -2
  1007. data/spec/spec_tests/data/sdam/rs/topology_version_equal.yml +4 -2
  1008. data/spec/spec_tests/data/sdam/rs/topology_version_greater.yml +10 -5
  1009. data/spec/spec_tests/data/sdam/rs/topology_version_less.yml +4 -2
  1010. data/spec/spec_tests/data/sdam/rs/unexpected_mongos.yml +2 -1
  1011. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +6 -3
  1012. data/spec/spec_tests/data/sdam/rs/wrong_set_name.yml +2 -1
  1013. data/spec/spec_tests/data/sdam/sharded/compatible.yml +4 -2
  1014. data/spec/spec_tests/data/sdam/sharded/discover_single_mongos.yml +2 -1
  1015. data/spec/spec_tests/data/sdam/sharded/ls_timeout_mongos.yml +9 -5
  1016. data/spec/spec_tests/data/sdam/sharded/mongos_disconnect.yml +6 -3
  1017. data/spec/spec_tests/data/sdam/sharded/multiple_mongoses.yml +4 -2
  1018. data/spec/spec_tests/data/sdam/sharded/non_mongos_removed.yml +4 -2
  1019. data/spec/spec_tests/data/sdam/sharded/too_new.yml +4 -2
  1020. data/spec/spec_tests/data/sdam/sharded/too_old.yml +4 -2
  1021. data/spec/spec_tests/data/sdam/single/compatible.yml +2 -1
  1022. data/spec/spec_tests/data/sdam/single/direct_connection_external_ip.yml +2 -1
  1023. data/spec/spec_tests/data/sdam/single/direct_connection_mongos.yml +2 -1
  1024. data/spec/spec_tests/data/sdam/single/direct_connection_replicaset.yml +2 -1
  1025. data/spec/spec_tests/data/sdam/single/direct_connection_rsarbiter.yml +2 -1
  1026. data/spec/spec_tests/data/sdam/single/direct_connection_rsprimary.yml +2 -1
  1027. data/spec/spec_tests/data/sdam/single/direct_connection_rssecondary.yml +2 -1
  1028. data/spec/spec_tests/data/sdam/single/direct_connection_standalone.yml +2 -1
  1029. data/spec/spec_tests/data/sdam/single/direct_connection_wrong_set_name.yml +4 -2
  1030. data/spec/spec_tests/data/sdam/single/discover_standalone.yml +2 -1
  1031. data/spec/spec_tests/data/sdam/single/ls_timeout_standalone.yml +2 -1
  1032. data/spec/spec_tests/data/sdam/single/not_ok_response.yml +5 -3
  1033. data/spec/spec_tests/data/sdam/single/standalone_removed.yml +2 -1
  1034. data/spec/spec_tests/data/sdam/single/{direct_connection_slave.yml → standalone_using_legacy_hello.yml} +3 -3
  1035. data/spec/spec_tests/data/sdam/single/too_new.yml +2 -1
  1036. data/spec/spec_tests/data/sdam/single/too_old.yml +2 -1
  1037. data/spec/spec_tests/data/sdam/single/too_old_then_upgraded.yml +4 -2
  1038. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +1 -1
  1039. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +2 -2
  1040. data/spec/spec_tests/data/sdam_integration/{isMaster-command-error.yml → hello-command-error.yml} +19 -29
  1041. data/spec/spec_tests/data/sdam_integration/{isMaster-network-error.yml → hello-network-error.yml} +9 -15
  1042. data/spec/spec_tests/data/sdam_integration/{isMaster-timeout.yml → hello-timeout.yml} +7 -13
  1043. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +14 -3
  1044. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -1
  1045. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +2 -1
  1046. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +2 -1
  1047. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +3 -2
  1048. data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +2 -1
  1049. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +1 -1
  1050. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  1051. data/spec/spec_tests/data/transactions/error-labels.yml +3 -0
  1052. data/spec/spec_tests/data/transactions/mongos-pin-auto.yml +3 -0
  1053. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +2 -0
  1054. data/spec/spec_tests/data/transactions/pin-mongos.yml +6 -3
  1055. data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +172 -0
  1056. data/spec/spec_tests/data/unified/valid-fail/operation-failure.yml +31 -0
  1057. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +220 -0
  1058. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +102 -0
  1059. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +184 -0
  1060. data/spec/spec_tests/data/unified/valid-pass/poc-gridfs.yml +155 -0
  1061. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +193 -0
  1062. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +210 -0
  1063. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +215 -0
  1064. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +235 -0
  1065. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +169 -0
  1066. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +170 -0
  1067. data/spec/spec_tests/data/uri_options/compression-options.yml +1 -1
  1068. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +417 -0
  1069. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +411 -0
  1070. data/spec/spec_tests/data/versioned_api/runcommand-helper-no-api-version-declared.yml +75 -0
  1071. data/spec/spec_tests/data/versioned_api/test-commands-deprecation-errors.yml +47 -0
  1072. data/spec/spec_tests/data/versioned_api/test-commands-strict-mode.yml +46 -0
  1073. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +128 -0
  1074. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +3 -0
  1075. data/spec/spec_tests/gridfs_spec.rb +3 -0
  1076. data/spec/spec_tests/max_staleness_spec.rb +3 -0
  1077. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +3 -0
  1078. data/spec/spec_tests/read_write_concern_document_spec.rb +3 -0
  1079. data/spec/spec_tests/read_write_concern_operaton_spec.rb +3 -0
  1080. data/spec/spec_tests/retryable_reads_spec.rb +3 -0
  1081. data/spec/spec_tests/retryable_writes_spec.rb +9 -6
  1082. data/spec/spec_tests/sdam_integration_spec.rb +3 -0
  1083. data/spec/spec_tests/sdam_monitoring_spec.rb +4 -1
  1084. data/spec/spec_tests/sdam_spec.rb +4 -1
  1085. data/spec/spec_tests/server_selection_rtt_spec.rb +3 -0
  1086. data/spec/spec_tests/server_selection_spec.rb +3 -0
  1087. data/spec/spec_tests/transactions_api_spec.rb +3 -0
  1088. data/spec/spec_tests/transactions_spec.rb +3 -0
  1089. data/spec/spec_tests/transactions_unified_spec.rb +13 -0
  1090. data/spec/spec_tests/unified_spec.rb +18 -0
  1091. data/spec/spec_tests/uri_options_spec.rb +19 -0
  1092. data/spec/spec_tests/versioned_api_spec.rb +13 -0
  1093. data/spec/stress/cleanup_spec.rb +3 -0
  1094. data/spec/stress/connection_pool_stress_spec.rb +3 -0
  1095. data/spec/stress/connection_pool_timing_spec.rb +3 -0
  1096. data/spec/stress/fork_reconnect_stress_spec.rb +6 -3
  1097. data/spec/stress/push_monitor_close_spec.rb +44 -0
  1098. data/spec/support/authorization.rb +3 -0
  1099. data/spec/support/aws_utils/base.rb +3 -0
  1100. data/spec/support/aws_utils/inspector.rb +3 -0
  1101. data/spec/support/aws_utils/orchestrator.rb +3 -0
  1102. data/spec/support/aws_utils/provisioner.rb +3 -0
  1103. data/spec/support/aws_utils.rb +3 -0
  1104. data/spec/support/background_thread_registry.rb +4 -1
  1105. data/spec/support/certificates/README.md +3 -2
  1106. data/spec/support/certificates/atlas-ocsp-ca.crt +116 -26
  1107. data/spec/support/certificates/atlas-ocsp.crt +150 -39
  1108. data/spec/support/client_registry.rb +12 -5
  1109. data/spec/support/client_registry_macros.rb +7 -4
  1110. data/spec/support/cluster_tools.rb +4 -1
  1111. data/spec/support/common_shortcuts.rb +40 -7
  1112. data/spec/support/constraints.rb +3 -0
  1113. data/spec/support/crypt.rb +3 -0
  1114. data/spec/support/dns.rb +3 -0
  1115. data/spec/support/event_subscriber.rb +9 -0
  1116. data/spec/support/json_ext_formatter.rb +3 -0
  1117. data/spec/support/keyword_struct.rb +3 -0
  1118. data/spec/support/local_resource_registry.rb +3 -0
  1119. data/spec/support/matchers.rb +4 -1
  1120. data/spec/support/monitoring_ext.rb +3 -0
  1121. data/spec/support/primary_socket.rb +3 -0
  1122. data/spec/support/sdam_formatter_integration.rb +3 -0
  1123. data/spec/support/session_registry.rb +3 -0
  1124. data/spec/{mongo/server/app_metadata_shared.rb → support/shared/app_metadata.rb} +38 -7
  1125. data/spec/support/shared/protocol.rb +3 -0
  1126. data/spec/support/shared/scram_conversation.rb +3 -0
  1127. data/spec/support/shared/server_selector.rb +6 -3
  1128. data/spec/support/shared/session.rb +5 -2
  1129. data/spec/support/spec_config.rb +89 -12
  1130. data/spec/support/spec_setup.rb +51 -38
  1131. data/spec/support/utils.rb +68 -4
  1132. data.tar.gz.sig +0 -0
  1133. metadata +1195 -1027
  1134. metadata.gz.sig +0 -0
  1135. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +0 -58
  1136. data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +0 -47
  1137. data/spec/support/cluster_config.rb +0 -207
@@ -1,10 +1,17 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require 'spec_helper'
2
5
 
3
6
  describe Mongo::Operation::DropIndex do
7
+ require_no_required_api_version
8
+
4
9
  before do
5
10
  authorized_collection.indexes.drop_all
6
11
  end
7
12
 
13
+ let(:context) { Mongo::Operation::Context.new }
14
+
8
15
  describe '#execute' do
9
16
 
10
17
  context 'when the index exists' do
@@ -26,7 +33,7 @@ describe Mongo::Operation::DropIndex do
26
33
  end
27
34
 
28
35
  let(:response) do
29
- operation.execute(authorized_primary, client: nil)
36
+ operation.execute(authorized_primary, context: context)
30
37
  end
31
38
 
32
39
  it 'removes the index' do
@@ -46,7 +53,7 @@ describe Mongo::Operation::DropIndex do
46
53
 
47
54
  it 'raises an exception' do
48
55
  expect {
49
- operation.execute(authorized_primary, client: nil)
56
+ operation.execute(authorized_primary, context: context)
50
57
  }.to raise_error(Mongo::Error::OperationFailure)
51
58
  end
52
59
  end
@@ -1,8 +1,13 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require 'spec_helper'
2
5
 
3
6
  describe Mongo::Operation::Find::Legacy do
4
7
  max_server_version '3.4'
5
8
 
9
+ let(:context) { Mongo::Operation::Context.new }
10
+
6
11
  let(:selector) { { foo: 1 } }
7
12
  let(:query_options) { {} }
8
13
  let(:spec) do
@@ -100,7 +105,7 @@ describe Mongo::Operation::Find::Legacy do
100
105
  end
101
106
 
102
107
  it 'applies the correct flags' do
103
- expect(message.flags).to eq([ :no_cursor_timeout, :slave_ok ])
108
+ expect(message.flags).to eq([ :no_cursor_timeout, :secondary_ok ])
104
109
  end
105
110
  end
106
111
 
@@ -116,7 +121,7 @@ describe Mongo::Operation::Find::Legacy do
116
121
 
117
122
  it 'does not raise an exception' do
118
123
  authorized_primary.with_connection do |connection|
119
- expect(op.execute(connection, client: nil)).to be_a(Mongo::Operation::Find::Legacy::Result)
124
+ expect(op.execute(connection, context: context)).to be_a(Mongo::Operation::Find::Legacy::Result)
120
125
  end
121
126
  end
122
127
  end
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require 'spec_helper'
2
5
 
3
6
  describe Mongo::Operation::GetMore::Legacy do
@@ -19,6 +22,8 @@ describe Mongo::Operation::GetMore::Legacy do
19
22
 
20
23
  let(:op) { described_class.new(spec) }
21
24
 
25
+ let(:context) { Mongo::Operation::Context.new }
26
+
22
27
  describe '#initialize' do
23
28
 
24
29
  it 'sets the spec' do
@@ -49,7 +54,7 @@ describe Mongo::Operation::GetMore::Legacy do
49
54
  expect(Mongo::Protocol::GetMore).to receive(:new).with(SpecConfig.instance.test_db, TEST_COLL, to_return, cursor_id).and_call_original
50
55
  begin
51
56
  authorized_primary.with_connection do |connection|
52
- op.execute(connection, client: nil)
57
+ op.execute(connection, context: context)
53
58
  end
54
59
  rescue
55
60
  end
@@ -1,6 +1,13 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require 'spec_helper'
2
5
 
3
6
  describe Mongo::Operation::Indexes do
7
+ require_no_required_api_version
8
+
9
+ let(:context) { Mongo::Operation::Context.new }
10
+
4
11
  describe '#execute' do
5
12
 
6
13
  let(:index_spec) do
@@ -24,7 +31,7 @@ describe Mongo::Operation::Indexes do
24
31
  end
25
32
 
26
33
  let(:indexes) do
27
- operation.execute(authorized_primary, client: nil)
34
+ operation.execute(authorized_primary, context: context)
28
35
  end
29
36
 
30
37
  it 'returns the indexes for the collection' do
@@ -1,7 +1,13 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require 'spec_helper'
2
5
 
3
6
  describe Mongo::Operation::Insert do
4
7
  require_no_multi_shard
8
+ require_no_required_api_version
9
+
10
+ let(:context) { Mongo::Operation::Context.new }
5
11
 
6
12
  before do
7
13
  begin
@@ -100,7 +106,7 @@ describe Mongo::Operation::Insert do
100
106
 
101
107
  let(:inserted_ids) do
102
108
  authorized_primary.with_connection do |connection|
103
- op.bulk_execute(connection, client: nil).inserted_ids
109
+ op.bulk_execute(connection, context: context).inserted_ids
104
110
  end
105
111
  end
106
112
 
@@ -131,7 +137,7 @@ describe Mongo::Operation::Insert do
131
137
 
132
138
  let(:response) do
133
139
  authorized_primary.with_connection do |connection|
134
- op.bulk_execute(connection, client: nil)
140
+ op.bulk_execute(connection, context: context)
135
141
  end
136
142
  end
137
143
 
@@ -151,7 +157,7 @@ describe Mongo::Operation::Insert do
151
157
 
152
158
  let(:response) do
153
159
  authorized_primary.with_connection do |connection|
154
- op.bulk_execute(connection, client: nil)
160
+ op.bulk_execute(connection, context: context)
155
161
  end
156
162
  end
157
163
 
@@ -190,7 +196,7 @@ describe Mongo::Operation::Insert do
190
196
 
191
197
  it 'aborts after first error' do
192
198
  authorized_primary.with_connection do |connection|
193
- failing_insert.bulk_execute(connection, client: nil)
199
+ failing_insert.bulk_execute(connection, context: context)
194
200
  end
195
201
  expect(authorized_collection.find.count).to eq(1)
196
202
  end
@@ -206,7 +212,7 @@ describe Mongo::Operation::Insert do
206
212
 
207
213
  it 'aborts after first error' do
208
214
  authorized_primary.with_connection do |connection|
209
- failing_insert.bulk_execute(connection, client: nil)
215
+ failing_insert.bulk_execute(connection, context: context)
210
216
  end
211
217
  expect(authorized_collection.find.count).to eq(1)
212
218
  end
@@ -239,7 +245,7 @@ describe Mongo::Operation::Insert do
239
245
 
240
246
  it 'does not abort after first error' do
241
247
  authorized_primary.with_connection do |connection|
242
- failing_insert.bulk_execute(connection, client: nil)
248
+ failing_insert.bulk_execute(connection, context: context)
243
249
  end
244
250
  expect(authorized_collection.find.count).to eq(2)
245
251
  end
@@ -256,7 +262,7 @@ describe Mongo::Operation::Insert do
256
262
 
257
263
  it 'does not after first error' do
258
264
  authorized_primary.with_connection do |connection|
259
- failing_insert.bulk_execute(connection, client: nil)
265
+ failing_insert.bulk_execute(connection, context: context)
260
266
  end
261
267
  expect(authorized_collection.find.count).to eq(2)
262
268
  end
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require 'spec_helper'
2
5
 
3
6
  describe Mongo::Operation::Insert::Command do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require 'spec_helper'
2
5
 
3
6
  describe Mongo::Operation::Insert::OpMsg do
@@ -1,6 +1,12 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require 'spec_helper'
2
5
 
3
6
  describe Mongo::Operation::Insert do
7
+ require_no_required_api_version
8
+
9
+ let(:context) { Mongo::Operation::Context.new }
4
10
 
5
11
  let(:documents) do
6
12
  [{ '_id' => 1,
@@ -83,7 +89,7 @@ describe Mongo::Operation::Insert do
83
89
  end
84
90
 
85
91
  let(:inserted_ids) do
86
- insert.execute(authorized_primary, client: nil).inserted_ids
92
+ insert.execute(authorized_primary, context: context).inserted_ids
87
93
  end
88
94
 
89
95
  let(:collection_ids) do
@@ -112,7 +118,7 @@ describe Mongo::Operation::Insert do
112
118
  context 'when the insert succeeds' do
113
119
 
114
120
  let!(:response) do
115
- insert.execute(authorized_primary, client: nil)
121
+ insert.execute(authorized_primary, context: context)
116
122
  end
117
123
 
118
124
  it 'reports the correct written count' do
@@ -144,8 +150,8 @@ describe Mongo::Operation::Insert do
144
150
 
145
151
  it 'raises an error' do
146
152
  expect {
147
- failing_insert.execute(authorized_primary, client: nil)
148
- failing_insert.execute(authorized_primary, client: nil)
153
+ failing_insert.execute(authorized_primary, context: context)
154
+ failing_insert.execute(authorized_primary, context: context)
149
155
  }.to raise_error(Mongo::Error::OperationFailure)
150
156
  end
151
157
  end
@@ -163,7 +169,7 @@ describe Mongo::Operation::Insert do
163
169
  end
164
170
 
165
171
  let!(:response) do
166
- insert.execute(authorized_primary, client: nil)
172
+ insert.execute(authorized_primary, context: context)
167
173
  end
168
174
 
169
175
  it 'reports the correct written count' do
@@ -195,8 +201,8 @@ describe Mongo::Operation::Insert do
195
201
 
196
202
  it 'raises an error' do
197
203
  expect {
198
- failing_insert.execute(authorized_primary, client: nil)
199
- failing_insert.execute(authorized_primary, client: nil)
204
+ failing_insert.execute(authorized_primary, context: context)
205
+ failing_insert.execute(authorized_primary, context: context)
200
206
  }.to raise_error(Mongo::Error::OperationFailure)
201
207
  end
202
208
  end
@@ -221,8 +227,8 @@ describe Mongo::Operation::Insert do
221
227
 
222
228
  it 'raises an error' do
223
229
  expect {
224
- failing_insert.execute(authorized_primary, client: nil)
225
- failing_insert.execute(authorized_primary, client: nil)
230
+ failing_insert.execute(authorized_primary, context: context)
231
+ failing_insert.execute(authorized_primary, context: context)
226
232
  }.to raise_error(Mongo::Error::OperationFailure)
227
233
  end
228
234
 
@@ -236,13 +242,13 @@ describe Mongo::Operation::Insert do
236
242
 
237
243
  it 'raises an error' do
238
244
  expect {
239
- insert.execute(authorized_primary, client: nil)
245
+ insert.execute(authorized_primary, context: context)
240
246
  }.to raise_error(Mongo::Error::MaxBSONSize)
241
247
  end
242
248
 
243
249
  it 'does not insert the document' do
244
250
  expect {
245
- insert.execute(authorized_primary, client: nil)
251
+ insert.execute(authorized_primary, context: context)
246
252
  }.to raise_error(Mongo::Error::MaxBSONSize)
247
253
  expect(authorized_collection.find.count).to eq(0)
248
254
  end
@@ -273,7 +279,7 @@ describe Mongo::Operation::Insert do
273
279
  end
274
280
 
275
281
  let(:response) do
276
- op.execute(authorized_primary, client: nil)
282
+ op.execute(authorized_primary, context: context)
277
283
  end
278
284
 
279
285
  it 'uses op codes instead of write commands' do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require 'spec_helper'
2
5
 
3
6
  describe Mongo::Operation::KillCursors::Legacy do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require 'spec_helper'
2
5
 
3
6
  describe Mongo::Operation::Limited do
@@ -1,6 +1,12 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require 'spec_helper'
2
5
 
3
6
  describe Mongo::Operation::MapReduce do
7
+ require_no_required_api_version
8
+
9
+ let(:context) { Mongo::Operation::Context.new }
4
10
 
5
11
  let(:map) do
6
12
  %Q{
@@ -97,7 +103,7 @@ describe Mongo::Operation::MapReduce do
97
103
  context 'when the map/reduce succeeds' do
98
104
 
99
105
  let(:response) do
100
- op.execute(authorized_primary, client: nil)
106
+ op.execute(authorized_primary, context: context)
101
107
  end
102
108
 
103
109
  it 'returns the response' do
@@ -117,7 +123,7 @@ describe Mongo::Operation::MapReduce do
117
123
 
118
124
  it 'raises an exception' do
119
125
  expect {
120
- op.execute(authorized_primary, client: nil)
126
+ op.execute(authorized_primary, context: context)
121
127
  }.to raise_error(Mongo::Error::OperationFailure)
122
128
  end
123
129
  end
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require 'spec_helper'
2
5
 
3
6
  describe Mongo::Operation::ReadPreferenceSupported do
@@ -46,103 +49,93 @@ describe Mongo::Operation::ReadPreferenceSupported do
46
49
  end
47
50
  end
48
51
 
49
- describe '#add_slave_ok_flag_maybe' do
52
+ describe '#add_secondary_ok_flag?' do
50
53
 
51
54
  let(:actual) do
52
- operation.send(:add_slave_ok_flag_maybe, operation.send(:options), connection)
55
+ operation.send(:add_secondary_ok_flag?, connection)
53
56
  end
54
57
 
55
- shared_examples_for 'sets the slave_ok flag as expected' do
56
- it 'sets the slave_ok flag as expected' do
58
+ shared_examples_for 'sets the secondary_ok flag as expected' do
59
+ it 'sets the secondary_ok flag as expected' do
57
60
  expect(actual).to eq(expected)
58
61
  end
59
62
  end
60
63
 
61
- shared_examples_for 'never sets slave_ok' do
64
+ shared_examples_for 'never sets secondary_ok' do
62
65
 
63
- let(:expected) do
64
- { }
65
- end
66
+ let(:expected) { false }
66
67
 
67
68
  context 'when no read preference is specified' do
68
69
  let(:read_pref) { Mongo::ServerSelector.get }
69
70
 
70
- it_behaves_like 'sets the slave_ok flag as expected'
71
+ it_behaves_like 'sets the secondary_ok flag as expected'
71
72
  end
72
73
 
73
74
  context 'when primary read preference is specified' do
74
75
  let(:read_pref) { Mongo::ServerSelector.get(:mode => :primary) }
75
76
 
76
- it_behaves_like 'sets the slave_ok flag as expected'
77
+ it_behaves_like 'sets the secondary_ok flag as expected'
77
78
  end
78
79
 
79
80
  context 'when secondary read preference is specified' do
80
81
  let(:read_pref) { Mongo::ServerSelector.get(:mode => :secondary) }
81
82
 
82
- it_behaves_like 'sets the slave_ok flag as expected'
83
+ it_behaves_like 'sets the secondary_ok flag as expected'
83
84
  end
84
85
  end
85
86
 
86
- shared_examples_for 'always sets slave_ok' do
87
+ shared_examples_for 'always sets secondary_ok' do
87
88
 
88
- let(:expected) do
89
- { :flags => [ :slave_ok ] }
90
- end
89
+ let(:expected) { true }
91
90
 
92
91
  context 'when no read preference is specified' do
93
92
  let(:read_pref) { Mongo::ServerSelector.get }
94
93
 
95
- it_behaves_like 'sets the slave_ok flag as expected'
94
+ it_behaves_like 'sets the secondary_ok flag as expected'
96
95
  end
97
96
 
98
97
  context 'when primary read preference is specified' do
99
98
  let(:read_pref) { Mongo::ServerSelector.get(:mode => :primary) }
100
99
 
101
- it_behaves_like 'sets the slave_ok flag as expected'
100
+ it_behaves_like 'sets the secondary_ok flag as expected'
102
101
  end
103
102
 
104
103
  context 'when secondary read preference is specified' do
105
104
  let(:read_pref) { Mongo::ServerSelector.get(:mode => :secondary) }
106
105
 
107
- it_behaves_like 'sets the slave_ok flag as expected'
106
+ it_behaves_like 'sets the secondary_ok flag as expected'
108
107
  end
109
108
  end
110
109
 
111
- shared_examples_for 'sets slave_ok if read preference is specified and is not primary' do
110
+ shared_examples_for 'sets secondary_ok if read preference is specified and is not primary' do
112
111
 
113
112
  context 'when there is no read preference set' do
114
113
 
115
114
  let(:read_pref) { Mongo::ServerSelector.get }
116
115
 
117
- let(:expected) do
118
- { }
119
- end
116
+ let(:expected) { false }
120
117
 
121
- it_behaves_like 'sets the slave_ok flag as expected'
118
+ it_behaves_like 'sets the secondary_ok flag as expected'
122
119
  end
123
120
 
124
121
  context 'when there is a read preference' do
125
122
 
126
- context 'when the read preference requires the slave_ok flag' do
123
+ context 'when the read preference requires the secondary_ok flag' do
127
124
 
128
125
  let(:read_pref) { Mongo::ServerSelector.get(:mode => :secondary) }
129
126
 
130
- let(:expected) do
131
- { :flags => [ :slave_ok ] }
132
- end
127
+ let(:expected) { true }
133
128
 
134
- it_behaves_like 'sets the slave_ok flag as expected'
129
+ it_behaves_like 'sets the secondary_ok flag as expected'
135
130
  end
136
131
 
137
- context 'when the read preference does not require the slave_ok flag' do
132
+ context 'when the read preference does not require the secondary_ok flag' do
138
133
 
139
134
  let(:read_pref) { Mongo::ServerSelector.get(:mode => :primary) }
140
135
 
141
- let(:expected) do
142
- { }
143
- end
136
+ let(:expected) { false }
144
137
 
145
- it_behaves_like 'sets the slave_ok flag as expected'
138
+ it_behaves_like 'sets the secondary_ok flag as expected'
146
139
  end
147
140
  end
148
141
  end
@@ -156,7 +149,7 @@ describe Mongo::Operation::ReadPreferenceSupported do
156
149
 
157
150
  let(:standalone?) { true }
158
151
 
159
- it_behaves_like 'never sets slave_ok'
152
+ it_behaves_like 'never sets secondary_ok'
160
153
  end
161
154
 
162
155
  context 'when the server is a mongos' do
@@ -164,7 +157,7 @@ describe Mongo::Operation::ReadPreferenceSupported do
164
157
  let(:standalone?) { false }
165
158
  let(:mongos?) { true }
166
159
 
167
- it_behaves_like 'always sets slave_ok'
160
+ it_behaves_like 'always sets secondary_ok'
168
161
  end
169
162
 
170
163
  context 'when the server is a replica set member' do
@@ -172,7 +165,7 @@ describe Mongo::Operation::ReadPreferenceSupported do
172
165
  let(:standalone?) { false }
173
166
  let(:mongos?) { false }
174
167
 
175
- it_behaves_like 'always sets slave_ok'
168
+ it_behaves_like 'always sets secondary_ok'
176
169
  end
177
170
  end
178
171
 
@@ -185,7 +178,7 @@ describe Mongo::Operation::ReadPreferenceSupported do
185
178
 
186
179
  let(:standalone?) { true }
187
180
 
188
- it_behaves_like 'never sets slave_ok'
181
+ it_behaves_like 'never sets secondary_ok'
189
182
  end
190
183
 
191
184
  context 'when the server is a mongos' do
@@ -193,7 +186,7 @@ describe Mongo::Operation::ReadPreferenceSupported do
193
186
  let(:standalone?) { false }
194
187
  let(:mongos?) { true }
195
188
 
196
- it_behaves_like 'sets slave_ok if read preference is specified and is not primary'
189
+ it_behaves_like 'sets secondary_ok if read preference is specified and is not primary'
197
190
  end
198
191
 
199
192
  context 'when the server is a replica set member' do
@@ -201,12 +194,12 @@ describe Mongo::Operation::ReadPreferenceSupported do
201
194
  let(:standalone?) { false }
202
195
  let(:mongos?) { false }
203
196
 
204
- it_behaves_like 'sets slave_ok if read preference is specified and is not primary'
197
+ it_behaves_like 'sets secondary_ok if read preference is specified and is not primary'
205
198
  end
206
199
  end
207
200
  end
208
201
 
209
- describe '#update_selector_for_read_pref' do
202
+ describe '#add_read_preference_legacy' do
210
203
 
211
204
  let(:read_pref) do
212
205
  Mongo::ServerSelector.get(:mode => mode)
@@ -215,7 +208,7 @@ describe Mongo::Operation::ReadPreferenceSupported do
215
208
  # Behavior of sending $readPreference is the same regardless of topology.
216
209
  shared_examples_for '$readPreference in the command' do
217
210
  let(:actual) do
218
- operation.send(:update_selector_for_read_pref, operation.send(:selector), connection)
211
+ operation.send(:add_read_preference_legacy, operation.send(:selector), connection)
219
212
  end
220
213
 
221
214
  let(:expected_read_preference) do
@@ -342,7 +335,7 @@ describe Mongo::Operation::ReadPreferenceSupported do
342
335
  let(:mongos?) { false }
343
336
 
344
337
  # $readPreference is not sent to replica set nodes running legacy
345
- # servers - the allowance of secondary reads is handled by slave_ok
338
+ # servers - the allowance of secondary reads is handled by secondary_ok
346
339
  # flag.
347
340
  it_behaves_like 'does not send read preference'
348
341
  end
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require 'spec_helper'
2
5
 
3
6
  describe Mongo::Operation::SessionsSupported do
@@ -175,13 +178,13 @@ describe Mongo::Operation::SessionsSupported do
175
178
  let(:tag_sets) { nil }
176
179
 
177
180
  context 'without tag_sets specified' do
178
- it_behaves_like 'does not modify selector'
181
+ it_behaves_like 'adds read preference'
179
182
  end
180
183
 
181
184
  context 'with empty tag_sets' do
182
185
  let(:tag_sets) { [] }
183
186
 
184
- it_behaves_like 'does not modify selector'
187
+ it_behaves_like 'adds read preference'
185
188
  end
186
189
 
187
190
  context 'with tag_sets specified' do
@@ -256,7 +259,7 @@ describe Mongo::Operation::SessionsSupported do
256
259
  let(:hedge) { nil }
257
260
 
258
261
  context 'when tag_sets and hedge are not specified' do
259
- it_behaves_like 'does not modify selector'
262
+ it_behaves_like 'adds read preference'
260
263
  end
261
264
 
262
265
  context 'when tag_sets are specified' do
@@ -1,6 +1,12 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require 'spec_helper'
2
5
 
3
6
  describe Mongo::Operation::RemoveUser do
7
+ require_no_required_api_version
8
+
9
+ let(:context) { Mongo::Operation::Context.new }
4
10
 
5
11
  describe '#execute' do
6
12
 
@@ -22,7 +28,7 @@ describe Mongo::Operation::RemoveUser do
22
28
  context 'when user removal was successful' do
23
29
 
24
30
  let!(:response) do
25
- operation.execute(root_authorized_primary, client: nil)
31
+ operation.execute(root_authorized_primary, context: context)
26
32
  end
27
33
 
28
34
  it 'removes the user from the database' do
@@ -33,12 +39,12 @@ describe Mongo::Operation::RemoveUser do
33
39
  context 'when removal was not successful' do
34
40
 
35
41
  before do
36
- operation.execute(root_authorized_primary, client: nil)
42
+ operation.execute(root_authorized_primary, context: context)
37
43
  end
38
44
 
39
45
  it 'raises an exception' do
40
46
  expect {
41
- operation.execute(root_authorized_primary, client: nil)
47
+ operation.execute(root_authorized_primary, context: context)
42
48
  }.to raise_error(Mongo::Error::OperationFailure)
43
49
  end
44
50
  end
@@ -1,10 +1,15 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require 'spec_helper'
2
5
 
3
6
  describe Mongo::Operation::Result do
4
7
 
5
8
  let(:description) do
6
- Mongo::Server::Description.new(double('description address'),
7
- 'minWireVersion' => 0, 'maxWireVersion' => 2)
9
+ Mongo::Server::Description.new(
10
+ double('description address'),
11
+ { 'minWireVersion' => 0, 'maxWireVersion' => 2 }
12
+ )
8
13
  end
9
14
 
10
15
  let(:result) do
@@ -31,7 +36,7 @@ describe Mongo::Operation::Result do
31
36
  context 'when the reply is for a read command' do
32
37
 
33
38
  let(:documents) do
34
- [{ 'ismaster' => true, 'ok' => 1.0 }]
39
+ [{ 'isWritablePrimary' => true, 'ok' => 1.0 }]
35
40
  end
36
41
 
37
42
  it 'returns true' do
@@ -145,7 +150,7 @@ describe Mongo::Operation::Result do
145
150
  context 'when the reply is for a read command' do
146
151
 
147
152
  let(:documents) do
148
- [{ 'ismaster' => true, 'ok' => 1.0 }]
153
+ [{ 'hello' => true, 'ok' => 1.0 }]
149
154
  end
150
155
 
151
156
  it 'returns the number returned' do
@@ -337,7 +342,7 @@ describe Mongo::Operation::Result do
337
342
  it 'raises OperationFailure' do
338
343
  expect do
339
344
  result.validate!
340
- end.to raise_error(Mongo::Error::OperationFailure, /Replication is being shut down \(91\)/)
345
+ end.to raise_error(Mongo::Error::OperationFailure, /\[91\]: Replication is being shut down/)
341
346
  end
342
347
  end
343
348
  end
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require 'spec_helper'
2
5
 
3
6
  describe Mongo::Operation::Specifiable do