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,169 @@
1
+ description: "poc-transactions-mongos-pin-auto"
2
+
3
+ schemaVersion: "1.0"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.1.8"
7
+ topologies: [ sharded-replicaset ]
8
+
9
+ createEntities:
10
+ - client:
11
+ id: &client0 client0
12
+ useMultipleMongoses: true
13
+ observeEvents: [ commandStartedEvent ]
14
+ - database:
15
+ id: &database0 database0
16
+ client: *client0
17
+ databaseName: &database0Name transaction-tests
18
+ - collection:
19
+ id: &collection0 collection0
20
+ database: *database0
21
+ collectionName: &collection0Name test
22
+ - session:
23
+ id: &session0 session0
24
+ client: *client0
25
+
26
+ initialData:
27
+ - collectionName: *collection0Name
28
+ databaseName: *database0Name
29
+ documents:
30
+ - { _id: 1 }
31
+ - { _id: 2 }
32
+
33
+ tests:
34
+ - description: "remain pinned after non-transient Interrupted error on insertOne"
35
+ operations:
36
+ - &startTransaction
37
+ name: startTransaction
38
+ object: *session0
39
+ - &firstInsert
40
+ name: insertOne
41
+ object: *collection0
42
+ arguments:
43
+ session: *session0
44
+ document: { _id: 3 }
45
+ expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 3 } } }
46
+ - name: targetedFailPoint
47
+ object: testRunner
48
+ arguments:
49
+ session: *session0
50
+ failPoint:
51
+ configureFailPoint: failCommand
52
+ mode: { times: 1 }
53
+ data:
54
+ failCommands: [ insert ]
55
+ errorCode: 11601 # Interrupted
56
+ - name: insertOne
57
+ object: *collection0
58
+ arguments:
59
+ session: *session0
60
+ document: { _id: 4 }
61
+ expectError:
62
+ errorLabelsOmit: [ TransientTransactionError, UnknownTransactionCommitResult ]
63
+ errorCodeName: Interrupted
64
+ - name: assertSessionPinned
65
+ object: testRunner
66
+ arguments:
67
+ session: *session0
68
+ - name: commitTransaction
69
+ object: *session0
70
+ expectEvents:
71
+ - client: *client0
72
+ events:
73
+ - commandStartedEvent: &firstInsertEvent
74
+ command:
75
+ insert: *collection0Name
76
+ documents: [ { _id: 3 } ]
77
+ ordered: true
78
+ readConcern: { $$exists: false }
79
+ lsid: { $$sessionLsid: *session0 }
80
+ txnNumber: 1
81
+ startTransaction: true
82
+ autocommit: false
83
+ writeConcern: { $$exists: false }
84
+ commandName: insert
85
+ databaseName: *database0Name
86
+ - commandStartedEvent: &secondInsertEvent
87
+ command:
88
+ insert: *collection0Name
89
+ documents: [ { _id: 4 } ]
90
+ ordered: true
91
+ readConcern: { $$exists: false }
92
+ lsid: { $$sessionLsid: *session0 }
93
+ txnNumber: 1
94
+ startTransaction: { $$exists: false }
95
+ autocommit: false
96
+ writeConcern: { $$exists: false }
97
+ commandName: insert
98
+ databaseName: *database0Name
99
+ - commandStartedEvent:
100
+ command:
101
+ commitTransaction: 1
102
+ lsid: { $$sessionLsid: *session0 }
103
+ txnNumber: 1
104
+ startTransaction: { $$exists: false }
105
+ autocommit: false
106
+ writeConcern: { $$exists: false }
107
+ # Original test expected any value, but we can assert an object
108
+ recoveryToken: { $$type: object }
109
+ commandName: commitTransaction
110
+ databaseName: admin
111
+ outcome:
112
+ - collectionName: *collection0Name
113
+ databaseName: *database0Name
114
+ documents:
115
+ - { _id: 1 }
116
+ - { _id: 2 }
117
+ - { _id: 3 }
118
+
119
+ - description: "unpin after transient error within a transaction"
120
+ operations:
121
+ - *startTransaction
122
+ - *firstInsert
123
+ - name: targetedFailPoint
124
+ object: testRunner
125
+ arguments:
126
+ session: *session0
127
+ failPoint:
128
+ configureFailPoint: failCommand
129
+ mode: { times: 1 }
130
+ data:
131
+ failCommands: [ insert ]
132
+ closeConnection: true
133
+ - name: insertOne
134
+ object: *collection0
135
+ arguments:
136
+ session: *session0
137
+ document: { _id: 4 }
138
+ expectError:
139
+ errorLabelsContain: [ TransientTransactionError ]
140
+ errorLabelsOmit: [ UnknownTransactionCommitResult ]
141
+ - name: assertSessionUnpinned
142
+ object: testRunner
143
+ arguments:
144
+ session: *session0
145
+ - name: abortTransaction
146
+ object: *session0
147
+ expectEvents:
148
+ - client: *client0
149
+ events:
150
+ - commandStartedEvent: *firstInsertEvent
151
+ - commandStartedEvent: *secondInsertEvent
152
+ - commandStartedEvent:
153
+ command:
154
+ abortTransaction: 1
155
+ lsid: { $$sessionLsid: *session0 }
156
+ txnNumber: 1
157
+ startTransaction: { $$exists: false }
158
+ autocommit: false
159
+ writeConcern: { $$exists: false }
160
+ # Original test expected any value, but we can assert an object
161
+ recoveryToken: { $$type: object }
162
+ commandName: abortTransaction
163
+ databaseName: admin
164
+ outcome:
165
+ - collectionName: *collection0Name
166
+ databaseName: *database0Name
167
+ documents:
168
+ - { _id: 1 }
169
+ - { _id: 2 }
@@ -0,0 +1,170 @@
1
+ description: "poc-transactions"
2
+
3
+ schemaVersion: "1.0"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.0"
7
+ topologies: [ replicaset ]
8
+ - minServerVersion: "4.1.8"
9
+ topologies: [ sharded-replicaset ]
10
+
11
+ createEntities:
12
+ - client:
13
+ id: &client0 client0
14
+ observeEvents: [ commandStartedEvent ]
15
+ - database:
16
+ id: &database0 database0
17
+ client: *client0
18
+ databaseName: &database0Name transaction-tests
19
+ - collection:
20
+ id: &collection0 collection0
21
+ database: *database0
22
+ collectionName: &collection0Name test
23
+ - session:
24
+ id: &session0 session0
25
+ client: *client0
26
+
27
+ initialData:
28
+ - collectionName: *collection0Name
29
+ databaseName: *database0Name
30
+ documents: []
31
+
32
+ tests:
33
+ - description: "Client side error in command starting transaction"
34
+ operations:
35
+ - name: startTransaction
36
+ object: *session0
37
+ - name: insertOne
38
+ object: *collection0
39
+ arguments:
40
+ session: *session0
41
+ document: { _id: { .: . } }
42
+ # Original test only asserted a generic error
43
+ expectError: { isClientError: true }
44
+ - name: assertSessionTransactionState
45
+ object: testRunner
46
+ arguments:
47
+ session: *session0
48
+ state: starting
49
+
50
+ - description: "explicitly create collection using create command"
51
+ runOnRequirements:
52
+ - minServerVersion: "4.3.4"
53
+ topologies: [ replicaset, sharded-replicaset ]
54
+ operations:
55
+ - name: dropCollection
56
+ object: *database0
57
+ arguments:
58
+ collection: *collection0Name
59
+ - name: startTransaction
60
+ object: *session0
61
+ - name: createCollection
62
+ object: *database0
63
+ arguments:
64
+ session: *session0
65
+ collection: *collection0Name
66
+ - name: assertCollectionNotExists
67
+ object: testRunner
68
+ arguments:
69
+ databaseName: *database0Name
70
+ collectionName: *collection0Name
71
+ - name: commitTransaction
72
+ object: *session0
73
+ - name: assertCollectionExists
74
+ object: testRunner
75
+ arguments:
76
+ databaseName: *database0Name
77
+ collectionName: *collection0Name
78
+ expectEvents:
79
+ - client: *client0
80
+ events:
81
+ - commandStartedEvent:
82
+ command:
83
+ drop: *collection0Name
84
+ writeConcern: { $$exists: false }
85
+ commandName: drop
86
+ databaseName: *database0Name
87
+ - commandStartedEvent:
88
+ command:
89
+ create: *collection0Name
90
+ lsid: { $$sessionLsid: *session0 }
91
+ txnNumber: 1
92
+ startTransaction: true
93
+ autocommit: false
94
+ writeConcern: { $$exists: false }
95
+ commandName: create
96
+ databaseName: *database0Name
97
+ - commandStartedEvent:
98
+ command:
99
+ commitTransaction: 1
100
+ lsid: { $$sessionLsid: *session0 }
101
+ txnNumber: 1
102
+ startTransaction: { $$exists: false }
103
+ autocommit: false
104
+ writeConcern: { $$exists: false }
105
+ commandName: commitTransaction
106
+ databaseName: admin
107
+
108
+ - description: "create index on a non-existing collection"
109
+ runOnRequirements:
110
+ - minServerVersion: "4.3.4"
111
+ topologies: [ replicaset, sharded-replicaset ]
112
+ operations:
113
+ - name: dropCollection
114
+ object: *database0
115
+ arguments:
116
+ collection: *collection0Name
117
+ - name: startTransaction
118
+ object: *session0
119
+ - name: createIndex
120
+ object: *collection0
121
+ arguments:
122
+ session: *session0
123
+ name: &indexName "x_1"
124
+ keys: { x: 1 }
125
+ - name: assertIndexNotExists
126
+ object: testRunner
127
+ arguments:
128
+ databaseName: *database0Name
129
+ collectionName: *collection0Name
130
+ indexName: *indexName
131
+ - name: commitTransaction
132
+ object: *session0
133
+ - name: assertIndexExists
134
+ object: testRunner
135
+ arguments:
136
+ databaseName: *database0Name
137
+ collectionName: *collection0Name
138
+ indexName: *indexName
139
+ expectEvents:
140
+ - client: *client0
141
+ events:
142
+ - commandStartedEvent:
143
+ command:
144
+ drop: *collection0Name
145
+ writeConcern: { $$exists: false }
146
+ commandName: drop
147
+ databaseName: *database0Name
148
+ - commandStartedEvent:
149
+ command:
150
+ createIndexes: *collection0Name
151
+ indexes:
152
+ - name: *indexName
153
+ key: { x: 1 }
154
+ lsid: { $$sessionLsid: *session0 }
155
+ txnNumber: 1
156
+ startTransaction: true
157
+ autocommit: false
158
+ writeConcern: { $$exists: false }
159
+ commandName: createIndexes
160
+ databaseName: *database0Name
161
+ - commandStartedEvent:
162
+ command:
163
+ commitTransaction: 1
164
+ lsid: { $$sessionLsid: *session0 }
165
+ txnNumber: 1
166
+ startTransaction: { $$exists: false }
167
+ autocommit: false
168
+ writeConcern: { $$exists: false }
169
+ commandName: commitTransaction
170
+ databaseName: admin
@@ -12,6 +12,31 @@ tests:
12
12
  SERVICE_NAME: "other"
