mongo 2.17.3 → 2.18.0.beta1

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 (622) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +21 -37
  4. data/lib/mongo/auth/base.rb +8 -1
  5. data/lib/mongo/auth.rb +12 -1
  6. data/lib/mongo/bulk_write/result.rb +10 -1
  7. data/lib/mongo/bulk_write/result_combiner.rb +2 -4
  8. data/lib/mongo/bulk_write.rb +108 -28
  9. data/lib/mongo/client.rb +114 -12
  10. data/lib/mongo/client_encryption.rb +30 -9
  11. data/lib/mongo/cluster/reapers/cursor_reaper.rb +11 -1
  12. data/lib/mongo/cluster.rb +20 -24
  13. data/lib/mongo/collection/helpers.rb +43 -0
  14. data/lib/mongo/collection/queryable_encryption.rb +122 -0
  15. data/lib/mongo/collection/view/aggregation.rb +19 -16
  16. data/lib/mongo/collection/view/change_stream.rb +56 -23
  17. data/lib/mongo/collection/view/explainable.rb +1 -1
  18. data/lib/mongo/collection/view/iterable.rb +2 -3
  19. data/lib/mongo/collection/view/map_reduce.rb +18 -9
  20. data/lib/mongo/collection/view/readable.rb +19 -23
  21. data/lib/mongo/collection/view/writable.rb +133 -40
  22. data/lib/mongo/collection.rb +108 -48
  23. data/lib/mongo/config/options.rb +62 -0
  24. data/lib/mongo/config/validators/option.rb +26 -0
  25. data/lib/mongo/config.rb +31 -0
  26. data/lib/mongo/crypt/auto_encrypter.rb +79 -6
  27. data/lib/mongo/crypt/binding.rb +395 -143
  28. data/lib/mongo/crypt/context.rb +5 -2
  29. data/lib/mongo/crypt/data_key_context.rb +7 -104
  30. data/lib/mongo/crypt/encryption_io.rb +28 -60
  31. data/lib/mongo/crypt/explicit_encrypter.rb +27 -25
  32. data/lib/mongo/crypt/explicit_encryption_context.rb +31 -3
  33. data/lib/mongo/crypt/handle.rb +102 -79
  34. data/lib/mongo/crypt/hooks.rb +25 -2
  35. data/lib/mongo/crypt/kms/aws.rb +128 -0
  36. data/lib/mongo/crypt/kms/azure.rb +136 -0
  37. data/lib/mongo/crypt/kms/credentials.rb +81 -0
  38. data/lib/mongo/crypt/kms/gcp.rb +182 -0
  39. data/lib/mongo/crypt/kms/kmip.rb +110 -0
  40. data/lib/mongo/crypt/kms/local.rb +74 -0
  41. data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
  42. data/lib/mongo/crypt/kms.rb +117 -0
  43. data/lib/mongo/crypt.rb +1 -0
  44. data/lib/mongo/cursor/kill_spec.rb +27 -6
  45. data/lib/mongo/cursor.rb +21 -16
  46. data/lib/mongo/database/view.rb +6 -3
  47. data/lib/mongo/database.rb +73 -12
  48. data/lib/mongo/dbref.rb +1 -105
  49. data/lib/mongo/error/bulk_write_error.rb +31 -4
  50. data/lib/mongo/error/invalid_config_option.rb +20 -0
  51. data/lib/mongo/error/invalid_replacement_document.rb +27 -9
  52. data/lib/mongo/error/invalid_update_document.rb +27 -7
  53. data/lib/mongo/error/labelable.rb +72 -0
  54. data/lib/mongo/error/missing_connection.rb +25 -0
  55. data/lib/mongo/error/notable.rb +7 -0
  56. data/lib/mongo/error/operation_failure.rb +34 -86
  57. data/lib/mongo/error/read_write_retryable.rb +108 -0
  58. data/lib/mongo/{operation/kill_cursors/legacy.rb → error/session_not_materialized.rb} +7 -19
  59. data/lib/mongo/error.rb +5 -37
  60. data/lib/mongo/index/view.rb +22 -7
  61. data/lib/mongo/monitoring/event/command_failed.rb +8 -2
  62. data/lib/mongo/monitoring/event/command_started.rb +1 -1
  63. data/lib/mongo/monitoring/event/command_succeeded.rb +9 -2
  64. data/lib/mongo/monitoring/publishable.rb +9 -5
  65. data/lib/mongo/operation/collections_info/result.rb +5 -2
  66. data/lib/mongo/operation/command/op_msg.rb +6 -0
  67. data/lib/mongo/operation/context.rb +24 -6
  68. data/lib/mongo/operation/count/op_msg.rb +4 -1
  69. data/lib/mongo/operation/create/op_msg.rb +16 -1
  70. data/lib/mongo/operation/create_index/op_msg.rb +2 -1
  71. data/lib/mongo/operation/delete/op_msg.rb +1 -0
  72. data/lib/mongo/operation/delete.rb +0 -1
  73. data/lib/mongo/operation/drop_index/op_msg.rb +5 -1
  74. data/lib/mongo/operation/get_more/command_builder.rb +5 -1
  75. data/lib/mongo/operation/insert/bulk_result.rb +5 -1
  76. data/lib/mongo/operation/insert/command.rb +0 -4
  77. data/lib/mongo/operation/insert/op_msg.rb +6 -3
  78. data/lib/mongo/operation/insert/result.rb +6 -3
  79. data/lib/mongo/operation/insert.rb +0 -1
  80. data/lib/mongo/operation/kill_cursors.rb +0 -1
  81. data/lib/mongo/operation/list_collections/op_msg.rb +4 -1
  82. data/lib/mongo/operation/map_reduce/result.rb +16 -0
  83. data/lib/mongo/operation/result.rb +21 -5
  84. data/lib/mongo/operation/shared/executable.rb +21 -6
  85. data/lib/mongo/operation/shared/polymorphic_operation.rb +15 -3
  86. data/lib/mongo/operation/shared/response_handling.rb +6 -5
  87. data/lib/mongo/operation/shared/sessions_supported.rb +3 -7
  88. data/lib/mongo/operation/shared/write.rb +18 -12
  89. data/lib/mongo/operation/update/op_msg.rb +2 -1
  90. data/lib/mongo/operation/update.rb +0 -1
  91. data/lib/mongo/protocol/caching_hash.rb +69 -0
  92. data/lib/mongo/protocol/msg.rb +37 -1
  93. data/lib/mongo/protocol.rb +1 -0
  94. data/lib/mongo/query_cache.rb +15 -0
  95. data/lib/mongo/retryable.rb +78 -30
  96. data/lib/mongo/server/connection.rb +33 -0
  97. data/lib/mongo/server/connection_base.rb +2 -0
  98. data/lib/mongo/server/connection_common.rb +4 -1
  99. data/lib/mongo/server/connection_pool.rb +69 -42
  100. data/lib/mongo/server/description/features.rb +3 -1
  101. data/lib/mongo/server/description.rb +7 -2
  102. data/lib/mongo/server/monitor/connection.rb +5 -10
  103. data/lib/mongo/server/monitor.rb +21 -13
  104. data/lib/mongo/server/push_monitor.rb +9 -3
  105. data/lib/mongo/server.rb +9 -5
  106. data/lib/mongo/session/session_pool.rb +8 -0
  107. data/lib/mongo/session.rb +111 -35
  108. data/lib/mongo/socket/ocsp_verifier.rb +4 -5
  109. data/lib/mongo/socket/tcp.rb +3 -0
  110. data/lib/mongo/srv/resolver.rb +24 -3
  111. data/lib/mongo/uri/options_mapper.rb +2 -0
  112. data/lib/mongo/uri/srv_protocol.rb +1 -1
  113. data/lib/mongo/uri.rb +20 -0
  114. data/lib/mongo/version.rb +1 -1
  115. data/lib/mongo.rb +20 -0
  116. data/mongo.gemspec +10 -4
  117. data/spec/README.md +5 -5
  118. data/spec/integration/aws_lambda_examples_spec.rb +68 -0
  119. data/spec/integration/bulk_write_error_message_spec.rb +32 -0
  120. data/spec/integration/bulk_write_spec.rb +0 -16
  121. data/spec/integration/change_stream_spec.rb +6 -5
  122. data/spec/integration/client_construction_spec.rb +1 -1
  123. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -9
  124. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +18 -19
  125. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +0 -1
  126. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +31 -0
  127. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +108 -1
  128. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +2 -2
  129. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +2 -2
  130. data/spec/integration/client_side_encryption/client_close_spec.rb +1 -1
  131. data/spec/integration/client_side_encryption/corpus_spec.rb +64 -35
  132. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +39 -42
  133. data/spec/integration/client_side_encryption/data_key_spec.rb +97 -7
  134. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +59 -0
  135. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +147 -0
  136. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +6 -6
  137. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +394 -0
  138. data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
  139. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +111 -0
  140. data/spec/integration/client_side_encryption/views_spec.rb +1 -1
  141. data/spec/integration/client_update_spec.rb +2 -2
  142. data/spec/integration/crud_spec.rb +12 -0
  143. data/spec/integration/cursor_pinning_spec.rb +3 -3
  144. data/spec/integration/fork_reconnect_spec.rb +15 -8
  145. data/spec/integration/grid_fs_bucket_spec.rb +3 -3
  146. data/spec/integration/ocsp_verifier_spec.rb +1 -0
  147. data/spec/integration/query_cache_spec.rb +34 -30
  148. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
  149. data/spec/integration/sdam_events_spec.rb +0 -40
  150. data/spec/integration/server_monitor_spec.rb +2 -1
  151. data/spec/integration/size_limit_spec.rb +4 -1
  152. data/spec/integration/snapshot_query_examples_spec.rb +127 -0
  153. data/spec/integration/srv_monitoring_spec.rb +37 -0
  154. data/spec/integration/step_down_spec.rb +20 -4
  155. data/spec/integration/transaction_pinning_spec.rb +2 -2
  156. data/spec/integration/versioned_api_examples_spec.rb +37 -31
  157. data/spec/lite_spec_helper.rb +14 -5
  158. data/spec/mongo/address/ipv6_spec.rb +7 -0
  159. data/spec/mongo/address_spec.rb +7 -0
  160. data/spec/mongo/auth/scram/conversation_spec.rb +23 -23
  161. data/spec/mongo/auth/scram256/conversation_spec.rb +20 -20
  162. data/spec/mongo/auth/scram_negotiation_spec.rb +1 -0
  163. data/spec/mongo/bulk_write/result_spec.rb +15 -1
  164. data/spec/mongo/bulk_write_spec.rb +128 -20
  165. data/spec/mongo/client_construction_spec.rb +141 -7
  166. data/spec/mongo/client_encryption_spec.rb +11 -11
  167. data/spec/mongo/client_spec.rb +297 -1
  168. data/spec/mongo/cluster/cursor_reaper_spec.rb +21 -3
  169. data/spec/mongo/cluster_spec.rb +0 -44
  170. data/spec/mongo/collection/view/aggregation_spec.rb +2 -2
  171. data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
  172. data/spec/mongo/collection/view/readable_spec.rb +35 -56
  173. data/spec/mongo/collection/view/writable_spec.rb +144 -32
  174. data/spec/mongo/collection_crud_spec.rb +63 -13
  175. data/spec/mongo/config/options_spec.rb +75 -0
  176. data/spec/mongo/config_spec.rb +73 -0
  177. data/spec/mongo/crypt/auto_decryption_context_spec.rb +17 -1
  178. data/spec/mongo/crypt/auto_encrypter_spec.rb +106 -0
  179. data/spec/mongo/crypt/auto_encryption_context_spec.rb +17 -1
  180. data/spec/mongo/crypt/binding/context_spec.rb +99 -17
  181. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +17 -46
  182. data/spec/mongo/crypt/binding/version_spec.rb +25 -0
  183. data/spec/mongo/crypt/binding_unloaded_spec.rb +14 -0
  184. data/spec/mongo/crypt/data_key_context_spec.rb +42 -114
  185. data/spec/mongo/crypt/encryption_io_spec.rb +2 -0
  186. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +32 -1
  187. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +89 -1
  188. data/spec/mongo/crypt/handle_spec.rb +47 -169
  189. data/spec/mongo/crypt/hooks_spec.rb +30 -0
  190. data/spec/mongo/crypt/kms/credentials_spec.rb +404 -0
  191. data/spec/mongo/crypt/kms_spec.rb +59 -0
  192. data/spec/mongo/cursor_spec.rb +37 -51
  193. data/spec/mongo/database_spec.rb +66 -1
  194. data/spec/mongo/error/operation_failure_heavy_spec.rb +49 -0
  195. data/spec/mongo/index/view_spec.rb +69 -0
  196. data/spec/mongo/operation/create/op_msg_spec.rb +286 -0
  197. data/spec/mongo/operation/delete/op_msg_spec.rb +13 -4
  198. data/spec/mongo/operation/delete_spec.rb +0 -30
  199. data/spec/mongo/operation/insert/op_msg_spec.rb +18 -10
  200. data/spec/mongo/operation/insert_spec.rb +0 -32
  201. data/spec/mongo/operation/result_spec.rb +20 -0
  202. data/spec/mongo/operation/update/op_msg_spec.rb +13 -4
  203. data/spec/mongo/operation/update_spec.rb +0 -29
  204. data/spec/mongo/protocol/caching_hash_spec.rb +82 -0
  205. data/spec/mongo/protocol/msg_spec.rb +41 -0
  206. data/spec/mongo/query_cache_spec.rb +1 -0
  207. data/spec/mongo/retryable_spec.rb +32 -3
  208. data/spec/mongo/server/connection_auth_spec.rb +3 -1
  209. data/spec/mongo/server/connection_common_spec.rb +13 -1
  210. data/spec/mongo/server/connection_pool_spec.rb +94 -49
  211. data/spec/mongo/server/connection_spec.rb +50 -159
  212. data/spec/mongo/server/description/features_spec.rb +24 -0
  213. data/spec/mongo/server/push_monitor_spec.rb +2 -8
  214. data/spec/mongo/session_spec.rb +26 -6
  215. data/spec/mongo/session_transaction_spec.rb +2 -1
  216. data/spec/mongo/socket/ssl_spec.rb +15 -4
  217. data/spec/mongo/uri/srv_protocol_spec.rb +101 -2
  218. data/spec/mongo/uri_spec.rb +25 -0
  219. data/spec/runners/connection_string.rb +8 -0
  220. data/spec/runners/crud/operation.rb +12 -3
  221. data/spec/runners/crud/requirement.rb +3 -3
  222. data/spec/runners/crud/spec.rb +5 -0
  223. data/spec/runners/crud/verifier.rb +6 -0
  224. data/spec/runners/transactions/test.rb +33 -14
  225. data/spec/runners/transactions.rb +9 -6
  226. data/spec/runners/unified/assertions.rb +59 -10
  227. data/spec/runners/unified/change_stream_operations.rb +9 -0
  228. data/spec/runners/unified/crud_operations.rb +50 -2
  229. data/spec/runners/unified/ddl_operations.rb +20 -0
  230. data/spec/runners/unified/error.rb +2 -1
  231. data/spec/runners/unified/support_operations.rb +5 -2
  232. data/spec/runners/unified/test.rb +19 -4
  233. data/spec/runners/unified.rb +9 -2
  234. data/spec/shared/lib/mrss/constraints.rb +10 -17
  235. data/spec/shared/lib/mrss/docker_runner.rb +21 -3
  236. data/spec/shared/lib/mrss/lite_constraints.rb +32 -1
  237. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  238. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  239. data/spec/shared/share/Dockerfile.erb +56 -54
  240. data/spec/shared/shlib/config.sh +27 -0
  241. data/spec/shared/shlib/distro.sh +2 -1
  242. data/spec/shared/shlib/server.sh +46 -21
  243. data/spec/shared/shlib/set_env.sh +40 -5
  244. data/spec/spec_helper.rb +0 -1
  245. data/spec/spec_tests/crud_spec.rb +0 -10
  246. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +124 -0
  247. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
  248. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1171 -0
  249. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1068 -0
  250. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +859 -4
  251. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
  252. data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
  253. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +12 -2
  254. data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
  255. data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
  256. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
  257. data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
  258. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
  259. data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
  260. data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
  261. data/spec/spec_tests/data/client_side_encryption/explain.yml +1 -8
  262. data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
  263. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
  264. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
  265. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
  266. data/spec/spec_tests/data/client_side_encryption/fle2-BypassQueryAnalysis.yml +101 -0
  267. data/spec/spec_tests/data/client_side_encryption/fle2-Compact.yml +80 -0
  268. data/spec/spec_tests/data/client_side_encryption/fle2-CreateCollection.yml +1263 -0
  269. data/spec/spec_tests/data/client_side_encryption/fle2-DecryptExistingData.yml +64 -0
  270. data/spec/spec_tests/data/client_side_encryption/fle2-Delete.yml +107 -0
  271. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-EncryptedFieldsMap.yml +80 -0
  272. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-jsonSchema.yml +90 -0
  273. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFieldsMap-defaults.yml +57 -0
  274. data/spec/spec_tests/data/client_side_encryption/fle2-FindOneAndUpdate.yml +213 -0
  275. data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Indexed.yml +86 -0
  276. data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Unindexed.yml +83 -0
  277. data/spec/spec_tests/data/client_side_encryption/fle2-MissingKey.yml +41 -0
  278. data/spec/spec_tests/data/client_side_encryption/fle2-NoEncryption.yml +42 -0
  279. data/spec/spec_tests/data/client_side_encryption/fle2-Update.yml +221 -0
  280. data/spec/spec_tests/data/client_side_encryption/fle2-validatorAndPartialFieldExpression.yml +168 -0
  281. data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
  282. data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
  283. data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
  284. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
  285. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
  286. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
  287. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +2 -0
  288. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
  289. data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
  290. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
  291. data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
  292. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
  293. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
  294. data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
  295. data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
  296. data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
  297. data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
  298. data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
  299. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +1 -1
  300. data/spec/spec_tests/data/crud/read/count-collation.yml +1 -1
  301. data/spec/spec_tests/data/crud/read/distinct-collation.yml +1 -1
  302. data/spec/spec_tests/data/crud/read/find-collation.yml +1 -1
  303. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +1 -1
  304. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +1 -1
  305. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +1 -1
  306. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +1 -1
  307. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +1 -1
  308. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +1 -1
  309. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +1 -1
  310. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +1 -1
  311. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +1 -1
  312. data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
  313. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
  314. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
  315. data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
  316. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
  317. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
  318. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
  319. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
  320. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
  321. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
  322. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
  323. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
  324. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
  325. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
  326. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
  327. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
  328. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
  329. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
  330. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
  331. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
  332. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
  333. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
  334. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
  335. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
  336. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
  337. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
  338. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
  339. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
  340. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
  341. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
  342. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
  343. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
  344. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
  345. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
  346. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
  347. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +2 -0
  348. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
  349. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
  350. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
  351. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
  352. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
  353. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +2 -0
  354. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
  355. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +5 -135
  356. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
  357. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
  358. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
  359. data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
  360. data/spec/spec_tests/data/crud_unified/find.yml +68 -0
  361. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
  362. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
  363. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
  364. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
  365. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
  366. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +2 -4
  367. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
  368. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
  369. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
  370. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
  371. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
  372. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
  373. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
  374. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
  375. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
  376. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
  377. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
  378. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
  379. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
  380. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
  381. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
  382. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
  383. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
  384. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
  385. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
  386. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
  387. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
  388. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
  389. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
  390. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
  391. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
  392. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
  393. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
  394. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
  395. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +5 -1
  396. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
  397. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
  398. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
  399. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
  400. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
  401. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
  402. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
  403. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +5 -1
  404. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
  405. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
  406. data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
  407. data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
  408. data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
  409. data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
  410. data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
  411. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
  412. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
  413. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
  414. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +0 -0
  415. data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
  416. data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
  417. data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
  418. data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
  419. data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
  420. data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
  421. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
  422. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
  423. data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
  424. data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
  425. data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
  426. data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
  427. data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
  428. data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
  429. data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
  430. data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
  431. data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
  432. data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
  433. data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
  434. data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
  435. data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
  436. data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
  437. data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
  438. data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
  439. data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
  440. data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
  441. data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
  442. data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
  443. data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
  444. data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
  445. data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
  446. data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
  447. data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
  448. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +129 -0
  449. data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
  450. data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
  451. data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
  452. data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
  453. data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
  454. data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
  455. data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
  456. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
  457. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
  458. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
  459. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
  460. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
  461. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
  462. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
  463. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
  464. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
  465. data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
  466. data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
  467. data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
  468. data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
  469. data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
  470. data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
  471. data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
  472. data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
  473. data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
  474. data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
  475. data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
  476. data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
  477. data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
  478. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +96 -0
  479. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +137 -0
  480. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +78 -0
  481. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
  482. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
  483. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
  484. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
  485. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +10 -0
  486. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +10 -0
  487. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
  488. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
  489. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
  490. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
  491. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
  492. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
  493. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
  494. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
  495. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
  496. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
  497. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
  498. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
  499. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
  500. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
  501. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
  502. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +9 -3
  503. data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
  504. data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
  505. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
  506. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -2
  507. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
  508. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
  509. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
  510. data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
  511. data/spec/spec_tests/data/unified/invalid/expectedEventsForClient-ignoreExtraEvents-type.yml +15 -0
  512. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
  513. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
  514. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +4 -1
  515. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
  516. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -2
  517. data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
  518. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
  519. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
  520. data/spec/spec_tests/retryable_reads_spec.rb +4 -1
  521. data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
  522. data/spec/spec_tests/retryable_writes_spec.rb +4 -1
  523. data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
  524. data/spec/spec_tests/seed_list_discovery_spec.rb +10 -1
  525. data/spec/spec_tests/unified_spec.rb +6 -1
  526. data/spec/stress/connection_pool_timing_spec.rb +2 -1
  527. data/spec/stress/fork_reconnect_stress_spec.rb +3 -2
  528. data/spec/support/authorization.rb +1 -1
  529. data/spec/support/certificates/atlas-ocsp-ca.crt +47 -40
  530. data/spec/support/certificates/atlas-ocsp.crt +106 -101
  531. data/spec/support/cluster_tools.rb +1 -1
  532. data/spec/support/common_shortcuts.rb +22 -0
  533. data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
  534. data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
  535. data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
  536. data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
  537. data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
  538. data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
  539. data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
  540. data/spec/support/crypt/corpus/corpus.json +4999 -37
  541. data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
  542. data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
  543. data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
  544. data/spec/support/crypt/encryptedFields.json +33 -0
  545. data/spec/support/crypt/keys/key1-document.json +30 -0
  546. data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
  547. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  548. data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
  549. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  550. data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
  551. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  552. data/spec/support/crypt.rb +207 -6
  553. data/spec/support/macros.rb +18 -0
  554. data/spec/support/mongos_macros.rb +17 -0
  555. data/spec/support/shared/scram_conversation.rb +2 -1
  556. data/spec/support/shared/session.rb +13 -7
  557. data/spec/support/spec_config.rb +82 -1
  558. data/spec/support/utils.rb +25 -4
  559. data.tar.gz.sig +0 -0
  560. metadata +1468 -1214
  561. metadata.gz.sig +0 -0
  562. data/lib/mongo/operation/delete/legacy.rb +0 -64
  563. data/lib/mongo/operation/insert/legacy.rb +0 -68
  564. data/lib/mongo/operation/update/legacy/result.rb +0 -112
  565. data/lib/mongo/operation/update/legacy.rb +0 -76
  566. data/spec/mongo/dbref_spec.rb +0 -152
  567. data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
  568. data/spec/spec_tests/change_streams_spec.rb +0 -93
  569. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -101
  570. data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +0 -1173
  571. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
  572. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -535
  573. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
  574. data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -111
  575. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
  576. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
  577. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
  578. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
  579. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
  580. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
  581. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
  582. data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -39
  583. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
  584. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
  585. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
  586. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
  587. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
  588. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
  589. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
  590. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
  591. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
  592. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
  593. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
  594. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
  595. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
  596. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
  597. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
  598. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
  599. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
  600. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
  601. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
  602. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
  603. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
  604. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
  605. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
  606. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
  607. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
  608. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
  609. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
  610. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
  611. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
  612. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
  613. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
  614. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
  615. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
  616. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
  617. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
  618. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
  619. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +0 -60
  620. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +0 -146
  621. data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
  622. data/spec/support/session_registry.rb +0 -55
