mongo 2.17.2 → 2.18.1

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 (689) 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 +115 -29
  9. data/lib/mongo/client.rb +133 -17
  10. data/lib/mongo/client_encryption.rb +113 -10
  11. data/lib/mongo/cluster/reapers/cursor_reaper.rb +11 -1
  12. data/lib/mongo/cluster.rb +26 -28
  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 +22 -16
  16. data/lib/mongo/collection/view/change_stream.rb +65 -23
  17. data/lib/mongo/collection/view/explainable.rb +1 -1
  18. data/lib/mongo/collection/view/iterable.rb +2 -2
  19. data/lib/mongo/collection/view/map_reduce.rb +18 -9
  20. data/lib/mongo/collection/view/readable.rb +29 -25
  21. data/lib/mongo/collection/view/writable.rb +133 -40
  22. data/lib/mongo/collection.rb +117 -49
  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 +42 -0
  26. data/lib/mongo/crypt/auto_encrypter.rb +136 -14
  27. data/lib/mongo/crypt/binding.rb +513 -144
  28. data/lib/mongo/crypt/context.rb +5 -2
  29. data/lib/mongo/crypt/data_key_context.rb +12 -104
  30. data/lib/mongo/crypt/encryption_io.rb +94 -60
  31. data/lib/mongo/crypt/explicit_encrypter.rb +143 -26
  32. data/lib/mongo/crypt/explicit_encryption_context.rb +25 -2
  33. data/lib/mongo/crypt/handle.rb +160 -86
  34. data/lib/mongo/crypt/hooks.rb +25 -2
  35. data/lib/mongo/crypt/kms/aws.rb +136 -0
  36. data/lib/mongo/crypt/kms/azure.rb +144 -0
  37. data/lib/mongo/crypt/kms/credentials.rb +81 -0
  38. data/lib/mongo/crypt/kms/gcp.rb +189 -0
  39. data/lib/mongo/crypt/kms/kmip.rb +116 -0
  40. data/lib/mongo/crypt/kms/local.rb +82 -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/rewrap_many_data_key_context.rb +46 -0
  44. data/lib/mongo/crypt/rewrap_many_data_key_result.rb +37 -0
  45. data/lib/mongo/crypt/status.rb +8 -2
  46. data/lib/mongo/crypt.rb +3 -0
  47. data/lib/mongo/cursor/kill_spec.rb +27 -6
  48. data/lib/mongo/cursor.rb +26 -11
  49. data/lib/mongo/database/view.rb +6 -3
  50. data/lib/mongo/database.rb +57 -13
  51. data/lib/mongo/dbref.rb +1 -105
  52. data/lib/mongo/error/bulk_write_error.rb +31 -4
  53. data/lib/mongo/error/invalid_config_option.rb +20 -0
  54. data/lib/mongo/error/invalid_replacement_document.rb +27 -9
  55. data/lib/mongo/error/invalid_update_document.rb +27 -7
  56. data/lib/mongo/error/labelable.rb +72 -0
  57. data/lib/mongo/error/missing_connection.rb +25 -0
  58. data/lib/mongo/error/missing_file_chunk.rb +8 -2
  59. data/lib/mongo/error/notable.rb +7 -0
  60. data/lib/mongo/error/operation_failure.rb +34 -86
  61. data/lib/mongo/error/read_write_retryable.rb +108 -0
  62. data/lib/mongo/{operation/kill_cursors/legacy.rb → error/session_not_materialized.rb} +7 -19
  63. data/lib/mongo/error.rb +5 -37
  64. data/lib/mongo/grid/stream/read.rb +6 -0
  65. data/lib/mongo/index/view.rb +23 -7
  66. data/lib/mongo/monitoring/event/command_failed.rb +8 -2
  67. data/lib/mongo/monitoring/event/command_started.rb +1 -1
  68. data/lib/mongo/monitoring/event/command_succeeded.rb +9 -2
  69. data/lib/mongo/monitoring/publishable.rb +9 -5
  70. data/lib/mongo/operation/collections_info/result.rb +5 -2
  71. data/lib/mongo/operation/command/op_msg.rb +6 -0
  72. data/lib/mongo/operation/context.rb +24 -6
  73. data/lib/mongo/operation/count/op_msg.rb +4 -1
  74. data/lib/mongo/operation/create/op_msg.rb +4 -1
  75. data/lib/mongo/operation/create_index/op_msg.rb +2 -1
  76. data/lib/mongo/operation/delete/op_msg.rb +1 -0
  77. data/lib/mongo/operation/delete.rb +0 -1
  78. data/lib/mongo/operation/distinct/op_msg.rb +4 -1
  79. data/lib/mongo/operation/drop_index/op_msg.rb +5 -1
  80. data/lib/mongo/operation/get_more/command_builder.rb +5 -1
  81. data/lib/mongo/operation/insert/bulk_result.rb +5 -1
  82. data/lib/mongo/operation/insert/command.rb +0 -4
  83. data/lib/mongo/operation/insert/op_msg.rb +6 -3
  84. data/lib/mongo/operation/insert/result.rb +6 -3
  85. data/lib/mongo/operation/insert.rb +0 -1
  86. data/lib/mongo/operation/kill_cursors.rb +0 -1
  87. data/lib/mongo/operation/list_collections/op_msg.rb +4 -1
  88. data/lib/mongo/operation/map_reduce/result.rb +16 -0
  89. data/lib/mongo/operation/result.rb +21 -5
  90. data/lib/mongo/operation/shared/executable.rb +21 -6
  91. data/lib/mongo/operation/shared/polymorphic_operation.rb +15 -3
  92. data/lib/mongo/operation/shared/response_handling.rb +6 -5
  93. data/lib/mongo/operation/shared/sessions_supported.rb +7 -3
  94. data/lib/mongo/operation/shared/write.rb +18 -12
  95. data/lib/mongo/operation/update/op_msg.rb +2 -1
  96. data/lib/mongo/operation/update.rb +0 -1
  97. data/lib/mongo/protocol/caching_hash.rb +69 -0
  98. data/lib/mongo/protocol/msg.rb +21 -1
  99. data/lib/mongo/protocol.rb +1 -0
  100. data/lib/mongo/query_cache.rb +15 -0
  101. data/lib/mongo/retryable.rb +78 -30
  102. data/lib/mongo/server/connection.rb +33 -0
  103. data/lib/mongo/server/connection_base.rb +2 -0
  104. data/lib/mongo/server/connection_common.rb +4 -1
  105. data/lib/mongo/server/connection_pool.rb +74 -46
  106. data/lib/mongo/server/description/features.rb +3 -1
  107. data/lib/mongo/server/description.rb +7 -2
  108. data/lib/mongo/server/monitor/connection.rb +1 -0
  109. data/lib/mongo/server/monitor.rb +25 -13
  110. data/lib/mongo/server/push_monitor.rb +13 -3
  111. data/lib/mongo/server.rb +9 -5
  112. data/lib/mongo/session/session_pool.rb +8 -0
  113. data/lib/mongo/session.rb +111 -35
  114. data/lib/mongo/socket/ocsp_verifier.rb +4 -5
  115. data/lib/mongo/socket/tcp.rb +3 -0
  116. data/lib/mongo/srv/resolver.rb +24 -3
  117. data/lib/mongo/uri/options_mapper.rb +2 -0
  118. data/lib/mongo/uri/srv_protocol.rb +1 -1
  119. data/lib/mongo/uri.rb +20 -0
  120. data/lib/mongo/version.rb +1 -1
  121. data/lib/mongo.rb +22 -0
  122. data/mongo.gemspec +10 -4
  123. data/spec/README.md +23 -5
  124. data/spec/integration/aws_lambda_examples_spec.rb +68 -0
  125. data/spec/integration/bulk_write_error_message_spec.rb +32 -0
  126. data/spec/integration/bulk_write_spec.rb +16 -0
  127. data/spec/integration/change_stream_spec.rb +6 -5
  128. data/spec/integration/client_construction_spec.rb +74 -8
  129. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -9
  130. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +168 -168
  131. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +0 -1
  132. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +31 -0
  133. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +108 -1
  134. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +2 -2
  135. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +2 -2
  136. data/spec/integration/client_side_encryption/client_close_spec.rb +1 -1
  137. data/spec/integration/client_side_encryption/corpus_spec.rb +64 -35
  138. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +39 -42
  139. data/spec/integration/client_side_encryption/data_key_spec.rb +97 -7
  140. data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +158 -0
  141. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +59 -0
  142. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +147 -0
  143. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +6 -6
  144. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +436 -0
  145. data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
  146. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +111 -0
  147. data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +85 -0
  148. data/spec/integration/client_side_encryption/views_spec.rb +1 -1
  149. data/spec/integration/client_update_spec.rb +2 -2
  150. data/spec/integration/crud_spec.rb +12 -0
  151. data/spec/integration/cursor_pinning_spec.rb +3 -3
  152. data/spec/integration/fork_reconnect_spec.rb +15 -8
  153. data/spec/integration/grid_fs_bucket_spec.rb +3 -3
  154. data/spec/integration/ocsp_verifier_spec.rb +3 -0
  155. data/spec/integration/query_cache_spec.rb +34 -30
  156. data/spec/integration/reconnect_spec.rb +2 -0
  157. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
  158. data/spec/integration/server_monitor_spec.rb +2 -1
  159. data/spec/integration/size_limit_spec.rb +4 -1
  160. data/spec/integration/snapshot_query_examples_spec.rb +127 -0
  161. data/spec/integration/srv_monitoring_spec.rb +38 -0
  162. data/spec/integration/srv_spec.rb +1 -0
  163. data/spec/integration/step_down_spec.rb +20 -4
  164. data/spec/integration/transaction_pinning_spec.rb +2 -2
  165. data/spec/integration/versioned_api_examples_spec.rb +37 -31
  166. data/spec/lite_spec_helper.rb +19 -9
  167. data/spec/mongo/address/ipv6_spec.rb +7 -0
  168. data/spec/mongo/address_spec.rb +7 -0
  169. data/spec/mongo/auth/scram/conversation_spec.rb +23 -23
  170. data/spec/mongo/auth/scram256/conversation_spec.rb +20 -20
  171. data/spec/mongo/auth/scram_negotiation_spec.rb +1 -0
  172. data/spec/mongo/bulk_write/result_spec.rb +15 -1
  173. data/spec/mongo/bulk_write_spec.rb +141 -20
  174. data/spec/mongo/client_construction_spec.rb +186 -9
  175. data/spec/mongo/client_encryption_spec.rb +10 -22
  176. data/spec/mongo/client_spec.rb +297 -1
  177. data/spec/mongo/cluster/cursor_reaper_spec.rb +21 -3
  178. data/spec/mongo/cluster_spec.rb +0 -44
  179. data/spec/mongo/collection/view/aggregation_spec.rb +121 -2
  180. data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
  181. data/spec/mongo/collection/view/readable_spec.rb +605 -1
  182. data/spec/mongo/collection/view/writable_spec.rb +144 -32
  183. data/spec/mongo/collection_crud_spec.rb +63 -13
  184. data/spec/mongo/collection_spec.rb +32 -0
  185. data/spec/mongo/config/options_spec.rb +75 -0
  186. data/spec/mongo/config_spec.rb +73 -0
  187. data/spec/mongo/crypt/auto_decryption_context_spec.rb +17 -1
  188. data/spec/mongo/crypt/auto_encrypter_spec.rb +256 -5
  189. data/spec/mongo/crypt/auto_encryption_context_spec.rb +17 -1
  190. data/spec/mongo/crypt/binding/context_spec.rb +67 -17
  191. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +17 -46
  192. data/spec/mongo/crypt/binding/version_spec.rb +33 -0
  193. data/spec/mongo/crypt/binding_unloaded_spec.rb +14 -0
  194. data/spec/mongo/crypt/data_key_context_spec.rb +42 -114
  195. data/spec/mongo/crypt/encryption_io_spec.rb +2 -0
  196. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +32 -1
  197. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +94 -1
  198. data/spec/mongo/crypt/handle_spec.rb +172 -156
  199. data/spec/mongo/crypt/hooks_spec.rb +30 -0
  200. data/spec/mongo/crypt/kms/credentials_spec.rb +357 -0
  201. data/spec/mongo/crypt/kms_spec.rb +59 -0
  202. data/spec/mongo/cursor_spec.rb +87 -1
  203. data/spec/mongo/database_spec.rb +66 -1
  204. data/spec/mongo/error/operation_failure_heavy_spec.rb +49 -0
  205. data/spec/mongo/index/view_spec.rb +125 -0
  206. data/spec/mongo/operation/create/op_msg_spec.rb +244 -0
  207. data/spec/mongo/operation/delete/op_msg_spec.rb +13 -4
  208. data/spec/mongo/operation/delete_spec.rb +0 -30
  209. data/spec/mongo/operation/insert/op_msg_spec.rb +18 -10
  210. data/spec/mongo/operation/insert_spec.rb +0 -32
  211. data/spec/mongo/operation/result_spec.rb +20 -0
  212. data/spec/mongo/operation/update/op_msg_spec.rb +13 -4
  213. data/spec/mongo/operation/update_spec.rb +0 -29
  214. data/spec/mongo/protocol/caching_hash_spec.rb +82 -0
  215. data/spec/mongo/protocol/msg_spec.rb +41 -0
  216. data/spec/mongo/query_cache_spec.rb +1 -0
  217. data/spec/mongo/retryable_spec.rb +32 -3
  218. data/spec/mongo/server/connection_auth_spec.rb +3 -1
  219. data/spec/mongo/server/connection_common_spec.rb +13 -1
  220. data/spec/mongo/server/connection_pool_spec.rb +120 -53
  221. data/spec/mongo/server/connection_spec.rb +50 -159
  222. data/spec/mongo/server/description/features_spec.rb +24 -0
  223. data/spec/mongo/server/push_monitor_spec.rb +2 -8
  224. data/spec/mongo/session_spec.rb +26 -6
  225. data/spec/mongo/session_transaction_spec.rb +2 -1
  226. data/spec/mongo/socket/ssl_spec.rb +18 -7
  227. data/spec/mongo/uri/srv_protocol_spec.rb +101 -2
  228. data/spec/mongo/uri_spec.rb +25 -0
  229. data/spec/runners/connection_string.rb +8 -0
  230. data/spec/runners/crud/operation.rb +12 -3
  231. data/spec/runners/crud/requirement.rb +9 -4
  232. data/spec/runners/crud/spec.rb +5 -0
  233. data/spec/runners/crud/test.rb +1 -1
  234. data/spec/runners/crud/verifier.rb +6 -0
  235. data/spec/runners/transactions/spec.rb +2 -2
  236. data/spec/runners/transactions/test.rb +19 -16
  237. data/spec/runners/transactions.rb +11 -8
  238. data/spec/runners/unified/assertions.rb +90 -11
  239. data/spec/runners/unified/change_stream_operations.rb +12 -0
  240. data/spec/runners/unified/client_side_encryption_operations.rb +83 -0
  241. data/spec/runners/unified/crud_operations.rb +67 -4
  242. data/spec/runners/unified/ddl_operations.rb +45 -0
  243. data/spec/runners/unified/error.rb +2 -1
  244. data/spec/runners/unified/grid_fs_operations.rb +21 -0
  245. data/spec/runners/unified/support_operations.rb +5 -2
  246. data/spec/runners/unified/test.rb +78 -5
  247. data/spec/runners/unified.rb +9 -2
  248. data/spec/shared/lib/mrss/constraints.rb +10 -17
  249. data/spec/shared/lib/mrss/docker_runner.rb +23 -3
  250. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  251. data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
  252. data/spec/shared/lib/mrss/lite_constraints.rb +40 -1
  253. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  254. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  255. data/spec/shared/share/Dockerfile.erb +56 -54
  256. data/spec/shared/shlib/config.sh +27 -0
  257. data/spec/shared/shlib/distro.sh +2 -1
  258. data/spec/shared/shlib/server.sh +46 -21
  259. data/spec/shared/shlib/set_env.sh +43 -5
  260. data/spec/solo/clean_exit_spec.rb +5 -0
  261. data/spec/spec_helper.rb +0 -1
  262. data/spec/spec_tests/client_side_encryption_spec.rb +1 -1
  263. data/spec/spec_tests/client_side_encryption_unified_spec.rb +16 -0
  264. data/spec/spec_tests/crud_spec.rb +0 -10
  265. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +124 -0
  266. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
  267. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1171 -0
  268. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1071 -0
  269. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +298 -0
  270. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +859 -4
  271. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
  272. data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
  273. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +12 -2
  274. data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
  275. data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
  276. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
  277. data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
  278. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
  279. data/spec/spec_tests/data/client_side_encryption/create-and-createIndexes.yml +58 -0
  280. data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
  281. data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
  282. data/spec/spec_tests/data/client_side_encryption/explain.yml +1 -8
  283. data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
  284. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
  285. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
  286. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
  287. data/spec/spec_tests/data/client_side_encryption/fle2-BypassQueryAnalysis.yml +101 -0
  288. data/spec/spec_tests/data/client_side_encryption/fle2-Compact.yml +80 -0
  289. data/spec/spec_tests/data/client_side_encryption/fle2-CreateCollection.yml +1263 -0
  290. data/spec/spec_tests/data/client_side_encryption/fle2-DecryptExistingData.yml +64 -0
  291. data/spec/spec_tests/data/client_side_encryption/fle2-Delete.yml +107 -0
  292. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-EncryptedFieldsMap.yml +80 -0
  293. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-jsonSchema.yml +90 -0
  294. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFieldsMap-defaults.yml +57 -0
  295. data/spec/spec_tests/data/client_side_encryption/fle2-FindOneAndUpdate.yml +213 -0
  296. data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Indexed.yml +86 -0
  297. data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Unindexed.yml +83 -0
  298. data/spec/spec_tests/data/client_side_encryption/fle2-MissingKey.yml +41 -0
  299. data/spec/spec_tests/data/client_side_encryption/fle2-NoEncryption.yml +42 -0
  300. data/spec/spec_tests/data/client_side_encryption/fle2-Update.yml +221 -0
  301. data/spec/spec_tests/data/client_side_encryption/fle2-validatorAndPartialFieldExpression.yml +168 -0
  302. data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
  303. data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
  304. data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
  305. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
  306. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
  307. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
  308. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +2 -0
  309. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
  310. data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
  311. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
  312. data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
  313. data/spec/spec_tests/data/client_side_encryption/unified/addKeyAltName.yml +194 -0
  314. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +67 -0
  315. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey.yml +309 -0
  316. data/spec/spec_tests/data/client_side_encryption/unified/deleteKey.yml +159 -0
  317. data/spec/spec_tests/data/client_side_encryption/unified/getKey.yml +105 -0
  318. data/spec/spec_tests/data/client_side_encryption/unified/getKeyByAltName.yml +104 -0
  319. data/spec/spec_tests/data/client_side_encryption/unified/getKeys.yml +122 -0
  320. data/spec/spec_tests/data/client_side_encryption/unified/removeKeyAltName.yml +157 -0
  321. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-decrypt_failure.yml +69 -0
  322. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-encrypt_failure.yml +122 -0
  323. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +432 -0
  324. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
  325. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
  326. data/spec/spec_tests/data/client_side_encryption/validatorAndPartialFieldExpression.yml +166 -0
  327. data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
  328. data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
  329. data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
  330. data/spec/spec_tests/data/command_monitoring_unified/bulkWrite.yml +68 -0
  331. data/spec/spec_tests/data/command_monitoring_unified/command.yml +50 -0
  332. data/spec/spec_tests/data/command_monitoring_unified/deleteMany.yml +79 -0
  333. data/spec/spec_tests/data/command_monitoring_unified/deleteOne.yml +79 -0
  334. data/spec/spec_tests/data/command_monitoring_unified/find.yml +254 -0
  335. data/spec/spec_tests/data/command_monitoring_unified/insertMany.yml +79 -0
  336. data/spec/spec_tests/data/command_monitoring_unified/insertOne.yml +77 -0
  337. data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
  338. data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
  339. data/spec/spec_tests/data/command_monitoring_unified/unacknowledgedBulkWrite.yml +55 -0
  340. data/spec/spec_tests/data/command_monitoring_unified/updateMany.yml +87 -0
  341. data/spec/spec_tests/data/command_monitoring_unified/updateOne.yml +118 -0
  342. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +1 -1
  343. data/spec/spec_tests/data/crud/read/count-collation.yml +1 -1
  344. data/spec/spec_tests/data/crud/read/distinct-collation.yml +1 -1
  345. data/spec/spec_tests/data/crud/read/find-collation.yml +1 -1
  346. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +1 -1
  347. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +1 -1
  348. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +1 -1
  349. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +1 -1
  350. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +1 -1
  351. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +1 -1
  352. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +1 -1
  353. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +1 -1
  354. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +1 -1
  355. data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
  356. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
  357. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
  358. data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
  359. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
  360. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
  361. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
  362. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
  363. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
  364. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
  365. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
  366. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
  367. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
  368. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
  369. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
  370. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
  371. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
  372. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
  373. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
  374. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
  375. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
  376. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
  377. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
  378. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
  379. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
  380. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
  381. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
  382. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
  383. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
  384. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
  385. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
  386. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
  387. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
  388. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
  389. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
  390. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +2 -0
  391. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
  392. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
  393. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
  394. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
  395. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
  396. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +2 -0
  397. data/spec/spec_tests/data/crud_unified/distinct-comment.yml +98 -0
  398. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
  399. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +5 -135
  400. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
  401. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
  402. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
  403. data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
  404. data/spec/spec_tests/data/crud_unified/find.yml +68 -0
  405. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
  406. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
  407. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
  408. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
  409. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
  410. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +2 -4
  411. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
  412. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
  413. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
  414. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
  415. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
  416. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
  417. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
  418. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
  419. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
  420. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
  421. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
  422. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
  423. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
  424. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
  425. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
  426. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
  427. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
  428. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
  429. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
  430. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
  431. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
  432. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
  433. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
  434. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
  435. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
  436. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
  437. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
  438. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
  439. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +5 -1
  440. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
  441. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
  442. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
  443. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
  444. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
  445. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
  446. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
  447. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +5 -1
  448. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
  449. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
  450. data/spec/spec_tests/data/gridfs_unified/delete.yml +198 -0
  451. data/spec/spec_tests/data/gridfs_unified/download.yml +241 -0
  452. data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +159 -0
  453. data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +92 -0
  454. data/spec/spec_tests/data/gridfs_unified/upload.yml +288 -0
  455. data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
  456. data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
  457. data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
  458. data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
  459. data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
  460. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
  461. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
  462. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
  463. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +0 -0
  464. data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
  465. data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
  466. data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
  467. data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
  468. data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
  469. data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
  470. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
  471. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
  472. data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
  473. data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
  474. data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
  475. data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
  476. data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
  477. data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
  478. data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
  479. data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
  480. data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
  481. data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
  482. data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
  483. data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
  484. data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
  485. data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
  486. data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
  487. data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
  488. data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
  489. data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
  490. data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
  491. data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
  492. data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
  493. data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
  494. data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
  495. data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
  496. data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
  497. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +129 -0
  498. data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
  499. data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
  500. data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
  501. data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
  502. data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
  503. data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
  504. data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
  505. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
  506. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
  507. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
  508. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
  509. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
  510. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
  511. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
  512. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
  513. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
  514. data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
  515. data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
  516. data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
  517. data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
  518. data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
  519. data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
  520. data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
  521. data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
  522. data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
  523. data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
  524. data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
  525. data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
  526. data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
  527. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +96 -0
  528. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +137 -0
  529. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +78 -0
  530. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
  531. data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +6 -14
  532. data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +4 -14
  533. data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +8 -14
  534. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
  535. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
  536. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
  537. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +10 -0
  538. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +10 -0
  539. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
  540. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
  541. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
  542. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
  543. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
  544. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
  545. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
  546. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
  547. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
  548. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
  549. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
  550. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
  551. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
  552. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
  553. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
  554. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +9 -3
  555. data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
  556. data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
  557. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
  558. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -2
  559. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
  560. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
  561. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
  562. data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
  563. data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
  564. data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +118 -0
  565. data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +118 -0
  566. data/spec/spec_tests/data/unified/invalid/expectedEventsForClient-ignoreExtraEvents-type.yml +15 -0
  567. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
  568. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
  569. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +4 -1
  570. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
  571. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -2
  572. data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
  573. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
  574. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
  575. data/spec/spec_tests/gridfs_unified_spec.rb +13 -0
  576. data/spec/spec_tests/retryable_reads_spec.rb +4 -1
  577. data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
  578. data/spec/spec_tests/retryable_writes_spec.rb +4 -1
  579. data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
  580. data/spec/spec_tests/seed_list_discovery_spec.rb +10 -1
  581. data/spec/spec_tests/unified_spec.rb +6 -1
  582. data/spec/stress/connection_pool_timing_spec.rb +3 -2
  583. data/spec/stress/fork_reconnect_stress_spec.rb +3 -2
  584. data/spec/support/authorization.rb +1 -1
  585. data/spec/support/background_thread_registry.rb +3 -13
  586. data/spec/support/certificates/retrieve-atlas-cert +38 -0
  587. data/spec/support/cluster_tools.rb +1 -1
  588. data/spec/support/common_shortcuts.rb +22 -0
  589. data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
  590. data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
  591. data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
  592. data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
  593. data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
  594. data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
  595. data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
  596. data/spec/support/crypt/corpus/corpus.json +4999 -37
  597. data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
  598. data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
  599. data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
  600. data/spec/support/crypt/encryptedFields.json +33 -0
  601. data/spec/support/crypt/keys/key1-document.json +30 -0
  602. data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
  603. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  604. data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
  605. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  606. data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
  607. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  608. data/spec/support/crypt.rb +258 -13
  609. data/spec/support/macros.rb +28 -0
  610. data/spec/support/mongos_macros.rb +17 -0
  611. data/spec/support/shared/scram_conversation.rb +2 -1
  612. data/spec/support/shared/session.rb +13 -7
  613. data/spec/support/spec_config.rb +90 -1
  614. data/spec/support/utils.rb +25 -4
  615. data.tar.gz.sig +0 -0
  616. metadata +604 -290
  617. metadata.gz.sig +0 -0
  618. data/lib/mongo/operation/delete/legacy.rb +0 -64
  619. data/lib/mongo/operation/insert/legacy.rb +0 -68
  620. data/lib/mongo/operation/update/legacy/result.rb +0 -112
  621. data/lib/mongo/operation/update/legacy.rb +0 -76
  622. data/spec/mongo/dbref_spec.rb +0 -152
  623. data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
  624. data/spec/spec_tests/change_streams_spec.rb +0 -93
  625. data/spec/spec_tests/command_monitoring_spec.rb +0 -71
  626. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -101
  627. data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +0 -1173
  628. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
  629. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -535
  630. data/spec/spec_tests/data/command_monitoring/bulkWrite.yml +0 -49
  631. data/spec/spec_tests/data/command_monitoring/command.yml +0 -61
  632. data/spec/spec_tests/data/command_monitoring/deleteMany.yml +0 -55
  633. data/spec/spec_tests/data/command_monitoring/deleteOne.yml +0 -55
  634. data/spec/spec_tests/data/command_monitoring/find.yml +0 -266
  635. data/spec/spec_tests/data/command_monitoring/insertMany.yml +0 -75
  636. data/spec/spec_tests/data/command_monitoring/insertOne.yml +0 -51
  637. data/spec/spec_tests/data/command_monitoring/unacknowledgedBulkWrite.yml +0 -34
  638. data/spec/spec_tests/data/command_monitoring/updateMany.yml +0 -65
  639. data/spec/spec_tests/data/command_monitoring/updateOne.yml +0 -90
  640. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
  641. data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -111
  642. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
  643. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
  644. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
  645. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
  646. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
  647. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
  648. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
  649. data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -39
  650. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
  651. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
  652. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
  653. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
  654. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
  655. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
  656. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
  657. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
  658. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
  659. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
  660. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
  661. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
  662. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
  663. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
  664. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
  665. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
  666. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
  667. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
  668. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
  669. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
  670. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
  671. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
  672. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
  673. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
  674. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
  675. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
  676. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
  677. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
  678. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
  679. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
  680. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
  681. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
  682. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
  683. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
  684. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
  685. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
  686. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +0 -60
  687. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +0 -146
  688. data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
  689. data/spec/support/session_registry.rb +0 -55
