mongo 2.17.4 → 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 (624) 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 -18
  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/view.rb +0 -1
  23. data/lib/mongo/collection.rb +108 -48
  24. data/lib/mongo/config/options.rb +62 -0
  25. data/lib/mongo/config/validators/option.rb +26 -0
  26. data/lib/mongo/config.rb +31 -0
  27. data/lib/mongo/crypt/auto_encrypter.rb +79 -6
  28. data/lib/mongo/crypt/binding.rb +395 -143
  29. data/lib/mongo/crypt/context.rb +5 -2
  30. data/lib/mongo/crypt/data_key_context.rb +7 -104
  31. data/lib/mongo/crypt/encryption_io.rb +28 -60
  32. data/lib/mongo/crypt/explicit_encrypter.rb +27 -25
  33. data/lib/mongo/crypt/explicit_encryption_context.rb +31 -3
  34. data/lib/mongo/crypt/handle.rb +102 -79
  35. data/lib/mongo/crypt/hooks.rb +25 -2
  36. data/lib/mongo/crypt/kms/aws.rb +128 -0
  37. data/lib/mongo/crypt/kms/azure.rb +136 -0
  38. data/lib/mongo/crypt/kms/credentials.rb +81 -0
  39. data/lib/mongo/crypt/kms/gcp.rb +182 -0
  40. data/lib/mongo/crypt/kms/kmip.rb +110 -0
  41. data/lib/mongo/crypt/kms/local.rb +74 -0
  42. data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
  43. data/lib/mongo/crypt/kms.rb +117 -0
  44. data/lib/mongo/crypt.rb +1 -0
  45. data/lib/mongo/cursor/kill_spec.rb +27 -6
  46. data/lib/mongo/cursor.rb +21 -16
  47. data/lib/mongo/database/view.rb +6 -3
  48. data/lib/mongo/database.rb +73 -12
  49. data/lib/mongo/dbref.rb +1 -105
  50. data/lib/mongo/error/bulk_write_error.rb +31 -4
  51. data/lib/mongo/error/invalid_config_option.rb +20 -0
  52. data/lib/mongo/error/invalid_replacement_document.rb +27 -9
  53. data/lib/mongo/error/invalid_update_document.rb +27 -7
  54. data/lib/mongo/error/labelable.rb +72 -0
  55. data/lib/mongo/error/missing_connection.rb +25 -0
  56. data/lib/mongo/error/notable.rb +7 -0
  57. data/lib/mongo/error/operation_failure.rb +34 -86
  58. data/lib/mongo/error/read_write_retryable.rb +108 -0
  59. data/lib/mongo/{operation/kill_cursors/legacy.rb → error/session_not_materialized.rb} +7 -19
  60. data/lib/mongo/error.rb +5 -37
  61. data/lib/mongo/index/view.rb +22 -7
  62. data/lib/mongo/monitoring/event/command_failed.rb +8 -2
  63. data/lib/mongo/monitoring/event/command_started.rb +1 -1
  64. data/lib/mongo/monitoring/event/command_succeeded.rb +9 -2
  65. data/lib/mongo/monitoring/publishable.rb +9 -5
  66. data/lib/mongo/operation/collections_info/result.rb +5 -2
  67. data/lib/mongo/operation/command/op_msg.rb +6 -0
  68. data/lib/mongo/operation/context.rb +24 -6
  69. data/lib/mongo/operation/count/op_msg.rb +4 -1
  70. data/lib/mongo/operation/create/op_msg.rb +16 -1
  71. data/lib/mongo/operation/create_index/op_msg.rb +2 -1
  72. data/lib/mongo/operation/delete/op_msg.rb +1 -0
  73. data/lib/mongo/operation/delete.rb +0 -1
  74. data/lib/mongo/operation/drop_index/op_msg.rb +5 -1
  75. data/lib/mongo/operation/get_more/command_builder.rb +5 -1
  76. data/lib/mongo/operation/insert/bulk_result.rb +5 -1
  77. data/lib/mongo/operation/insert/command.rb +0 -4
  78. data/lib/mongo/operation/insert/op_msg.rb +6 -3
  79. data/lib/mongo/operation/insert/result.rb +6 -3
  80. data/lib/mongo/operation/insert.rb +0 -1
  81. data/lib/mongo/operation/kill_cursors.rb +0 -1
  82. data/lib/mongo/operation/list_collections/op_msg.rb +4 -1
  83. data/lib/mongo/operation/map_reduce/result.rb +16 -0
  84. data/lib/mongo/operation/result.rb +21 -5
  85. data/lib/mongo/operation/shared/executable.rb +21 -6
  86. data/lib/mongo/operation/shared/polymorphic_operation.rb +15 -3
  87. data/lib/mongo/operation/shared/response_handling.rb +6 -5
  88. data/lib/mongo/operation/shared/sessions_supported.rb +3 -7
  89. data/lib/mongo/operation/shared/write.rb +18 -12
  90. data/lib/mongo/operation/update/op_msg.rb +2 -1
  91. data/lib/mongo/operation/update.rb +0 -1
  92. data/lib/mongo/protocol/caching_hash.rb +69 -0
  93. data/lib/mongo/protocol/msg.rb +37 -1
  94. data/lib/mongo/protocol.rb +1 -0
  95. data/lib/mongo/query_cache.rb +15 -0
  96. data/lib/mongo/retryable.rb +78 -30
  97. data/lib/mongo/server/connection.rb +33 -0
  98. data/lib/mongo/server/connection_base.rb +2 -0
  99. data/lib/mongo/server/connection_common.rb +4 -1
  100. data/lib/mongo/server/connection_pool.rb +69 -42
  101. data/lib/mongo/server/description/features.rb +3 -1
  102. data/lib/mongo/server/description.rb +7 -2
  103. data/lib/mongo/server/monitor/connection.rb +5 -10
  104. data/lib/mongo/server/monitor.rb +21 -13
  105. data/lib/mongo/server/push_monitor.rb +9 -3
  106. data/lib/mongo/server.rb +9 -5
  107. data/lib/mongo/session/session_pool.rb +8 -0
  108. data/lib/mongo/session.rb +111 -35
  109. data/lib/mongo/socket/ocsp_verifier.rb +4 -5
  110. data/lib/mongo/socket/tcp.rb +3 -0
  111. data/lib/mongo/srv/resolver.rb +24 -3
  112. data/lib/mongo/uri/options_mapper.rb +2 -0
  113. data/lib/mongo/uri/srv_protocol.rb +1 -1
  114. data/lib/mongo/uri.rb +20 -0
  115. data/lib/mongo/version.rb +1 -1
  116. data/lib/mongo.rb +20 -0
  117. data/mongo.gemspec +10 -4
  118. data/spec/README.md +5 -5
  119. data/spec/integration/aws_lambda_examples_spec.rb +68 -0
  120. data/spec/integration/bulk_write_error_message_spec.rb +32 -0
  121. data/spec/integration/bulk_write_spec.rb +0 -16
  122. data/spec/integration/change_stream_spec.rb +6 -5
  123. data/spec/integration/client_construction_spec.rb +1 -1
  124. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -9
  125. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +18 -19
  126. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +0 -1
  127. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +31 -0
  128. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +108 -1
  129. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +2 -2
  130. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +2 -2
  131. data/spec/integration/client_side_encryption/client_close_spec.rb +1 -1
  132. data/spec/integration/client_side_encryption/corpus_spec.rb +64 -35
  133. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +39 -42
  134. data/spec/integration/client_side_encryption/data_key_spec.rb +97 -7
  135. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +59 -0
  136. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +147 -0
  137. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +6 -6
  138. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +394 -0
  139. data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
  140. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +111 -0
  141. data/spec/integration/client_side_encryption/views_spec.rb +1 -1
  142. data/spec/integration/client_update_spec.rb +2 -2
  143. data/spec/integration/crud_spec.rb +12 -0
  144. data/spec/integration/cursor_pinning_spec.rb +3 -3
  145. data/spec/integration/fork_reconnect_spec.rb +15 -8
  146. data/spec/integration/grid_fs_bucket_spec.rb +3 -3
  147. data/spec/integration/ocsp_verifier_spec.rb +1 -0
  148. data/spec/integration/query_cache_spec.rb +34 -30
  149. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
  150. data/spec/integration/sdam_events_spec.rb +0 -40
  151. data/spec/integration/server_monitor_spec.rb +2 -1
  152. data/spec/integration/size_limit_spec.rb +4 -1
  153. data/spec/integration/snapshot_query_examples_spec.rb +127 -0
  154. data/spec/integration/srv_monitoring_spec.rb +37 -0
  155. data/spec/integration/step_down_spec.rb +20 -4
  156. data/spec/integration/transaction_pinning_spec.rb +2 -2
  157. data/spec/integration/versioned_api_examples_spec.rb +37 -31
  158. data/spec/lite_spec_helper.rb +14 -5
  159. data/spec/mongo/address/ipv6_spec.rb +7 -0
  160. data/spec/mongo/address_spec.rb +7 -0
  161. data/spec/mongo/auth/scram/conversation_spec.rb +23 -23
  162. data/spec/mongo/auth/scram256/conversation_spec.rb +20 -20
  163. data/spec/mongo/auth/scram_negotiation_spec.rb +1 -0
  164. data/spec/mongo/bulk_write/result_spec.rb +15 -1
  165. data/spec/mongo/bulk_write_spec.rb +128 -20
  166. data/spec/mongo/client_construction_spec.rb +141 -7
  167. data/spec/mongo/client_encryption_spec.rb +11 -11
  168. data/spec/mongo/client_spec.rb +297 -1
  169. data/spec/mongo/cluster/cursor_reaper_spec.rb +21 -3
  170. data/spec/mongo/cluster_spec.rb +0 -44
  171. data/spec/mongo/collection/view/aggregation_spec.rb +2 -2
  172. data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
  173. data/spec/mongo/collection/view/readable_spec.rb +35 -56
  174. data/spec/mongo/collection/view/writable_spec.rb +144 -32
  175. data/spec/mongo/collection_crud_spec.rb +63 -13
  176. data/spec/mongo/config/options_spec.rb +75 -0
  177. data/spec/mongo/config_spec.rb +73 -0
  178. data/spec/mongo/crypt/auto_decryption_context_spec.rb +17 -1
  179. data/spec/mongo/crypt/auto_encrypter_spec.rb +106 -0
  180. data/spec/mongo/crypt/auto_encryption_context_spec.rb +17 -1
  181. data/spec/mongo/crypt/binding/context_spec.rb +99 -17
  182. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +17 -46
  183. data/spec/mongo/crypt/binding/version_spec.rb +25 -0
  184. data/spec/mongo/crypt/binding_unloaded_spec.rb +14 -0
  185. data/spec/mongo/crypt/data_key_context_spec.rb +42 -114
  186. data/spec/mongo/crypt/encryption_io_spec.rb +2 -0
  187. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +32 -1
  188. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +89 -1
  189. data/spec/mongo/crypt/handle_spec.rb +47 -169
  190. data/spec/mongo/crypt/hooks_spec.rb +30 -0
  191. data/spec/mongo/crypt/kms/credentials_spec.rb +404 -0
  192. data/spec/mongo/crypt/kms_spec.rb +59 -0
  193. data/spec/mongo/cursor_spec.rb +37 -51
  194. data/spec/mongo/database_spec.rb +66 -1
  195. data/spec/mongo/error/operation_failure_heavy_spec.rb +49 -0
  196. data/spec/mongo/index/view_spec.rb +69 -0
  197. data/spec/mongo/operation/create/op_msg_spec.rb +286 -0
  198. data/spec/mongo/operation/delete/op_msg_spec.rb +13 -4
  199. data/spec/mongo/operation/delete_spec.rb +0 -30
  200. data/spec/mongo/operation/insert/op_msg_spec.rb +18 -10
  201. data/spec/mongo/operation/insert_spec.rb +0 -32
  202. data/spec/mongo/operation/result_spec.rb +20 -0
  203. data/spec/mongo/operation/update/op_msg_spec.rb +13 -4
  204. data/spec/mongo/operation/update_spec.rb +0 -29
  205. data/spec/mongo/protocol/caching_hash_spec.rb +82 -0
  206. data/spec/mongo/protocol/msg_spec.rb +41 -0
  207. data/spec/mongo/query_cache_spec.rb +1 -0
  208. data/spec/mongo/retryable_spec.rb +32 -3
  209. data/spec/mongo/server/connection_auth_spec.rb +3 -1
  210. data/spec/mongo/server/connection_common_spec.rb +13 -1
  211. data/spec/mongo/server/connection_pool_spec.rb +94 -49
  212. data/spec/mongo/server/connection_spec.rb +50 -159
  213. data/spec/mongo/server/description/features_spec.rb +24 -0
  214. data/spec/mongo/server/push_monitor_spec.rb +2 -8
  215. data/spec/mongo/session_spec.rb +26 -6
  216. data/spec/mongo/session_transaction_spec.rb +2 -1
  217. data/spec/mongo/socket/ssl_spec.rb +15 -4
  218. data/spec/mongo/uri/srv_protocol_spec.rb +101 -2
  219. data/spec/mongo/uri_spec.rb +25 -0
  220. data/spec/runners/connection_string.rb +8 -0
  221. data/spec/runners/crud/operation.rb +12 -3
  222. data/spec/runners/crud/requirement.rb +3 -3
  223. data/spec/runners/crud/spec.rb +5 -0
  224. data/spec/runners/crud/verifier.rb +6 -0
  225. data/spec/runners/transactions/test.rb +33 -14
  226. data/spec/runners/transactions.rb +9 -6
  227. data/spec/runners/unified/assertions.rb +59 -10
  228. data/spec/runners/unified/change_stream_operations.rb +9 -0
  229. data/spec/runners/unified/crud_operations.rb +50 -2
  230. data/spec/runners/unified/ddl_operations.rb +20 -0
  231. data/spec/runners/unified/error.rb +2 -1
  232. data/spec/runners/unified/support_operations.rb +5 -2
  233. data/spec/runners/unified/test.rb +19 -4
  234. data/spec/runners/unified.rb +9 -2
  235. data/spec/shared/lib/mrss/constraints.rb +10 -17
  236. data/spec/shared/lib/mrss/docker_runner.rb +21 -3
  237. data/spec/shared/lib/mrss/lite_constraints.rb +32 -1
  238. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  239. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  240. data/spec/shared/share/Dockerfile.erb +56 -54
  241. data/spec/shared/shlib/config.sh +27 -0
  242. data/spec/shared/shlib/distro.sh +2 -1
  243. data/spec/shared/shlib/server.sh +46 -21
  244. data/spec/shared/shlib/set_env.sh +40 -5
  245. data/spec/spec_helper.rb +0 -1
  246. data/spec/spec_tests/crud_spec.rb +0 -10
  247. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +124 -0
  248. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
  249. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1171 -0
  250. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1068 -0
  251. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +859 -4
  252. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
  253. data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
  254. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +12 -2
  255. data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
  256. data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
  257. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
  258. data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
  259. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
  260. data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
  261. data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
  262. data/spec/spec_tests/data/client_side_encryption/explain.yml +1 -8
  263. data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
  264. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
  265. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
  266. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
  267. data/spec/spec_tests/data/client_side_encryption/fle2-BypassQueryAnalysis.yml +101 -0
  268. data/spec/spec_tests/data/client_side_encryption/fle2-Compact.yml +80 -0
  269. data/spec/spec_tests/data/client_side_encryption/fle2-CreateCollection.yml +1263 -0
  270. data/spec/spec_tests/data/client_side_encryption/fle2-DecryptExistingData.yml +64 -0
  271. data/spec/spec_tests/data/client_side_encryption/fle2-Delete.yml +107 -0
  272. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-EncryptedFieldsMap.yml +80 -0
  273. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-jsonSchema.yml +90 -0
  274. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFieldsMap-defaults.yml +57 -0
  275. data/spec/spec_tests/data/client_side_encryption/fle2-FindOneAndUpdate.yml +213 -0
  276. data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Indexed.yml +86 -0
  277. data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Unindexed.yml +83 -0
  278. data/spec/spec_tests/data/client_side_encryption/fle2-MissingKey.yml +41 -0
  279. data/spec/spec_tests/data/client_side_encryption/fle2-NoEncryption.yml +42 -0
  280. data/spec/spec_tests/data/client_side_encryption/fle2-Update.yml +221 -0
  281. data/spec/spec_tests/data/client_side_encryption/fle2-validatorAndPartialFieldExpression.yml +168 -0
  282. data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
  283. data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
  284. data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
  285. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
  286. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
  287. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
  288. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +2 -0
  289. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
  290. data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
  291. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
  292. data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
  293. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
  294. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
  295. data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
  296. data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
  297. data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
  298. data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
  299. data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
  300. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +1 -1
  301. data/spec/spec_tests/data/crud/read/count-collation.yml +1 -1
  302. data/spec/spec_tests/data/crud/read/distinct-collation.yml +1 -1
  303. data/spec/spec_tests/data/crud/read/find-collation.yml +1 -1
  304. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +1 -1
  305. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +1 -1
  306. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +1 -1
  307. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +1 -1
  308. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +1 -1
  309. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +1 -1
  310. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +1 -1
  311. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +1 -1
  312. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +1 -1
  313. data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
  314. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
  315. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
  316. data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
  317. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
  318. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
  319. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
  320. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
  321. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
  322. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
  323. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
  324. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
  325. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
  326. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
  327. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
  328. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
  329. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
  330. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
  331. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
  332. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
  333. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
  334. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
  335. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
  336. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
  337. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
  338. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
  339. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
  340. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
  341. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
  342. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
  343. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
  344. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
  345. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
  346. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
  347. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
  348. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +2 -0
  349. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
  350. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
  351. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
  352. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
  353. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
  354. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +2 -0
  355. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
  356. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +5 -135
  357. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
  358. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
  359. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
  360. data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
  361. data/spec/spec_tests/data/crud_unified/find.yml +68 -0
  362. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
  363. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
  364. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
  365. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
  366. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
  367. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +2 -4
  368. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
  369. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
  370. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
  371. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
  372. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
  373. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
  374. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
  375. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
  376. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
  377. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
  378. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
  379. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
  380. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
  381. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
  382. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
  383. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
  384. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
  385. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
  386. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
  387. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
  388. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
  389. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
  390. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
  391. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
  392. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
  393. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
  394. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
  395. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
  396. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +5 -1
  397. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
  398. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
  399. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
  400. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
  401. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
  402. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
  403. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
  404. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +5 -1
  405. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
  406. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
  407. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
  408. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
  409. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +129 -0
  410. data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
  411. data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
  412. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
  413. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
  414. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
  415. data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
  416. data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
  417. data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
  418. data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
  419. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +96 -0
  420. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +137 -0
  421. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +78 -0
  422. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
  423. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
  424. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
  425. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
  426. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +10 -0
  427. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +10 -0
  428. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
  429. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
  430. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
  431. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
  432. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
  433. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
  434. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
  435. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
  436. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
  437. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
  438. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
  439. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
  440. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
  441. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
  442. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
  443. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +9 -3
  444. data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
  445. data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
  446. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
  447. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -2
  448. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
  449. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
  450. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
  451. data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
  452. data/spec/spec_tests/data/unified/invalid/expectedEventsForClient-ignoreExtraEvents-type.yml +15 -0
  453. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
  454. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
  455. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +4 -1
  456. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
  457. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -2
  458. data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
  459. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
  460. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
  461. data/spec/spec_tests/retryable_reads_spec.rb +4 -1
  462. data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
  463. data/spec/spec_tests/retryable_writes_spec.rb +4 -1
  464. data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
  465. data/spec/spec_tests/seed_list_discovery_spec.rb +10 -1
  466. data/spec/spec_tests/unified_spec.rb +6 -1
  467. data/spec/stress/connection_pool_timing_spec.rb +2 -1
  468. data/spec/stress/fork_reconnect_stress_spec.rb +3 -2
  469. data/spec/support/authorization.rb +1 -1
  470. data/spec/support/certificates/atlas-ocsp-ca.crt +47 -40
  471. data/spec/support/certificates/atlas-ocsp.crt +106 -101
  472. data/spec/support/cluster_tools.rb +1 -1
  473. data/spec/support/common_shortcuts.rb +22 -0
  474. data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
  475. data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
  476. data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
  477. data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
  478. data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
  479. data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
  480. data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
  481. data/spec/support/crypt/corpus/corpus.json +4999 -37
  482. data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
  483. data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
  484. data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
  485. data/spec/support/crypt/encryptedFields.json +33 -0
  486. data/spec/support/crypt/keys/key1-document.json +30 -0
  487. data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
  488. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  489. data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
  490. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  491. data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
  492. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  493. data/spec/support/crypt.rb +207 -6
  494. data/spec/support/macros.rb +18 -0
  495. data/spec/support/mongos_macros.rb +17 -0
  496. data/spec/support/shared/scram_conversation.rb +2 -1
  497. data/spec/support/shared/session.rb +13 -7
  498. data/spec/support/spec_config.rb +82 -1
  499. data/spec/support/utils.rb +25 -4
  500. data.tar.gz.sig +0 -0
  501. metadata +1499 -1252
  502. metadata.gz.sig +0 -0
  503. data/lib/mongo/operation/delete/legacy.rb +0 -64
  504. data/lib/mongo/operation/insert/legacy.rb +0 -68
  505. data/lib/mongo/operation/update/legacy/result.rb +0 -112
  506. data/lib/mongo/operation/update/legacy.rb +0 -76
  507. data/spec/integration/find_options_spec.rb +0 -227
  508. data/spec/mongo/dbref_spec.rb +0 -152
  509. data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
  510. data/spec/spec_tests/change_streams_spec.rb +0 -93
  511. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -101
  512. data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +0 -1173
  513. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
  514. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -535
  515. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
  516. data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -111
  517. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
  518. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
  519. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
  520. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
  521. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
  522. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
  523. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
  524. data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -39
  525. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
  526. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
  527. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
  528. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
  529. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
  530. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
  531. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
  532. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
  533. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
  534. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
  535. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
  536. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
  537. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
  538. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
  539. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
  540. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
  541. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
  542. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
  543. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
  544. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
  545. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
  546. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
  547. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
  548. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
  549. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
  550. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
  551. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
  552. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
  553. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
  554. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
  555. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
  556. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
  557. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
  558. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
  559. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
  560. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
  561. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +0 -60
  562. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +0 -146
  563. data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
  564. data/spec/support/session_registry.rb +0 -55
  565. /data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
  566. /data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
  567. /data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
  568. /data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
  569. /data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
  570. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
  571. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
  572. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
  573. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +0 -0
  574. /data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
  575. /data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
  576. /data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
  577. /data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
  578. /data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
  579. /data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
  580. /data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
  581. /data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
  582. /data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
  583. /data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
  584. /data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
  585. /data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
  586. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
  587. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
  588. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
  589. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
  590. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
  591. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
  592. /data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
  593. /data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
  594. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
  595. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
  596. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
  597. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
  598. /data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
  599. /data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
  600. /data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
  601. /data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
  602. /data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
  603. /data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
  604. /data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
  605. /data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
  606. /data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
  607. /data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
  608. /data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
  609. /data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
  610. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
  611. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
  612. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
  613. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
  614. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
  615. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
  616. /data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
  617. /data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
  618. /data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
  619. /data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
  620. /data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
  621. /data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
  622. /data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
  623. /data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
  624. /data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
