mongo 2.13.0 → 2.15.0.alpha

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 (375) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +1 -4
  3. data.tar.gz.sig +0 -0
  4. data/README.md +4 -1
  5. data/Rakefile +46 -18
  6. data/lib/mongo.rb +32 -0
  7. data/lib/mongo/address.rb +1 -1
  8. data/lib/mongo/address/ipv4.rb +1 -1
  9. data/lib/mongo/address/ipv6.rb +1 -1
  10. data/lib/mongo/auth/aws/conversation.rb +1 -4
  11. data/lib/mongo/auth/base.rb +13 -7
  12. data/lib/mongo/auth/conversation_base.rb +32 -0
  13. data/lib/mongo/auth/cr/conversation.rb +6 -29
  14. data/lib/mongo/auth/gssapi/conversation.rb +4 -15
  15. data/lib/mongo/auth/ldap/conversation.rb +3 -14
  16. data/lib/mongo/auth/sasl_conversation_base.rb +1 -13
  17. data/lib/mongo/auth/scram_conversation_base.rb +7 -34
  18. data/lib/mongo/auth/user/view.rb +16 -9
  19. data/lib/mongo/auth/x509/conversation.rb +4 -25
  20. data/lib/mongo/background_thread.rb +11 -0
  21. data/lib/mongo/bulk_write.rb +38 -18
  22. data/lib/mongo/caching_cursor.rb +74 -0
  23. data/lib/mongo/client.rb +142 -16
  24. data/lib/mongo/cluster.rb +22 -31
  25. data/lib/mongo/cluster/reapers/cursor_reaper.rb +6 -2
  26. data/lib/mongo/cluster/sdam_flow.rb +14 -0
  27. data/lib/mongo/cluster/topology/single.rb +1 -1
  28. data/lib/mongo/collection.rb +58 -18
  29. data/lib/mongo/collection/view.rb +24 -20
  30. data/lib/mongo/collection/view/aggregation.rb +26 -5
  31. data/lib/mongo/collection/view/builder/find_command.rb +38 -18
  32. data/lib/mongo/collection/view/change_stream.rb +1 -1
  33. data/lib/mongo/collection/view/explainable.rb +27 -8
  34. data/lib/mongo/collection/view/iterable.rb +73 -13
  35. data/lib/mongo/collection/view/map_reduce.rb +2 -2
  36. data/lib/mongo/collection/view/readable.rb +57 -21
  37. data/lib/mongo/collection/view/writable.rb +29 -15
  38. data/lib/mongo/crypt/encryption_io.rb +6 -6
  39. data/lib/mongo/cursor.rb +18 -5
  40. data/lib/mongo/database.rb +28 -5
  41. data/lib/mongo/database/view.rb +2 -2
  42. data/lib/mongo/error.rb +11 -1
  43. data/lib/mongo/error/bulk_write_error.rb +17 -3
  44. data/lib/mongo/error/internal_driver_error.rb +22 -0
  45. data/lib/mongo/error/invalid_read_concern.rb +28 -0
  46. data/lib/mongo/error/operation_failure.rb +26 -7
  47. data/lib/mongo/error/parser.rb +65 -12
  48. data/lib/mongo/error/server_api_conflict.rb +23 -0
  49. data/lib/mongo/error/server_api_not_supported.rb +24 -0
  50. data/lib/mongo/error/server_certificate_revoked.rb +22 -0
  51. data/lib/mongo/error/unmet_dependency.rb +21 -0
  52. data/lib/mongo/error/unsupported_option.rb +14 -12
  53. data/lib/mongo/grid/fs_bucket.rb +37 -37
  54. data/lib/mongo/index/view.rb +21 -11
  55. data/lib/mongo/lint.rb +2 -1
  56. data/lib/mongo/logger.rb +3 -3
  57. data/lib/mongo/monitoring.rb +13 -4
  58. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +27 -16
  59. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +26 -15
  60. data/lib/mongo/operation.rb +4 -2
  61. data/lib/mongo/operation/aggregate/result.rb +9 -8
  62. data/lib/mongo/operation/collections_info.rb +18 -1
  63. data/lib/mongo/operation/collections_info/command.rb +5 -0
  64. data/lib/mongo/operation/collections_info/result.rb +18 -1
  65. data/lib/mongo/operation/context.rb +99 -0
  66. data/lib/mongo/operation/delete/bulk_result.rb +2 -0
  67. data/lib/mongo/operation/delete/result.rb +3 -0
  68. data/lib/mongo/operation/explain/command.rb +4 -0
  69. data/lib/mongo/operation/explain/legacy.rb +4 -0
  70. data/lib/mongo/operation/explain/op_msg.rb +6 -0
  71. data/lib/mongo/operation/explain/result.rb +3 -0
  72. data/lib/mongo/operation/find/legacy/result.rb +2 -0
  73. data/lib/mongo/operation/find/result.rb +13 -0
  74. data/lib/mongo/operation/get_more/result.rb +3 -0
  75. data/lib/mongo/operation/indexes.rb +15 -1
  76. data/lib/mongo/operation/indexes/result.rb +5 -0
  77. data/lib/mongo/operation/insert/bulk_result.rb +5 -0
  78. data/lib/mongo/operation/insert/command.rb +2 -2
  79. data/lib/mongo/operation/insert/legacy.rb +2 -2
  80. data/lib/mongo/operation/insert/op_msg.rb +2 -2
  81. data/lib/mongo/operation/insert/result.rb +5 -0
  82. data/lib/mongo/operation/list_collections/result.rb +9 -1
  83. data/lib/mongo/operation/map_reduce/result.rb +10 -0
  84. data/lib/mongo/operation/parallel_scan/result.rb +4 -0
  85. data/lib/mongo/operation/result.rb +37 -6
  86. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -0
  87. data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -0
  88. data/lib/mongo/operation/shared/executable.rb +25 -14
  89. data/lib/mongo/operation/shared/executable_no_validate.rb +2 -2
  90. data/lib/mongo/operation/shared/idable.rb +2 -1
  91. data/lib/mongo/operation/shared/limited.rb +1 -0
  92. data/lib/mongo/operation/shared/object_id_generator.rb +1 -0
  93. data/lib/mongo/operation/shared/op_msg_or_command.rb +1 -7
  94. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +1 -7
  95. data/lib/mongo/operation/shared/polymorphic_operation.rb +39 -0
  96. data/lib/mongo/operation/shared/response_handling.rb +23 -23
  97. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -0
  98. data/lib/mongo/operation/shared/sessions_supported.rb +14 -2
  99. data/lib/mongo/operation/shared/specifiable.rb +1 -0
  100. data/lib/mongo/operation/shared/write.rb +9 -18
  101. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -0
  102. data/lib/mongo/operation/update/legacy/result.rb +7 -0
  103. data/lib/mongo/operation/update/result.rb +8 -0
  104. data/lib/mongo/operation/users_info/result.rb +3 -0
  105. data/lib/mongo/protocol/compressed.rb +51 -5
  106. data/lib/mongo/protocol/message.rb +31 -4
  107. data/lib/mongo/protocol/msg.rb +37 -12
  108. data/lib/mongo/protocol/query.rb +36 -0
  109. data/lib/mongo/query_cache.rb +272 -0
  110. data/lib/mongo/retryable.rb +9 -2
  111. data/lib/mongo/server.rb +12 -16
  112. data/lib/mongo/server/app_metadata.rb +52 -18
  113. data/lib/mongo/server/connection.rb +5 -0
  114. data/lib/mongo/server/connection_base.rb +16 -15
  115. data/lib/mongo/server/connection_common.rb +2 -2
  116. data/lib/mongo/server/connection_pool.rb +9 -4
  117. data/lib/mongo/server/description.rb +12 -1
  118. data/lib/mongo/server/description/features.rb +9 -8
  119. data/lib/mongo/server/monitor.rb +21 -2
  120. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  121. data/lib/mongo/server/monitor/connection.rb +12 -13
  122. data/lib/mongo/server/pending_connection.rb +26 -8
  123. data/lib/mongo/server/push_monitor.rb +12 -2
  124. data/lib/mongo/server_selector/base.rb +5 -1
  125. data/lib/mongo/session.rb +7 -3
  126. data/lib/mongo/session/session_pool.rb +4 -2
  127. data/lib/mongo/socket.rb +35 -8
  128. data/lib/mongo/socket/ocsp_cache.rb +97 -0
  129. data/lib/mongo/socket/ocsp_verifier.rb +368 -0
  130. data/lib/mongo/socket/ssl.rb +53 -24
  131. data/lib/mongo/srv/monitor.rb +7 -24
  132. data/lib/mongo/srv/resolver.rb +14 -10
  133. data/lib/mongo/timeout.rb +2 -0
  134. data/lib/mongo/uri.rb +21 -390
  135. data/lib/mongo/uri/options_mapper.rb +620 -0
  136. data/lib/mongo/uri/srv_protocol.rb +3 -2
  137. data/lib/mongo/utils.rb +27 -1
  138. data/lib/mongo/version.rb +1 -1
  139. data/spec/NOTES.aws-auth.md +12 -7
  140. data/spec/README.md +87 -2
  141. data/spec/integration/auth_spec.rb +25 -15
  142. data/spec/integration/bson_symbol_spec.rb +4 -2
  143. data/spec/integration/bulk_write_error_message_spec.rb +41 -0
  144. data/spec/integration/bulk_write_spec.rb +48 -0
  145. data/spec/integration/change_stream_spec.rb +5 -5
  146. data/spec/integration/client_authentication_options_spec.rb +92 -28
  147. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +6 -2
  148. data/spec/integration/command_monitoring_spec.rb +2 -2
  149. data/spec/integration/connection_pool_populator_spec.rb +4 -2
  150. data/spec/integration/connection_spec.rb +2 -0
  151. data/spec/integration/cursor_reaping_spec.rb +54 -18
  152. data/spec/integration/docs_examples_spec.rb +8 -1
  153. data/spec/integration/fork_reconnect_spec.rb +60 -2
  154. data/spec/integration/ocsp_connectivity_spec.rb +26 -0
  155. data/spec/integration/ocsp_verifier_cache_spec.rb +188 -0
  156. data/spec/integration/ocsp_verifier_spec.rb +340 -0
  157. data/spec/integration/operation_failure_code_spec.rb +1 -1
  158. data/spec/integration/operation_failure_message_spec.rb +90 -0
  159. data/spec/integration/query_cache_spec.rb +1045 -0
  160. data/spec/integration/query_cache_transactions_spec.rb +190 -0
  161. data/spec/integration/reconnect_spec.rb +1 -1
  162. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -0
  163. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +2 -0
  164. data/spec/integration/sdam_error_handling_spec.rb +86 -1
  165. data/spec/integration/sdam_events_spec.rb +8 -7
  166. data/spec/integration/server_selection_spec.rb +36 -0
  167. data/spec/integration/size_limit_spec.rb +20 -19
  168. data/spec/integration/snappy_compression_spec.rb +25 -0
  169. data/spec/integration/srv_monitoring_spec.rb +39 -4
  170. data/spec/integration/srv_spec.rb +56 -0
  171. data/spec/integration/transactions_examples_spec.rb +23 -7
  172. data/spec/integration/zlib_compression_spec.rb +1 -1
  173. data/spec/integration/zstd_compression_spec.rb +26 -0
  174. data/spec/lite_spec_helper.rb +15 -5
  175. data/spec/mongo/address_spec.rb +16 -12
  176. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  177. data/spec/mongo/auth/ldap_spec.rb +5 -1
  178. data/spec/mongo/auth/scram_negotiation_spec.rb +1 -1
  179. data/spec/mongo/auth/scram_spec.rb +1 -1
  180. data/spec/mongo/auth/user_spec.rb +1 -1
  181. data/spec/mongo/auth/x509/conversation_spec.rb +3 -3
  182. data/spec/mongo/bulk_write_spec.rb +2 -2
  183. data/spec/mongo/caching_cursor_spec.rb +70 -0
  184. data/spec/mongo/client_construction_spec.rb +273 -35
  185. data/spec/mongo/client_encryption_spec.rb +16 -10
  186. data/spec/mongo/client_spec.rb +64 -0
  187. data/spec/mongo/cluster/topology/replica_set_spec.rb +1 -1
  188. data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
  189. data/spec/mongo/cluster/topology/single_spec.rb +15 -6
  190. data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
  191. data/spec/mongo/cluster/topology_spec.rb +1 -1
  192. data/spec/mongo/cluster_spec.rb +6 -18
  193. data/spec/mongo/collection/view/change_stream_resume_spec.rb +1 -1
  194. data/spec/mongo/collection/view/explainable_spec.rb +87 -4
  195. data/spec/mongo/collection/view/map_reduce_spec.rb +2 -0
  196. data/spec/mongo/collection/view/readable_spec.rb +50 -0
  197. data/spec/mongo/collection_crud_spec.rb +4357 -0
  198. data/spec/mongo/collection_ddl_spec.rb +534 -0
  199. data/spec/mongo/collection_spec.rb +5 -4787
  200. data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
  201. data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
  202. data/spec/mongo/crypt/binary_spec.rb +1 -6
  203. data/spec/mongo/crypt/binding/binary_spec.rb +1 -6
  204. data/spec/mongo/crypt/binding/context_spec.rb +2 -7
  205. data/spec/mongo/crypt/binding/helpers_spec.rb +1 -6
  206. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +2 -7
  207. data/spec/mongo/crypt/binding/status_spec.rb +1 -6
  208. data/spec/mongo/crypt/binding/version_spec.rb +1 -6
  209. data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
  210. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
  211. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +1 -1
  212. data/spec/mongo/crypt/status_spec.rb +1 -6
  213. data/spec/mongo/database_spec.rb +174 -4
  214. data/spec/mongo/error/bulk_write_error_spec.rb +3 -3
  215. data/spec/mongo/error/no_server_available_spec.rb +1 -1
  216. data/spec/mongo/error/parser_spec.rb +37 -6
  217. data/spec/mongo/index/view_spec.rb +8 -2
  218. data/spec/mongo/logger_spec.rb +13 -11
  219. data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
  220. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
  221. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
  222. data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
  223. data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
  224. data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
  225. data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
  226. data/spec/mongo/operation/aggregate_spec.rb +2 -1
  227. data/spec/mongo/operation/collections_info_spec.rb +4 -1
  228. data/spec/mongo/operation/command_spec.rb +6 -3
  229. data/spec/mongo/operation/create_index_spec.rb +6 -3
  230. data/spec/mongo/operation/create_user_spec.rb +6 -3
  231. data/spec/mongo/operation/delete/bulk_spec.rb +9 -6
  232. data/spec/mongo/operation/delete/op_msg_spec.rb +3 -3
  233. data/spec/mongo/operation/delete_spec.rb +11 -7
  234. data/spec/mongo/operation/drop_index_spec.rb +6 -2
  235. data/spec/mongo/operation/find/legacy_spec.rb +3 -1
  236. data/spec/mongo/operation/get_more_spec.rb +3 -1
  237. data/spec/mongo/operation/indexes_spec.rb +5 -1
  238. data/spec/mongo/operation/insert/bulk_spec.rb +10 -7
  239. data/spec/mongo/operation/insert/command_spec.rb +2 -2
  240. data/spec/mongo/operation/insert/op_msg_spec.rb +3 -3
  241. data/spec/mongo/operation/insert_spec.rb +15 -12
  242. data/spec/mongo/operation/map_reduce_spec.rb +5 -2
  243. data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
  244. data/spec/mongo/operation/remove_user_spec.rb +6 -3
  245. data/spec/mongo/operation/result_spec.rb +1 -1
  246. data/spec/mongo/operation/update/bulk_spec.rb +9 -6
  247. data/spec/mongo/operation/update/command_spec.rb +2 -2
  248. data/spec/mongo/operation/update/op_msg_spec.rb +3 -3
  249. data/spec/mongo/operation/update_spec.rb +10 -7
  250. data/spec/mongo/operation/update_user_spec.rb +4 -1
  251. data/spec/mongo/protocol/compressed_spec.rb +26 -12
  252. data/spec/mongo/query_cache_middleware_spec.rb +55 -0
  253. data/spec/mongo/query_cache_spec.rb +280 -0
  254. data/spec/mongo/retryable_spec.rb +3 -2
  255. data/spec/mongo/server/app_metadata_shared.rb +2 -2
  256. data/spec/mongo/server/app_metadata_spec.rb +2 -0
  257. data/spec/mongo/server/connection_pool/populator_spec.rb +3 -1
  258. data/spec/mongo/server/connection_pool_spec.rb +8 -4
  259. data/spec/mongo/server/connection_spec.rb +39 -25
  260. data/spec/mongo/server/description_spec.rb +18 -0
  261. data/spec/mongo/server/monitor/connection_spec.rb +17 -7
  262. data/spec/mongo/server/monitor_spec.rb +9 -1
  263. data/spec/mongo/server_selector_spec.rb +2 -2
  264. data/spec/mongo/server_spec.rb +15 -2
  265. data/spec/mongo/socket/ssl_spec.rb +44 -4
  266. data/spec/mongo/socket_spec.rb +2 -2
  267. data/spec/mongo/tls_context_hooks_spec.rb +37 -0
  268. data/spec/mongo/uri/srv_protocol_spec.rb +64 -33
  269. data/spec/mongo/uri_option_parsing_spec.rb +11 -11
  270. data/spec/mongo/uri_spec.rb +68 -41
  271. data/spec/mongo/utils_spec.rb +39 -0
  272. data/spec/runners/auth.rb +3 -0
  273. data/spec/runners/change_streams/test.rb +1 -1
  274. data/spec/runners/connection_string.rb +31 -124
  275. data/spec/runners/crud/requirement.rb +40 -3
  276. data/spec/runners/crud/test_base.rb +0 -19
  277. data/spec/runners/crud/verifier.rb +8 -0
  278. data/spec/runners/server_selection.rb +1 -1
  279. data/spec/runners/transactions/operation.rb +13 -2
  280. data/spec/runners/transactions/test.rb +3 -2
  281. data/spec/runners/unified.rb +96 -0
  282. data/spec/runners/unified/assertions.rb +249 -0
  283. data/spec/runners/unified/change_stream_operations.rb +26 -0
  284. data/spec/runners/unified/crud_operations.rb +199 -0
  285. data/spec/runners/unified/ddl_operations.rb +96 -0
  286. data/spec/runners/unified/entity_map.rb +39 -0
  287. data/spec/runners/unified/error.rb +25 -0
  288. data/spec/runners/unified/event_subscriber.rb +91 -0
  289. data/spec/runners/unified/exceptions.rb +21 -0
  290. data/spec/runners/unified/grid_fs_operations.rb +55 -0
  291. data/spec/runners/unified/support_operations.rb +250 -0
  292. data/spec/runners/unified/test.rb +393 -0
  293. data/spec/runners/unified/test_group.rb +28 -0
  294. data/spec/runners/unified/using_hash.rb +31 -0
  295. data/spec/shared/LICENSE +20 -0
  296. data/spec/shared/bin/get-mongodb-download-url +17 -0
  297. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  298. data/spec/shared/lib/mrss/cluster_config.rb +218 -0
  299. data/spec/shared/lib/mrss/constraints.rb +346 -0
  300. data/spec/shared/lib/mrss/docker_runner.rb +262 -0
  301. data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
  302. data/spec/shared/lib/mrss/server_version_registry.rb +112 -0
  303. data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
  304. data/spec/shared/lib/mrss/utils.rb +15 -0
  305. data/spec/shared/share/Dockerfile.erb +231 -0
  306. data/spec/shared/shlib/distro.sh +73 -0
  307. data/spec/shared/shlib/server.sh +290 -0
  308. data/spec/shared/shlib/set_env.sh +128 -0
  309. data/spec/solo/clean_exit_spec.rb +21 -0
  310. data/spec/spec_helper.rb +7 -2
  311. data/spec/spec_tests/cmap_spec.rb +7 -3
  312. data/spec/spec_tests/crud_unified_spec.rb +10 -0
  313. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -1
  314. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -2
  315. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +6 -2
  316. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +3 -0
  317. data/spec/spec_tests/data/connection_string/valid-warnings.yml +24 -0
  318. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +267 -0
  319. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +60 -0
  320. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount.yml → estimatedDocumentCount-pre4.9.yml} +2 -0
  321. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +146 -0
  322. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors.yml → estimatedDocumentCount-serverErrors-pre4.9.yml} +2 -0
  323. data/spec/spec_tests/data/retryable_reads/listIndexNames.yml +1 -1
  324. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -3
  325. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +2 -2
  326. data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +2 -2
  327. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  328. data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +2 -2
  329. data/spec/spec_tests/data/unified/valid-fail/operation-failure.yml +31 -0
  330. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +220 -0
  331. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +102 -0
  332. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +184 -0
  333. data/spec/spec_tests/data/unified/valid-pass/poc-gridfs.yml +155 -0
  334. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +193 -0
  335. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +210 -0
  336. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +215 -0
  337. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +235 -0
  338. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +169 -0
  339. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +170 -0
  340. data/spec/spec_tests/data/uri_options/auth-options.yml +25 -0
  341. data/spec/spec_tests/data/uri_options/compression-options.yml +7 -4
  342. data/spec/spec_tests/data/uri_options/read-preference-options.yml +24 -0
  343. data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +1 -0
  344. data/spec/spec_tests/data/uri_options/tls-options.yml +160 -4
  345. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +416 -0
  346. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +409 -0
  347. data/spec/spec_tests/data/versioned_api/runcommand-helper-no-api-version-declared.yml +67 -0
  348. data/spec/spec_tests/data/versioned_api/test-commands-deprecation-errors.yml +47 -0
  349. data/spec/spec_tests/data/versioned_api/test-commands-strict-mode.yml +44 -0
  350. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +180 -0
  351. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +9 -1
  352. data/spec/spec_tests/unified_spec.rb +15 -0
  353. data/spec/spec_tests/uri_options_spec.rb +47 -33
  354. data/spec/spec_tests/versioned_api_spec.rb +10 -0
  355. data/spec/stress/fork_reconnect_stress_spec.rb +1 -1
  356. data/spec/support/certificates/atlas-ocsp-ca.crt +28 -0
  357. data/spec/support/certificates/atlas-ocsp.crt +41 -0
  358. data/spec/support/client_registry_macros.rb +11 -2
  359. data/spec/support/common_shortcuts.rb +59 -0
  360. data/spec/support/constraints.rb +6 -253
  361. data/spec/support/matchers.rb +16 -0
  362. data/spec/support/ocsp +1 -0
  363. data/spec/support/session_registry.rb +52 -0
  364. data/spec/support/shared/session.rb +2 -2
  365. data/spec/support/spec_config.rb +68 -3
  366. data/spec/support/spec_setup.rb +48 -38
  367. data/spec/support/utils.rb +102 -4
  368. metadata +1087 -936
  369. metadata.gz.sig +0 -0
  370. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +0 -56
  371. data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +0 -47
  372. data/spec/support/child_process_helper.rb +0 -78
  373. data/spec/support/cluster_config.rb +0 -207
  374. data/spec/support/lite_constraints.rb +0 -141
  375. data/spec/support/spec_organizer.rb +0 -129
