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
@@ -0,0 +1,47 @@
1
+ description: "Test commands: deprecation errors"
2
+
3
+ schemaVersion: "1.1"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.9"
7
+ serverParameters:
8
+ enableTestCommands: true
9
+ acceptAPIVersion2: true
10
+ requireApiVersion: false
11
+
12
+ createEntities:
13
+ - client:
14
+ id: &client client
15
+ observeEvents:
16
+ - commandStartedEvent
17
+ # This client is configured without a declared API version, as we cannot
18
+ # declare an unknown API version.
19
+ - database:
20
+ id: &database database
21
+ client: *client
22
+ databaseName: &databaseName versioned-api-tests
23
+
24
+ tests:
25
+ - description: "Running a command that is deprecated raises a deprecation error"
26
+ operations:
27
+ - name: runCommand
28
+ object: *database
29
+ arguments:
30
+ commandName: testDeprecationInVersion2
31
+ command:
32
+ testDeprecationInVersion2: 1
33
+ apiVersion: "2"
34
+ apiDeprecationErrors: true
35
+ expectError:
36
+ isError: true
37
+ errorContains: "command testDeprecationInVersion2 is deprecated in API Version 2"
38
+ errorCodeName: "APIDeprecationError"
39
+ expectEvents:
40
+ - client: *client
41
+ events:
42
+ - commandStartedEvent:
43
+ command:
44
+ testDeprecationInVersion2: 1
45
+ apiVersion: "2"
46
+ apiStrict: { $$exists: false }
47
+ apiDeprecationErrors: true
@@ -0,0 +1,44 @@
1
+ description: "Test commands: strict mode"
2
+
3
+ schemaVersion: "1.1"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.9"
7
+ serverParameters:
8
+ enableTestCommands: true
9
+
10
+ createEntities:
11
+ - client:
12
+ id: &client client
13
+ observeEvents:
14
+ - commandStartedEvent
15
+ serverApi:
16
+ version: "1"
17
+ strict: true
18
+ - database:
19
+ id: &database database
20
+ client: *client
21
+ databaseName: &databaseName versioned-api-tests
22
+
23
+ tests:
24
+ - description: "Running a command that is not part of the versioned API results in an error"
25
+ operations:
26
+ - name: runCommand
27
+ object: *database
28
+ arguments:
29
+ commandName: testVersion2
30
+ command:
31
+ testVersion2: 1
32
+ expectError:
33
+ isError: true
34
+ errorContains: "command testVersion2 is not in API Version 1"
35
+ errorCodeName: "APIStrictError"
36
+ expectEvents:
37
+ - client: *client
38
+ events:
39
+ - commandStartedEvent:
40
+ command:
41
+ testVersion2: 1
42
+ apiVersion: "1"
43
+ apiStrict: true
44
+ apiDeprecationErrors: { $$unsetOrMatches: false }
@@ -0,0 +1,180 @@
1
+ description: "Transaction handling"
2
+
3
+ schemaVersion: "1.1"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.9"
7
+ topologies: [ replicaset, sharded-replicaset ]
8
+
9
+ createEntities:
10
+ - client:
11
+ id: &client client
12
+ observeEvents:
13
+ - commandStartedEvent
14
+ serverApi:
15
+ version: "1"
16
+ - database:
17
+ id: &database database
18
+ client: *client
19
+ databaseName: &databaseName versioned-api-tests
20
+ - collection:
21
+ id: &collection collection
22
+ database: *database
23
+ collectionName: &collectionName test
24
+ - session:
25
+ id: &session session
26
+ client: *client
27
+
28
+ _yamlAnchors:
29
+ versions:
30
+ - &expectedApiVersion
31
+ apiVersion: "1"
32
+ apiStrict: { $$unsetOrMatches: false }
33
+ apiDeprecationErrors: { $$unsetOrMatches: false }
34
+ - &noApiVersion
35
+ apiVersion: { $$exists: false }
36
+ apiStrict: { $$exists: false }
37
+ apiDeprecationErrors: { $$exists: false }
38
+
39
+
40
+ initialData:
41
+ - collectionName: *collectionName
42
+ databaseName: *databaseName
43
+ documents:
44
+ - { _id: 1, x: 11 }
45
+ - { _id: 2, x: 22 }
46
+ - { _id: 3, x: 33 }
47
+ - { _id: 4, x: 44 }
48
+ - { _id: 5, x: 55 }
49
+
50
+ tests:
51
+ - description: "Only the first command in a transaction declares an API version"
52
+ runOnRequirements:
53
+ - topologies: [ replicaset, sharded-replicaset ]
54
+ operations:
55
+ - name: startTransaction
56
+ object: *session
57
+ - name: insertOne
58
+ object: *collection
59
+ arguments:
60
+ session: *session
61
+ document: { _id: 6, x: 66 }
62
+ expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 6 } } }
63
+ - name: insertOne
64
+ object: *collection
65
+ arguments:
66
+ session: *session
67
+ document: { _id: 7, x: 77 }
68
+ expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 7 } } }
69
+ - name: commitTransaction
70
+ object: *session
71
+ expectEvents:
72
+ - client: *client
73
+ events:
74
+ - commandStartedEvent:
75
+ command:
76
+ insert: *collectionName
77
+ documents: [ { _id: 6, x: 66 } ]
78
+ lsid: { $$sessionLsid: *session }
79
+ startTransaction: true
80
+ <<: *expectedApiVersion
81
+ - commandStartedEvent:
82
+ command:
83
+ insert: *collectionName
84
+ documents: [ { _id: 7, x: 77 } ]
85
+ lsid: { $$sessionLsid: *session }
86
+ <<: *noApiVersion
87
+ - commandStartedEvent:
88
+ command:
89
+ commitTransaction: 1
90
+ lsid: { $$sessionLsid: *session }
91
+ <<: *noApiVersion
92
+ - description: "Committing a transaction twice does not append server API options"
93
+ runOnRequirements:
94
+ - topologies: [ replicaset, sharded-replicaset ]
95
+ operations:
96
+ - name: startTransaction
97
+ object: *session
98
+ - name: insertOne
99
+ object: *collection
100
+ arguments:
101
+ session: *session
102
+ document: { _id: 6, x: 66 }
103
+ expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 6 } } }
104
+ - name: insertOne
105
+ object: *collection
106
+ arguments:
107
+ session: *session
108
+ document: { _id: 7, x: 77 }
109
+ expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 7 } } }
110
+ - name: commitTransaction
111
+ object: *session
112
+ - name: commitTransaction
113
+ object: *session
114
+ expectEvents:
115
+ - client: *client
116
+ events:
117
+ - commandStartedEvent:
118
+ command:
119
+ insert: *collectionName
120
+ documents: [ { _id: 6, x: 66 } ]
121
+ lsid: { $$sessionLsid: *session }
122
+ startTransaction: true
123
+ <<: *expectedApiVersion
124
+ - commandStartedEvent:
125
+ command:
126
+ insert: *collectionName
127
+ documents: [ { _id: 7, x: 77 } ]
128
+ lsid: { $$sessionLsid: *session }
129
+ <<: *noApiVersion
130
+ - commandStartedEvent:
131
+ command:
132
+ commitTransaction: 1
133
+ lsid: { $$sessionLsid: *session }
134
+ <<: *noApiVersion
135
+ - commandStartedEvent:
136
+ command:
137
+ commitTransaction: 1
138
+ lsid: { $$sessionLsid: *session }
139
+ <<: *noApiVersion
140
+ - description: "abortTransaction does not include an API version"
141
+ runOnRequirements:
142
+ - topologies: [ replicaset, sharded-replicaset ]
143
+ operations:
144
+ - name: startTransaction
145
+ object: *session
146
+ - name: insertOne
147
+ object: *collection
148
+ arguments:
149
+ session: *session
150
+ document: { _id: 6, x: 66 }
151
+ expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 6 } } }
152
+ - name: insertOne
153
+ object: *collection
154
+ arguments:
155
+ session: *session
156
+ document: { _id: 7, x: 77 }
157
+ expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 7 } } }
158
+ - name: abortTransaction
159
+ object: *session
160
+ expectEvents:
161
+ - client: *client
162
+ events:
163
+ - commandStartedEvent:
164
+ command:
165
+ insert: *collectionName
166
+ documents: [ { _id: 6, x: 66 } ]
167
+ lsid: { $$sessionLsid: *session }
168
+ startTransaction: true
169
+ <<: *expectedApiVersion
170
+ - commandStartedEvent:
171
+ command:
172
+ insert: *collectionName
173
+ documents: [ { _id: 7, x: 77 } ]
174
+ lsid: { $$sessionLsid: *session }
175
+ <<: *noApiVersion
176
+ - commandStartedEvent:
177
+ command:
178
+ abortTransaction: 1
179
+ lsid: { $$sessionLsid: *session }
180
+ <<: *noApiVersion
@@ -60,7 +60,15 @@ describe 'DNS Seedlist Discovery' do
60
60
  end
