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
@@ -19,11 +19,13 @@ module Mongo
19
19
  # Defines custom behavior of results in a parallel scan.
20
20
  #
21
21
  # @since 2.0.0
22
+ # @api semiprivate
22
23
  class Result < Operation::Result
23
24
 
24
25
  # The name of the cursors field in the result.
25
26
  #
26
27
  # @since 2.0.0
28
+ # @api private
27
29
  CURSORS = 'cursors'.freeze
28
30
 
29
31
  # Get all the cursor ids from the result.
@@ -34,6 +36,7 @@ module Mongo
34
36
  # @return [ Array<Integer> ] The cursor ids.
35
37
  #
36
38
  # @since 2.0.0
39
+ # @api private
37
40
  def cursor_ids
38
41
  documents.map {|doc| doc[CURSOR][CURSOR_ID]}
39
42
  end
@@ -46,6 +49,7 @@ module Mongo
46
49
  # @return [ Array<BSON::Document> ] The documents.
47
50
  #
48
51
  # @since 2.0.0
52
+ # @api public
49
53
  def documents
50
54
  reply.documents[0][CURSORS]
51
55
  end
@@ -27,6 +27,7 @@ module Mongo
27
27
  # produce a reply (in which case it is assumed to have succeeded).
28
28
  #
29
29
  # @since 2.0.0
30
+ # @api semiprivate
30
31
  class Result
31
32
  extend Forwardable
32
33
  include Enumerable
@@ -34,41 +35,49 @@ module Mongo
34
35
  # The field name for the cursor document in an aggregation.
35
36
  #
36
37
  # @since 2.2.0
38
+ # @api private
37
39
  CURSOR = 'cursor'.freeze
38
40
 
39
41
  # The cursor id field in the cursor document.
40
42
  #
41
43
  # @since 2.2.0
44
+ # @api private
42
45
  CURSOR_ID = 'id'.freeze
43
46
 
44
47
  # The field name for the first batch of a cursor.
45
48
  #
46
49
  # @since 2.2.0
50
+ # @api private
47
51
  FIRST_BATCH = 'firstBatch'.freeze
48
52
 
49
53
  # The field name for the next batch of a cursor.
50
54
  #
51
55
  # @since 2.2.0
56
+ # @api private
52
57
  NEXT_BATCH = 'nextBatch'.freeze
53
58
 
54
59
  # The namespace field in the cursor document.
55
60
  #
56
61
  # @since 2.2.0
62
+ # @api private
57
63
  NAMESPACE = 'ns'.freeze
58
64
 
59
65
  # The number of documents updated in the write.
60
66
  #
61
67
  # @since 2.0.0
68
+ # @api private
62
69
  N = 'n'.freeze
63
70
 
64
71
  # The ok status field in the result.
65
72
  #
66
73
  # @since 2.0.0
74
+ # @api private
67
75
  OK = 'ok'.freeze
68
76
 
69
77
  # The result field constant.
70
78
  #
71
79
  # @since 2.2.0
80
+ # @api private
72
81
  RESULT = 'result'.freeze
73
82
 
74
83
  # Initialize a new result.
@@ -106,6 +115,8 @@ module Mongo
106
115
  end
107
116
 
108
117
  # @return [ Array<Protocol::Message> ] replies The wrapped wire protocol replies.
118
+ #
119
+ # @api private
109
120
  attr_reader :replies
110
121
 
111
122
  # @return [ Server::Description ] Server description of the server that
@@ -129,6 +140,7 @@ module Mongo
129
140
  # @return [ true, false ] If the result is acknowledged.
130
141
  #
131
142
  # @since 2.0.0
143
+ # @api public
132
144
  def acknowledged?
133
145
  !!@replies
134
146
  end
@@ -143,6 +155,7 @@ module Mongo
143
155
  # @return [ Integer ] The cursor id.
144
156
  #
145
157
  # @since 2.0.0
158
+ # @api private
146
159
  def cursor_id
147
160
  acknowledged? ? replies.last.cursor_id : 0
148
161
  end