@@ -9,9 +9,10 @@ describe 'Versioned API examples' do
9
9
  # the tests to simple configurations
10
10
  require_no_auth
11
11
  require_no_tls
12
+ min_server_version("5.0")
12
13
 
13
14
  let(:uri_string) do
14
- "mongodb://#{SpecConfig.instance.addresses.join(',')}"
15
+ "mongodb://#{SpecConfig.instance.addresses.join(',')}/versioned-api-examples"
15
16
  end
16
17
 
17
18
  it 'Versioned API example 1' do
@@ -67,48 +68,53 @@ describe 'Versioned API examples' do
67
68
  client.close
68
69
  end
69
70
 
70
- it "Versioned API Strict Migration Example" do
71
- client = Mongo::Client.new(uri_string, server_api: {version: "1", strict: true})
72
- client[:sales].drop
71
+ # See also RUBY-2922 for count in versioned api v1.
72
+ context 'servers that exclude count from versioned api' do
73
+ max_server_version '5.0.8'
73
74
 
74
- # Start Versioned API Example 5
75
+ it "Versioned API Strict Migration Example" do
76
+ client = Mongo::Client.new(uri_string, server_api: {version: "1", strict: true})
77
+ client[:sales].drop
75
78
 
76
- client[:sales].insert_many([
77
- { _id: 1, item: "abc", price: 10, quantity: 2, date: DateTime.parse("2021-01-01T08:00:00Z") },
78
- { _id: 2, item: "jkl", price: 20, quantity: 1, date: DateTime.parse("2021-02-03T09:00:00Z") },
79
- { _id: 3, item: "xyz", price: 5, quantity: 5, date: DateTime.parse("2021-02-03T09:05:00Z") },
80
- { _id: 4, item: "abc", price: 10, quantity: 10, date: DateTime.parse("2021-02-15T08:00:00Z") },
81
- { _id: 5, item: "xyz", price: 5, quantity: 10, date: DateTime.parse("2021-02-15T09:05:00Z") },
82
- { _id: 6, item: "xyz", price: 5, quantity: 5, date: DateTime.parse("2021-02-15T12:05:10Z") },
83
- { _id: 7, item: "xyz", price: 5, quantity: 10, date: DateTime.parse("2021-02-15T14:12:12Z") },
84
- { _id: 8, item: "abc", price: 10, quantity: 5, date: DateTime.parse("2021-03-16T20:20:13Z") }
85
- ])
79
+ # Start Versioned API Example 5
86
80
 
