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