@@ -153,6 +166,7 @@ module Mongo
153
166
  # @return [ Nil ]
154
167
  #
155
168
  # @since 2.0.0
169
+ # @api private
156
170
  def namespace
157
171
  nil
158
172
  end
@@ -165,6 +179,7 @@ module Mongo
165
179
  # @return [ Array<BSON::Document> ] The documents.
166
180
  #
167
181
  # @since 2.0.0
182
+ # @api public
168
183
  def documents
169
184
  if acknowledged?
170
185
  replies.flat_map(&:documents)
@@ -182,9 +197,10 @@ module Mongo
182
197
  #
183
198
  # @return [ Enumerator ] The enumerator.
184
199
  #
185
- # @since 2.0.0
186
- #
187
200
  # @yieldparam [ BSON::Document ] Each document in the result.
201
+ #
202
+ # @since 2.0.0
203
+ # @api public
188
204
  def each(&block)
189
205
  documents.each(&block)
190
206
  end
@@ -197,6 +213,7 @@ module Mongo
197
213
  # @return [ String ] The inspection.
198
214
  #
199
215
  # @since 2.0.0
216
+ # @api public
200
217
  def inspect
201
218
  "#<#{self.class.name}:0x#{object_id} documents=#{documents}>"
202
219
  end
@@ -209,6 +226,7 @@ module Mongo
209
226
  # @return [ Protocol::Message ] The first reply.
210
227
  #
211
228
  # @since 2.0.0
229
+ # @api private
212
230
  def reply
213
231
  if acknowledged?
214
232
  replies.first
@@ -225,6 +243,7 @@ module Mongo
225
243
  # @return [ Integer ] The number of documents returned.
226
244
  #
227
245
  # @since 2.0.0
246
+ # @api public
228
247
  def returned_count
229
248
  if acknowledged?
230
249
  reply.number_returned
@@ -245,6 +264,7 @@ module Mongo
245
264
  # @return [ true, false ] If the command was successful.
246
265
  #
247
266
  # @since 2.0.0
267
+ # @api public
248
268
  def successful?
249
269
  return true if !acknowledged?
250
270
  if first_document.has_key?(OK)
@@ -262,6 +282,7 @@ module Mongo
262
282
  # @return [ true, false ] If the command returned ok.
263
283
  #
264
284
  # @since 2.1.0
285
+ # @api public
265
286
  def ok?
266
287
  # first_document[OK] is a float, and the server can return
267
288
  # ok as a BSON int32, BSON int64 or a BSON double.
@@ -285,6 +306,7 @@ module Mongo
285
306
  # @return [ Result ] The result if verification passed.
286
307
  #
287
308
  # @since 2.0.0
309
+ # @api private
288
310
  def validate!
289
311
  !successful? ? raise_operation_failure : self
290
312
  end
@@ -310,6 +332,8 @@ module Mongo
310
332
  labels: parser.labels,
311
333
  wtimeout: parser.wtimeout,
312
334
  connection_description: connection_description,
335
+ document: parser.document,
336
+ server_message: parser.server_message,
313
337
  )
314
338
  end
315
339
 
@@ -317,12 +341,13 @@ module Mongo
317
341
  # error information in this result.
318
342
  #
319
343
  # @raise Error::OperationFailure
320
- def raise_operation_failure
344
+ private def raise_operation_failure
321
345
  raise error
322
346
  end
323
- private :raise_operation_failure
324
347
 
325
348
  # @return [ TopologyVersion | nil ] The topology version.
349
+ #
350
+ # @api private
326
351
  def topology_version
327
352
  unless defined?(@topology_version)
328
353
  @topology_version = first_document['topologyVersion'] &&
@@ -339,6 +364,7 @@ module Mongo
339
364
  # @return [ Integer ] The number of documents written.
340
365
  #
341
366
  # @since 2.0.0
367
+ # @api public
342
368
  def written_count
343
369
  if acknowledged?
344
370
  first_document[N] || 0
@@ -346,6 +372,8 @@ module Mongo
346
372
  0
347
373
  end
348
374
  end
375
+
376
+ # @api public
349
377
  alias :n :written_count