87
- # End Versioned API Example 5
81
+ client[:sales].insert_many([
82
+ { _id: 1, item: "abc", price: 10, quantity: 2, date: DateTime.parse("2021-01-01T08:00:00Z") },
83
+ { _id: 2, item: "jkl", price: 20, quantity: 1, date: DateTime.parse("2021-02-03T09:00:00Z") },
84
+ { _id: 3, item: "xyz", price: 5, quantity: 5, date: DateTime.parse("2021-02-03T09:05:00Z") },
85
+ { _id: 4, item: "abc", price: 10, quantity: 10, date: DateTime.parse("2021-02-15T08:00:00Z") },
86
+ { _id: 5, item: "xyz", price: 5, quantity: 10, date: DateTime.parse("2021-02-15T09:05:00Z") },
87
+ { _id: 6, item: "xyz", price: 5, quantity: 5, date: DateTime.parse("2021-02-15T12:05:10Z") },
88
+ { _id: 7, item: "xyz", price: 5, quantity: 10, date: DateTime.parse("2021-02-15T14:12:12Z") },
89
+ { _id: 8, item: "abc", price: 10, quantity: 5, date: DateTime.parse("2021-03-16T20:20:13Z") }
90
+ ])
88
91
 
89
- expect do
90
- client.database.command(count: :sales)
91
- end.to raise_error(Mongo::Error::OperationFailure)
92
+ # End Versioned API Example 5
92
93
 