@@ -1,8 +1,23 @@
1
1
  description: "change-streams"
2
- schemaVersion: "1.0"
2
+
3
+ schemaVersion: "1.7"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "3.6"
7
+ # TODO(DRIVERS-2323): Run all possible tests against sharded clusters once we know the
8
+ # cause of unexpected command monitoring events.
9
+ topologies: [ replicaset ]
10
+ serverless: forbid
11
+
3
12
  createEntities:
4
13
  - client:
5
14
  id: &client0 client0
15
+ observeEvents: [ commandStartedEvent ]
16
+ ignoreCommandMonitoringEvents: [ killCursors ]
17
+ useMultipleMongoses: false
18
+ - client:
19
+ id: &globalClient globalClient
20
+ useMultipleMongoses: false
6
21
  - database:
7
22
  id: &database0 database0
8
23
  client: *client0
@@ -11,15 +26,49 @@ createEntities:
11
26
  id: &collection0 collection0
12
27
  database: *database0
13
28
  collectionName: *collection0
29
+ - database:
30
+ id: &database1 database1
31
+ client: *client0
32
+ databaseName: *database1
33
+ - collection:
34
+ id: &collection1 collection1
35
+ database: *database1
36
+ collectionName: *collection1
37
+ - database:
38
+ id: &globalDatabase0 globalDatabase0
39
+ client: *globalClient
40
+ databaseName: *database0
41
+ - collection:
42
+ id: &globalCollection0 globalCollection0
43
+ database: *globalDatabase0
44
+ collectionName: *collection0
45
+ - database:
46
+ id: &globalDatabase1 globalDatabase1
47
+ client: *globalClient
48
+ databaseName: *database1
49
+ - collection:
50
+ id: &globalCollection1 globalCollection1
51
+ database: *globalDatabase1
52
+ collectionName: *collection1
53
+ # Some tests run operations against db1.coll0 or db0.coll1
54
+ - collection:
55
+ id: &globalDb1Collection0 globalDb1Collection0
56
+ database: *globalDatabase1
57
+ collectionName: *collection0
58
+ - collection:
59
+ id: &globalDb0Collection1 globalDb0Collection1
60
+ database: *globalDatabase0
61
+ collectionName: *collection1
62
+
14
63
  initialData:
15
64
  - collectionName: *collection0
16
65
  databaseName: *database0
17
66
  documents: []
67
+
18
68
  tests:
19
69
  - description: "Test array truncation"
20
70
  runOnRequirements:
21
71
  - minServerVersion: "4.7"
22
- topologies: [replicaset]
23
72
  operations:
24
73
  - name: insertOne
25
74
  object: *collection0
@@ -31,8 +80,7 @@ tests:
31
80
  }
32
81
  - name: createChangeStream
33
82
  object: *collection0
34
- arguments:
35
- pipeline: []
83
+ arguments: { pipeline: [] }
36
84
  saveResultAsEntity: &changeStream0 changeStream0
37
85
  - name: updateOne
38
86
  object: *collection0
@@ -70,3 +118,810 @@ tests:
70
118
  ]
71
119
  }
72
120
  }
121
+
122
+ - description: "Test with document comment"
123
+ runOnRequirements:
124
+ - minServerVersion: "4.4"
125
+ operations:
126
+ - name: createChangeStream
127
+ object: *collection0
128
+ arguments:
129
+ pipeline: []
130
+ comment: &comment0 { name: "test1" }
131
+ saveResultAsEntity: &changeStream0 changeStream0
132
+ expectEvents:
133
+ - client: *client0
134
+ events:
135
+ - commandStartedEvent:
136
+ command:
137
+ aggregate: *collection0
138
+ pipeline:
139
+ - $changeStream: {}
140
+ comment: *comment0
141
+
142
+ - description: "Test with document comment - pre 4.4"
143
+ runOnRequirements:
144
+ - maxServerVersion: "4.2.99"
145
+ operations:
146
+ - name: createChangeStream
147
+ object: *collection0
148
+ arguments:
149
+ pipeline: []
150
+ comment: &comment0 { name: "test1" }
151
+ expectError:
152
+ isClientError: false
153
+ expectEvents:
154
+ - client: *client0
155
+ events:
156
+ - commandStartedEvent:
157
+ command:
158
+ aggregate: *collection0
159
+ pipeline:
160
+ - $changeStream: {}
161
+ comment: *comment0
162
+
163
+ - description: "Test with string comment"
164
+ operations:
165
+ - name: createChangeStream
166
+ object: *collection0
167
+ arguments:
168
+ pipeline: []
169
+ comment: "comment"
170
+ saveResultAsEntity: &changeStream0 changeStream0
171
+ expectEvents:
172
+ - client: *client0
173
+ events:
174
+ - commandStartedEvent:
175
+ command:
176
+ aggregate: *collection0
177
+ pipeline:
178
+ - $changeStream: {}
179
+ comment: "comment"
180
+
181
+ - description: "Test that comment is set on getMore"
182
+ runOnRequirements:
183
+ - minServerVersion: "4.4.0"
184
+ operations:
185
+ - name: createChangeStream
186
+ object: *collection0
187
+ arguments:
188
+ pipeline: []
189
+ comment: &commentDoc
190
+ key: "value"
191
+ saveResultAsEntity: &changeStream0 changeStream0
192
+ - name: insertOne
193
+ object: *collection0
194
+ arguments:
195
+ document: &new_document
196
+ _id: 1
197
+ a: 1
198
+ - name: iterateUntilDocumentOrError
199
+ object: *changeStream0
200
+ expectEvents:
201
+ - client: *client0
202
+ events:
203
+ - commandStartedEvent:
204
+ command:
205
+ aggregate: *collection0
206
+ pipeline:
207
+ - $changeStream: {}
208
+ comment: *commentDoc
209
+ - commandStartedEvent:
210
+ command:
211
+ insert: *collection0
212
+ documents:
213
+ - *new_document
214
+ - commandStartedEvent:
215
+ command:
216
+ getMore: { $$type: [ int, long ] }
217
+ collection: *collection0
218
+ comment: *commentDoc
219
+ commandName: getMore
220
+ databaseName: *database0
221
+
222
+ - description: "Test that comment is not set on getMore - pre 4.4"
223
+ runOnRequirements:
224
+ - maxServerVersion: "4.3.99"
225
+ operations:
226
+ - name: createChangeStream
227
+ object: *collection0
228
+ arguments:
229
+ pipeline: []
230
+ comment: "comment"
231
+ saveResultAsEntity: &changeStream0 changeStream0
232
+ - name: insertOne
233
+ object: *collection0
234
+ arguments:
235
+ document: &new_document
236
+ _id: 1
237
+ a: 1
238
+ - name: iterateUntilDocumentOrError
239
+ object: *changeStream0
240
+ expectEvents:
241
+ - client: *client0
242
+ events:
243
+ - commandStartedEvent:
244
+ command:
245
+ aggregate: *collection0
246
+ pipeline:
247
+ - $changeStream: {}
248
+ comment: "comment"
249
+ - commandStartedEvent:
250
+ command:
251
+ insert: *collection0
252
+ documents:
253
+ - *new_document
254
+ - commandStartedEvent:
255
+ command:
256
+ getMore: { $$type: [ int, long ] }
257
+ collection: *collection0
258
+ comment: { $$exists: false }
259
+ commandName: getMore
260
+ databaseName: *database0
261
+
262
+ - description: "to field is set in a rename change event"
263
+ runOnRequirements:
264
+ - minServerVersion: "4.0.1"
265
+ operations:
266
+ - name: createChangeStream
267
+ object: *collection0
268
+ arguments: { pipeline: [] }
269
+ saveResultAsEntity: &changeStream0 changeStream0
270
+ - name: dropCollection
271
+ object: *database0
272
+ arguments:
273
+ collection: &collection1 collection1
274
+ - name: rename
275
+ object: *collection0
276
+ arguments:
277
+ to: *collection1
278
+ - name: iterateUntilDocumentOrError
279
+ object: *changeStream0
280
+ expectResult:
281
+ operationType: rename
282
+ ns:
283
+ db: *database0
284
+ coll: *collection0
285
+ to:
286
+ db: *database0
287
+ coll: *collection1
288
+
289
+ - description: "Test unknown operationType MUST NOT err"
290
+ operations:
291
+ - name: createChangeStream
292
+ object: *collection0
293
+ arguments:
294
+ # using $project to simulate future changes to ChangeStreamDocument structure
295
+ pipeline: [ { $project: { operationType: "addedInFutureMongoDBVersion", ns: 1 } } ]
296
+ saveResultAsEntity: &changeStream0 changeStream0
297
+ - name: insertOne
298
+ object: *collection0
299
+ arguments:
300
+ document: { "_id": 1, "a": 1 }
301
+ - name: iterateUntilDocumentOrError
302
+ object: *changeStream0
303
+ expectResult:
304
+ operationType: "addedInFutureMongoDBVersion"
305
+ ns:
306
+ db: *database0
307
+ coll: *collection0
308
+
309
+ - description: "Test newField added in response MUST NOT err"
310
+ operations:
311
+ - name: createChangeStream
312
+ object: *collection0
313
+ arguments:
314
+ # using $project to simulate future changes to ChangeStreamDocument structure
315
+ pipeline: [ { $project: { operationType: 1, ns: 1, newField: "newFieldValue" } } ]
316
+ saveResultAsEntity: &changeStream0 changeStream0
317
+ - name: insertOne
318
+ object: *collection0
319
+ arguments:
320
+ document: { "_id": 1, "a": 1 }
321
+ - name: iterateUntilDocumentOrError
322
+ object: *changeStream0
323
+ expectResult:
324
+ operationType: "insert"
325
+ ns:
326
+ db: *database0
327
+ coll: *collection0
328
+ newField: "newFieldValue"
329
+
330
+ - description: "Test new structure in ns document MUST NOT err"
331
+ runOnRequirements:
332
+ - minServerVersion: "3.6"
333
+ maxServerVersion: "5.2.99"
334
+ - minServerVersion: "6.0"
335
+ operations:
336
+ - name: createChangeStream
337
+ object: *collection0
338
+ arguments:
339
+ # using $project to simulate future changes to ChangeStreamDocument structure
340
+ pipeline: [ { $project: { operationType: "insert", "ns.viewOn": "db.coll" } } ]
341
+ saveResultAsEntity: &changeStream0 changeStream0
342
+ - name: insertOne
343
+ object: *collection0
344
+ arguments:
345
+ document: { "_id": 1, "a": 1 }
346
+ - name: iterateUntilDocumentOrError
347
+ object: *changeStream0
348
+ expectResult:
349
+ operationType: "insert"
350
+ ns:
351
+ viewOn: "db.coll"
352
+
353
+ - description: "Test modified structure in ns document MUST NOT err"
354
+ operations:
355
+ - name: createChangeStream
356
+ object: *collection0
357
+ arguments:
358
+ # using $project to simulate future changes to ChangeStreamDocument structure
359
+ pipeline: [ { $project: { operationType: "insert", ns: { db: "$ns.db", coll: "$ns.coll", viewOn: "db.coll" } } } ]
360
+ saveResultAsEntity: &changeStream0 changeStream0
361
+ - name: insertOne
362
+ object: *collection0
363
+ arguments:
364
+ document: { "_id": 1, "a": 1 }
365
+ - name: iterateUntilDocumentOrError
366
+ object: *changeStream0
367
+ expectResult:
368
+ operationType: "insert"
369
+ ns:
370
+ db: *database0
371
+ coll: *collection0
372
+ viewOn: "db.coll"
373
+
374
+ - description: "Test server error on projecting out _id"
375
+ runOnRequirements:
376
+ - minServerVersion: "4.2"
377
+ # Server returns an error if _id is modified on versions 4.2 and higher
378
+ operations:
379
+ - name: createChangeStream
380
+ object: *collection0
381
+ arguments:
382
+ pipeline: [ { $project: { _id: 0 } } ]
383
+ saveResultAsEntity: &changeStream0 changeStream0
384
+ - name: insertOne
385
+ object: *collection0
386
+ arguments:
387
+ document: { "_id": 1, "a": 1 }
388
+ - name: iterateUntilDocumentOrError
389
+ object: *changeStream0
390
+ expectError:
391
+ errorCode: 280
392
+ errorCodeName: "ChangeStreamFatalError"
393
+ errorLabelsContain: [ "NonResumableChangeStreamError" ]
394
+
395
+ - description: "Test projection in change stream returns expected fields"
396
+ operations:
397
+ - name: createChangeStream
398
+ object: *collection0
399
+ arguments:
400
+ pipeline: [ { $project: { optype: "$operationType", ns: 1, newField: "value" } } ]
401
+ saveResultAsEntity: &changeStream0 changeStream0
402
+ - name: insertOne
403
+ object: *collection0
404
+ arguments:
405
+ document: { "_id": 1, "a": 1 }
406
+ - name: iterateUntilDocumentOrError
407
+ object: *changeStream0
408
+ expectResult:
409
+ optype: "insert"
410
+ ns:
411
+ db: *database0
412
+ coll: *collection0
413
+ newField: "value"
414
+
415
+ - description: $changeStream must be the first stage in a change stream pipeline sent to the server
416
+ runOnRequirements:
417
+ - minServerVersion: "3.6.0"
418
+ operations:
419
+ - name: createChangeStream
420
+ object: *collection0
421
+ arguments: { pipeline: [] }
422
+ saveResultAsEntity: &changeStream0 changeStream0
423
+ - name: insertOne
424
+ object: *globalCollection0
425
+ arguments:
426
+ document: { x: 1 }
427
+ - name: iterateUntilDocumentOrError
428
+ object: *changeStream0
429
+ expectResult:
430
+ _id: { $$exists: true }
431
+ documentKey: { $$exists: true }
432
+ operationType: insert
433
+ ns:
434
+ db: *database0
435
+ coll: *collection0
436
+ fullDocument:
437
+ x: 1
438
+ _id: { $$exists: true }
439
+ expectEvents:
440
+ - client: *client0
441
+ ignoreExtraEvents: true
442
+ events:
443
+ - commandStartedEvent:
444
+ command:
445
+ aggregate: *collection0
446
+ cursor: {}
447
+ pipeline: [ { $changeStream: {} } ]
448
+ commandName: aggregate
449
+ databaseName: *database0
450
+
451
+ - description: The server returns change stream responses in the specified server response format
452
+ runOnRequirements:
453
+ - minServerVersion: "3.6.0"
454
+ operations:
455
+ - name: createChangeStream
456
+ object: *collection0
457
+ arguments: { pipeline: [] }
458
+ saveResultAsEntity: &changeStream0 changeStream0
459
+ - name: insertOne
460
+ object: *globalCollection0
461
+ arguments:
462
+ document: { x: 1 }
463
+ - name: iterateUntilDocumentOrError
464
+ object: *changeStream0
465
+ expectResult:
466
+ _id: { $$exists: true }
467
+ documentKey: { $$exists: true }
468
+ operationType: insert
469
+ ns:
470
+ db: *database0
471
+ coll: *collection0
472
+ fullDocument:
473
+ x: 1
474
+ _id: { $$exists: true }
475
+
476
+ - description: Executing a watch helper on a Collection results in notifications for changes to the specified collection
477
+ runOnRequirements:
478
+ - minServerVersion: "3.6.0"
479
+ operations:
480
+ - name: createChangeStream
481
+ object: *collection0
482
+ arguments: { pipeline: [] }
483
+ saveResultAsEntity: &changeStream0 changeStream0
484
+ - name: insertOne
485
+ object: *globalDb0Collection1
486
+ arguments:
487
+ document: { x: 1 }
488
+ - name: insertOne
489
+ object: *globalDb1Collection0
490
+ arguments:
491
+ document: { y: 2 }
492
+ - name: insertOne
493
+ object: *globalCollection0
494
+ arguments:
495
+ document: { z: 3 }
496
+ - name: iterateUntilDocumentOrError
497
+ object: *changeStream0
498
+ expectResult:
499
+ operationType: insert
500
+ ns:
501
+ db: *database0
502
+ coll: *collection0
503
+ fullDocument:
504
+ z: 3
505
+ _id: { $$exists: true }
506
+ expectEvents:
507
+ - client: *client0
508
+ ignoreExtraEvents: true
509
+ events:
510
+ - commandStartedEvent:
511
+ command:
512
+ aggregate: *collection0
513
+ cursor: {}
514
+ pipeline: [ { $changeStream: {} } ]
515
+ commandName: aggregate
516
+ databaseName: *database0
517
+
518
+ - description: Change Stream should allow valid aggregate pipeline stages
519
+ runOnRequirements:
520
+ - minServerVersion: "3.6.0"
521
+ operations:
522
+ - name: createChangeStream
523
+ object: *collection0
524
+ arguments:
525
+ pipeline:
526
+ - $match:
527
+ fullDocument.z: 3
528
+ saveResultAsEntity: &changeStream0 changeStream0
529
+ - name: insertOne
530
+ object: *globalCollection0
531
+ arguments:
532
+ document: { y: 2 }
533
+ - name: insertOne
534
+ object: *globalCollection0
535
+ arguments:
536
+ document: { z: 3 }
537
+ - name: iterateUntilDocumentOrError
538
+ object: *changeStream0
539
+ expectResult:
540
+ operationType: insert
541
+ ns:
542
+ db: *database0
543
+ coll: *collection0
544
+ fullDocument:
545
+ z: 3
546
+ _id: { $$exists: true }
547
+ expectEvents:
548
+ - client: *client0
549
+ ignoreExtraEvents: true
550
+ events:
551
+ - commandStartedEvent:
552
+ command:
553
+ aggregate: *collection0
554
+ cursor: {}
555
+ pipeline:
556
+ - $changeStream: {}
557
+ - $match:
558
+ fullDocument.z: 3
559
+ commandName: aggregate
560
+ databaseName: *database0
561
+
562
+ - description: Executing a watch helper on a Database results in notifications for changes to all collections in the specified database.
563
+ runOnRequirements:
564
+ - minServerVersion: "3.8.0"
565
+ operations:
566
+ - name: createChangeStream
567
+ object: *database0
568
+ arguments: { pipeline: [] }
569
+ saveResultAsEntity: &changeStream0 changeStream0
570
+ - name: insertOne
571
+ object: *globalDb0Collection1
572
+ arguments:
573
+ document: { x: 1 }
574
+ - name: insertOne
575
+ object: *globalDb1Collection0
576
+ arguments:
577
+ document: { y: 2 }
578
+ - name: insertOne
579
+ object: *globalCollection0
580
+ arguments:
581
+ document: { z: 3 }
582
+ - name: iterateUntilDocumentOrError
583
+ object: *changeStream0
584
+ expectResult:
585
+ operationType: insert
586
+ ns:
587
+ db: *database0
588
+ coll: *collection1
589
+ fullDocument:
590
+ x: 1
591
+ _id: { $$exists: true }
592
+ - name: iterateUntilDocumentOrError
593
+ object: *changeStream0
594
+ expectResult:
595
+ operationType: insert
596
+ ns:
597
+ db: *database0
598
+ coll: *collection0
599
+ fullDocument:
600
+ z: 3
601
+ _id: { $$exists: true }
602
+ expectEvents:
603
+ - client: *client0
604
+ ignoreExtraEvents: true
605
+ events:
606
+ - commandStartedEvent:
607
+ command:
608
+ aggregate: 1
609
+ cursor: {}
610
+ pipeline: [ { $changeStream: {} } ]
611
+ commandName: aggregate
612
+ databaseName: *database0
613
+
614
+ - description: Executing a watch helper on a MongoClient results in notifications for changes to all collections in all databases in the cluster.
615
+ runOnRequirements:
616
+ - minServerVersion: "3.8.0"
617
+ operations:
618
+ - name: createChangeStream
619
+ object: *client0
620
+ arguments: { pipeline: [] }
621
+ saveResultAsEntity: &changeStream0 changeStream0
622
+ - name: insertOne
623
+ object: *globalDb0Collection1
624
+ arguments:
625
+ document: { x: 1 }
626
+ - name: insertOne
627
+ object: *globalDb1Collection0
628
+ arguments:
629
+ document: { y: 2 }
630
+ - name: insertOne
631
+ object: *globalCollection0
632
+ arguments:
633
+ document: { z: 3 }
634
+ - name: iterateUntilDocumentOrError
635
+ object: *changeStream0
636
+ expectResult:
637
+ operationType: insert
638
+ ns:
639
+ db: *database0
640
+ coll: *collection1
641
+ fullDocument:
642
+ x: 1
643
+ _id: { $$exists: true }
644
+ - name: iterateUntilDocumentOrError
645
+ object: *changeStream0
646
+ expectResult:
647
+ operationType: insert
648
+ ns:
649
+ db: *database1
650
+ coll: *collection0
651
+ fullDocument:
652
+ y: 2
653
+ _id: { $$exists: true }
654
+ - name: iterateUntilDocumentOrError
655
+ object: *changeStream0
656
+ expectResult:
657
+ operationType: insert
658
+ ns:
659
+ db: *database0
660
+ coll: *collection0
661
+ fullDocument:
662
+ z: 3
663
+ _id: { $$exists: true }
664
+ expectEvents:
665
+ - client: *client0
666
+ ignoreExtraEvents: true
667
+ events:
668
+ - commandStartedEvent:
669
+ command:
670
+ aggregate: 1
671
+ cursor: {}
672
+ pipeline:
673
+ - $changeStream: { allChangesForCluster: true }
674
+ commandName: aggregate
675
+ databaseName: admin
676
+
677
+ - description: "Test insert, update, replace, and delete event types"
678
+ runOnRequirements:
679
+ - minServerVersion: "3.6.0"
680
+ operations:
681
+ - name: createChangeStream
682
+ object: *collection0
683
+ arguments: { pipeline: [] }
684
+ saveResultAsEntity: &changeStream0 changeStream0
685
+ - name: insertOne
686
+ object: *globalCollection0
687
+ arguments:
688
+ document: { x: 1 }
689
+ - name: updateOne
690
+ object: *globalCollection0
691
+ arguments:
692
+ filter: { x: 1 }
693
+ update:
694
+ $set: { x: 2 }
695
+ - name: replaceOne
696
+ object: *globalCollection0
697
+ arguments:
698
+ filter: { x: 2 }
699
+ replacement: { x: 3 }
700
+ - name: deleteOne
701
+ object: *globalCollection0
702
+ arguments:
703
+ filter: { x: 3 }
704
+ - name: iterateUntilDocumentOrError
705
+ object: *changeStream0
706
+ expectResult:
707
+ operationType: insert
708
+ ns:
709
+ db: *database0
710
+ coll: *collection0
711
+ fullDocument:
712
+ x: 1
713
+ _id: { $$exists: true }
714
+ - name: iterateUntilDocumentOrError
715
+ object: *changeStream0
716
+ expectResult:
717
+ operationType: update
718
+ ns:
719
+ db: *database0
720
+ coll: *collection0
721
+ updateDescription:
722
+ updatedFields: { x: 2 }
723
+ removedFields: []
724
+ truncatedArrays: { $$unsetOrMatches: { $$exists: true } }
725
+ - name: iterateUntilDocumentOrError
726
+ object: *changeStream0
727
+ expectResult:
728
+ operationType: replace
729
+ ns:
730
+ db: *database0
731
+ coll: *collection0
732
+ fullDocument:
733
+ x: 3
734
+ _id: { $$exists: true }
735
+ - name: iterateUntilDocumentOrError
736
+ object: *changeStream0
737
+ expectResult:
738
+ operationType: delete
739
+ ns:
740
+ db: *database0
741
+ coll: *collection0
742
+ expectEvents:
743
+ - client: *client0
744
+ ignoreExtraEvents: true
745
+ events:
746
+ - commandStartedEvent:
747
+ command:
748
+ aggregate: *collection0
749
+ cursor: {}
750
+ pipeline: [ { $changeStream: {} } ]
751
+ commandName: aggregate
752
+ databaseName: *database0
753
+
754
+ - description: Test rename and invalidate event types
755
+ runOnRequirements:
756
+ - minServerVersion: "4.0.1"
757
+ operations:
758
+ - name: createChangeStream
759
+ object: *collection0
760
+ arguments: { pipeline: [] }
761
+ saveResultAsEntity: &changeStream0 changeStream0
762
+ - name: dropCollection
763
+ object: *database0
764
+ arguments:
765
+ collection: *collection1
766
+ - name: rename
767
+ object: *globalCollection0
768
+ arguments:
769
+ to: *collection1
770
+ - name: iterateUntilDocumentOrError
771
+ object: *changeStream0
772
+ expectResult:
773
+ operationType: rename
774
+ ns:
775
+ db: *database0
776
+ coll: *collection0
777
+ to:
778
+ db: *database0
779
+ coll: *collection1
780
+ - name: iterateUntilDocumentOrError
781
+ object: *changeStream0
782
+ expectResult:
783
+ operationType: invalidate
784
+ expectEvents:
785
+ - client: *client0
786
+ ignoreExtraEvents: true
787
+ events:
788
+ - commandStartedEvent:
789
+ command:
790
+ aggregate: *collection0
791
+ cursor: {}
792
+ pipeline: [ { $changeStream: {} } ]
793
+ commandName: aggregate
794
+ databaseName: *database0
795
+
796
+ - description: Test drop and invalidate event types
797
+ runOnRequirements:
798
+ - minServerVersion: "4.0.1"
799
+ operations:
800
+ - name: createChangeStream
801
+ object: *collection0
802
+ arguments: { pipeline: [] }
803
+ saveResultAsEntity: &changeStream0 changeStream0
804
+ - name: dropCollection
805
+ object: *database0
806
+ arguments:
807
+ collection: *collection0
808
+ - name: iterateUntilDocumentOrError
809
+ object: *changeStream0
810
+ expectResult:
811
+ operationType: drop
812
+ ns:
813
+ db: *database0
814
+ coll: *collection0
815
+ - name: iterateUntilDocumentOrError
816
+ object: *changeStream0
817
+ expectResult:
818
+ operationType: invalidate
819
+ expectEvents:
820
+ - client: *client0
821
+ ignoreExtraEvents: true
822
+ events:
823
+ - commandStartedEvent:
824
+ command:
825
+ aggregate: *collection0
826
+ cursor: {}
827
+ pipeline: [ { $changeStream: {} } ]
828
+ commandName: aggregate
829
+ databaseName: *database0
830
+
831
+ # Test that resume logic works correctly even after consecutive retryable failures of a getMore command,
832
+ # with no intervening events. This is ensured by setting the batch size of the change stream to 1,
833
+ - description: Test consecutive resume
834
+ runOnRequirements:
835
+ - minServerVersion: "4.1.7"
836
+ operations:
837
+ - name: failPoint
838
+ object: testRunner
839
+ arguments:
840
+ client: *globalClient
841
+ failPoint:
842
+ configureFailPoint: failCommand
843
+ mode: { times: 2 }
844
+ data:
845
+ failCommands: [ getMore ]
846
+ closeConnection: true
847
+ - name: createChangeStream
848
+ object: *collection0
849
+ arguments:
850
+ pipeline: []
851
+ batchSize: 1
852
+ saveResultAsEntity: &changeStream0 changeStream0
853
+ - name: insertOne
854
+ object: *globalCollection0
855
+ arguments:
856
+ document: { x: 1 }
857
+ - name: insertOne
858
+ object: *globalCollection0
859
+ arguments:
860
+ document: { x: 2 }
861
+ - name: insertOne
862
+ object: *globalCollection0
863
+ arguments:
864
+ document: { x: 3 }
865
+ - name: iterateUntilDocumentOrError
866
+ object: *changeStream0
867
+ expectResult:
868
+ operationType: insert
869
+ ns:
870
+ db: *database0
871
+ coll: *collection0
872
+ fullDocument:
873
+ x: 1
874
+ _id: { $$exists: true }
875
+ - name: iterateUntilDocumentOrError
876
+ object: *changeStream0
877
+ expectResult:
878
+ operationType: insert
879
+ ns:
880
+ db: *database0
881
+ coll: *collection0
882
+ fullDocument:
883
+ x: 2
884
+ _id: { $$exists: true }
885
+ - name: iterateUntilDocumentOrError
886
+ object: *changeStream0
887
+ expectResult:
888
+ operationType: insert
889
+ ns:
890
+ db: *database0
891
+ coll: *collection0
892
+ fullDocument:
893
+ x: 3
894
+ _id: { $$exists: true }
895
+ expectEvents:
896
+ - client: *client0
897
+ ignoreExtraEvents: true
898
+ events:
899
+ - commandStartedEvent:
900
+ command:
901
+ aggregate: *collection0
902
+ cursor:
903
+ batchSize: 1
904
+ pipeline: [ { $changeStream: {} } ]
905
+ commandName: aggregate
906
+ databaseName: *database0
907
+
908
+ - description: "Test wallTime field is set in a change event"
909
+ runOnRequirements:
910
+ - minServerVersion: "6.0.0"
911
+ operations:
912
+ - name: createChangeStream
913
+ object: *collection0
914
+ arguments: { pipeline: [] }
915
+ saveResultAsEntity: &changeStream0 changeStream0
916
+ - name: insertOne
917
+ object: *collection0
918
+ arguments:
919
+ document: { "_id": 1, "a": 1 }
920
+ - name: iterateUntilDocumentOrError
921
+ object: *changeStream0
922
+ expectResult:
923
+ operationType: "insert"
924
+ ns:
925
+ db: *database0
926
+ coll: *collection0
927
+ wallTime: { $$exists: true }