@@ -305,7 +305,8 @@ describe Mongo::Index::View do
305
305
  { key: { testing: -1 }, unique: true },
306
306
  { commit_quorum: 'unsupported-value' }
307
307
  )
308
- end.to raise_error(Mongo::Error::OperationFailure, /Commit quorum cannot be satisfied with the current replica set configuration/)
308
+ # 4.4.4 changed the text of the error message
309
+ end.to raise_error(Mongo::Error::OperationFailure, /Commit quorum cannot be satisfied with the current replica set configuration|No write concern mode named 'unsupported-value' found in replica set configuration/)
309
310
  end
310
311
  end
311
312
  end
@@ -649,6 +650,8 @@ describe Mongo::Index::View do
649
650
  end
650
651
 
651
652
  context 'when using bucket option' do
653
+ # Option is removed in 4.9
654
+ max_server_version '4.7'
652
655
 
653
656
  let(:spec) do
654
657
  { 'any' => 1 }
@@ -755,6 +758,8 @@ describe Mongo::Index::View do
755
758
  end
756
759
 
757
760
  context 'when using bucket option' do
761
+ # Option is removed in 4.9
762
+ max_server_version '4.7'
758
763
 
759
764
  let(:spec) do
760
765
  { 'any' => 1 }
@@ -964,7 +969,8 @@ describe Mongo::Index::View do
964
969
  it 'raises an exception' do