@@ -87,7 +87,7 @@ describe 'Cursor pinning' do
87
87
 
88
88
  enums = []
89
89
  connections = []
90
- service_ids = []
90
+ connection_ids = []
91
91
 
92
92
  4.times do
93
93
  view = collection.find({}, batch_size: 1)
@@ -96,11 +96,11 @@ describe 'Cursor pinning' do
96
96
  enum.next
97
97
 
98
98
  enums << enum
99
- service_ids << view.cursor.initial_result.connection_description.service_id
99
+ connection_ids << view.cursor.initial_result.connection_global_id
100
100
  connections << server.pool.check_out
101
101
  end
102
102
 
103
- service_ids.uniq.length.should be > 1
103
+ connection_ids.uniq.length.should be > 1
104
104
 
105
105
  server.pool.size.should == 4
106
106
 
@@ -151,32 +151,37 @@ describe 'fork reconnect' do
151
151
  # * In the child, create a ClientSession and assert its lsid is different.
152
152
  describe 'session pool' do
153
153
  it 'is cleared after fork' do
154
- session = client.get_session
154
+ session = client.get_session.materialize_if_needed
155
155
  parent_lsid = session.session_id
156
156
  session.end_session
157
+
157
158
  if pid = fork
158
159
  pid, status = Process.wait2(pid)
