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
@@ -0,0 +1,1068 @@
1
+ # Tests for resume behavior on server versions that support the ResumableChangeStreamError label
2
+ description: "change-streams-resume-errorlabels"
3
+
4
+ schemaVersion: "1.7"
5
+
6
+ runOnRequirements:
7
+ - minServerVersion: "4.3.1"
8
+ # Removed load balanced tests as per RUBY-2952 because they were causing
9
+ # failures.
10
+ topologies: [ replicaset, sharded-replicaset ] #, load-balanced ]
11
+ serverless: forbid
12
+
13
+ createEntities:
14
+ - client:
15
+ id: &client0 client0
16
+ observeEvents: [ commandStartedEvent ]
17
+ ignoreCommandMonitoringEvents: [ killCursors ]
18
+ useMultipleMongoses: false
19
+ - client:
20
+ id: &globalClient globalClient
21
+ useMultipleMongoses: false
22
+ - database:
23
+ id: &database0 database0
24
+ client: *client0
25
+ databaseName: *database0
26
+ - collection:
27
+ id: &collection0 collection0
28
+ database: *database0
29
+ collectionName: *collection0
30
+ - database:
31
+ id: &globalDatabase0 globalDatabase0
32
+ client: *globalClient
33
+ databaseName: *database0
34
+ - collection:
35
+ id: &globalCollection0 globalCollection0
36
+ database: *globalDatabase0
37
+ collectionName: *collection0
38
+
39
+ tests:
40
+ - description: change stream resumes after HostUnreachable
41
+ operations:
42
+ - name: failPoint
43
+ object: testRunner
44
+ arguments:
45
+ client: *globalClient
46
+ failPoint:
47
+ configureFailPoint: failGetMoreAfterCursorCheckout # SERVER-46091 explains why a new failpoint was needed
48
+ mode: { times: 1 }
49
+ data:
50
+ errorCode: 6
51
+ closeConnection: false
52
+ - name: createChangeStream
53
+ object: *collection0
54
+ arguments: { pipeline: [] }
55
+ saveResultAsEntity: &changeStream0 changeStream0
56
+ - name: insertOne
57
+ object: *globalCollection0
58
+ arguments:
59
+ document: { x: 1 }
60
+ - name: iterateUntilDocumentOrError
61
+ object: *changeStream0
62
+ expectResult:
63
+ _id: { $$exists: true }
64
+ documentKey: { $$exists: true }
65
+ operationType: insert
66
+ ns:
67
+ db: *database0
68
+ coll: *collection0
69
+ fullDocument:
70
+ x: 1
71
+ _id: { $$exists: true }
72
+ expectEvents:
73
+ - client: *client0
74
+ ignoreExtraEvents: true
75
+ events:
76
+ - commandStartedEvent:
77
+ command:
78
+ aggregate: *collection0
79
+ cursor: {}
80
+ pipeline: [ { $changeStream: {} } ]
81
+ commandName: aggregate
82
+ databaseName: *database0
83
+ - commandStartedEvent:
84
+ command:
85
+ getMore: { $$exists: true }
86
+ collection: *collection0
87
+ commandName: getMore
88
+ databaseName: *database0
89
+ - commandStartedEvent:
90
+ command:
91
+ aggregate: *collection0
92
+ cursor: {}
93
+ pipeline:
94
+ - $changeStream:
95
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
96
+ commandName: aggregate
97
+ databaseName: *database0
98
+
99
+ - description: change stream resumes after HostNotFound
100
+ operations:
101
+ - name: failPoint
102
+ object: testRunner
103
+ arguments:
104
+ client: *globalClient
105
+ failPoint:
106
+ configureFailPoint: failGetMoreAfterCursorCheckout
107
+ mode: { times: 1 }
108
+ data:
109
+ errorCode: 7
110
+ closeConnection: false
111
+ - name: createChangeStream
112
+ object: *collection0
113
+ arguments: { pipeline: [] }
114
+ saveResultAsEntity: &changeStream0 changeStream0
115
+ - name: insertOne
116
+ object: *globalCollection0
117
+ arguments:
118
+ document: { x: 1 }
119
+ - name: iterateUntilDocumentOrError
120
+ object: *changeStream0
121
+ expectResult:
122
+ _id: { $$exists: true }
123
+ documentKey: { $$exists: true }
124
+ operationType: insert
125
+ ns:
126
+ db: *database0
127
+ coll: *collection0
128
+ fullDocument:
129
+ x: 1
130
+ _id: { $$exists: true }
131
+ expectEvents:
132
+ - client: *client0
133
+ ignoreExtraEvents: true
134
+ events:
135
+ - commandStartedEvent:
136
+ command:
137
+ aggregate: *collection0
138
+ cursor: {}
139
+ pipeline: [ { $changeStream: {} } ]
140
+ commandName: aggregate
141
+ databaseName: *database0
142
+ - commandStartedEvent:
143
+ command:
144
+ getMore: { $$exists: true }
145
+ collection: *collection0
146
+ commandName: getMore
147
+ databaseName: *database0
148
+ - commandStartedEvent:
149
+ command:
150
+ aggregate: *collection0
151
+ cursor: {}
152
+ pipeline:
153
+ - $changeStream:
154
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
155
+ commandName: aggregate
156
+ databaseName: *database0
157
+
158
+ - description: change stream resumes after NetworkTimeout
159
+ operations:
160
+ - name: failPoint
161
+ object: testRunner
162
+ arguments:
163
+ client: *globalClient
164
+ failPoint:
165
+ configureFailPoint: failGetMoreAfterCursorCheckout
166
+ mode: { times: 1 }
167
+ data:
168
+ errorCode: 89
169
+ closeConnection: false
170
+ - name: createChangeStream
171
+ object: *collection0
172
+ arguments: { pipeline: [] }
173
+ saveResultAsEntity: &changeStream0 changeStream0
174
+ - name: insertOne
175
+ object: *globalCollection0
176
+ arguments:
177
+ document: { x: 1 }
178
+ - name: iterateUntilDocumentOrError
179
+ object: *changeStream0
180
+ expectResult:
181
+ _id: { $$exists: true }
182
+ documentKey: { $$exists: true }
183
+ operationType: insert
184
+ ns:
185
+ db: *database0
186
+ coll: *collection0
187
+ fullDocument:
188
+ x: 1
189
+ _id: { $$exists: true }
190
+ expectEvents:
191
+ - client: *client0
192
+ ignoreExtraEvents: true
193
+ events:
194
+ - commandStartedEvent:
195
+ command:
196
+ aggregate: *collection0
197
+ cursor: {}
198
+ pipeline: [ { $changeStream: {} } ]
199
+ commandName: aggregate
200
+ databaseName: *database0
201
+ - commandStartedEvent:
202
+ command:
203
+ getMore: { $$exists: true }
204
+ collection: *collection0
205
+ commandName: getMore
206
+ databaseName: *database0
207
+ - commandStartedEvent:
208
+ command:
209
+ aggregate: *collection0
210
+ cursor: {}
211
+ pipeline:
212
+ - $changeStream:
213
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
214
+ commandName: aggregate
215
+
216
+ - description: change stream resumes after ShutdownInProgress
217
+ operations:
218
+ - name: failPoint
219
+ object: testRunner
220
+ arguments:
221
+ client: *globalClient
222
+ failPoint:
223
+ configureFailPoint: failGetMoreAfterCursorCheckout
224
+ mode: { times: 1 }
225
+ data:
226
+ errorCode: 91
227
+ closeConnection: false
228
+ - name: createChangeStream
229
+ object: *collection0
230
+ arguments: { pipeline: [] }
231
+ saveResultAsEntity: &changeStream0 changeStream0
232
+ - name: insertOne
233
+ object: *globalCollection0
234
+ arguments:
235
+ document: { x: 1 }
236
+ - name: iterateUntilDocumentOrError
237
+ object: *changeStream0
238
+ expectResult:
239
+ _id: { $$exists: true }
240
+ documentKey: { $$exists: true }
241
+ operationType: insert
242
+ ns:
243
+ db: *database0
244
+ coll: *collection0
245
+ fullDocument:
246
+ x: 1
247
+ _id: { $$exists: true }
248
+ expectEvents:
249
+ - client: *client0
250
+ ignoreExtraEvents: true
251
+ events:
252
+ - commandStartedEvent:
253
+ command:
254
+ aggregate: *collection0
255
+ cursor: {}
256
+ pipeline: [ { $changeStream: {} } ]
257
+ commandName: aggregate
258
+ databaseName: *database0
259
+ - commandStartedEvent:
260
+ command:
261
+ getMore: { $$exists: true }
262
+ collection: *collection0
263
+ commandName: getMore
264
+ databaseName: *database0
265
+ - commandStartedEvent:
266
+ command:
267
+ aggregate: *collection0
268
+ cursor: {}
269
+ pipeline:
270
+ - $changeStream:
271
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
272
+ commandName: aggregate
273
+ databaseName: *database0
274
+
275
+ - description: change stream resumes after PrimarySteppedDown
276
+ operations:
277
+ - name: failPoint
278
+ object: testRunner
279
+ arguments:
280
+ client: *globalClient
281
+ failPoint:
282
+ configureFailPoint: failGetMoreAfterCursorCheckout
283
+ mode: { times: 1 }
284
+ data:
285
+ errorCode: 189
286
+ closeConnection: false
287
+ - name: createChangeStream
288
+ object: *collection0
289
+ arguments: { pipeline: [] }
290
+ saveResultAsEntity: &changeStream0 changeStream0
291
+ - name: insertOne
292
+ object: *globalCollection0
293
+ arguments:
294
+ document: { x: 1 }
295
+ - name: iterateUntilDocumentOrError
296
+ object: *changeStream0
297
+ expectResult:
298
+ _id: { $$exists: true }
299
+ documentKey: { $$exists: true }
300
+ operationType: insert
301
+ ns:
302
+ db: *database0
303
+ coll: *collection0
304
+ fullDocument:
305
+ x: 1
306
+ _id: { $$exists: true }
307
+ expectEvents:
308
+ - client: *client0
309
+ ignoreExtraEvents: true
310
+ events:
311
+ - commandStartedEvent:
312
+ command:
313
+ aggregate: *collection0
314
+ cursor: {}
315
+ pipeline: [ { $changeStream: {} } ]
316
+ commandName: aggregate
317
+ databaseName: *database0
318
+ - commandStartedEvent:
319
+ command:
320
+ getMore: { $$exists: true }
321
+ collection: *collection0
322
+ commandName: getMore
323
+ databaseName: *database0
324
+ - commandStartedEvent:
325
+ command:
326
+ aggregate: *collection0
327
+ cursor: {}
328
+ pipeline:
329
+ - $changeStream:
330
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
331
+ commandName: aggregate
332
+ databaseName: *database0
333
+
334
+ - description: change stream resumes after ExceededTimeLimit
335
+ operations:
336
+ - name: failPoint
337
+ object: testRunner
338
+ arguments:
339
+ client: *globalClient
340
+ failPoint:
341
+ configureFailPoint: failGetMoreAfterCursorCheckout
342
+ mode: { times: 1 }
343
+ data:
344
+ errorCode: 262
345
+ closeConnection: false
346
+ - name: createChangeStream
347
+ object: *collection0
348
+ arguments: { pipeline: [] }
349
+ saveResultAsEntity: &changeStream0 changeStream0
350
+ - name: insertOne
351
+ object: *globalCollection0
352
+ arguments:
353
+ document: { x: 1 }
354
+ - name: iterateUntilDocumentOrError
355
+ object: *changeStream0
356
+ expectResult:
357
+ _id: { $$exists: true }
358
+ documentKey: { $$exists: true }
359
+ operationType: insert
360
+ ns:
361
+ db: *database0
362
+ coll: *collection0
363
+ fullDocument:
364
+ x: 1
365
+ _id: { $$exists: true }
366
+ expectEvents:
367
+ - client: *client0
368
+ ignoreExtraEvents: true
369
+ events:
370
+ - commandStartedEvent:
371
+ command:
372
+ aggregate: *collection0
373
+ cursor: {}
374
+ pipeline: [ { $changeStream: {} } ]
375
+ commandName: aggregate
376
+ databaseName: *database0
377
+ - commandStartedEvent:
378
+ command:
379
+ getMore: { $$exists: true }
380
+ collection: *collection0
381
+ commandName: getMore
382
+ databaseName: *database0
383
+ - commandStartedEvent:
384
+ command:
385
+ aggregate: *collection0
386
+ cursor: {}
387
+ pipeline:
388
+ - $changeStream:
389
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
390
+ commandName: aggregate
391
+ databaseName: *database0
392
+
393
+ - description: change stream resumes after SocketException
394
+ operations:
395
+ - name: failPoint
396
+ object: testRunner
397
+ arguments:
398
+ client: *globalClient
399
+ failPoint:
400
+ configureFailPoint: failGetMoreAfterCursorCheckout
401
+ mode: { times: 1 }
402
+ data:
403
+ errorCode: 9001
404
+ closeConnection: false
405
+ - name: createChangeStream
406
+ object: *collection0
407
+ arguments: { pipeline: [] }
408
+ saveResultAsEntity: &changeStream0 changeStream0
409
+ - name: insertOne
410
+ object: *globalCollection0
411
+ arguments:
412
+ document: { x: 1 }
413
+ - name: iterateUntilDocumentOrError
414
+ object: *changeStream0
415
+ expectResult:
416
+ _id: { $$exists: true }
417
+ documentKey: { $$exists: true }
418
+ operationType: insert
419
+ ns:
420
+ db: *database0
421
+ coll: *collection0
422
+ fullDocument:
423
+ x: 1
424
+ _id: { $$exists: true }
425
+ expectEvents:
426
+ - client: *client0
427
+ ignoreExtraEvents: true
428
+ events:
429
+ - commandStartedEvent:
430
+ command:
431
+ aggregate: *collection0
432
+ cursor: {}
433
+ pipeline: [ { $changeStream: {} } ]
434
+ commandName: aggregate
435
+ databaseName: *database0
436
+ - commandStartedEvent:
437
+ command:
438
+ getMore: { $$exists: true }
439
+ collection: *collection0
440
+ commandName: getMore
441
+ databaseName: *database0
442
+ - commandStartedEvent:
443
+ command:
444
+ aggregate: *collection0
445
+ cursor: {}
446
+ pipeline:
447
+ - $changeStream:
448
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
449
+ commandName: aggregate
450
+ databaseName: *database0
451
+
452
+ - description: change stream resumes after NotWritablePrimary
453
+ operations:
454
+ - name: failPoint
455
+ object: testRunner
456
+ arguments:
457
+ client: *globalClient
458
+ failPoint:
459
+ configureFailPoint: failGetMoreAfterCursorCheckout
460
+ mode: { times: 1 }
461
+ data:
462
+ errorCode: 10107
463
+ closeConnection: false
464
+ - name: createChangeStream
465
+ object: *collection0
466
+ arguments: { pipeline: [] }
467
+ saveResultAsEntity: &changeStream0 changeStream0
468
+ - name: insertOne
469
+ object: *globalCollection0
470
+ arguments:
471
+ document: { x: 1 }
472
+ - name: iterateUntilDocumentOrError
473
+ object: *changeStream0
474
+ expectResult:
475
+ _id: { $$exists: true }
476
+ documentKey: { $$exists: true }
477
+ operationType: insert
478
+ ns:
479
+ db: *database0
480
+ coll: *collection0
481
+ fullDocument:
482
+ x: 1
483
+ _id: { $$exists: true }
484
+ expectEvents:
485
+ - client: *client0
486
+ ignoreExtraEvents: true
487
+ events:
488
+ - commandStartedEvent:
489
+ command:
490
+ aggregate: *collection0
491
+ cursor: {}
492
+ pipeline: [ { $changeStream: {} } ]
493
+ commandName: aggregate
494
+ databaseName: *database0
495
+ - commandStartedEvent:
496
+ command:
497
+ getMore: { $$exists: true }
498
+ collection: *collection0
499
+ commandName: getMore
500
+ databaseName: *database0
501
+ - commandStartedEvent:
502
+ command:
503
+ aggregate: *collection0
504
+ cursor: {}
505
+ pipeline:
506
+ - $changeStream:
507
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
508
+ commandName: aggregate
509
+ databaseName: *database0
510
+
511
+ - description: change stream resumes after InterruptedAtShutdown
512
+ operations:
513
+ - name: failPoint
514
+ object: testRunner
515
+ arguments:
516
+ client: *globalClient
517
+ failPoint:
518
+ configureFailPoint: failGetMoreAfterCursorCheckout
519
+ mode: { times: 1 }
520
+ data:
521
+ errorCode: 11600
522
+ closeConnection: false
523
+ - name: createChangeStream
524
+ object: *collection0
525
+ arguments: { pipeline: [] }
526
+ saveResultAsEntity: &changeStream0 changeStream0
527
+ - name: insertOne
528
+ object: *globalCollection0
529
+ arguments:
530
+ document: { x: 1 }
531
+ - name: iterateUntilDocumentOrError
532
+ object: *changeStream0
533
+ expectResult:
534
+ _id: { $$exists: true }
535
+ documentKey: { $$exists: true }
536
+ operationType: insert
537
+ ns:
538
+ db: *database0
539
+ coll: *collection0
540
+ fullDocument:
541
+ x: 1
542
+ _id: { $$exists: true }
543
+ expectEvents:
544
+ - client: *client0
545
+ ignoreExtraEvents: true
546
+ events:
547
+ - commandStartedEvent:
548
+ command:
549
+ aggregate: *collection0
550
+ cursor: {}
551
+ pipeline: [ { $changeStream: {} } ]
552
+ commandName: aggregate
553
+ databaseName: *database0
554
+ - commandStartedEvent:
555
+ command:
556
+ getMore: { $$exists: true }
557
+ collection: *collection0
558
+ commandName: getMore
559
+ databaseName: *database0
560
+ - commandStartedEvent:
561
+ command:
562
+ aggregate: *collection0
563
+ cursor: {}
564
+ pipeline:
565
+ - $changeStream:
566
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
567
+ commandName: aggregate
568
+ databaseName: *database0
569
+
570
+ - description: change stream resumes after InterruptedDueToReplStateChange
571
+ operations:
572
+ - name: failPoint
573
+ object: testRunner
574
+ arguments:
575
+ client: *globalClient
576
+ failPoint:
577
+ configureFailPoint: failGetMoreAfterCursorCheckout
578
+ mode: { times: 1 }
579
+ data:
580
+ errorCode: 11602
581
+ closeConnection: false
582
+ - name: createChangeStream
583
+ object: *collection0
584
+ arguments: { pipeline: [] }
585
+ saveResultAsEntity: &changeStream0 changeStream0
586
+ - name: insertOne
587
+ object: *globalCollection0
588
+ arguments:
589
+ document: { x: 1 }
590
+ - name: iterateUntilDocumentOrError
591
+ object: *changeStream0
592
+ expectResult:
593
+ _id: { $$exists: true }
594
+ documentKey: { $$exists: true }
595
+ operationType: insert
596
+ ns:
597
+ db: *database0
598
+ coll: *collection0
599
+ fullDocument:
600
+ x: 1
601
+ _id: { $$exists: true }
602
+ expectEvents:
603
+ - client: *client0
604
+ ignoreExtraEvents: true
605
+ events:
606
+ - commandStartedEvent:
607
+ command:
608
+ aggregate: *collection0
609
+ cursor: {}
610
+ pipeline: [ { $changeStream: {} } ]
611
+ commandName: aggregate
612
+ databaseName: *database0
613
+ - commandStartedEvent:
614
+ command:
615
+ getMore: { $$exists: true }
616
+ collection: *collection0
617
+ commandName: getMore
618
+ databaseName: *database0
619
+ - commandStartedEvent:
620
+ command:
621
+ aggregate: *collection0
622
+ cursor: {}
623
+ pipeline:
624
+ - $changeStream:
625
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
626
+ commandName: aggregate
627
+ databaseName: *database0
628
+
629
+ - description: change stream resumes after NotPrimaryNoSecondaryOk
630
+ operations:
631
+ - name: failPoint
632
+ object: testRunner
633
+ arguments:
634
+ client: *globalClient
635
+ failPoint:
636
+ configureFailPoint: failGetMoreAfterCursorCheckout
637
+ mode: { times: 1 }
638
+ data:
639
+ errorCode: 13435
640
+ closeConnection: false
641
+ - name: createChangeStream
642
+ object: *collection0
643
+ arguments: { pipeline: [] }
644
+ saveResultAsEntity: &changeStream0 changeStream0
645
+ - name: insertOne
646
+ object: *globalCollection0
647
+ arguments:
648
+ document: { x: 1 }
649
+ - name: iterateUntilDocumentOrError
650
+ object: *changeStream0
651
+ expectResult:
652
+ _id: { $$exists: true }
653
+ documentKey: { $$exists: true }
654
+ operationType: insert
655
+ ns:
656
+ db: *database0
657
+ coll: *collection0
658
+ fullDocument:
659
+ x: 1
660
+ _id: { $$exists: true }
661
+ expectEvents:
662
+ - client: *client0
663
+ ignoreExtraEvents: true
664
+ events:
665
+ - commandStartedEvent:
666
+ command:
667
+ aggregate: *collection0
668
+ cursor: {}
669
+ pipeline: [ { $changeStream: {} } ]
670
+ commandName: aggregate
671
+ databaseName: *database0
672
+ - commandStartedEvent:
673
+ command:
674
+ getMore: { $$exists: true }
675
+ collection: *collection0
676
+ commandName: getMore
677
+ databaseName: *database0
678
+ - commandStartedEvent:
679
+ command:
680
+ aggregate: *collection0
681
+ cursor: {}
682
+ pipeline:
683
+ - $changeStream:
684
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
685
+ commandName: aggregate
686
+ databaseName: *database0
687
+
688
+ - description: change stream resumes after NotPrimaryOrSecondary
689
+ operations:
690
+ - name: failPoint
691
+ object: testRunner
692
+ arguments:
693
+ client: *globalClient
694
+ failPoint:
695
+ configureFailPoint: failGetMoreAfterCursorCheckout
696
+ mode: { times: 1 }
697
+ data:
698
+ errorCode: 13436
699
+ closeConnection: false
700
+ - name: createChangeStream
701
+ object: *collection0
702
+ arguments: { pipeline: [] }
703
+ saveResultAsEntity: &changeStream0 changeStream0
704
+ - name: insertOne
705
+ object: *globalCollection0
706
+ arguments:
707
+ document: { x: 1 }
708
+ - name: iterateUntilDocumentOrError
709
+ object: *changeStream0
710
+ expectResult:
711
+ _id: { $$exists: true }
712
+ documentKey: { $$exists: true }
713
+ operationType: insert
714
+ ns:
715
+ db: *database0
716
+ coll: *collection0
717
+ fullDocument:
718
+ x: 1
719
+ _id: { $$exists: true }
720
+ expectEvents:
721
+ - client: *client0
722
+ ignoreExtraEvents: true
723
+ events:
724
+ - commandStartedEvent:
725
+ command:
726
+ aggregate: *collection0
727
+ cursor: {}
728
+ pipeline: [ { $changeStream: {} } ]
729
+ commandName: aggregate
730
+ databaseName: *database0
731
+ - commandStartedEvent:
732
+ command:
733
+ getMore: { $$exists: true }
734
+ collection: *collection0
735
+ commandName: getMore
736
+ databaseName: *database0
737
+ - commandStartedEvent:
738
+ command:
739
+ aggregate: *collection0
740
+ cursor: {}
741
+ pipeline:
742
+ - $changeStream:
743
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
744
+ commandName: aggregate
745
+ databaseName: *database0
746
+
747
+ - description: change stream resumes after StaleShardVersion
748
+ operations:
749
+ - name: failPoint
750
+ object: testRunner
751
+ arguments:
752
+ client: *globalClient
753
+ failPoint:
754
+ configureFailPoint: failGetMoreAfterCursorCheckout
755
+ mode: { times: 1 }
756
+ data:
757
+ errorCode: 63
758
+ closeConnection: false
759
+ - name: createChangeStream
760
+ object: *collection0
761
+ arguments: { pipeline: [] }
762
+ saveResultAsEntity: &changeStream0 changeStream0
763
+ - name: insertOne
764
+ object: *globalCollection0
765
+ arguments:
766
+ document: { x: 1 }
767
+ - name: iterateUntilDocumentOrError
768
+ object: *changeStream0
769
+ expectResult:
770
+ _id: { $$exists: true }
771
+ documentKey: { $$exists: true }
772
+ operationType: insert
773
+ ns:
774
+ db: *database0
775
+ coll: *collection0
776
+ fullDocument:
777
+ x: 1
778
+ _id: { $$exists: true }
779
+ expectEvents:
780
+ - client: *client0
781
+ ignoreExtraEvents: true
782
+ events:
783
+ - commandStartedEvent:
784
+ command:
785
+ aggregate: *collection0
786
+ cursor: {}
787
+ pipeline: [ { $changeStream: {} } ]
788
+ commandName: aggregate
789
+ databaseName: *database0
790
+ - commandStartedEvent:
791
+ command:
792
+ getMore: { $$exists: true }
793
+ collection: *collection0
794
+ commandName: getMore
795
+ databaseName: *database0
796
+ - commandStartedEvent:
797
+ command:
798
+ aggregate: *collection0
799
+ cursor: {}
800
+ pipeline:
801
+ - $changeStream:
802
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
803
+ commandName: aggregate
804
+ databaseName: *database0
805
+
806
+ - description: change stream resumes after StaleEpoch
807
+ operations:
808
+ - name: failPoint
809
+ object: testRunner
810
+ arguments:
811
+ client: *globalClient
812
+ failPoint:
813
+ configureFailPoint: failGetMoreAfterCursorCheckout
814
+ mode: { times: 1 }
815
+ data:
816
+ errorCode: 150
817
+ closeConnection: false
818
+ - name: createChangeStream
819
+ object: *collection0
820
+ arguments: { pipeline: [] }
821
+ saveResultAsEntity: &changeStream0 changeStream0
822
+ - name: insertOne
823
+ object: *globalCollection0
824
+ arguments:
825
+ document: { x: 1 }
826
+ - name: iterateUntilDocumentOrError
827
+ object: *changeStream0
828
+ expectResult:
829
+ _id: { $$exists: true }
830
+ documentKey: { $$exists: true }
831
+ operationType: insert
832
+ ns:
833
+ db: *database0
834
+ coll: *collection0
835
+ fullDocument:
836
+ x: 1
837
+ _id: { $$exists: true }
838
+ expectEvents:
839
+ - client: *client0
840
+ ignoreExtraEvents: true
841
+ events:
842
+ - commandStartedEvent:
843
+ command:
844
+ aggregate: *collection0
845
+ cursor: {}
846
+ pipeline: [ { $changeStream: {} } ]
847
+ commandName: aggregate
848
+ databaseName: *database0
849
+ - commandStartedEvent:
850
+ command:
851
+ getMore: { $$exists: true }
852
+ collection: *collection0
853
+ commandName: getMore
854
+ databaseName: *database0
855
+ - commandStartedEvent:
856
+ command:
857
+ aggregate: *collection0
858
+ cursor: {}
859
+ pipeline:
860
+ - $changeStream:
861
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
862
+ commandName: aggregate
863
+ databaseName: *database0
864
+
865
+ - description: change stream resumes after RetryChangeStream
866
+ operations:
867
+ - name: failPoint
868
+ object: testRunner
869
+ arguments:
870
+ client: *globalClient
871
+ failPoint:
872
+ configureFailPoint: failGetMoreAfterCursorCheckout
873
+ mode: { times: 1 }
874
+ data:
875
+ errorCode: 234
876
+ closeConnection: false
877
+ - name: createChangeStream
878
+ object: *collection0
879
+ arguments: { pipeline: [] }
880
+ saveResultAsEntity: &changeStream0 changeStream0
881
+ - name: insertOne
882
+ object: *globalCollection0
883
+ arguments:
884
+ document: { x: 1 }
885
+ - name: iterateUntilDocumentOrError
886
+ object: *changeStream0
887
+ expectResult:
888
+ _id: { $$exists: true }
889
+ documentKey: { $$exists: true }
890
+ operationType: insert
891
+ ns:
892
+ db: *database0
893
+ coll: *collection0
894
+ fullDocument:
895
+ x: 1
896
+ _id: { $$exists: true }
897
+ expectEvents:
898
+ - client: *client0
899
+ ignoreExtraEvents: true
900
+ events:
901
+ - commandStartedEvent:
902
+ command:
903
+ aggregate: *collection0
904
+ cursor: {}
905
+ pipeline: [ { $changeStream: {} } ]
906
+ commandName: aggregate
907
+ databaseName: *database0
908
+ - commandStartedEvent:
909
+ command:
910
+ getMore: { $$exists: true }
911
+ collection: *collection0
912
+ commandName: getMore
913
+ databaseName: *database0
914
+ - commandStartedEvent:
915
+ command:
916
+ aggregate: *collection0
917
+ cursor: {}
918
+ pipeline:
919
+ - $changeStream:
920
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
921
+ commandName: aggregate
922
+ databaseName: *database0
923
+
924
+ - description: change stream resumes after FailedToSatisfyReadPreference
925
+ operations:
926
+ - name: failPoint
927
+ object: testRunner
928
+ arguments:
929
+ client: *globalClient
930
+ failPoint:
931
+ configureFailPoint: failGetMoreAfterCursorCheckout
932
+ mode: { times: 1 }
933
+ data:
934
+ errorCode: 133
935
+ closeConnection: false
936
+ - name: createChangeStream
937
+ object: *collection0
938
+ arguments: { pipeline: [] }
939
+ saveResultAsEntity: &changeStream0 changeStream0
940
+ - name: insertOne
941
+ object: *globalCollection0
942
+ arguments:
943
+ document: { x: 1 }
944
+ - name: iterateUntilDocumentOrError
945
+ object: *changeStream0
946
+ expectResult:
947
+ _id: { $$exists: true }
948
+ documentKey: { $$exists: true }
949
+ operationType: insert
950
+ ns:
951
+ db: *database0
952
+ coll: *collection0
953
+ fullDocument:
954
+ x: 1
955
+ _id: { $$exists: true }
956
+ expectEvents:
957
+ - client: *client0
958
+ ignoreExtraEvents: true
959
+ events:
960
+ - commandStartedEvent:
961
+ command:
962
+ aggregate: *collection0
963
+ cursor: {}
964
+ pipeline: [ { $changeStream: {} } ]
965
+ commandName: aggregate
966
+ databaseName: *database0
967
+ - commandStartedEvent:
968
+ command:
969
+ getMore: { $$exists: true }
970
+ collection: *collection0
971
+ commandName: getMore
972
+ databaseName: *database0
973
+ - commandStartedEvent:
974
+ command:
975
+ aggregate: *collection0
976
+ cursor: {}
977
+ pipeline:
978
+ - $changeStream:
979
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
980
+ commandName: aggregate
981
+ databaseName: *database0
982
+
983
+ # The next two tests ensure that the driver only uses the error label, not the allow list.
984
+ - description: change stream resumes if error contains ResumableChangeStreamError
985
+ operations:
986
+ - name: failPoint
987
+ object: testRunner
988
+ arguments:
989
+ client: *globalClient
990
+ failPoint:
991
+ configureFailPoint: failCommand
992
+ mode: { times: 1 }
993
+ data:
994
+ failCommands: [ getMore ]
995
+ errorCode: 50 # Use an error code that does not have the allow list label by default
996
+ closeConnection: false
997
+ errorLabels: [ ResumableChangeStreamError ]
998
+ - name: createChangeStream
999
+ object: *collection0
1000
+ arguments: { pipeline: [] }
1001
+ saveResultAsEntity: &changeStream0 changeStream0
1002
+ - name: insertOne
1003
+ object: *globalCollection0
1004
+ arguments:
1005
+ document: { x: 1 }
1006
+ - name: iterateUntilDocumentOrError
1007
+ object: *changeStream0
1008
+ expectResult:
1009
+ _id: { $$exists: true }
1010
+ documentKey: { $$exists: true }
1011
+ operationType: insert
1012
+ ns:
1013
+ db: *database0
1014
+ coll: *collection0
1015
+ fullDocument:
1016
+ x: 1
1017
+ _id: { $$exists: true }
1018
+ expectEvents:
1019
+ - client: *client0
1020
+ ignoreExtraEvents: true
1021
+ events:
1022
+ - commandStartedEvent:
1023
+ command:
1024
+ aggregate: *collection0
1025
+ cursor: {}
1026
+ pipeline: [ { $changeStream: {} } ]
1027
+ commandName: aggregate
1028
+ databaseName: *database0
1029
+ - commandStartedEvent:
1030
+ command:
1031
+ getMore: { $$exists: true }
1032
+ collection: *collection0
1033
+ commandName: getMore
1034
+ databaseName: *database0
1035
+ - commandStartedEvent:
1036
+ command:
1037
+ aggregate: *collection0
1038
+ cursor: {}
1039
+ pipeline:
1040
+ - $changeStream:
1041
+ resumeAfter: { $$unsetOrMatches: { $$exists: true } }
1042
+ commandName: aggregate
1043
+ databaseName: *database0
1044
+
1045
+ - description: change stream does not resume if error does not contain ResumableChangeStreamError
1046
+ operations:
1047
+ - name: failPoint
1048
+ object: testRunner
1049
+ arguments:
1050
+ client: *globalClient
1051
+ failPoint:
1052
+ configureFailPoint: failCommand # failCommand will not add the allow list error label
1053
+ mode: { times: 1 }
1054
+ data:
1055
+ failCommands: [ getMore ]
1056
+ errorCode: 6 # Use an error code that is on the allow list
1057
+ closeConnection: false
1058
+ - name: createChangeStream
1059
+ object: *collection0
1060
+ arguments: { pipeline: [] }
1061
+ saveResultAsEntity: &changeStream0 changeStream0
1062
+ - name: insertOne
1063
+ object: *globalCollection0
1064
+ arguments:
1065
+ document: { x: 1 }
1066
+ - name: iterateUntilDocumentOrError
1067
+ object: *changeStream0
1068
+ expectError: { errorCode: 6 }