965
970
  expect do
966
971
  view.create_one({ 'x' => 1 }, commit_quorum: 'unsupported-value')
967
- end.to raise_error(Mongo::Error::OperationFailure, /Commit quorum cannot be satisfied with the current replica set configuration/)
972
+ # 4.4.4 changed the text of the error message
973
+ end.to raise_error(Mongo::Error::OperationFailure, /Commit quorum cannot be satisfied with the current replica set configuration|No write concern mode named 'unsupported-value' found in replica set configuration/)
968
974
  end
969
975
  end
970
976
  end
@@ -6,6 +6,16 @@ describe Mongo::Logger do
6
6
  described_class.logger
7
7
  end
8
8
 
9
+ around do |example|
10
+ saved_logger = Mongo::Logger.logger
11
+
12
+ begin
13
+ example.run
14
+ ensure
15
+ Mongo::Logger.logger = saved_logger
16
+ end
17
+ end
18
+
9
19
  describe '.logger' do
10
20
 
11
21
  context 'when no logger has been set' do
@@ -18,25 +28,21 @@ describe Mongo::Logger do
18
28
  Mongo::Logger.logger = nil
19
29
  end
20
30
 
21
- after do
22
- Mongo::Logger.logger = test_logger
23
- end
24
-
25
31
  it 'returns the default logger' do