159
160
  status.exitstatus.should == 0
160
161
  else
161
162
  Utils.wrap_forked_child do
162
163
  client.reconnect
163
- child_session = client.get_session
164
+ child_session = client.get_session.materialize_if_needed
164
165
  child_lsid = child_session.session_id
165
166
  expect(child_lsid).not_to eq(parent_lsid)
166
167
  end
167
168
  end
168
169
 
169
- expect(client.get_session.session_id).to eq(parent_lsid)
170
+ session = client.get_session.materialize_if_needed
171
+ session_id = session.session_id
172
+ expect(session_id).to eq(parent_lsid)
170
173
  end
171
174
 
172
175
  # Test from Driver Sessions Spec
173
176
  # * Create ClientSession
174
177
  # * Record its lsid
175
178
  # * Fork
176
- # * In the parent, return the ClientSession to the pool, create a new ClientSession, and assert its lsid is the same.
177
- # * In the child, return the ClientSession to the pool, create a new ClientSession, and assert its lsid is different.
179
+ # * In the parent, return the ClientSession to the pool, create a new
180
+ # ClientSession, and assert its lsid is the same.
181
+ # * In the child, return the ClientSession to the pool, create a new
182
+ # ClientSession, and assert its lsid is different.
178
183
  it 'does not return parent process sessions to child process pool' do