350
378
 
351
379
  # Get the operation time reported in the server response.
@@ -353,9 +381,10 @@ module Mongo
353
381
  # @example Get the operation time.
354
382
  # result.operation_time
355
383
  #
356
- # @return [ Object ] The operation time value.
384
+ # @return [ Object | nil ] The operation time value.
357
385
  #
358
386
  # @since 2.5.0
387
+ # @api public
359
388
  def operation_time
360
389
  first_document && first_document[OPERATION_TIME]
361
390
  end
@@ -365,13 +394,14 @@ module Mongo
365
394
  # @example Get the cluster time.
366
395
  # result.cluster_time
367
396
  #
368
- # @return [ nil | ClusterTime ] The cluster time document.
397
+ # @return [ ClusterTime | nil ] The cluster time document.
369
398
  #
370
399
  # Changed in version 2.9.0: This attribute became an instance of
371
400
  # ClusterTime, which is a subclass of BSON::Document.
372
401
  # Previously it was an instance of BSON::Document.
373
402
  #
374
403
  # @since 2.5.0
404
+ # @api public
375
405
  def cluster_time
376
406
  first_document && ClusterTime[first_document['$clusterTime']]
377
407
  end
@@ -384,6 +414,7 @@ module Mongo
384
414
  # @return [ Array ] labels The set of labels.
385
415
  #
386
416
  # @since 2.7.0
417
+ # @api private
387
418
  def labels
388
419
  @labels ||= parser.labels
389
420
  end
@@ -18,6 +18,7 @@ module Mongo
18
18
  # Custom behavior for operations that support the bypassdocumentvalidation option.
19
19
  #
20
20
  # @since 2.5.2
21
+ # @api private
21
22
  module BypassDocumentValidation
22
23
 
23
24
  private
@@ -18,6 +18,7 @@ module Mongo
18
18
  # Custom behavior for operations that support causal consistency.
19
19
  #
20
20
  # @since 2.5.2
21
+ # @api private
21
22
  module CausalConsistencySupported
22
23
 
23
24
  private
@@ -18,15 +18,16 @@ module Mongo
18
18
  # Shared executable behavior of operations.
19
19
  #
20
20
  # @since 2.5.2
21
+ # @api private
21
22
  module Executable
22
23
 
23
24
  include ResponseHandling
24
25
 
25
- def do_execute(connection, client, options = {})
26
+ def do_execute(connection, context, options = {})
26
27
  unpin_maybe(session) do
27
- add_error_labels(client, connection, session) do
28
+ add_error_labels(connection, context) do
28
29
  add_server_diagnostics(connection) do
29
- get_result(connection, client, options).tap do |result|
30
+ get_result(connection, context, options).tap do |result|
30
31
  process_result(result, connection)
31
32
  end
32
33
  end
@@ -34,15 +35,15 @@ module Mongo
34
35
  end
35
36
  end
36
37
 
37
- def execute(connection, client:, options: {})
38
+ def execute(connection, context:, options: {})
38
39
  if Lint.enabled?
39
40
  unless connection.is_a?(Mongo::Server::Connection)
40
41
  raise Error::LintError, "Connection argument is of wrong type: #{connection}"
41
42
  end
42
43
  end
43
44
 
44
- do_execute(connection, client, options).tap do |result|
45
- validate_result(result, client, connection)
45
+ do_execute(connection, context, options).tap do |result|
46
+ validate_result(result, connection, context)
46
47
  end
47
48
  end
48
49
 
@@ -52,20 +53,30 @@ module Mongo
52
53
  Result
53
54
  end
54
55
 
55
- def get_result(connection, client, options = {})
56
- result_class.new(*dispatch_message(connection, client, options))
56
+ def get_result(connection, context, options = {})
57
+ result_class.new(*dispatch_message(connection, context, options))
57
58
  end
58
59
 
59
60
  # Returns a Protocol::Message or nil as reply.