13
13
  CANONICALIZE_HOST_NAME: true
14
14
  authSource: "$external"
15
+ -
16
+ description: "Mixed case in auth mechanism properties is preserved"
17
+ uri: "mongodb://foo:bar@example.com/?authMechanism=GSSAPI&authMechanismProperties=PropertyName:PropertyValue&authSource=$external"
18
+ valid: true
19
+ warning: false
20
+ hosts: ~
21
+ auth: ~
22
+ options:
23
+ authMechanism: "GSSAPI"
24
+ authMechanismProperties:
25
+ PropertyName: PropertyValue
26
+ service_name: mongodb
27
+ authSource: "$external"
28
+ -
29
+ description: "Auth mechanism properties are all invalid"
30
+ uri: "mongodb://foo:bar@example.com/?authMechanism=GSSAPI&authMechanismProperties=PropertyName&authSource=$external"
31
+ valid: true
32
+ warning: true
33
+ hosts: ~
34
+ auth: ~
35
+ options:
36
+ authMechanism: "GSSAPI"
37
+ authMechanismProperties:
38
+ service_name: mongodb
39
+ authSource: "$external"
15
40
  -
16
41
  description: "Valid auth options are parsed correctly (SCRAM-SHA-1)"
17
42
  uri: "mongodb://foo:bar@example.com/?authMechanism=SCRAM-SHA-1&authSource=authSourceDB"