179
- session = client.get_session
184
+ session = client.get_session.materialize_if_needed
180
185
  parent_lsid = session.session_id
181
186
 
182
187
  if pid = fork
@@ -186,14 +191,16 @@ describe 'fork reconnect' do
186
191
  Utils.wrap_forked_child do
187
192
  client.reconnect
188
193
  session.end_session
189
- child_session = client.get_session
194
+ child_session = client.get_session.materialize_if_needed
195
+
190
196
  child_lsid = child_session.session_id
191
197
  expect(child_lsid).not_to eq(parent_lsid)
192
198
  end
193
199
  end
194
200
 
195
201
  session.end_session
196
- expect(client.get_session.session_id).to eq(parent_lsid)
202
+ session_id = client.get_session.materialize_if_needed.session_id
203
+ expect(session_id).to eq(parent_lsid)
197
204
  end
198
205
  end
199
206
  end
@@ -26,8 +26,8 @@ describe 'GridFS bucket integration' do
26
26
  actual = stream.read
27
27
  end
28
28
 
29
- actual.encoding.name.should == 'ASCII-8BIT'
30
- actual.should == data.dup.force_encoding('binary')
29
+ actual.encoding.should == Encoding::BINARY
30
+ actual.should == data.b
31
31
  end
32
32
  end