61
61
 
62
62
  it 'creates a client with the correct options' do
63
- expect(test.client).to match_options(test)
63
+ mapped = Mongo::URI::OptionsMapper.new.ruby_to_smc(test.client.options)
64
+ # Connection string spec tests do not use canonical URI option names
65
+ actual = Utils.downcase_keys(mapped)
66
+ expected = Utils.downcase_keys(test.options)
67
+ # SRV tests use ssl URI option instead of tls one
68
+ if expected.key?('ssl') && !expected.key?('tls')
69
+ expected['tls'] = expected.delete('ssl')
70
+ end
71
+ actual.should == expected
64
72
  end
65
73
  end
66
74
  end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ require 'runners/unified'
4
+
5
+ base = "#{CURRENT_PATH}/spec_tests/data/unified"
6
+ PASS_UNIFIED_TESTS = Dir.glob("#{base}/valid-pass/**/*.yml").sort
7
+ FAIL_UNIFIED_TESTS = Dir.glob("#{base}/valid-fail/**/*.yml").sort
8
+
9
+ describe 'Unified spec tests' do
10
+ define_unified_spec_tests(base, PASS_UNIFIED_TESTS)
11
+ end
12
+
13
+ describe 'Unified spec tests - expected failures' do
14
+ define_unified_spec_tests(base, FAIL_UNIFIED_TESTS, expect_failure: true)
15
+ end
@@ -2,7 +2,7 @@ require 'lite_spec_helper'
2
2
 