@@ -14,7 +14,7 @@ tests:
14
14
  description: "Multiple compressors are parsed correctly"
15
15
  uri: "mongodb://example.com/?compressors=snappy,zlib"
16
16
  valid: true
17
- warning: true
17
+ warning: false
18
18
  hosts: ~
19
19
  auth: ~
20
20
  options:
@@ -28,7 +28,8 @@ tests:
28
28
  warning: true
29
29
  hosts: ~
30
30
  auth: ~
31
- options: {}
31
+ # https://jira.mongodb.org/browse/DRIVERS-1368
32
+ options: ~
32
33
  -
33
34
  description: "Too low zlibCompressionLevel causes a warning"
34
35
  uri: "mongodb://example.com/?compressors=zlib&zlibCompressionLevel=-2"
@@ -36,7 +37,8 @@ tests:
36
37
  warning: true
37
38
  hosts: ~
38
39
  auth: ~
39
- options: {}
40
+ # https://jira.mongodb.org/browse/DRIVERS-1368
41
+ options: ~
40
42
  -
41
43
  description: "Too high zlibCompressionLevel causes a warning"
42
44
  uri: "mongodb://example.com/?compressors=zlib&zlibCompressionLevel=10"
@@ -44,5 +46,6 @@ tests:
44
46
  warning: true