33
33
 
@@ -41,7 +41,7 @@ describe 'GridFS bucket integration' do
41
41
 
42
42
  context 'in UTF-8 encoding' do
43
43
  let(:data_to_write) do
44
- data.encoding.name.should == 'UTF-8'
44
+ data.encoding.should == Encoding::UTF_8
45
45
  data.freeze
46
46
  end
47
47
 
@@ -7,6 +7,7 @@ require 'webrick'
7
7
  describe Mongo::Socket::OcspVerifier do
8
8
  require_ocsp_verifier
9
9
  with_openssl_debug
10
+ retry_test
10
11
 
11
12
  shared_examples 'verifies' do
12
13
  context 'mri' do
@@ -21,11 +21,11 @@ describe 'QueryCache' do
21
21
  # these tests.
22
22
  #
23
23
  # Other session leaks will be detected and addressed as part of RUBY-2391.
24
- SessionRegistry.instance.clear_registry
24
+ Mrss::SessionRegistry.instance.clear_registry
25
25
  end
26
26
 
27
27
  after do
28
- SessionRegistry.instance.verify_sessions_ended!
28
+ Mrss::SessionRegistry.instance.verify_sessions_ended!
29
29
  end
30
30
 
31
31
  let(:subscriber) { Mrss::EventSubscriber.new }