3
3
  require 'runners/connection_string'
4
4
 
5
- describe 'Uri Options' do
5
+ describe 'URI options' do
6
6
  include Mongo::ConnectionString
7
7
 
8
8
  # Since the tests issue global assertions on Mongo::Logger,
@@ -22,38 +22,22 @@ describe 'Uri Options' do
22
22
  require_mongo_kerberos
23
23
  end
24
24
 
25
- context 'when the uri should warn', if: test.warn? do
25
+ if test.valid?
26
26
 
27
- before do
28
- expect(Mongo::Logger.logger).to receive(:warn)
29
- end
30
-
31
- it 'warns' do
32
- expect(test.client).to be_a(Mongo::Client)
33
- end
34
- end
35
-
36
- context 'when the uri is invalid', unless: test.valid? do
37
-
38
- it 'raises an error' do
39
- expect{
40
- test.uri
41
- }.to raise_exception(Mongo::Error::InvalidURI)
42
- end
43
- end
44
-
45
- context 'when the uri should not warn', if: !test.warn? && test.valid? do
46
-
47
- before do
48
- expect(Mongo::Logger.logger).not_to receive(:warn)
49
- end
50
-
51
- it 'does not raise an exception or warning' do
52
- expect(test.client).to be_a(Mongo::Client)
27
+ # The warning assertion needs to be first because the test caches
28
+ # the client instance, and subsequent examples don't instantiate it
29
+ # again.
30
+ if test.warn?
31
+ it 'warns' do
32
+ expect(Mongo::Logger.logger).to receive(:warn)#.and_call_original
33
+ expect(test.client).to be_a(Mongo::Client)
34
+ end
35
+ else
36
+ it 'does not warn' do
37
+ expect(Mongo::Logger.logger).not_to receive(:warn)
38
+ expect(test.client).to be_a(Mongo::Client)
39
+ end
53
40
  end
54
- end
55
-
56
- context 'when the uri is valid', if: test.valid? do
57
41
 
58
42
  if test.hosts
59
43
  it 'creates a client with the correct hosts' do
@@ -65,8 +49,38 @@ describe 'Uri Options' do
65
49
  expect(test.client).to match_auth(test)
66
50
  end
67
51
 