26
- expect(logger.level).to eq(Logger::DEBUG)
32
+ expect(logger.level).to eq(Logger::INFO)
27
33
  end
28
34
  end
29
35
 
30
36
  context 'when a logger has been set' do
31
37
 
32
38
  let(:info) do
33
- Logger.new($stdout).tap do |log|
39
+ Logger.new(STDOUT).tap do |log|
34
40
  log.level = Logger::INFO
35
41
  end
36
42
  end
37
43
 
38
44
  let(:debug) do
39
- Logger.new($stdout).tap do |log|
45
+ Logger.new(STDOUT).tap do |log|
40
46
  log.level = Logger::DEBUG
41
47
  end
42
48
  end
@@ -45,10 +51,6 @@ describe Mongo::Logger do
45
51
  described_class.logger = debug
46
52
  end
47
53
 
48
- after do
49
- described_class.logger = info
50
- end
51
-
52
54
  it 'returns the provided logger' do
53
55
  expect(logger.level).to eq(Logger::DEBUG)
54
56
  end
@@ -24,7 +24,7 @@ describe Mongo::Monitoring::Event::ServerClosed do
24
24
  end
25
25
 
26
26
  describe '#summary' do
27
- skip_if_linting
27
+ require_no_linting
28
28
 
29
29
  it 'renders correctly' do