@@ -693,7 +693,7 @@ describe 'QueryCache' do
693
693
  end
694
694
 
695
695
  [:find_one_and_delete, :find_one_and_replace, :find_one_and_update,
696
- :update_one, :replace_one].each do |method|
696
+ :replace_one].each do |method|
697
697
  context "when updating with #{method}" do
698
698
  context 'when updating and querying from same collection' do
699
699
  before do
@@ -721,28 +721,30 @@ describe 'QueryCache' do
721
721
  end
722
722
  end
723
723
 
724
- context 'when updating with #update_many' do
725
- context 'when updating and querying from same collection' do
726
- before do
727
- authorized_collection.find.to_a
728
- authorized_collection.update_many({ field: 'value' }, { "$inc" => { :field => 1 } })
729
- end
724
+ [:update_one, :update_many].each do |method|
725
+ context "when updating with ##{method}" do
726
+ context 'when updating and querying from same collection' do
727
+ before do
728
+ authorized_collection.find.to_a
729
+ authorized_collection.send(method, { field: 'value' }, { "$inc" => { :field => 1 } })
730
+ end
730
731
 
731
- it 'queries again' do
732
- authorized_collection.find.to_a
733
- expect(events.length).to eq(2)
732
+ it 'queries again' do
733
+ authorized_collection.find.to_a
734
+ expect(events.length).to eq(2)
735
+ end
734
736
  end
735
- end
736
737
 
737
- context 'when updating and querying from different collections' do
738
- before do
739
- authorized_collection.find.to_a
740
- authorized_client['different_collection'].update_many({ field: 'value' }, { "$inc" => { :field => 1 } })
741
- end
738
+ context 'when updating and querying from different collections' do
739
+ before do
740
+ authorized_collection.find.to_a
741
+ authorized_client['different_collection'].send(method, { field: 'value' }, { "$inc" => { :field => 1 } })
742
+ end
742
743
 
743
- it 'uses the cached query' do
744
- authorized_collection.find.to_a
745
- expect(events.length).to eq(1)
744
+ it 'uses the cached query' do
745
+ authorized_collection.find.to_a
746
+ expect(events.length).to eq(1)
747
+ end
746
748
  end
747
749
  end
748
750
  end
@@ -1072,7 +1074,7 @@ describe 'QueryCache' do
1072
1074
  end
1073
1075
 
1074
1076
  [:find_one_and_delete, :find_one_and_replace, :find_one_and_update,
1075
- :update_one, :replace_one].each do |method|
1077
+ :replace_one].each do |method|
1076
1078
  context "when #{method} is performed on another collection" do
1077
1079
  before do
1078
1080
  aggregation.to_a
@@ -1086,15 +1088,17 @@ describe 'QueryCache' do
1086
1088
  end
1087
1089
  end
1088
1090
 
1089
- context 'when update_many is performed on another collection' do
1090
- before do
1091
- aggregation.to_a
1092
- authorized_client['different_collection'].update_many({ field: 'value' }, { "$inc" => { :field => 1 } })
1093
- aggregation.to_a
1094
- end
1091
+ [:update_one, :update_many].each do |method|
1092
+ context 'when update_many is performed on another collection' do
1093
+ before do
1094
+ aggregation.to_a
1095
+ authorized_client['different_collection'].send(method, { field: 'value' }, { "$inc" => { :field => 1 } })
1096
+ aggregation.to_a
1097
+ end
1095
1098
 
1096
- it 'queries again' do
1097
- expect(events.length).to eq(2)
1099
+ it 'queries again' do
1100
+ expect(events.length).to eq(2)
1101
+ end
1098
1102
  end
1099
1103
  end
1100
1104
 
@@ -731,7 +731,7 @@ describe 'Retryable writes integration tests' do
731
731
  end
732
732
 
733
733
  let(:operation) do
734
- collection.bulk_write([{ update_many: { filter: { a: 0 }, update: { a: 1 } } }])
734
+ collection.bulk_write([{ update_many: { filter: { a: 0 }, update: { "$set" => { a: 1 } } } }])
735
735
  end
736
736
 
737
737
  let(:expectation) do