45
47
  hosts: ~
46
48
  auth: ~
47
- options: {}
49
+ # https://jira.mongodb.org/browse/DRIVERS-1368
50
+ options: ~
48
51
 
@@ -15,6 +15,18 @@ tests:
15
15
  -
16
16
  dc: "ny"
17
17
  maxStalenessSeconds: 120
18
+ -
19
+ description: "Case is preserved in read preference tag names and values"
20
+ uri: "mongodb://example.com/?readPreference=secondary&readPreferenceTags=DataCenter:NewYork"
21
+ valid: true
22
+ warning: false
23
+ hosts: ~
24
+ auth: ~
25
+ options:
26
+ readPreference: "secondary"
27
+ readPreferenceTags:
28
+ -
29
+ DataCenter: NewYork
18
30
  -
19
31
  description: "Invalid readPreferenceTags causes a warning"
20
32
  uri: "mongodb://example.com/?readPreferenceTags=invalid"
@@ -23,6 +35,18 @@ tests:
23
35
  hosts: ~
24
36
  auth: ~
25
37
  options: {}
38
+ # https://jira.mongodb.org/browse/DRIVERS-1369
39
+ -
40
+ description: "Valid and invalid readPreferenceTags mix"
41
+ uri: "mongodb://example.com/?readPreferenceTags=a:b,invalid"
42
+ valid: true
43
+ warning: true
44
+ hosts: ~
45
+ auth: ~
46
+ options:
47
+ readPreferenceTags:
48
+ -
49
+ a: b
26
50
  -
27
51
  description: "Non-numeric maxStalenessSeconds causes a warning"
28
52
  uri: "mongodb://example.com/?maxStalenessSeconds=invalid"
@@ -36,6 +36,7 @@ tests:
36
36
  options:
37
37
  directConnection: false
38
38
  connect: replica_set
39
+ replicaSet: foo
39
40
 
40
41
  -
41
42
  description: directConnection=true and connect=sharded