93
- # Start Versioned API Example 6
94
+ expect do
95
+ client.database.command(count: :sales)
96
+ end.to raise_error(Mongo::Error::OperationFailure)
94
97
 
95
- # Mongo::Error::OperationFailure:
96
- # [323:APIStrictError]: Provided apiStrict:true, but the command count is not in API Version 1. Information on supported commands and migrations in API Version 1 can be found at https://dochub.mongodb.org/core/manual-versioned-api
98
+ # Start Versioned API Example 6
97
99
 
98
- # End Versioned API Example 6
100
+ # Mongo::Error::OperationFailure:
101
+ # [323:APIStrictError]: Provided apiStrict:true, but the command count is not in API Version 1. Information on supported commands and migrations in API Version 1 can be found at https://dochub.mongodb.org/core/manual-versioned-api
99
102
 
100
- # Start Versioned API Example 7
103
+ # End Versioned API Example 6
101
104
 
102
- client[:sales].count_documents
105
+ # Start Versioned API Example 7
103
106
 
104
- # End Versioned API Example 7
107
+ client[:sales].count_documents
105
108
 
106
- # Start Versioned API Example 8
109
+ # End Versioned API Example 7
107
110
 
108
- # 8
111
+ # Start Versioned API Example 8
109
112
 
110
- # End Versioned API Example 8
111
- # Do not leak clients.
112
- client.close
113
+ # 8
114
+
115
+ # End Versioned API Example 8
116
+ # Do not leak clients.
117
+ client.close
118
+ end
113
119
  end