@@ -135,44 +135,4 @@ describe 'SDAM events' do
135
135
  end
136
136
  end
137
137
  end
138
-
139
- describe 'server description changed' do
140
- require_topology :single
141
-
142
- let(:sdam_proc) do
143
- Proc.new do |client|
144
- client.subscribe(Mongo::Monitoring::SERVER_DESCRIPTION_CHANGED, subscriber)
145
- end
146
- end
147
-
148
- let(:client) do
149
- new_local_client(SpecConfig.instance.addresses,
150
- # Heartbeat interval is bound by 500 ms
151
- SpecConfig.instance.test_options.merge(client_options).merge(
152
- heartbeat_frequency: 0.5,
153
- sdam_proc: sdam_proc,
154
- ),
155
- )
156
- end
157
-
158
- let(:client_options) do
159
- {}
160
- end
161
-
162
- it 'is not published when there are no changes in server state' do
163
- client
164
- sleep 6
165
- client.close
166
-
167
- events = subscriber.select_succeeded_events(Mongo::Monitoring::Event::ServerDescriptionChanged)
168
-
169
- # In 6 seconds we should have about 10 or 12 heartbeats.
170
- # We expect 1 or 2 description changes:
171
- # The first one from unknown to known,
172
- # The second one because server changes the fields it returns based on
173
- # driver server check payload (e.g. ismaster/isWritablePrimary).
174
- events.length.should >= 1
175
- events.length.should <= 2
176
- end
177
- end
178
138
  end
@@ -16,7 +16,8 @@ describe 'Server::Monitor' do
16
16
  {heartbeat_frequency: 1}
17
17
  end
18
18
 
19
- it 'refreshes server descriptions in background', retry: 3 do
19
+ retry_test
20
+ it 'refreshes server descriptions in background' do
20
21
  server = client.cluster.next_primary
21
22
 
22
23
  expect(server.description).not_to be_unknown
@@ -4,6 +4,9 @@
4
4
  require 'spec_helper'
5
5
 
6
6
  describe 'BSON & command size limits' do
7
+ # https://jira.mongodb.org/browse/RUBY-3016
8
+ retry_test
9
+
7
10
  let(:max_document_size) { 16*1024*1024 }
8
11
 
9
12
  before do
@@ -75,7 +78,7 @@ describe 'BSON & command size limits' do
75
78
  end
76
79
 
77
80
  it 'fails on the driver when an update larger than 16MiB is performed' do
78
- document = { key: 'a' * (max_document_size - 14) }
81
+ document = { "$set" => { key: 'a' * (max_document_size - 25) } }
79
82
  expect(document.to_bson.length).to eq(max_document_size+1)
80
83
 
81
84
  lambda do
@@ -0,0 +1,127 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ require 'spec_helper'
5
+
6
+ describe 'Snapshot Query Examples' do
7
+ require_topology :replica_set, :sharded
8
+ require_no_auth
9
+ require_no_tls
10
+
11
+ min_server_fcv '5.0'
12
+
13
+ let(:uri_string) do
14
+ "mongodb://#{SpecConfig.instance.addresses.join(',')}/?w=majority"
15
+ end
16
+
17
+ context "Snapshot Query Example 1" do
18
+ before do
19
+ client = authorized_client.use('pets')
20
+ client['cats'].delete_many
21
+ client['dogs'].delete_many
22
+
23
+ client['cats'].insert_one(
24
+ name: "Whiskers",
25
+ color: "white",
26
+ age: 10,
27
+ adoptable: true
28
+ )
29
+
30
+ client['dogs'].insert_one(
31
+ name: "Pebbles",
32
+ color: "Brown",
33
+ age: 10,
34
+ adoptable: true
35
+ )
36
+ if ClusterConfig.instance.topology == :sharded
37
+ run_mongos_distincts "pets", "cats"
38
+ else
39
+ wait_for_snapshot(db: 'pets', collection: 'cats')
40
+ wait_for_snapshot(db: 'pets', collection: 'dogs')
41
+ end
42
+ end
43
+
44
+ it "returns a snapshot of the data" do
45
+
46
+ adoptable_pets_count = 0
47
+
48
+ # Start Snapshot Query Example 1
49
+
50
+ client = Mongo::Client.new(uri_string, database: "pets")
51
+
52
+ client.start_session(snapshot: true) do |session|
53
+ adoptable_pets_count = client['cats'].aggregate([
54
+ { "$match": { "adoptable": true } },
55
+ { "$count": "adoptable_cats_count" }
56
+ ], session: session).first["adoptable_cats_count"]
57
+
58
+ adoptable_pets_count += client['dogs'].aggregate([
59
+ { "$match": { "adoptable": true } },
60
+ { "$count": "adoptable_dogs_count" }
61
+ ], session: session).first["adoptable_dogs_count"]
62
+
63
+ puts adoptable_pets_count
64
+ end
65
+
66
+ # End Snapshot Query Example 1
67
+
68
+ expect(adoptable_pets_count).to eq 2
69
+ client.close
70
+ end
71
+ end
72
+
73
+ context "Snapshot Query Example 2" do
74
+ before do
75
+ client = authorized_client.use('retail')
76
+ client['sales'].delete_many
77
+
78
+ client['sales'].insert_one(
79
+ shoeType: "boot",
80
+ price: 30,
81
+ saleDate: Time.now
82
+ )
83
+
84
+ if ClusterConfig.instance.topology == :sharded
85
+ run_mongos_distincts "retail", "sales"
86
+ else
87
+ wait_for_snapshot(db: 'retail', collection: 'sales')
88
+ end
89
+ end
90
+
91
+ it "returns a snapshot of the data" do
92
+
93
+ total = 0
94
+
95
+ # Start Snapshot Query Example 2
96
+
97
+ client = Mongo::Client.new(uri_string, database: "retail")
98
+
99
+ client.start_session(snapshot: true) do |session|
100
+ total = client['sales'].aggregate([
101
+ {
102
+ "$match": {
103
+ "$expr": {
104
+ "$gt": [
105
+ "$saleDate",
106
+ {
107
+ "$dateSubtract": {
108
+ startDate: "$$NOW",
109
+ unit: "day",
110
+ amount: 1
111
+ }
112
+ }
113
+ ]
114
+ }
115
+ }
116
+ },
117
+ { "$count": "total_daily_sales" }
118
+ ], session: session).first["total_daily_sales"]
119
+ end
120
+
121
+ # End Snapshot Query Example 2
122
+
123
+ expect(total).to eq 1
124
+ client.close
125
+ end
126
+ end
127
+ end
@@ -402,5 +402,42 @@ describe 'SRV Monitoring' do
402
402
  end
