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
@@ -5,6 +5,18 @@ require 'spec_helper'
5
5
 
6
6
  describe Mongo::Index::View do
7
7
 
8
+ let(:subscriber) { Mrss::EventSubscriber.new }
9
+
10
+ let(:client) do
11
+ authorized_client.tap do |client|
12
+ client.subscribe(Mongo::Monitoring::COMMAND, subscriber)
13
+ end
14
+ end
15
+
16
+ let(:authorized_collection) do
17
+ client[TEST_COLL]
18
+ end
19
+
8
20
  let(:view) do
9
21
  described_class.new(authorized_collection, options)
10
22
  end
@@ -140,6 +152,17 @@ describe Mongo::Index::View do
140
152
  end
141
153
  end
142
154
  end
155
+
156
+ context 'with a comment' do
157
+ min_server_version '4.4'
158
+
159
+ it 'drops the index' do
160
+ expect(view.drop_one('another_-1', comment: "comment")).to be_successful
161
+ command = subscriber.command_started_events("dropIndexes").last&.command
162
+ expect(command).not_to be_nil
163
+ expect(command["comment"]).to eq("comment")
164
+ end
165
+ end
143
166
  end
144
167
 
145
168
  describe '#drop_all' do
@@ -211,6 +234,17 @@ describe Mongo::Index::View do
211
234
  end
212
235
  end
213
236
  end
237
+
238
+ context 'with a comment' do
239
+ min_server_version '4.4'
240
+
241
+ it 'drops indexes' do
242
+ expect(view.drop_all(comment: "comment")).to be_successful
243
+ command = subscriber.command_started_events("dropIndexes").last&.command
244
+ expect(command).not_to be_nil
245
+ expect(command["comment"]).to eq("comment")
246
+ end
247
+ end
214
248
  end
215
249
  end
216
250
 
@@ -672,6 +706,25 @@ describe Mongo::Index::View do
672
706
  end
673
707
  end
674
708
  end
709
+
710
+ context 'with a comment' do
711
+ min_server_version '4.4'
712
+
713
+ it 'creates indexes' do
714
+ expect(
715
+ view.create_many(
716
+ [
717
+ { key: { random: 1 }, unique: true },
718
+ { key: { testing: -1 }, unique: true }
719
+ ],
720
+ comment: "comment"
721
+ )
722
+ ).to be_successful
723
+ command = subscriber.single_command_started_event("createIndexes")&.command
724
+ expect(command).not_to be_nil
725
+ expect(command["comment"]).to eq("comment")
726
+ end
727
+ end
675
728
  end
676
729
 
677
730
  describe '#create_one' do
@@ -856,6 +909,62 @@ describe Mongo::Index::View do
856
909
  end
857
910
  end
858
911
 
912
+ context 'when providing an invalid wildcard projection expression' do
913
+ min_server_fcv '4.2'
914
+
915
+ it 'raises an exception' do
916
+ expect {
917
+ view.create_one({ '$**' => 1 }, wildcard_projection: 5)
918
+ }.to raise_error(Mongo::Error::OperationFailure, /Error in specification.*wildcardProjection|wildcardProjection.*must be a non-empty object/)
919
+ end
920
+ end
921
+
922
+ context 'when providing a wildcard projection to an invalid base index' do
923
+ min_server_fcv '4.2'
924
+
925
+ it 'raises an exception' do
926
+ expect {
927
+ view.create_one({ 'x' => 1 }, wildcard_projection: { rating: 1 })
928
+ }.to raise_error(Mongo::Error::OperationFailure, /Error in specification.*wildcardProjection|wildcardProjection.*is only allowed/)
929
+ end
930
+ end
931
+
932
+ context 'when providing a valid wildcard projection' do
933
+ min_server_fcv '4.2'
934
+
935
+ let!(:result) do
936
+ view.create_one({ '$**' => 1 }, wildcard_projection: { 'rating' => 1 })
937
+ end
938
+
939
+ let(:indexes) do
940
+ authorized_collection.indexes.get('$**_1')
941
+ end
942
+
943
+ it 'returns ok' do
944
+ expect(result).to be_successful
945
+ end
946
+
947
+ it 'creates an index' do
948
+ expect(indexes).to_not be_nil
949
+ end
950
+
951
+ context 'on server versions <= 4.4' do
952
+ max_server_fcv '4.4'
953
+
954
+ it 'passes wildcardProjection correctly' do
955
+ expect(indexes[:wildcardProjection]).to eq({ 'rating' => 1 })
956
+ end
957
+ end
958
+
959
+ context 'on server versions >= 5.0' do
960
+ min_server_fcv '5.0'
961
+
962
+ it 'passes wildcardProjection correctly' do
963
+ expect(indexes[:wildcardProjection]).to eq({ '_id' => false, 'rating' => true })
964
+ end
965
+ end
966
+ end
967
+
859
968
  context 'when providing hidden option' do