68
- it 'creates a client with the correct options' do
69
- expect(test.client).to match_options(test)
52
+ if test.options
53
+ if test.options['compressors'] && test.options['compressors'].include?('snappy')
54
+ before do
55
+ unless ENV.fetch('BUNDLE_GEMFILE', '') =~ /snappy/
56
+ skip "This test requires snappy compression"
57
+ end
58
+ end
59
+ end
60
+
61
+ if test.options['compressors'] && test.options['compressors'].include?('zstd')
62
+ before do
63
+ unless ENV.fetch('BUNDLE_GEMFILE', '') =~ /zstd/
64
+ skip "This test requires zstd compression"
65
+ end
66
+ end
67
+ end
68
+
69
+ it 'creates a client with the correct options' do
70
+ mapped = Mongo::URI::OptionsMapper.new.ruby_to_smc(test.client.options)
71
+ expected = Mongo::ConnectionString.adjust_expected_mongo_client_options(
72
+ test.options,
73
+ )
74
+ mapped.should == expected
75
+ end
76
+ end
77
+
78
+ else
79
+
80
+ it 'raises an error' do
81
+ expect{
82
+ test.uri
83
+ }.to raise_exception(Mongo::Error::InvalidURI)
70
84
  end
71
85
  end
72
86
  end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ require 'runners/unified'
4
+
5
+ base = "#{CURRENT_PATH}/spec_tests/data/versioned_api"
6
+ UNIFIED_TESTS = Dir.glob("#{base}/**/*.yml").sort
7
+
8
+ describe 'Versioned API spec tests' do
9
+ define_unified_spec_tests(base, UNIFIED_TESTS)
10
+ end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe 'fork reconnect' do
4
4
  require_fork
5
- only_mri
5
+ require_mri
6
6
 
7
7
  # On multi-shard sharded clusters a succeeding write request does not
8
8
  # guarantee that the next operation will succeed (since it could be sent to
@@ -0,0 +1,28 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIElDCCA3ygAwIBAgIQAf2j627KdciIQ4tyS8+8kTANBgkqhkiG9w0BAQsFADBh
3
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
4
+ d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
5
+ QTAeFw0xMzAzMDgxMjAwMDBaFw0yMzAzMDgxMjAwMDBaME0xCzAJBgNVBAYTAlVT
6
+ MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxJzAlBgNVBAMTHkRpZ2lDZXJ0IFNIQTIg
7
+ U2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
8
+ ANyuWJBNwcQwFZA1W248ghX1LFy949v/cUP6ZCWA1O4Yok3wZtAKc24RmDYXZK83
9
+ nf36QYSvx6+M/hpzTc8zl5CilodTgyu5pnVILR1WN3vaMTIa16yrBvSqXUu3R0bd
10
+ KpPDkC55gIDvEwRqFDu1m5K+wgdlTvza/P96rtxcflUxDOg5B6TXvi/TC2rSsd9f
11
+ /ld0Uzs1gN2ujkSYs58O09rg1/RrKatEp0tYhG2SS4HD2nOLEpdIkARFdRrdNzGX
12
+ kujNVA075ME/OV4uuPNcfhCOhkEAjUVmR7ChZc6gqikJTvOX6+guqw9ypzAO+sf0
13
+ /RR3w6RbKFfCs/mC/bdFWJsCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8C
14
+ AQAwDgYDVR0PAQH/BAQDAgGGMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYY
15
+ aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMHsGA1UdHwR0MHIwN6A1oDOGMWh0dHA6
16
+ Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwN6A1
17
+ oDOGMWh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RD
18
+ QS5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
19
+ d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwHQYDVR0OBBYEFA+AYRyCMWHVLyjnjUY4tCzh
20
+ xtniMB8GA1UdIwQYMBaAFAPeUDVW0Uy7ZvCj4hsbw5eyPdFVMA0GCSqGSIb3DQEB
21
+ CwUAA4IBAQAjPt9L0jFCpbZ+QlwaRMxp0Wi0XUvgBCFsS+JtzLHgl4+mUwnNqipl
22
+ 5TlPHoOlblyYoiQm5vuh7ZPHLgLGTUq/sELfeNqzqPlt/yGFUzZgTHbO7Djc1lGA
23
+ 8MXW5dRNJ2Srm8c+cftIl7gzbckTB+6WohsYFfZcTEDts8Ls/3HB40f/1LkAtDdC
24
+ 2iDJ6m6K7hQGrn2iWZiIqBtvLfTyyRRfJs8sjX7tN8Cp1Tm5gr8ZDOo0rwAhaPit
25
+ c+LJMto4JQtV05od8GiG7S5BNO98pVAdvzr508EIDObtHopYJeS4d60tbvVS3bR0
26
+ j6tJLp07kzQoH3jOlOrHvdPJbRzeXDLz
27
+ -----END CERTIFICATE-----
28
+