403
403
  end
404
404
  end
405
+
406
+ context 'when the client mocks the srvServiceName' do
407
+
408
+ let(:uri) do
409
+ "mongodb+srv://test-fake.test.build.10gen.cc/?tls=#{SpecConfig.instance.ssl?}&tlsInsecure=true&srvServiceName=customname"
410
+ end
411
+
412
+ it 'finds the records using the custom service name' do
413
+
414
+ rules = [
415
+ ['_customname._tcp.test-fake.test.build.10gen.cc', :srv,
416
+ [0, 0, 27998, 'localhost.test.build.10gen.cc'],
417
+ [0, 0, 27999, 'localhost.test.build.10gen.cc'],
418
+ ],
419
+ ]
420
+
421
+ mock_dns(rules) do
422
+ 15.times do
423
+ address_strs = client.cluster.servers_list.map(&:address).map(&:seed).sort
424
+ if address_strs == %w(
425
+ localhost.test.build.10gen.cc:27998
426
+ localhost.test.build.10gen.cc:27999
427
+ )
428
+ then
429
+ break
430
+ end
431
+ sleep 1
432
+ end
433
+
434
+ address_strs = client.cluster.servers_list.map(&:address).map(&:seed).sort
435
+ expect(address_strs).to eq(%w(
436
+ localhost.test.build.10gen.cc:27998
437
+ localhost.test.build.10gen.cc:27999
438
+ ))
439
+ end
440
+ end
441
+ end
405
442
  end
406
443
  end
@@ -134,10 +134,14 @@ describe 'Step down behavior' do
134
134
  end
135
135
 
136
136
  let(:fail_point) do
137
- { configureFailPoint: 'failCommand', data: {
138
- # There is currently no way to turn write retries on not master
139
- # errors off - therefore set the number of fails to 2
140
- failCommands: ['insert'], errorCode: fail_point_code, }, mode: {times: 2} }
137
+ {
138
+ configureFailPoint: 'failCommand',
139
+ data: {
140
+ failCommands: ['insert'],
141
+ errorCode: fail_point_code,
142
+ },
143
+ mode: { times: 1 }
144
+ }
141
145
  end
142
146
 
143
147
  before do
@@ -165,6 +169,10 @@ describe 'Step down behavior' do
165
169
  end.to raise_error(Mongo::Error::OperationFailure, /10107/)
166
170
 
167
171
  expect(subscriber.select_published_events(Mongo::Monitoring::Event::Cmap::PoolCleared).count).to eq(0)
172
+
173
+ expect do
174
+ collection.insert_one(test: 1)
175
+ end.to_not raise_error
168
176
  end
169
177
  end
170
178
 
@@ -184,6 +192,10 @@ describe 'Step down behavior' do
184
192
  end.to raise_error(Mongo::Error::OperationFailure, /10107/)
185
193
 
186
194
  expect(subscriber.select_published_events(Mongo::Monitoring::Event::Cmap::PoolCleared).count).to eq(1)
195
+
196
+ expect do
197
+ collection.insert_one(test: 1)
198
+ end.to_not raise_error
187
199
  end
188
200
  end
189
201
 
@@ -201,6 +213,10 @@ describe 'Step down behavior' do
201
213
  end.to raise_error(Mongo::Error::OperationFailure, /11600/)
202
214
 
203
215
  expect(subscriber.select_published_events(Mongo::Monitoring::Event::Cmap::PoolCleared).count).to eq(1)
216
+
217
+ expect do
218
+ collection.insert_one(test: 1)
219
+ end.to_not raise_error
204
220
  end
205
221
  end
206
222
  end
@@ -76,7 +76,7 @@ describe 'Transaction pinning' do
76
76
  session.start_transaction
77
77
  client["tx_pin"].insert_one({test: 1}, session: session)
78
78
  session.pinned_server.should be nil
79
- session.pinned_service_id.should_not be nil
79
+ session.pinned_connection_global_id.should_not be nil
80
80
 
81
81
  server.pool.size.should == 1
82
82
  server.pool.clear
@@ -99,7 +99,7 @@ describe 'Transaction pinning' do
99
99
  session.start_transaction
100
100
  client["tx_pin_t#{i}"].insert_one({test: 1}, session: session)
101
101
  session.pinned_server.should be nil
102
- session.pinned_service_id.should_not be nil
102
+ session.pinned_connection_global_id.should_not be nil
103
103
  sessions << session
104
104
  connections << server.pool.check_out
105
105
  end
@@ -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