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
@@ -149,7 +149,8 @@ tests:
149
149
  warning: false
150
150
  hosts: ~
151
151
  auth: ~
152
- options: {}
152
+ # https://jira.mongodb.org/browse/DRIVERS-1368
153
+ options: ~
153
154
  -
154
155
  description: "tls=false and ssl=false doesn't warn"
155
156
  uri: "mongodb://example.com/?tls=false&ssl=false"
@@ -157,7 +158,8 @@ tests:
157
158
  warning: false
158
159
  hosts: ~
159
160
  auth: ~
160
- options: {}
161
+ # https://jira.mongodb.org/browse/DRIVERS-1368
162
+ options: ~
161
163
  -
162
164
  description: "ssl=true and tls=true doesn't warn"
163
165
  uri: "mongodb://example.com/?ssl=true&tls=true"
@@ -165,7 +167,8 @@ tests:
165
167
  warning: false
166
168
  hosts: ~
167
169
  auth: ~
168
- options: {}
170
+ # https://jira.mongodb.org/browse/DRIVERS-1368
171
+ options: ~
169
172
  -
170
173
  description: "ssl=false and tls=false doesn't warn"
171
174
  uri: "mongodb://example.com/?ssl=false&tls=false"
@@ -173,7 +176,8 @@ tests:
173
176
  warning: false
174
177
  hosts: ~
175
178
  auth: ~
176
- options: {}
179
+ # https://jira.mongodb.org/browse/DRIVERS-1368
180
+ options: ~
177
181
  -
178
182
  description: "tls=false and ssl=true raises error"
179
183
  uri: "mongodb://example.com/?tls=false&ssl=true"
@@ -206,3 +210,155 @@ tests:
206
210
  hosts: ~
207
211
  auth: ~
208
212
  options: {}