60
- def dispatch_message(connection, client, options = {})
61
- message = build_message(connection)
62
- message = message.maybe_encrypt(connection, client)
63
- reply = connection.dispatch([ message ], operation_id, client, options)
61
+ def dispatch_message(connection, context, options = {})
62
+ message = build_message(connection, context)
63
+ message = message.maybe_encrypt(connection, context)
64
+ reply = connection.dispatch([ message ], context, options)
64
65
  [reply, connection.description]
65
66
  end
66
67
 
67
- def build_message(connection)
68
- message(connection)
68
+ # @param [ Mongo::Server::Connection ] connection The connection on which
69
+ # the operation is performed.
70
+ # @param [ Mongo::Operation::Context ] context The operation context.
71
+ def build_message(connection, context)
72
+ msg = message(connection)
73
+ if (server_api = context.server_api) &&
74
+ # Commands in a transaction do not allow API parameters.
75
+ !(context.in_transaction? && !context.starting_transaction?)
76
+ then
77
+ msg = msg.maybe_add_server_api(server_api)
78
+ end
79
+ msg
69
80
  end
70
81
 
71
82
  def process_result(result, connection)
@@ -21,8 +21,8 @@ module Mongo
21
21
  # @api private
22
22
  module ExecutableNoValidate
23
23
 
24
- def execute(connection, client:)
25
- do_execute(connection, client)
24
+ def execute(connection, context:)
25
+ do_execute(connection, context)
26
26
  end
27
27
  end
28
28
  end
@@ -18,6 +18,7 @@ module Mongo
18
18
  # Shared behavior of operations that require its documents to each have an id.
19
19
  #
20
20
  # @since 2.5.2
21
+ # @api private
21
22
  module Idable
22
23
 
23
24
  def documents
@@ -61,4 +62,4 @@ module Mongo
61
62
  end
62
63
  end
63
64
  end
64
- end
65
+ end
@@ -18,6 +18,7 @@ module Mongo
18
18
  # Shared behavior of operations that require its documents to each have an id.
19
19
  #
20
20
  # @since 2.5.2
21
+ # @api private
21
22
  module Limited
22
23
 
23
24
  private
@@ -18,6 +18,7 @@ module Mongo
18
18
  # The default generator of ids for documents.
19
19
  #
20
20
  # @since 2.2.0
21
+ # @api private
21
22
  class ObjectIdGenerator
22
23
 
23
24
  # Generate a new id.
@@ -20,15 +20,9 @@ module Mongo
20
20
  #
21
21
  # @api private
22
22
  module OpMsgOrCommand
23
+ include PolymorphicOperation
23
24
  include PolymorphicLookup
24
25
 
25
- def execute(server, client:, options: {})
26
- server.with_connection do |connection|
27
- operation = final_operation(connection)
28
- operation.execute(connection, client: client, options: options)
29
- end
30
- end
31
-
32
26
  private
33
27
 
34
28
  def final_operation(connection)
@@ -21,15 +21,9 @@ module Mongo
21
21
  #
22
22
  # @api private
23
23
  module OpMsgOrFindCommand
24
+ include PolymorphicOperation
24
25
  include PolymorphicLookup
25
26
 
26
- def execute(server, client:)
27
- server.with_connection do |connection|
28
- operation = final_operation(connection)
29
- operation.execute(connection, client: client)
30
- end
31
- end
32
-
33
27
  private
34
28
 
35
29
  def final_operation(connection)
@@ -0,0 +1,39 @@
1
+ # Copyright (C) 2021 MongoDB Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ module Operation
17
+
18
+ # Shared behavior of implementing an operation differently based on
19
+ # the server that will be executing the operation.
20
+ #
21
+ # @api private
22
+ module PolymorphicOperation
23
+
24
+ # Execute the operation.
25
+ #
26
+ # @param [ Mongo::Server ] server The server to send the operation to.
27
+ # @param [ Operation::Context ] context The operation context.
28
+ # @param [ Hash ] options Operation execution options.
29
+ #
30
+ # @return [ Mongo::Operation::Result ] The operation result.
31
+ def execute(server, context:, options: {})
32
+ server.with_connection do |connection|
33
+ operation = final_operation(connection)
34
+ operation.execute(connection, context: context, options: options)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end