860
969
  let(:index) { view.get('with_hidden_1') }
861
970
 
@@ -988,6 +1097,22 @@ describe Mongo::Index::View do
988
1097
  end
989
1098
  end
990
1099
  end
1100
+
1101
+ context 'with a comment' do
1102
+ min_server_version '4.4'
1103
+
1104
+ it 'creates index' do
1105
+ expect(
1106
+ view.create_one(
1107
+ { 'x' => 1 },
1108
+ comment: "comment"
1109
+ )
1110
+ ).to be_successful
1111
+ command = subscriber.single_command_started_event("createIndexes")&.command
1112
+ expect(command).not_to be_nil
1113
+ expect(command["comment"]).to eq("comment")
1114
+ end
1115
+ end
991
1116
  end
992
1117
 
993
1118
  describe '#get' do
@@ -0,0 +1,244 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ require 'spec_helper'
5
+
6
+ describe Mongo::Operation::Create::OpMsg do
7
+
8
+ let(:write_concern) do
9
+ Mongo::WriteConcern.get(w: :majority)
10
+ end
11
+
12
+ let(:session) { nil }
13
+ let(:spec) do
14
+ { :selector => { :create => authorized_collection.name },
15
+ :db_name => authorized_collection.database.name,
16
+ :write_concern => write_concern,
17
+ :session => session
18
+ }
19
+ end
20
+
21
+ let(:op) { described_class.new(spec) }
22
+
23
+ let(:connection) do
24
+ double('connection').tap do |connection|
25
+ allow(connection).to receive(:server).and_return(authorized_primary)
26
+ allow(connection).to receive(:features).and_return(authorized_primary.features)
27
+ allow(connection).to receive(:description).and_return(authorized_primary.description)
28
+ allow(connection).to receive(:cluster_time).and_return(authorized_primary.cluster_time)
29
+ end
30
+ end
31
+
32
+ describe '#initialize' do
33
+
34
+ context 'spec' do
35
+
36
+ it 'sets the spec' do
37
+ expect(op.spec).to eq(spec)
38
+ end
39
+ end
40
+ end
41
+
42
+ describe '#==' do
43
+
44
+ context 'spec' do
45
+
46
+ context 'when two ops have the same specs' do
47
+ let(:other) { described_class.new(spec) }
48
+
49
+ it 'returns true' do
50
+ expect(op).to eq(other)
51
+ end
52
+ end
53
+
54
+ context 'when two ops have different specs' do
55
+ let(:other_selector) do
56
+ { :create => "other_collection_name" }
57
+ end
58
+
59
+ let(:other_spec) do
60
+ { :selector => other_selector,
61
+ :db_name => authorized_collection.database.name,
62
+ :write_concern => write_concern,
63
+ :ordered => true
64
+ }
65
+ end
66
+ let(:other) { described_class.new(other_spec) }
67
+
68
+ it 'returns false' do
69
+ expect(op).not_to eq(other)
70
+ end
71
+ end
72
+ end
73
+ end
74
+
75
+ describe '#selector' do
76
+ min_server_fcv '3.6'
77
+
78
+ it 'does not mutate user input' do
79
+ user_input = IceNine.deep_freeze(spec.dup)
80
+ expect do
81
+ described_class.new(user_input).send(:selector, connection)
82
+ end.not_to raise_error
83
+ end
84
+ end
85
+
86
+ describe '#message' do
87
+ # https://jira.mongodb.org/browse/RUBY-2224
88
+ require_no_linting
89
+
90
+ context 'when the server supports OP_MSG' do
91
+
92
+ let(:global_args) do
93
+ {
94
+ create: TEST_COLL,
95
+ writeConcern: write_concern.options,
96
+ '$db' => SpecConfig.instance.test_db,
97
+ lsid: session.session_id
98
+ }
99
+ end
100
+
101
+ let(:session) do
102
+ authorized_client.start_session
103
+ end
104
+
105
+ context 'when the topology is replica set or sharded' do
106
+ min_server_fcv '3.6'
107
+ require_topology :replica_set, :sharded
108
+
109
+ let(:expected_global_args) do
110
+ global_args.merge(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
111
+ end
112
+
113
+ it 'creates the correct OP_MSG message' do
114
+ authorized_client.command(ping:1)
115
+ expect(Mongo::Protocol::Msg).to receive(:new).with([], {}, expected_global_args)
116
+ op.send(:message, connection)
117
+ end
118
+ end
119
+
120
+ context 'when the topology is standalone' do
121
+ min_server_fcv '3.6'
122
+ require_topology :single
123
+
124
+ let(:expected_global_args) do
125
+ global_args
126
+ end
127
+
128
+ it 'creates the correct OP_MSG message' do
129
+ authorized_client.command(ping:1)
130
+ expect(Mongo::Protocol::Msg).to receive(:new).with([], {}, expected_global_args)
131
+ op.send(:message, connection)
132
+ end
133
+
134
+ context 'when an implicit session is created and the topology is then updated and the server does not support sessions' do
135
+ # Mocks on features are incompatible with linting
136
+ require_no_linting
137
+
138
+ let(:expected_global_args) do
139
+ global_args.dup.tap do |args|
140
+ args.delete(:lsid)
141
+ end
142
+ end
143
+
144
+ let(:session) do
145
+ Mongo::Session.new(nil, authorized_client, implicit: true).tap do |session|
146
+ allow(session).to receive(:session_id).and_return(42)
147
+ session.should be_implicit
148
+ end
149
+ end
150
+
151
+ it 'creates the correct OP_MSG message' do
152
+ RSpec::Mocks.with_temporary_scope do
153
+ expect(connection.features).to receive(:sessions_enabled?).and_return(false)
154
+
155
+ expect(expected_global_args[:session]).to be nil
156
+ expect(Mongo::Protocol::Msg).to receive(:new).with([], {}, expected_global_args)
157
+ op.send(:message, connection)
158
+ end
159
+ end
160
+ end
161
+ end
162
+
163
+ context 'when the write concern is 0' do
164
+
165
+ let(:write_concern) do
166
+ Mongo::WriteConcern.get(w: 0)
167
+ end
168
+
169
+ context 'when the session is implicit' do
170
+
171
+ let(:session) do
172
+ Mongo::Session.new(nil, authorized_client, implicit: true).tap do |session|
173
+ allow(session).to receive(:session_id).and_return(42)
174
+ session.should be_implicit
175
+ end
176
+ end
177
+
178
+ context 'when the topology is replica set or sharded' do
179
+ min_server_fcv '3.6'
180
+ require_topology :replica_set, :sharded
181
+
182
+ let(:expected_global_args) do
183
+ global_args.dup.tap do |args|
184
+ args.delete(:lsid)
185
+ args.merge!(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
186
+ end
187
+ end
188
+
189
+ it 'does not send a session id in the command' do
190
+ authorized_client.command(ping:1)
191
+ expect(Mongo::Protocol::Msg).to receive(:new).with([:more_to_come], {}, expected_global_args)
192
+ op.send(:message, connection)
193
+ end
194
+ end
195
+
196
+ context 'when the topology is standalone' do
197
+ min_server_fcv '3.6'
198
+ require_topology :single
199
+
200
+ let(:expected_global_args) do
201
+ global_args.dup.tap do |args|
202
+ args.delete(:lsid)
203
+ end
204
+ end
205
+
206
+ it 'creates the correct OP_MSG message' do
207
+ authorized_client.command(ping:1)
208
+ expect(Mongo::Protocol::Msg).to receive(:new).with([:more_to_come], {}, expected_global_args)
209
+ op.send(:message, connection)
210
+ end
211
+ end
212
+ end
213
+
214
+ context 'when the session is explicit' do
215
+ min_server_fcv '3.6'
216
+ require_topology :replica_set, :sharded
217
+
218
+ let(:session) do
219
+ authorized_client.start_session
220
+ end
221
+
222
+ before do
223
+ session.should_not be_implicit
224
+ end
225
+
226
+ let(:expected_global_args) do
227
+ global_args.dup.tap do |args|
228
+ args.delete(:lsid)
229
+ args.merge!(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
230
+ end
231
+ end
232
+
233
+ it 'does not send a session id in the command' do
234
+ authorized_client.command(ping:1)
235
+ RSpec::Mocks.with_temporary_scope do
236
+ expect(Mongo::Protocol::Msg).to receive(:new).with([:more_to_come], {}, expected_global_args)
237
+ op.send(:message, connection)
238
+ end
239
+ end
240
+ end
241
+ end
242
+ end
243
+ end
244
+ end
@@ -163,8 +163,11 @@ describe Mongo::Operation::Delete::OpMsg do
163
163
  end
164
164
  end
165
165
 
166
- before do
167
- session.instance_variable_set(:@options, { implicit: true })
166
+ let(:session) do
167
+ Mongo::Session.new(nil, authorized_client, implicit: true).tap do |session|
168
+ allow(session).to receive(:session_id).and_return(42)
169
+ session.should be_implicit
170
+ end
168
171
  end
169
172
 
170
173
  it 'creates the correct OP_MSG message' do
@@ -188,8 +191,10 @@ describe Mongo::Operation::Delete::OpMsg do
188
191
  context 'when the session is implicit' do
189
192
 
190
193
  let(:session) do
191
- # Use client#get_session so the session is implicit
192
- authorized_client.send(:get_session)
194
+ Mongo::Session.new(nil, authorized_client, implicit: true).tap do |session|
195
+ allow(session).to receive(:session_id).and_return(42)
196
+ session.should be_implicit
197
+ end
193
198
  end
194
199
 
195
200
  context 'when the topology is replica set or sharded' do
@@ -236,6 +241,10 @@ describe Mongo::Operation::Delete::OpMsg do
236
241
  authorized_client.start_session
237
242
  end
238
243
 
244
+ before do
245
+ session.should_not be_implicit
246
+ end
247
+
239
248
  let(:expected_global_args) do
240
249
  global_args.dup.tap do |args|
241
250
  args.delete(:lsid)
@@ -199,35 +199,5 @@ describe Mongo::Operation::Delete do
199
199
  end
200
200
  end
201
201
  end
202
-
203
- context 'when write concern { w: 0 } is used' do
204
- max_server_version '3.4'
205
-
206
- let(:delete) do
207
- described_class.new({
208
- deletes: [ document ],
209
- db_name: SpecConfig.instance.test_db,
210
- coll_name: TEST_COLL,
211
- write_concern: Mongo::WriteConcern.get(:w => 0)
212
- })
213
- end
214
-
215
-
216
- let(:document) do
217
- { 'q' => { field: 'test' }, 'limit' => 1 }
218
- end
219
-
220
- let(:result) do
221
- delete.execute(authorized_primary, context: context)
222
- end
223
-
224
- before do
225
- expect(Mongo::Operation::Delete::Legacy).to receive(:new).and_call_original
226
- end
227
-
228
- it 'uses op codes instead of write commands' do
229
- expect(result.written_count).to eq(0)
230
- end
231
- end
232
202
  end
233
203
  end
@@ -126,7 +126,9 @@ describe Mongo::Operation::Insert::OpMsg do
126
126
  end
127
127
 
128
128
  let(:session) do
129
- authorized_client.start_session
129
+ Mongo::Session.new(nil, authorized_client, implicit: true).tap do |session|
130
+ allow(session).to receive(:session_id).and_return(42)
131
+ end
130
132
  end
131
133
 
132
134
  context 'when the topology is replica set or sharded' do
@@ -141,7 +143,7 @@ describe Mongo::Operation::Insert::OpMsg do
141
143
  authorized_client.command(ping:1)
142
144
  RSpec::Mocks.with_temporary_scope do
143
145
  expect(Mongo::Protocol::Msg).to receive(:new).with([],
144
- { validating_keys: true },
146
+ {},
145
147
  expected_global_args,
146
148
  expected_payload_1)
147
149
  op.send(:message, connection)
@@ -161,7 +163,7 @@ describe Mongo::Operation::Insert::OpMsg do
161
163
  RSpec::Mocks.with_temporary_scope do
162
164
  authorized_client.command(ping:1)
163
165
  expect(Mongo::Protocol::Msg).to receive(:new).with([],
164
- { validating_keys: true },
166
+ {},
165
167
  expected_global_args,
166
168
  expected_payload_1)
167
169
  op.send(:message, connection)
@@ -179,7 +181,7 @@ describe Mongo::Operation::Insert::OpMsg do
179
181
  end
180
182
 
181
183
  before do
182
- session.instance_variable_set(:@options, { implicit: true })
184
+ session.implicit?.should be true
183
185
  end
184
186
 
185
187
  it 'creates the correct OP_MSG message' do
@@ -188,7 +190,7 @@ describe Mongo::Operation::Insert::OpMsg do
188
190
 
189
191
  expect(expected_global_args).not_to have_key(:lsid)
190
192
  expect(Mongo::Protocol::Msg).to receive(:new).with([],
191
- { validating_keys: true },
193
+ {},
192
194
  expected_global_args,
193
195
  expected_payload_1)
194
196
  op.send(:message, connection)
@@ -206,8 +208,10 @@ describe Mongo::Operation::Insert::OpMsg do
206
208
  context 'when the session is implicit' do
207
209
 
208
210
  let(:session) do
209
- # Use client#get_session so the session is implicit
210
- authorized_client.send(:get_session)
211
+ Mongo::Session.new(nil, authorized_client, implicit: true).tap do |session|
212
+ allow(session).to receive(:session_id).and_return(42)
213
+ session.should be_implicit
214
+ end
211
215
  end
212
216
 
213
217
  context 'when the topology is replica set or sharded' do
@@ -225,7 +229,7 @@ describe Mongo::Operation::Insert::OpMsg do
225
229
  authorized_client.command(ping:1)
226
230
  RSpec::Mocks.with_temporary_scope do
227
231
  expect(Mongo::Protocol::Msg).to receive(:new).with([:more_to_come],
228
- { validating_keys: true },
232
+ {},
229
233
  expected_global_args,
230
234
  expected_payload_1)
231
235
  op.send(:message, connection)
@@ -247,7 +251,7 @@ describe Mongo::Operation::Insert::OpMsg do
247
251
  authorized_client.command(ping:1)
248
252
  RSpec::Mocks.with_temporary_scope do
249
253
  expect(Mongo::Protocol::Msg).to receive(:new).with([:more_to_come],
250
- { validating_keys: true },
254
+ {},
251
255
  expected_global_args,
252
256
  expected_payload_1)
253
257
  op.send(:message, connection)
@@ -264,6 +268,10 @@ describe Mongo::Operation::Insert::OpMsg do
264
268
  authorized_client.start_session
265
269
  end
266
270
 
271
+ before do
272
+ session.should_not be_implicit
273
+ end
274
+
267
275
  let(:expected_global_args) do
268
276
  global_args.dup.tap do |args|
269
277
  args.delete(:lsid)
@@ -275,7 +283,7 @@ describe Mongo::Operation::Insert::OpMsg do
275
283
  authorized_client.command(ping:1)
276
284
  RSpec::Mocks.with_temporary_scope do
277
285
  expect(Mongo::Protocol::Msg).to receive(:new).with([:more_to_come],
278
- { validating_keys: true },
286
+ {},
279
287
  expected_global_args,
280
288
  expected_payload_1)
281
289
  op.send(:message, connection)
@@ -254,37 +254,5 @@ describe Mongo::Operation::Insert do
254
254
  end
255
255
  end
256
256
  end
257
-
258
- context 'when write concern { w: 0 } is used' do
259
- max_server_version '3.4'
260
-
261
- let(:spec) do
262
- { :documents => documents,
263
- :db_name => SpecConfig.instance.test_db,
264
- :coll_name => TEST_COLL,
265
- :write_concern => Mongo::WriteConcern.get(:w => 0)
266
- }
267
- end
268
-
269
- let(:documents) do
270
- [{ '_id' => 1 }]
271
- end
272
-
273
- let(:op) do
274
- described_class.new(spec)
275
- end
276
-
277
- before do
278
- expect(Mongo::Operation::Insert::Legacy).to receive(:new).and_call_original
279
- end
280
-
281
- let(:response) do
282
- op.execute(authorized_primary, context: context)
283
- end
284
-
285
- it 'uses op codes instead of write commands' do
286
- expect(response.written_count).to eq(0)
287
- end
288
- end
289
257
  end
290
258
  end
@@ -89,6 +89,26 @@ describe Mongo::Operation::Result do
89
89
  end
90
90
  end
91
91
 
92
+ describe '#has_cursor_id?' do
93
+ context 'when the reply exists' do
94
+
95
+ let(:cursor_id) { 5 }
96
+
97
+ it 'returns true' do
98
+ expect(result).to have_cursor_id
99
+ end
100
+ end
101
+
102
+ context 'when the reply does not exist' do
103
+
104
+ let(:reply) { nil }
105
+
106
+ it 'returns false' do
107
+ expect(result).not_to have_cursor_id
108
+ end
109
+ end
110
+ end
111
+
92
112
  describe '#documents' do
93
113
 
94
114
  context 'when the result is for a command' do
@@ -170,8 +170,11 @@ describe Mongo::Operation::Update::OpMsg do
170
170
  end
171
171
  end
172
172
 
173
- before do
174
- session.instance_variable_set(:@options, { implicit: true })
173
+ let(:session) do
174
+ Mongo::Session.new(nil, authorized_client, implicit: true).tap do |session|
175
+ allow(session).to receive(:session_id).and_return(42)
176
+ session.should be_implicit
177
+ end
175
178
  end
176
179
 
177
180
  it 'creates the correct OP_MSG message' do
@@ -194,8 +197,10 @@ describe Mongo::Operation::Update::OpMsg do
194
197
  context 'when the session is implicit' do
195
198
 
196
199
  let(:session) do
197
- # Use client#get_session so the session is implicit
198
- authorized_client.send(:get_session)
200
+ Mongo::Session.new(nil, authorized_client, implicit: true).tap do |session|
201
+ allow(session).to receive(:session_id).and_return(42)
202
+ session.should be_implicit
203
+ end
199
204
  end
200
205
 
201
206
  context 'when the topology is replica set or sharded' do
@@ -242,6 +247,10 @@ describe Mongo::Operation::Update::OpMsg do
242
247
  authorized_client.start_session
243
248
  end
244
249
 
250
+ before do
251
+ session.should_not be_implicit
252
+ end
253
+
245
254
  let(:expected_global_args) do
246
255
  global_args.dup.tap do |args|
247
256
  args.delete(:lsid)