213
+ -
214
+ description: "tlsDisableOCSPEndpointCheck can be set to true"
215
+ uri: "mongodb://example.com/?tls=true&tlsDisableOCSPEndpointCheck=true"
216
+ valid: true
217
+ warning: false
218
+ hosts: ~
219
+ auth: ~
220
+ options:
221
+ tls: true
222
+ tlsDisableOCSPEndpointCheck: true
223
+ -
224
+ description: "tlsDisableOCSPEndpointCheck can be set to false"
225
+ uri: "mongodb://example.com/?tls=true&tlsDisableOCSPEndpointCheck=false"
226
+ valid: true
227
+ warning: false
228
+ hosts: ~
229
+ auth: ~
230
+ options:
231
+ tls: true
232
+ tlsDisableOCSPEndpointCheck: false
233
+ # 4 permutations of [tlsInsecure=true/false, tlsDisableOCSPEndpointCheck=true/false]
234
+ -
235
+ description: "tlsInsecure and tlsDisableOCSPEndpointCheck both present (and true) raises an error"
236
+ uri: "mongodb://example.com/?tlsInsecure=true&tlsDisableOCSPEndpointCheck=true"
237
+ valid: false
238
+ warning: false
239
+ hosts: ~
240
+ auth: ~
241
+ options: {}
242
+ -
243
+ description: "tlsInsecure=true and tlsDisableOCSPEndpointCheck=false raises an error"
244
+ uri: "mongodb://example.com/?tlsInsecure=true&tlsDisableOCSPEndpointCheck=false"
245
+ valid: false
246
+ warning: false
247
+ hosts: ~
248
+ auth: ~
249
+ options: {}
250
+ -
251
+ description: "tlsInsecure=false and tlsDisableOCSPEndpointCheck=true raises an error"
252
+ uri: "mongodb://example.com/?tlsInsecure=false&tlsDisableOCSPEndpointCheck=true"
253
+ valid: false
254
+ warning: false
255
+ hosts: ~
256
+ auth: ~
257
+ options: {}
258
+ -
259
+ description: "tlsInsecure and tlsDisableOCSPEndpointCheck both present (and false) raises an error"
260
+ uri: "mongodb://example.com/?tlsInsecure=false&tlsDisableOCSPEndpointCheck=false"
261
+ valid: false
262
+ warning: false
263
+ hosts: ~
264
+ auth: ~
265
+ options: {}
266
+ # 4 permutations of [tlsDisableOCSPEndpointCheck=true/false, tlsInsecure=true/false]
267
+ -
268
+ description: "tlsDisableOCSPEndpointCheck and tlsInsecure both present (and true) raises an error"
269
+ uri: "mongodb://example.com/?tlsDisableOCSPEndpointCheck=true&tlsInsecure=true"
270
+ valid: false
271
+ warning: false
272
+ hosts: ~
273
+ auth: ~
274
+ options: {}
275
+ -
276
+ description: "tlsDisableOCSPEndpointCheck=true and tlsInsecure=false raises an error"
277
+ uri: "mongodb://example.com/?tlsDisableOCSPEndpointCheck=true&tlsInsecure=false"
278
+ valid: false
279
+ warning: false
280
+ hosts: ~
281
+ auth: ~
282
+ options: {}
283
+ -
284
+ description: "tlsDisableOCSPEndpointCheck=false and tlsInsecure=true raises an error"
285
+ uri: "mongodb://example.com/?tlsDisableOCSPEndpointCheck=false&tlsInsecure=true"
286
+ valid: false
287
+ warning: false
288
+ hosts: ~
289
+ auth: ~
290
+ options: {}
291
+ -
292
+ description: "tlsDisableOCSPEndpointCheck and tlsInsecure both present (and false) raises an error"
293
+ uri: "mongodb://example.com/?tlsDisableOCSPEndpointCheck=false&tlsInsecure=false"
294
+ valid: false
295
+ warning: false
296
+ hosts: ~
297
+ auth: ~
298
+ options: {}
299
+ # 4 permutations of [tlsAllowInvalidCertificates=true/false, tlsDisableOCSPEndpointCheck=true/false]
300
+ -
301
+ description: "tlsAllowInvalidCertificates and tlsDisableOCSPEndpointCheck both present (and true) raises an error"
302
+ uri: "mongodb://example.com/?tlsAllowInvalidCertificates=true&tlsDisableOCSPEndpointCheck=true"
303
+ valid: false
304
+ warning: false
305
+ hosts: ~
306
+ auth: ~
307
+ options: {}
308
+ -
309
+ description: "tlsAllowInvalidCertificates=true and tlsDisableOCSPEndpointCheck=false raises an error"
310
+ uri: "mongodb://example.com/?tlsAllowInvalidCertificates=true&tlsDisableOCSPEndpointCheck=false"
311
+ valid: false
312
+ warning: false
313
+ hosts: ~
314
+ auth: ~
315
+ options: {}
316
+ -
317
+ description: "tlsAllowInvalidCertificates=false and tlsDisableOCSPEndpointCheck=true raises an error"
318
+ uri: "mongodb://example.com/?tlsAllowInvalidCertificates=false&tlsDisableOCSPEndpointCheck=true"
319
+ valid: false
320
+ warning: false
321
+ hosts: ~
322
+ auth: ~
323
+ options: {}
324
+ -
325
+ description: "tlsAllowInvalidCertificates and tlsDisableOCSPEndpointCheck both present (and false) raises an error"
326
+ uri: "mongodb://example.com/?tlsAllowInvalidCertificates=false&tlsDisableOCSPEndpointCheck=false"
327
+ valid: false
328
+ warning: false
329
+ hosts: ~
330
+ auth: ~
331
+ options: {}
332
+ # 4 permutations of [tlsDisableOCSPEndpointCheck=true/false, tlsAllowInvalidCertificates=true/false]
333
+ -
334
+ description: "tlsDisableOCSPEndpointCheck and tlsAllowInvalidCertificates both present (and true) raises an error"
335
+ uri: "mongodb://example.com/?tlsDisableOCSPEndpointCheck=true&tlsAllowInvalidCertificates=true"
336
+ valid: false
337
+ warning: false
338
+ hosts: ~
339
+ auth: ~
340
+ options: {}
341
+ -
342
+ description: "tlsDisableOCSPEndpointCheck=true and tlsAllowInvalidCertificates=false raises an error"
343
+ uri: "mongodb://example.com/?tlsDisableOCSPEndpointCheck=true&tlsAllowInvalidCertificates=false"
344
+ valid: false
345
+ warning: false
346
+ hosts: ~
347
+ auth: ~
348
+ options: {}
349
+ -
350
+ description: "tlsDisableOCSPEndpointCheck=false and tlsAllowInvalidCertificates=true raises an error"
351
+ uri: "mongodb://example.com/?tlsDisableOCSPEndpointCheck=false&tlsAllowInvalidCertificates=true"
352
+ valid: false
353
+ warning: false
354
+ hosts: ~
355
+ auth: ~
356
+ options: {}
357
+ -
358
+ description: "tlsDisableOCSPEndpointCheck and tlsAllowInvalidCertificates both present (and false) raises an error"
359
+ uri: "mongodb://example.com/?tlsDisableOCSPEndpointCheck=false&tlsAllowInvalidCertificates=false"
360
+ valid: false
361
+ warning: false
362
+ hosts: ~
363
+ auth: ~
364
+ options: {}
@@ -0,0 +1,416 @@
1
+ description: "CRUD Api Version 1 (strict)"
2
+
3
+ schemaVersion: "1.1"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.9"
7
+
8
+ createEntities:
9
+ - client:
10
+ id: &client client
11
+ observeEvents:
12
+ - commandStartedEvent
13
+ serverApi:
14
+ version: "1"
15
+ strict: true
16
+ - database:
17
+ id: &database database
18
+ client: *client
19
+ databaseName: &databaseName versioned-api-tests
20
+ - database:
21
+ id: &adminDatabase adminDatabase
22
+ client: *client
23
+ databaseName: &adminDatabaseName admin
24
+ - collection:
25
+ id: &collection collection
26
+ database: *database
27
+ collectionName: &collectionName test
28
+
29
+ _yamlAnchors:
30
+ versions:
31
+ - &expectedApiVersion
32
+ apiVersion: "1"
33
+ apiStrict: true
34
+ apiDeprecationErrors: { $$unsetOrMatches: false }
35
+
36
+ initialData:
37
+ - collectionName: *collectionName
38
+ databaseName: *databaseName
39
+ documents:
40
+ - { _id: 1, x: 11 }
41
+ - { _id: 2, x: 22 }
42
+ - { _id: 3, x: 33 }
43
+ - { _id: 4, x: 44 }
44
+ - { _id: 5, x: 55 }
45
+
46
+ tests:
47
+ - description: "aggregate on collection appends declared API version"
48
+ operations:
49
+ - name: aggregate
50
+ object: *collection
51
+ arguments:
52
+ pipeline: &pipeline
53
+ - $sort: { x : 1 }
54
+ - $match: { _id: { $gt: 1 } }
55
+ expectEvents:
56
+ - client: *client
57
+ events:
58
+ - commandStartedEvent:
59
+ command:
60
+ aggregate: *collectionName
61
+ pipeline: *pipeline
62
+ <<: *expectedApiVersion
63
+
64
+ - description: "aggregate on database appends declared API version"
65
+ operations:
66
+ - name: aggregate
67
+ object: *adminDatabase
68
+ arguments:
69
+ pipeline: &pipeline
70
+ - $listLocalSessions: {}
71
+ - $limit: 1
72
+ expectError:
73
+ errorCodeName: "APIStrictError"
74
+ expectEvents:
75
+ - client: *client
76
+ events:
77
+ - commandStartedEvent:
78
+ command:
79
+ aggregate: 1
80
+ pipeline: *pipeline
81
+ <<: *expectedApiVersion
82
+
83
+ - description: "bulkWrite appends declared API version"
84
+ operations:
85
+ - name: bulkWrite
86
+ object: *collection
87
+ arguments:
88
+ requests:
89
+ - insertOne:
90
+ document: { _id: 6, x: 66 }
91
+ - updateOne:
92
+ filter: { _id: 2 }
93
+ update: { $inc: { x: 1 } }
94
+ - deleteMany:
95
+ filter: { x: { $nin: [ 24, 34 ] } }
96
+ - updateMany:
97
+ filter: { _id: { $gt: 1 } }
98
+ update: { $inc: { x: 1 } }
99
+ - deleteOne:
100
+ filter: { _id: 7 }
101
+ - replaceOne:
102
+ filter: { _id: 4 }
103
+ replacement: { _id: 4, x: 44 }
104
+ upsert: true
105
+ ordered: true
106
+ expectEvents:
107
+ - client: *client
108
+ events:
109
+ - commandStartedEvent:
110
+ command:
111
+ insert: *collectionName
112
+ documents:
113
+ - { _id: 6, x: 66 }
114
+ <<: *expectedApiVersion
115
+ - commandStartedEvent:
116
+ command:
117
+ update: *collectionName
118
+ updates:
119
+ - q: { _id: 2 }
120
+ u: { $inc: { x: 1 } }
121
+ multi: { $$unsetOrMatches: false }
122
+ upsert: { $$unsetOrMatches: false }
123
+ <<: *expectedApiVersion
124
+ - commandStartedEvent:
125
+ command:
126
+ delete: *collectionName
127
+ deletes:
128
+ - { q: { x: { $nin: [ 24, 34 ] } }, limit: 0 }
129
+ <<: *expectedApiVersion
130
+ - commandStartedEvent:
131
+ command:
132
+ update: *collectionName
133
+ updates:
134
+ - q: { _id: { $gt: 1 } }
135
+ u: { $inc: { x: 1 } }
136
+ multi: true
137
+ upsert: { $$unsetOrMatches: false }
138
+ <<: *expectedApiVersion
139
+ - commandStartedEvent:
140
+ command:
141
+ delete: *collectionName
142
+ deletes:
143
+ - { q: { _id: 7 }, limit: 1 }
144
+ <<: *expectedApiVersion
145
+ - commandStartedEvent:
146
+ command:
147
+ update: *collectionName
148
+ updates:
149
+ - q: { _id: 4 }
150
+ u: { _id: 4, x: 44 }
151
+ multi: { $$unsetOrMatches: false }
152
+ upsert: true
153
+ <<: *expectedApiVersion
154
+
155
+ - description: "countDocuments appends declared API version"
156
+ operations:
157
+ - name: countDocuments
158
+ object: *collection
159
+ arguments:
160
+ filter: &filter
161
+ x : { $gt: 11 }
162
+ expectEvents:
163
+ - client: *client
164
+ events:
165
+ - commandStartedEvent:
166
+ command:
167
+ aggregate: *collectionName
168
+ pipeline:
169
+ - { $match: *filter }
170
+ - { $group: { _id: 1, n: { $sum: 1 } } }
171
+ <<: *expectedApiVersion
172
+
173
+ - description: "deleteMany appends declared API version"
174
+ operations:
175
+ - name: deleteMany
176
+ object: *collection
177
+ arguments:
178
+ filter: { x: { $nin: [ 24, 34 ] } }
179
+ expectEvents:
180
+ - client: *client
181
+ events:
182
+ - commandStartedEvent:
183
+ command:
184
+ delete: *collectionName
185
+ deletes:
186
+ - { q: { x: { $nin: [ 24, 34 ] } }, limit: 0 }
187
+ <<: *expectedApiVersion
188
+
189
+ - description: "deleteOne appends declared API version"
190
+ operations:
191
+ - name: deleteOne
192
+ object: *collection
193
+ arguments:
194
+ filter: { _id: 7 }
195
+ expectEvents:
196
+ - client: *client
197
+ events:
198
+ - commandStartedEvent:
199
+ command:
200
+ delete: *collectionName
201
+ deletes:
202
+ - { q: { _id: 7 }, limit: 1 }
203
+ <<: *expectedApiVersion
204
+
205
+ # distinct will fail until drivers replace it with an alternative
206
+ # implementation
207
+ - description: "distinct appends declared API version"
208
+ operations:
209
+ - name: distinct
210
+ object: *collection
211
+ arguments:
212
+ fieldName: x
213
+ filter: {}
214
+ expectError:
215
+ isError: true
216
+ errorContains: "command distinct is not in API Version 1"
217
+ errorCodeName: "APIStrictError"
218
+ expectEvents:
219
+ - client: *client
220
+ events:
221
+ - commandStartedEvent:
222
+ command:
223
+ distinct: *collectionName
224
+ key: x
225
+ <<: *expectedApiVersion
226
+
227
+ - description: "estimatedDocumentCount appends declared API version"
228
+ skipReason: "DRIVERS-1561 collStats is not in API version 1"
229
+ operations:
230
+ - name: estimatedDocumentCount
231
+ object: *collection
232
+ arguments: {}
233
+ expectEvents:
234
+ - client: *client
235
+ events:
236
+ - commandStartedEvent:
237
+ command:
238
+ aggregate: *collectionName
239
+ pipeline: &pipeline
240
+ - $collStats: { count: {} }
241
+ - $group: { _id: 1, n: { $sum: $count }}
242
+ <<: *expectedApiVersion
243
+
244
+ - description: "find command with declared API version appends to the command, but getMore does not"
245
+ operations:
246
+ - name: find
247
+ object: *collection
248
+ arguments:
249
+ filter: {}
250
+ sort: { _id: 1 }
251
+ batchSize: 3
252
+ expectResult:
253
+ - { _id: 1, x: 11 }
254
+ - { _id: 2, x: 22 }
255
+ - { _id: 3, x: 33 }
256
+ - { _id: 4, x: 44 }
257
+ - { _id: 5, x: 55 }
258
+ expectEvents:
259
+ - client: *client
260
+ events:
261
+ - commandStartedEvent:
262
+ command:
263
+ find: *collectionName
264
+ <<: *expectedApiVersion
265
+ - commandStartedEvent:
266
+ command:
267
+ getMore: { $$type: [ int, long ] }
268
+ apiVersion: { $$exists: false }
269
+ apiStrict: { $$exists: false }
270
+ apiDeprecationErrors: { $$exists: false }
271
+
272
+ - description: "findOneAndDelete appends declared API version"
273
+ operations:
274
+ - name: findOneAndDelete
275
+ object: *collection
276
+ arguments:
277
+ filter: &filter { _id: 1 }
278
+ expectEvents:
279
+ - client: *client
280
+ events:
281
+ - commandStartedEvent:
282
+ command:
283
+ findAndModify: *collectionName
284
+ query: *filter
285
+ remove: true
286
+ <<: *expectedApiVersion
287
+
288
+ - description: "findOneAndReplace appends declared API version"
289
+ operations:
290
+ - name: findOneAndReplace
291
+ object: *collection
292
+ arguments:
293
+ filter: &filter { _id: 1 }
294
+ replacement: &replacement { x: 33 }
295
+ expectEvents:
296
+ - client: *client
297
+ events:
298
+ - commandStartedEvent:
299
+ command:
300
+ findAndModify: *collectionName
301
+ query: *filter
302
+ update: *replacement
303
+ <<: *expectedApiVersion
304
+
305
+ - description: "findOneAndUpdate appends declared API version"
306
+ operations:
307
+ - name: findOneAndUpdate
308
+ object: collection
309
+ arguments:
310
+ filter: &filter { _id: 1 }
311
+ update: &update { $inc: { x: 1 } }
312
+ expectEvents:
313
+ - client: *client
314
+ events:
315
+ - commandStartedEvent:
316
+ command:
317
+ findAndModify: *collectionName
318
+ query: *filter
319
+ update: *update
320
+ <<: *expectedApiVersion
321
+
322
+ - description: "insertMany appends declared API version"
323
+ operations:
324
+ - name: insertMany
325
+ object: *collection
326
+ arguments:
327
+ documents:
328
+ - { _id: 6, x: 66 }
329
+ - { _id: 7, x: 77 }
330
+ expectEvents:
331
+ - client: *client
332
+ events:
333
+ - commandStartedEvent:
334
+ command:
335
+ insert: *collectionName
336
+ documents:
337
+ - { _id: 6, x: 66 }
338
+ - { _id: 7, x: 77 }
339
+ <<: *expectedApiVersion
340
+
341
+ - description: "insertOne appends declared API version"
342
+ operations:
343
+ - name: insertOne
344
+ object: *collection
345
+ arguments:
346
+ document: { _id: 6, x: 66 }
347
+ expectEvents:
348
+ - client: *client
349
+ events:
350
+ - commandStartedEvent:
351
+ command:
352
+ insert: *collectionName
353
+ documents:
354
+ - { _id: 6, x: 66 }
355
+ <<: *expectedApiVersion
356
+
357
+ - description: "replaceOne appends declared API version"
358
+ operations:
359
+ - name: replaceOne
360
+ object: *collection
361
+ arguments:
362
+ filter: { _id: 4 }
363
+ replacement: { _id: 4, x: 44 }
364
+ upsert: true
365
+ expectEvents:
366
+ - client: *client
367
+ events:
368
+ - commandStartedEvent:
369
+ command:
370
+ update: *collectionName
371
+ updates:
372
+ - q: { _id: 4 }
373
+ u: { _id: 4, x: 44 }
374
+ multi: { $$unsetOrMatches: false }
375
+ upsert: true
376
+ <<: *expectedApiVersion
377
+
378
+ - description: "updateMany appends declared API version"
379
+ operations:
380
+ - name: updateMany
381
+ object: *collection
382
+ arguments:
383
+ filter: { _id: { $gt: 1 } }
384
+ update: { $inc: { x: 1 } }
385
+ expectEvents:
386
+ - client: *client
387
+ events:
388
+ - commandStartedEvent:
389
+ command:
390
+ update: *collectionName
391
+ updates:
392
+ - q: { _id: { $gt: 1 } }
393
+ u: { $inc: { x: 1 } }
394
+ multi: true
395
+ upsert: { $$unsetOrMatches: false }
396
+ <<: *expectedApiVersion
397
+
398
+ - description: "updateOne appends declared API version"
399
+ operations:
400
+ - name: updateOne
401
+ object: *collection
402
+ arguments:
403
+ filter: { _id: 2 }
404
+ update: { $inc: { x: 1 } }
405
+ expectEvents:
406
+ - client: *client
407
+ events:
408
+ - commandStartedEvent:
409
+ command:
410
+ update: *collectionName
411
+ updates:
412
+ - q: { _id: 2 }
413
+ u: { $inc: { x: 1 } }
414
+ multi: { $$unsetOrMatches: false }
415
+ upsert: { $$unsetOrMatches: false }
416
+ <<: *expectedApiVersion