114
120
  end
@@ -10,10 +10,6 @@ SERVER_DISCOVERY_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/sdam/**/*.yml
10
10
  SDAM_MONITORING_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/sdam_monitoring/*.yml").sort
11
11
  SERVER_SELECTION_RTT_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/server_selection_rtt/*.yml").sort
12
12
  CRUD_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/crud/**/*.yml").sort
13
- CRUD2_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/crud_v2/**/*.yml").sort
14
- RETRYABLE_WRITES_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/retryable_writes/**/*.yml").sort
15
- RETRYABLE_READS_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/retryable_reads/**/*.yml").sort
16
- COMMAND_MONITORING_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/command_monitoring/**/*.yml").sort
17
13
  CONNECTION_STRING_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/connection_string/*.yml").sort
18
14
  URI_OPTIONS_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/uri_options/*.yml").sort
19
15
  GRIDFS_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/gridfs/*.yml").sort
@@ -36,7 +32,10 @@ else
36
32
  begin
37
33
  require 'byebug'
38
34
  rescue LoadError
39
- require 'ruby-debug'
35
+ begin
36
+ require 'ruby-debug'
37
+ rescue LoadError
38
+ end
40
39
  end
41
40
  end
42
41
 
@@ -55,6 +54,8 @@ autoload :IceNine, 'ice_nine'
55
54
  autoload :Timecop, 'timecop'
56
55
  autoload :ChildProcess, 'childprocess'
57
56
 
57
+ require 'rspec/retry'
58
+
58
59
  if BSON::Environment.jruby?
59
60
  require 'concurrent-ruby'
60
61
  PossiblyConcurrentArray = Concurrent::Array
@@ -81,20 +82,24 @@ require 'mrss/event_subscriber'
81
82
  require 'support/common_shortcuts'
82
83
  require 'support/client_registry'
83
84
  require 'support/client_registry_macros'
85
+ require 'support/mongos_macros'
86
+ require 'support/macros'
84
87
  require 'support/crypt'
85
88
  require 'support/json_ext_formatter'
86
89
  require 'support/sdam_formatter_integration'
87
90
  require 'support/background_thread_registry'
88
- require 'support/session_registry'
91
+ require 'mrss/session_registry'
89
92
  require 'support/local_resource_registry'
90
93
 
91
- if SpecConfig.instance.mri?
94
+ if SpecConfig.instance.mri? && !SpecConfig.instance.windows?
92
95
  require 'timeout_interrupt'
93
96
  else
94
97
  require 'timeout'
95
98
  TimeoutInterrupt = Timeout
96
99
  end
97
100
 
101
+ Mrss.patch_mongo_for_session_registry
102
+
98
103
  class ExampleTimeout < StandardError; end
99
104
 
100
105
  RSpec.configure do |config|
@@ -102,6 +107,8 @@ RSpec.configure do |config|
102
107
  config.include(CommonShortcuts::InstanceMethods)
103
108
  config.extend(Mrss::LiteConstraints)
104
109
  config.include(ClientRegistryMacros)
110
+ config.include(MongosMacros)
111
+ config.extend(Mongo::Macros)
105
112
 
106
113
  if SpecConfig.instance.ci?
107
114
  SdamFormatterIntegration.subscribe
@@ -118,14 +125,17 @@ RSpec.configure do |config|
118
125
  end
119
126
 
120
127
  if SpecConfig.instance.ci? && !%w(1 true yes).include?(ENV['INTERACTIVE']&.downcase)
121
- # Allow a max of 30 seconds per test.
122
128
  # Tests should take under 10 seconds ideally but it seems
123
129
  # we have some that run for more than 10 seconds in CI.
124
130
  config.around(:each) do |example|
125
131
  timeout = if %w(1 true yes).include?(ENV['STRESS']&.downcase)
126
132
  210
127
133
  else
128
- 45
134
+ if BSON::Environment.jruby?
135
+ 90
136
+ else
137
+ 45
138
+ end
129
139
  end
130
140
  TimeoutInterrupt.timeout(timeout, ExampleTimeout) do
131
141
  example.run
@@ -89,6 +89,13 @@ describe Mongo::Address::IPv6 do
89
89
 
90
90
  describe '#socket' do
91
91
 
92
+ # In JRuby 9.3.2.0 Socket::PF_INET6 is nil, causing IPv6 tests to fail.
93
+ # https://github.com/jruby/jruby/issues/7069
94
+ # JRuby 9.2 works correctly, this test is skipped on all JRuby versions
95
+ # because we intend to remove JRuby support altogether and therefore
96
+ # adding logic to condition on JRuby versions does not make sense.
97
+ fails_on_jruby
98
+
92
99
  let(:address) do
93
100
  '[::1]'
94
101
  end
@@ -228,6 +228,13 @@ describe Mongo::Address do
228
228
 
229
229
  context 'when providing a DNS entry that resolves to both IPv6 and IPv4' do
230
230
 
231
+ # In JRuby 9.3.2.0 Socket::PF_INET6 is nil, causing IPv6 tests to fail.
232
+ # https://github.com/jruby/jruby/issues/7069
233
+ # JRuby 9.2 works correctly, this test is skipped on all JRuby versions
234
+ # because we intend to remove JRuby support altogether and therefore
235
+ # adding logic to condition on JRuby versions does not make sense.
236
+ fails_on_jruby
237
+
231
238
  let(:custom_hostname) do
232
239
  'not_localhost'
233
240
  end
@@ -33,32 +33,32 @@ describe Mongo::Auth::Scram::Conversation do
33
33
 
34
34
  describe '#start' do
35
35
 
36
- let(:query) do
37
- conversation.start(nil)
36
+ let(:msg) do
37
+ conversation.start(connection)
38
38
  end
39
39
 
40
40
  before do
41
41
  expect(SecureRandom).to receive(:base64).once.and_return('NDA2NzU3MDY3MDYwMTgy')
42
42
  end
43
43
 
44
- let(:selector) do
45
- query.selector
44
+ let(:command) do
45
+ msg.payload['command']
46
46
  end
47
47
 
48
48
  it 'sets the sasl start flag' do
49
- expect(selector[:saslStart]).to eq(1)
49
+ expect(command[:saslStart]).to eq(1)
50
50
  end
51
51
 
52
52
  it 'sets the auto authorize flag' do
53
- expect(selector[:autoAuthorize]).to eq(1)
53
+ expect(command[:autoAuthorize]).to eq(1)
54
54
  end
55
55
 
56
56
  it 'sets the mechanism' do
57
- expect(selector[:mechanism]).to eq('SCRAM-SHA-1')
57
+ expect(command[:mechanism]).to eq('SCRAM-SHA-1')
58
58
  end
59
59
 
60
- it 'sets the payload' do
61
- expect(selector[:payload].data).to eq('n,,n=user,r=NDA2NzU3MDY3MDYwMTgy')
60
+ it 'sets the command' do
61
+ expect(command[:payload].data).to eq('n,,n=user,r=NDA2NzU3MDY3MDYwMTgy')
62
62
  end
63
63
  end
64
64
 
@@ -77,26 +77,26 @@ describe Mongo::Auth::Scram::Conversation do
77
77
  )
78
78
  end
79
79
 
80
- let(:query) do
80
+ let(:msg) do
81
81
  conversation.continue(continue_document, connection)
82
82
  end
83
83
 
84
- let(:selector) do
85
- query.selector
84
+ let(:command) do
85
+ msg.payload['command']
86
86
  end
87
87
 
88
88
  it 'sets the conversation id' do
89
- expect(selector[:conversationId]).to eq(1)
89
+ expect(command[:conversationId]).to eq(1)
90
90
  end
91
91
 
92
- it 'sets the payload' do
93
- expect(selector[:payload].data).to eq(
92
+ it 'sets the command' do
93
+ expect(command[:payload].data).to eq(
94
94
  'c=biws,r=NDA2NzU3MDY3MDYwMTgyt7/+IWaw1HaZZ5NmPJUTWapLpH2Gg+d8,p=qYUYNy6SQ9Jucq9rFA9nVgXQdbM='
95
95
  )
96
96
  end
97
97
 
98
98
  it 'sets the continue flag' do
99
- expect(selector[:saslContinue]).to eq(1)
99
+ expect(command[:saslContinue]).to eq(1)
100
100
  end
101
101
  end
102
102
 
@@ -135,26 +135,26 @@ describe Mongo::Auth::Scram::Conversation do
135
135
  BSON::Binary.new('v=gwo9E8+uifshm7ixj441GvIfuUY=')
136
136
  end
137
137
 
138
- let(:query) do
138
+ let(:msg) do
139
139
  conversation.continue(continue_document, connection)
140
140
  conversation.process_continue_response(finalize_document)
141
141
  conversation.finalize(connection)
142
142
  end
143
143
 
144
- let(:selector) do
145
- query.selector
144
+ let(:command) do
145
+ msg.payload['command']
146
146
  end
147
147
 
148
148
  it 'sets the conversation id' do
149
- expect(selector[:conversationId]).to eq(1)
149
+ expect(command[:conversationId]).to eq(1)
150
150
  end
151
151
 
152
- it 'sets the empty payload' do
153
- expect(selector[:payload].data).to eq('')
152
+ it 'sets the empty command' do
153
+ expect(command[:payload].data).to eq('')
154
154
  end
155
155
 
156
156
  it 'sets the continue flag' do
157
- expect(selector[:saslContinue]).to eq(1)
157
+ expect(command[:saslContinue]).to eq(1)
158
158
  end
159
159
  end
160
160
 
@@ -31,32 +31,32 @@ describe Mongo::Auth::Scram256::Conversation do
31
31
 
32
32
  describe '#start' do
33
33
 
34
- let(:query) do
35
- conversation.start(nil)
34
+ let(:msg) do
35
+ conversation.start(connection)
36
36
  end
37
37
 
38
38
  before do
39
39
  expect(SecureRandom).to receive(:base64).once.and_return('rOprNGfwEbeRWgbNEkqO')
40
40
  end
41
41
 
42
- let(:selector) do
43
- query.selector
42
+ let(:command) do
43
+ msg.payload['command']
44
44
  end
45
45
 
46
46
  it 'sets the sasl start flag' do
47
- expect(selector[:saslStart]).to eq(1)
47
+ expect(command[:saslStart]).to eq(1)
48
48
  end
49
49
 
50
50
  it 'sets the auto authorize flag' do
51
- expect(selector[:autoAuthorize]).to eq(1)
51
+ expect(command[:autoAuthorize]).to eq(1)
52
52
  end
53
53
 
54
54
  it 'sets the mechanism' do
55
- expect(selector[:mechanism]).to eq('SCRAM-SHA-256')
55
+ expect(command[:mechanism]).to eq('SCRAM-SHA-256')
56
56
  end
57
57
 
58
58
  it 'sets the payload' do
59
- expect(selector[:payload].data).to eq('n,,n=user,r=rOprNGfwEbeRWgbNEkqO')
59
+ expect(command[:payload].data).to eq('n,,n=user,r=rOprNGfwEbeRWgbNEkqO')
60
60
  end
61
61
  end
62
62
 
@@ -75,26 +75,26 @@ describe Mongo::Auth::Scram256::Conversation do
75
75
  )
76
76
  end
77
77
 
78
- let(:query) do
78
+ let(:msg) do
79
79
  conversation.continue(continue_document, connection)
80
80
  end
81
81
 
82
- let(:selector) do
83
- query.selector
82
+ let(:command) do
83
+ msg.payload['command']
84
84
  end
85
85
 
86
86
  it 'sets the conversation id' do
87
- expect(selector[:conversationId]).to eq(1)
87
+ expect(command[:conversationId]).to eq(1)
88
88
  end
89
89
 
90
90
  it 'sets the payload' do
91
- expect(selector[:payload].data).to eq(
91
+ expect(command[:payload].data).to eq(
92
92
  'c=biws,r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,p=dHzbZapWIk4jUhN+Ute9ytag9zjfMHgsqmmiz7AndVQ='
93
93
  )
94
94
  end
95
95
 
96
96
  it 'sets the continue flag' do
97
- expect(selector[:saslContinue]).to eq(1)
97
+ expect(command[:saslContinue]).to eq(1)
98
98
  end
99
99
  end
100
100
 
@@ -133,26 +133,26 @@ describe Mongo::Auth::Scram256::Conversation do
133
133
  BSON::Binary.new(' v=6rriTRBi23WpRR/wtup+mMhUZUn/dB5nLTJRsjl95G4=')
134
134
  end
135
135
 
136
- let(:query) do
136
+ let(:msg) do
137
137
  conversation.continue(continue_document, connection)
138
138
  conversation.process_continue_response(finalize_document)
139
139
  conversation.finalize(connection)
140
140
  end
141
141
 
142
- let(:selector) do
143
- query.selector
142
+ let(:command) do
143
+ msg.payload['command']
144
144
  end
145
145
 
146
146
  it 'sets the conversation id' do
147
- expect(selector[:conversationId]).to eq(1)
147
+ expect(command[:conversationId]).to eq(1)
148
148
  end
149
149
 
150
150
  it 'sets the empty payload' do
151
- expect(selector[:payload].data).to eq('')
151
+ expect(command[:payload].data).to eq('')
152
152
  end
153
153
 
154
154
  it 'sets the continue flag' do
155
- expect(selector[:saslContinue]).to eq(1)
155
+ expect(command[:saslContinue]).to eq(1)
156
156
  end
157
157
  end
158
158
 
@@ -9,6 +9,7 @@ require 'spec_helper'
9
9
  describe 'SCRAM-SHA auth mechanism negotiation' do
10
10
  min_server_fcv '4.0'
11
11
  require_no_external_user
12
+ require_topology :single, :replica_set, :sharded
12
13
  # Test uses global assertions
13
14
  clean_slate
14
15
 
@@ -8,7 +8,7 @@ describe Mongo::BulkWrite::Result do
8
8
  {'n_inserted' => 2, 'n' => 3, 'inserted_ids' => [1, 2]}
9
9
  end
10
10
 
11
- let(:subject) { described_class.new(results_document) }
11
+ let(:subject) { described_class.new(results_document, true) }
12
12
 
13
13
  describe 'construction' do
14
14
  it 'works' do
@@ -124,4 +124,18 @@ describe Mongo::BulkWrite::Result do
124
124
  end
125
125
  end
126
126
  end
127
+
128
+ describe "#acknowledged?" do
129
+
130
+ [true, false].each do |b|
131
+ context "when acknowledged is passed as #{b}" do
132
+
133
+ let(:result) { described_class.new(results_document, b) }
134
+
135
+ it "acknowledged? is #{b}" do
136
+ expect(result.acknowledged?).to be b
137
+ end
138
+ end
139
+ end
140
+ end
127
141
  end
@@ -55,6 +55,19 @@ describe Mongo::BulkWrite do
55
55
  end
56
56
  end
57
57
 
58
+ context 'when providing no requests' do
59
+
60
+ let(:requests) do
61
+ []
62
+ end
63
+
64
+ it 'raises an exception' do
65
+ expect {
66
+ bulk_write.execute
67
+ }.to raise_error(ArgumentError, /Bulk write requests cannot be empty/)
68
+ end
69
+ end
70
+
58
71
  context 'when the operations do not need to be split' do
59
72
 
60
73
  context 'when a write error occurs' do
@@ -257,10 +270,24 @@ describe Mongo::BulkWrite do
257
270
  )
258
271
  end
259
272
 
260
- it 'raises a client-side error' do
261
- expect do
262
- bulk_write.execute
263
- end.to raise_error(Mongo::Error::UnsupportedOption, /The hint option cannot be specified on an unacknowledged write operation/)
273
+ context "on 4.4+ servers" do
274
+ min_server_version '4.4'
275
+
276
+ it "doesn't raises an error" do
277
+ expect do
278
+ bulk_write.execute
279
+ end.to_not raise_error(Mongo::Error::UnsupportedOption)
280
+ end
281
+ end
282
+
283
+ context "on <=4.2 servers" do
284
+ max_server_version '4.2'
285
+
286
+ it 'raises a client-side error' do
287
+ expect do
288
+ bulk_write.execute
289
+ end.to raise_error(Mongo::Error::UnsupportedOption, /The hint option cannot be specified on an unacknowledged write operation/)
290
+ end
264
291
  end
265
292
  end
266
293
 
@@ -420,10 +447,24 @@ describe Mongo::BulkWrite do
420
447
  )
421
448
  end
422
449
 
423
- it 'raises a client-side error' do
424
- expect do
425
- bulk_write.execute
426
- end.to raise_error(Mongo::Error::UnsupportedOption, /The hint option cannot be specified on an unacknowledged write operation/)
450
+ context "on 4.2+ servers" do
451
+ min_server_version '4.2'
452
+
453
+ it "doesn't raises an error" do
454
+ expect do
455
+ bulk_write.execute
456
+ end.to_not raise_error(Mongo::Error::UnsupportedOption)
457
+ end
458
+ end
459
+
460
+ context "on <=4.2 servers" do
461
+ max_server_version '4.0'
462
+
463
+ it 'raises a client-side error' do
464
+ expect do
465
+ bulk_write.execute
466
+ end.to raise_error(Mongo::Error::UnsupportedOption, /The hint option cannot be specified on an unacknowledged write operation/)
467
+ end
427
468
  end
428
469
  end
429
470
  end
@@ -502,10 +543,24 @@ describe Mongo::BulkWrite do
502
543
  )
503
544
  end
504
545
 
505
- it 'raises a client-side error' do
506
- expect do
507
- bulk_write.execute
508
- end.to raise_error(Mongo::Error::UnsupportedOption, /The hint option cannot be specified on an unacknowledged write operation/)
546
+ context "on 4.2+ servers" do
547
+ min_server_version '4.2'
548
+
549
+ it "doesn't raises an error" do
550
+ expect do
551
+ bulk_write.execute
552
+ end.to_not raise_error(Mongo::Error::UnsupportedOption)
553
+ end
554
+ end
555
+
556
+ context "on <=4.0 servers" do
557
+ max_server_version '4.0'
558
+
559
+ it 'raises a client-side error' do
560
+ expect do
561
+ bulk_write.execute
562
+ end.to raise_error(Mongo::Error::UnsupportedOption, /The hint option cannot be specified on an unacknowledged write operation/)
563
+ end
509
564
  end
510
565
  end
511
566
  end
@@ -787,10 +842,24 @@ describe Mongo::BulkWrite do
787
842
  )
788
843
  end
789
844
 
790
- it 'raises a client-side error' do
791
- expect do
792
- bulk_write.execute
793
- end.to raise_error(Mongo::Error::UnsupportedOption, /The hint option cannot be specified on an unacknowledged write operation/)
845
+ context "on 4.4+ servers" do
846
+ min_server_version '4.4'
847
+
848
+ it "doesn't raises an error" do
849
+ expect do
850
+ bulk_write.execute
851
+ end.to_not raise_error(Mongo::Error::UnsupportedOption)
852
+ end
853
+ end
854
+
855
+ context "on <=4.2 servers" do
856
+ max_server_version '4.2'
857
+
858
+ it 'raises a client-side error' do
859
+ expect do
860
+ bulk_write.execute
861
+ end.to raise_error(Mongo::Error::UnsupportedOption, /The hint option cannot be specified on an unacknowledged write operation/)
862
+ end
794
863
  end
795
864
  end
796
865
  end
@@ -1105,10 +1174,24 @@ describe Mongo::BulkWrite do
1105
1174
  )
1106
1175
  end
1107
1176
 
1108
- it 'raises a client-side error' do
1109
- expect do
1110
- bulk_write.execute
1111
- end.to raise_error(Mongo::Error::UnsupportedOption, /The hint option cannot be specified on an unacknowledged write operation/)
1177
+ context "on 4.2+ servers" do
1178
+ min_server_version '4.2'
1179
+
1180
+ it "doesn't raises an error" do
1181
+ expect do
1182
+ bulk_write.execute
1183
+ end.to_not raise_error(Mongo::Error::UnsupportedOption)
1184
+ end
1185
+ end
1186
+
1187
+ context "on <=4.0 servers" do
1188
+ max_server_version '4.0'
1189
+
1190
+ it 'raises a client-side error' do
1191
+ expect do
1192
+ bulk_write.execute
1193
+ end.to raise_error(Mongo::Error::UnsupportedOption, /The hint option cannot be specified on an unacknowledged write operation/)
1194
+ end
1112
1195
  end
1113
1196
  end
1114
1197
  end
@@ -2390,4 +2473,42 @@ describe Mongo::BulkWrite do
2390
2473
  end
2391
2474
  end
2392
2475
  end
2476
+
2477
+ describe "#acknowledged?" do
2478
+ let(:requests) { [ { insert_one: { x: 1 } } ] }
2479
+ let(:options) { {} }
2480
+ let(:bulk_write) do
2481
+ described_class.new(
2482
+ collection,
2483
+ requests,
2484
+ options
2485
+ )
2486
+ end
2487
+ let(:result) { bulk_write.execute }
2488
+
2489
+ context "when using unacknowledged writes with one request" do
2490
+ let(:options) { { write_concern: { w: 0 } } }
2491
+
2492
+ it 'acknowledged? returns false' do
2493
+ expect(result.acknowledged?).to be false
2494
+ end
2495
+ end
2496
+
2497
+ context "when using unacknowledged writes with multiple requests" do
2498
+ let(:options) { { write_concern: { w: 0 } } }
2499
+ let(:requests) { [ { insert_one: { x: 1 } }, { insert_one: { x: 1 } } ] }
2500
+
2501
+ it 'acknowledged? returns false' do
2502
+ expect(result.acknowledged?).to be false
2503
+ end
2504
+ end
2505
+
2506
+ context "when not using unacknowledged writes" do
2507
+ let(:options) { { write_concern: { w: 1 } } }
2508
+
2509
+ it 'acknowledged? returns true' do
2510
+ expect(result.acknowledged?).to be true
2511
+ end
2512
+ end
2513
+ end
2393
2514
  end