30
30
  expect(topology).to receive(:server_descriptions).and_return({
@@ -20,7 +20,7 @@ describe Mongo::Monitoring::Event::ServerHeartbeatFailed do
20
20
  end
21
21
 
22
22
  let(:event) do
23
- described_class.new(address, 1, Mongo::Error::SocketError.new('foo'))
23
+ described_class.new(address, 1, Mongo::Error::SocketError.new('foo'), started_event: nil)
24
24
  end
25
25
 
26
26
  describe '#summary' do
@@ -20,7 +20,7 @@ describe Mongo::Monitoring::Event::ServerHeartbeatSucceeded do
20
20
  end
21
21
 
22
22
  let(:event) do
23
- described_class.new(address, 1)
23
+ described_class.new(address, 1, started_event: nil)
24
24
  end
25
25
 
26
26
  describe '#summary' do
@@ -24,7 +24,7 @@ describe Mongo::Monitoring::Event::ServerOpening do
24
24
  end
25
25
 
26
26
  describe '#summary' do
27
- skip_if_linting
27
+ require_no_linting
28
28
 
29
29
  it 'renders correctly' do
30
30
  expect(topology).to receive(:server_descriptions).and_return({
@@ -28,7 +28,7 @@ describe Mongo::Monitoring::Event::TopologyChanged do
28
28
  end
29
29
 
30
30
  describe '#summary' do
31
- skip_if_linting
31
+ require_no_linting
32
32
 
33
33
  it 'renders correctly' do
34
34
  expect(prev_topology).to receive(:server_descriptions).and_return({
@@ -24,7 +24,7 @@ describe Mongo::Monitoring::Event::TopologyClosed do
24
24
  end
25
25
 
26
26
  describe '#summary' do
27
- skip_if_linting
27
+ require_no_linting
28
28
 
29
29
  it 'renders correctly' do
30
30
  expect(topology).to receive(:server_descriptions).and_return({
@@ -24,7 +24,7 @@ describe Mongo::Monitoring::Event::TopologyOpening do
24
24
  end
25
25
 
26
26
  describe '#summary' do
27
- skip_if_linting
27
+ require_no_linting
28
28
 
29
29
  it 'renders correctly' do
30
30
  expect(topology).to receive(:server_descriptions).and_return({
@@ -19,6 +19,7 @@ describe Mongo::Operation::Aggregate do
19
19
  end
20
20
  let(:op) { described_class.new(spec) }
21
21
 
22
+ let(:context) { Mongo::Operation::Context.new }
22
23
 
23
24
  describe '#initialize' do
24
25
 
@@ -64,7 +65,7 @@ describe Mongo::Operation::Aggregate do
64
65
 
65
66
  it 'raises an exception' do
66
67
  expect {
67
- op.execute(authorized_primary, client: nil)
68
+ op.execute(authorized_primary, context: context)
68
69
  }.to raise_error(Mongo::Error::OperationFailure)
69
70
  end
70
71
  end
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mongo::Operation::CollectionsInfo do
4
+ require_no_required_api_version
4
5
 
5
6
  let(:spec) do
6
7
  { selector: { listCollections: 1 },
@@ -16,6 +17,8 @@ describe Mongo::Operation::CollectionsInfo do
16
17
  described_class.new(spec)
17
18
  end
18
19
 
20
+ let(:context) { Mongo::Operation::Context.new }
21
+
19
22
  describe '#execute' do
20
23
 
21
24
  before do
@@ -31,7 +34,7 @@ describe Mongo::Operation::CollectionsInfo do
31
34
  end
32
35
 
33
36
  let(:info) do
34
- docs = op.execute(authorized_primary, client: nil).documents
37
+ docs = op.execute(authorized_primary, context: context).documents
35
38
  docs.collect { |info| info['name'].sub("#{SpecConfig.instance.test_db}.", '') }
36
39
  end
37
40
 
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mongo::Operation::Command do
4
+ require_no_required_api_version
4
5
 
5
6
  let(:selector) { { :ismaster => 1 } }
6
7
  let(:options) { { :limit => -1 } }
@@ -12,6 +13,8 @@ describe Mongo::Operation::Command do
12
13
  end
13
14
  let(:op) { described_class.new(spec) }
14
15
 
16
+ let(:context) { Mongo::Operation::Context.new }
17
+
15
18
  describe '#initialize' do
16
19
 
17
20
  it 'sets the spec' do
@@ -43,7 +46,7 @@ describe Mongo::Operation::Command do
43
46
  context 'when the command succeeds' do
44
47
 
45
48
  let(:response) do
46
- op.execute(authorized_primary, client: nil)
49
+ op.execute(authorized_primary, context: context)
47
50
  end
48
51
 
49
52
  it 'returns the reponse' do
@@ -59,7 +62,7 @@ describe Mongo::Operation::Command do
59
62
 
60
63
  it 'raises an exception' do
61
64
  expect {
62
- op.execute(authorized_primary, client: nil)
65
+ op.execute(authorized_primary, context: context)
63
66
  }.to raise_error(Mongo::Error::OperationFailure)
64
67
  end
65
68
  end
@@ -72,7 +75,7 @@ describe Mongo::Operation::Command do
72
75
 
73
76
  it 'raises an error' do
74
77
  expect {
75
- op.execute(authorized_primary, client: nil)
78
+ op.execute(authorized_primary, context: context)
76
79
  }.to raise_error(Mongo::Error::MaxBSONSize)
77
80
  end
78
81
  end
@@ -1,6 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mongo::Operation::CreateIndex do
4
+ require_no_required_api_version
5
+
6
+ let(:context) { Mongo::Operation::Context.new }
4
7
 
5
8
  before do
6
9
  authorized_collection.drop
@@ -20,7 +23,7 @@ describe Mongo::Operation::CreateIndex do
20
23
  end
21
24
 
22
25
  let(:response) do
23
- operation.execute(authorized_primary, client: nil)
26
+ operation.execute(authorized_primary, context: context)
24
27
  end
25
28
 
26
29
  it 'returns ok' do
@@ -43,12 +46,12 @@ describe Mongo::Operation::CreateIndex do
43
46
  end
44
47
 
45
48
  before do
46
- operation.execute(authorized_primary, client: nil)
49
+ operation.execute(authorized_primary, context: context)
47
50
  end
48
51
 
49
52
  it 'raises an exception' do
50
53
  expect {
51
- second_operation.execute(authorized_primary, client: nil)
54
+ second_operation.execute(authorized_primary, context: context)
52
55
  }.to raise_error(Mongo::Error::OperationFailure)
53
56
  end
54
57
  end
@@ -1,6 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mongo::Operation::CreateUser do
4
+ require_no_required_api_version
5
+
6
+ let(:context) { Mongo::Operation::Context.new }
4
7
 
5
8
  describe '#execute' do
6
9
 
@@ -26,7 +29,7 @@ describe Mongo::Operation::CreateUser do
26
29
  context 'when user creation was successful' do
27
30
 
28
31
  let!(:response) do
29
- operation.execute(root_authorized_primary, client: nil)
32
+ operation.execute(root_authorized_primary, context: context)
30
33
  end
31
34
 
32
35
  it 'saves the user in the database' do
@@ -38,8 +41,8 @@ describe Mongo::Operation::CreateUser do
38
41
 
39
42
  it 'raises an exception' do
40
43
  expect {
41
- operation.execute(root_authorized_primary, client: nil)
42
- operation.execute(root_authorized_primary, client: nil)
44
+ operation.execute(root_authorized_primary, context: context)
45
+ operation.execute(root_authorized_primary, context: context)
43
46
  }.to raise_error(Mongo::Error::OperationFailure)
44
47
  end
45
48
  end
@@ -1,6 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mongo::Operation::Delete do
4
+ require_no_required_api_version
5
+
6
+ let(:context) { Mongo::Operation::Context.new }
4
7
 
5
8
  let(:documents) do
6
9
  [ { 'q' => { foo: 1 }, 'limit' => 1 } ]
@@ -100,7 +103,7 @@ describe Mongo::Operation::Delete do
100
103
 
101
104
  it 'deletes the document from the database' do
102
105
  authorized_primary.with_connection do |connection|
103
- op.bulk_execute(connection, client: nil)
106
+ op.bulk_execute(connection, context: context)
104
107
  end
105
108
  expect(authorized_collection.find.count).to eq(1)
106
109
  end
@@ -125,7 +128,7 @@ describe Mongo::Operation::Delete do
125
128
 
126
129
  it 'deletes the documents from the database' do
127
130
  authorized_primary.with_connection do |connection|
128
- op.bulk_execute(connection, client: nil)
131
+ op.bulk_execute(connection, context: context)
129
132
  end
130
133
  expect(authorized_collection.find.count).to eq(0)
131
134
  end
@@ -162,7 +165,7 @@ describe Mongo::Operation::Delete do
162
165
 
163
166
  it 'aborts after first error' do
164
167
  authorized_primary.with_connection do |connection|
165
- failing_delete.bulk_execute(connection, client: nil)
168
+ failing_delete.bulk_execute(connection, context: context)
166
169
  end
167
170
  expect(authorized_collection.find.count).to eq(2)
168
171
  end
@@ -176,7 +179,7 @@ describe Mongo::Operation::Delete do
176
179
 
177
180
  it 'aborts after first error' do
178
181
  authorized_primary.with_connection do |connection|
179
- failing_delete.bulk_execute(connection, client: nil)
182
+ failing_delete.bulk_execute(connection, context: context)
180
183
  end
181
184
  expect(authorized_collection.find.count).to eq(2)
182
185
  end
@@ -214,7 +217,7 @@ describe Mongo::Operation::Delete do
214
217
 
215
218
  it 'does not abort after first error' do
216
219
  authorized_primary.with_connection do |connection|
217
- failing_delete.bulk_execute(connection, client: nil)
220
+ failing_delete.bulk_execute(connection, context: context)
218
221
  end
219
222
  expect(authorized_collection.find.count).to eq(1)
220
223
  end
@@ -228,7 +231,7 @@ describe Mongo::Operation::Delete do
228
231
 
229
232
  it 'does not abort after first error' do
230
233
  authorized_primary.with_connection do |connection|
231
- failing_delete.bulk_execute(connection, client: nil)
234
+ failing_delete.bulk_execute(connection, context: context)
232
235
  end
233
236
  expect(authorized_collection.find.count).to eq(1)
234
237
  end
@@ -72,7 +72,7 @@ describe Mongo::Operation::Delete::OpMsg do
72
72
 
73
73
  describe 'write concern' do
74
74
  # https://jira.mongodb.org/browse/RUBY-2224
75
- skip_if_linting
75
+ require_no_linting
76
76
 
77
77
  context 'when write concern is not specified' do
78
78
 
@@ -99,7 +99,7 @@ describe Mongo::Operation::Delete::OpMsg do
99
99
 
100
100
  describe '#message' do
101
101
  # https://jira.mongodb.org/browse/RUBY-2224
102
- skip_if_linting
102
+ require_no_linting
103
103
 
104
104
  context 'when the server supports OP_MSG' do
105
105
 
@@ -152,7 +152,7 @@ describe Mongo::Operation::Delete::OpMsg do
152
152
 
153
153
  context 'when an implicit session is created and the topology is then updated and the server does not support sessions' do
154
154
  # Mocks on features are incompatible with linting
155
- skip_if_linting
155
+ require_no_linting
156
156
 
157
157
  let(:expected_global_args) do
158
158
  global_args.dup.tap do |args|
@@ -1,6 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mongo::Operation::Delete do
4
+ require_no_required_api_version
5
+
4
6
  before do
5
7
  begin
6
8
  authorized_collection.delete_many
@@ -30,6 +32,8 @@ describe Mongo::Operation::Delete do
30
32
 
31
33
  let(:op) { described_class.new(spec) }
32
34
 
35
+ let(:context) { Mongo::Operation::Context.new }
36
+
33
37
  describe '#initialize' do
34
38
 
35
39
  context 'spec' do
@@ -103,7 +107,7 @@ describe Mongo::Operation::Delete do
103
107
  end
104
108
 
105
109
  let(:result) do
106
- delete.execute(authorized_primary, client: nil)
110
+ delete.execute(authorized_primary, context: context)
107
111
  end
108
112
 
109
113
  it 'deletes the documents from the database' do
@@ -123,7 +127,7 @@ describe Mongo::Operation::Delete do
123
127
 
124
128
  it 'raises an exception' do
125
129
  expect {
126
- delete.execute(authorized_primary, client: nil)
130
+ delete.execute(authorized_primary, context: context)
127
131
  }.to raise_error(Mongo::Error::OperationFailure)
128
132
  end
129
133
  end
@@ -147,7 +151,7 @@ describe Mongo::Operation::Delete do
147
151
  end
148
152
 
149
153
  let(:result) do
150
- delete.execute(authorized_primary, client: nil)
154
+ delete.execute(authorized_primary, context: context)
151
155
  end
152
156
 
153
157
  it 'deletes the documents from the database' do
@@ -166,13 +170,13 @@ describe Mongo::Operation::Delete do
166
170
  end
167
171
 
168
172
  let(:result) do
169
- delete.execute(authorized_primary, client: nil)
173
+ delete.execute(authorized_primary, context: context)
170
174
  end
171
175
 
172
176
  it 'does not delete any documents' do
173
177
 
174
178
  expect {
175
- op.execute(authorized_primary, client: nil)
179
+ op.execute(authorized_primary, context: context)
176
180
  }.to raise_error(Mongo::Error::OperationFailure)
177
181
 
178
182
  expect(authorized_collection.find.count).to eq(2)
@@ -187,7 +191,7 @@ describe Mongo::Operation::Delete do
187
191
 
188
192
  it 'raises an error' do
189
193
  expect {
190
- op.execute(authorized_primary, client: nil)
194
+ op.execute(authorized_primary, context: context)
191
195
  }.to raise_error(Mongo::Error::MaxBSONSize)
192
196
  end
193
197
  end
@@ -211,7 +215,7 @@ describe Mongo::Operation::Delete do
211
215
  end
212
216
 
213
217
  let(:result) do
214
- delete.execute(authorized_primary, client: nil)
218
+ delete.execute(authorized_primary, context: context)
215
219
  end
216
220
 
217
221
  before do