mongo 2.18.2 → 2.19.0

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 (1133) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +12 -2
  4. data/Rakefile +4 -3
  5. data/bin/mongo_console +2 -0
  6. data/lib/mongo/active_support.rb +1 -1
  7. data/lib/mongo/address/ipv4.rb +1 -1
  8. data/lib/mongo/address/ipv6.rb +1 -1
  9. data/lib/mongo/address/unix.rb +1 -1
  10. data/lib/mongo/address/validator.rb +1 -1
  11. data/lib/mongo/address.rb +1 -1
  12. data/lib/mongo/auth/aws/conversation.rb +1 -5
  13. data/lib/mongo/auth/aws/credentials.rb +38 -0
  14. data/lib/mongo/auth/aws/credentials_cache.rb +75 -0
  15. data/lib/mongo/auth/aws/credentials_retriever.rb +172 -37
  16. data/lib/mongo/auth/aws/request.rb +1 -2
  17. data/lib/mongo/auth/aws.rb +6 -6
  18. data/lib/mongo/auth/base.rb +1 -1
  19. data/lib/mongo/auth/conversation_base.rb +1 -1
  20. data/lib/mongo/auth/cr/conversation.rb +1 -1
  21. data/lib/mongo/auth/cr.rb +1 -1
  22. data/lib/mongo/auth/credential_cache.rb +1 -1
  23. data/lib/mongo/auth/gssapi/conversation.rb +1 -1
  24. data/lib/mongo/auth/gssapi.rb +1 -1
  25. data/lib/mongo/auth/ldap/conversation.rb +1 -1
  26. data/lib/mongo/auth/ldap.rb +1 -1
  27. data/lib/mongo/auth/roles.rb +17 -17
  28. data/lib/mongo/auth/sasl_conversation_base.rb +1 -1
  29. data/lib/mongo/auth/scram/conversation.rb +1 -1
  30. data/lib/mongo/auth/scram.rb +1 -1
  31. data/lib/mongo/auth/scram256/conversation.rb +1 -1
  32. data/lib/mongo/auth/scram256.rb +1 -1
  33. data/lib/mongo/auth/scram_conversation_base.rb +1 -1
  34. data/lib/mongo/auth/stringprep/profiles/sasl.rb +1 -1
  35. data/lib/mongo/auth/stringprep/tables.rb +1 -1
  36. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +1 -1
  37. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +2 -1
  38. data/lib/mongo/auth/stringprep.rb +1 -1
  39. data/lib/mongo/auth/user/view.rb +1 -1
  40. data/lib/mongo/auth/user.rb +1 -1
  41. data/lib/mongo/auth/x509/conversation.rb +1 -1
  42. data/lib/mongo/auth/x509.rb +1 -1
  43. data/lib/mongo/auth.rb +1 -1
  44. data/lib/mongo/background_thread.rb +1 -1
  45. data/lib/mongo/bson.rb +1 -1
  46. data/lib/mongo/bulk_write/combineable.rb +1 -1
  47. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
  48. data/lib/mongo/bulk_write/result.rb +1 -1
  49. data/lib/mongo/bulk_write/result_combiner.rb +1 -1
  50. data/lib/mongo/bulk_write/transformable.rb +1 -1
  51. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
  52. data/lib/mongo/bulk_write/validatable.rb +1 -1
  53. data/lib/mongo/bulk_write.rb +1 -1
  54. data/lib/mongo/caching_cursor.rb +1 -1
  55. data/lib/mongo/client.rb +27 -4
  56. data/lib/mongo/client_encryption.rb +102 -1
  57. data/lib/mongo/cluster/periodic_executor.rb +1 -1
  58. data/lib/mongo/cluster/reapers/cursor_reaper.rb +2 -6
  59. data/lib/mongo/cluster/reapers/socket_reaper.rb +2 -2
  60. data/lib/mongo/cluster/sdam_flow.rb +42 -15
  61. data/lib/mongo/cluster/topology/base.rb +1 -1
  62. data/lib/mongo/cluster/topology/load_balanced.rb +1 -1
  63. data/lib/mongo/cluster/topology/no_replica_set_options.rb +1 -1
  64. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +1 -1
  65. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +1 -1
  66. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  67. data/lib/mongo/cluster/topology/single.rb +1 -1
  68. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  69. data/lib/mongo/cluster/topology.rb +1 -1
  70. data/lib/mongo/cluster.rb +29 -12
  71. data/lib/mongo/cluster_time.rb +1 -1
  72. data/lib/mongo/collection/helpers.rb +1 -1
  73. data/lib/mongo/collection/queryable_encryption.rb +83 -43
  74. data/lib/mongo/collection/view/aggregation.rb +1 -1
  75. data/lib/mongo/collection/view/builder/aggregation.rb +1 -1
  76. data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
  77. data/lib/mongo/collection/view/builder.rb +1 -1
  78. data/lib/mongo/collection/view/change_stream/retryable.rb +1 -1
  79. data/lib/mongo/collection/view/change_stream.rb +3 -3
  80. data/lib/mongo/collection/view/explainable.rb +1 -1
  81. data/lib/mongo/collection/view/immutable.rb +1 -1
  82. data/lib/mongo/collection/view/iterable.rb +1 -1
  83. data/lib/mongo/collection/view/map_reduce.rb +1 -1
  84. data/lib/mongo/collection/view/readable.rb +11 -12
  85. data/lib/mongo/collection/view/writable.rb +1 -1
  86. data/lib/mongo/collection/view.rb +1 -1
  87. data/lib/mongo/collection.rb +26 -11
  88. data/lib/mongo/condition_variable.rb +58 -0
  89. data/lib/mongo/config/options.rb +1 -0
  90. data/lib/mongo/config/validators/option.rb +1 -0
  91. data/lib/mongo/config.rb +1 -0
  92. data/lib/mongo/crypt/auto_decryption_context.rb +1 -1
  93. data/lib/mongo/crypt/auto_encrypter.rb +5 -3
  94. data/lib/mongo/crypt/auto_encryption_context.rb +1 -1
  95. data/lib/mongo/crypt/binary.rb +1 -1
  96. data/lib/mongo/crypt/binding.rb +224 -30
  97. data/lib/mongo/crypt/context.rb +67 -4
  98. data/lib/mongo/crypt/data_key_context.rb +1 -1
  99. data/lib/mongo/crypt/encryption_io.rb +2 -2
  100. data/lib/mongo/crypt/explicit_decryption_context.rb +1 -1
  101. data/lib/mongo/crypt/explicit_encrypter.rb +120 -34
  102. data/lib/mongo/crypt/explicit_encryption_context.rb +58 -27
  103. data/lib/mongo/crypt/explicit_encryption_expression_context.rb +30 -0
  104. data/lib/mongo/crypt/handle.rb +10 -2
  105. data/lib/mongo/crypt/hooks.rb +1 -1
  106. data/lib/mongo/crypt/kms/aws/credentials.rb +83 -0
  107. data/lib/mongo/crypt/kms/aws/master_document.rb +78 -0
  108. data/lib/mongo/crypt/kms/aws.rb +3 -119
  109. data/lib/mongo/crypt/kms/azure/access_token.rb +54 -0
  110. data/lib/mongo/crypt/kms/azure/credentials.rb +103 -0
  111. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +122 -0
  112. data/lib/mongo/crypt/kms/azure/master_document.rb +79 -0
  113. data/lib/mongo/crypt/kms/azure.rb +5 -128
  114. data/lib/mongo/crypt/kms/credentials.rb +17 -2
  115. data/lib/mongo/crypt/kms/gcp/credentials.rb +127 -0
  116. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +58 -0
  117. data/lib/mongo/crypt/kms/gcp/master_document.rb +99 -0
  118. data/lib/mongo/crypt/kms/gcp.rb +4 -172
  119. data/lib/mongo/crypt/kms/kmip/credentials.rb +68 -0
  120. data/lib/mongo/crypt/kms/kmip/master_document.rb +74 -0
  121. data/lib/mongo/crypt/kms/kmip.rb +3 -100
  122. data/lib/mongo/crypt/kms/local/credentials.rb +65 -0
  123. data/lib/mongo/crypt/kms/local/master_document.rb +43 -0
  124. data/lib/mongo/crypt/kms/local.rb +3 -66
  125. data/lib/mongo/crypt/kms/master_key_document.rb +1 -1
  126. data/lib/mongo/crypt/kms.rb +7 -1
  127. data/lib/mongo/crypt/kms_context.rb +1 -1
  128. data/lib/mongo/crypt/rewrap_many_data_key_context.rb +1 -1
  129. data/lib/mongo/crypt/rewrap_many_data_key_result.rb +1 -1
  130. data/lib/mongo/crypt/status.rb +1 -1
  131. data/lib/mongo/crypt.rb +13 -1
  132. data/lib/mongo/cursor/kill_spec.rb +1 -1
  133. data/lib/mongo/cursor.rb +40 -6
  134. data/lib/mongo/database/view.rb +41 -4
  135. data/lib/mongo/database.rb +2 -2
  136. data/lib/mongo/dbref.rb +1 -1
  137. data/lib/mongo/distinguishing_semaphore.rb +2 -2
  138. data/lib/mongo/error/auth_error.rb +1 -1
  139. data/lib/mongo/error/bad_load_balancer_target.rb +1 -1
  140. data/lib/mongo/error/bulk_write_error.rb +1 -1
  141. data/lib/mongo/error/change_stream_resumable.rb +1 -1
  142. data/lib/mongo/error/client_closed.rb +24 -0
  143. data/lib/mongo/error/closed_stream.rb +1 -1
  144. data/lib/mongo/error/connection_check_out_timeout.rb +1 -1
  145. data/lib/mongo/error/connection_perished.rb +3 -1
  146. data/lib/mongo/error/connection_unavailable.rb +27 -0
  147. data/lib/mongo/error/credential_check_error.rb +1 -1
  148. data/lib/mongo/error/crypt_error.rb +1 -1
  149. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  150. data/lib/mongo/error/failed_string_prep_validation.rb +1 -1
  151. data/lib/mongo/error/file_not_found.rb +1 -1
  152. data/lib/mongo/error/handshake_error.rb +1 -1
  153. data/lib/mongo/error/insufficient_iteration_count.rb +1 -1
  154. data/lib/mongo/error/internal_driver_error.rb +1 -1
  155. data/lib/mongo/error/invalid_address.rb +1 -1
  156. data/lib/mongo/error/invalid_application_name.rb +1 -1
  157. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  158. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  159. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  160. data/lib/mongo/error/invalid_config_option.rb +1 -0
  161. data/lib/mongo/error/invalid_cursor_operation.rb +1 -1
  162. data/lib/mongo/error/invalid_database_name.rb +1 -1
  163. data/lib/mongo/error/invalid_document.rb +1 -1
  164. data/lib/mongo/error/invalid_file.rb +1 -1
  165. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  166. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  167. data/lib/mongo/error/invalid_nonce.rb +1 -1
  168. data/lib/mongo/error/invalid_read_concern.rb +1 -1
  169. data/lib/mongo/error/invalid_read_option.rb +1 -1
  170. data/lib/mongo/error/invalid_replacement_document.rb +1 -1
  171. data/lib/mongo/error/invalid_server_auth_host.rb +1 -1
  172. data/lib/mongo/error/invalid_server_auth_response.rb +1 -1
  173. data/lib/mongo/error/invalid_server_preference.rb +1 -1
  174. data/lib/mongo/error/invalid_session.rb +1 -1
  175. data/lib/mongo/error/invalid_signature.rb +1 -1
  176. data/lib/mongo/error/invalid_transaction_operation.rb +1 -1
  177. data/lib/mongo/error/invalid_txt_record.rb +1 -1
  178. data/lib/mongo/error/invalid_update_document.rb +1 -1
  179. data/lib/mongo/error/invalid_uri.rb +1 -1
  180. data/lib/mongo/error/invalid_write_concern.rb +1 -1
  181. data/lib/mongo/error/kms_error.rb +1 -1
  182. data/lib/mongo/error/labelable.rb +1 -1
  183. data/lib/mongo/error/lint_error.rb +1 -1
  184. data/lib/mongo/error/max_bson_size.rb +1 -1
  185. data/lib/mongo/error/max_message_size.rb +1 -1
  186. data/lib/mongo/error/mismatched_domain.rb +1 -1
  187. data/lib/mongo/error/missing_connection.rb +4 -2
  188. data/lib/mongo/error/missing_file_chunk.rb +1 -1
  189. data/lib/mongo/error/missing_password.rb +1 -1
  190. data/lib/mongo/error/missing_resume_token.rb +1 -1
  191. data/lib/mongo/error/missing_scram_server_signature.rb +1 -1
  192. data/lib/mongo/error/missing_service_id.rb +1 -1
  193. data/lib/mongo/error/mongocryptd_spawn_error.rb +1 -1
  194. data/lib/mongo/error/multi_index_drop.rb +1 -1
  195. data/lib/mongo/error/need_primary_server.rb +1 -1
  196. data/lib/mongo/error/no_server_available.rb +1 -1
  197. data/lib/mongo/error/no_service_connection_available.rb +1 -1
  198. data/lib/mongo/error/no_srv_records.rb +1 -1
  199. data/lib/mongo/error/notable.rb +8 -1
  200. data/lib/mongo/error/operation_failure.rb +1 -1
  201. data/lib/mongo/error/parser.rb +1 -1
  202. data/lib/mongo/error/pool_cleared_error.rb +40 -0
  203. data/lib/mongo/error/pool_closed_error.rb +4 -17
  204. data/lib/mongo/error/pool_error.rb +45 -0
  205. data/lib/mongo/error/pool_paused_error.rb +40 -0
  206. data/lib/mongo/error/raise_original_error.rb +1 -1
  207. data/lib/mongo/error/read_write_retryable.rb +1 -1
  208. data/lib/mongo/error/sdam_error_detection.rb +1 -1
  209. data/lib/mongo/error/server_api_conflict.rb +1 -1
  210. data/lib/mongo/error/server_api_not_supported.rb +1 -1
  211. data/lib/mongo/error/server_certificate_revoked.rb +1 -1
  212. data/lib/mongo/error/server_not_usable.rb +36 -0
  213. data/lib/mongo/error/session_ended.rb +1 -1
  214. data/lib/mongo/error/session_not_materialized.rb +1 -1
  215. data/lib/mongo/error/sessions_not_supported.rb +1 -1
  216. data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -1
  217. data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -1
  218. data/lib/mongo/error/socket_error.rb +1 -1
  219. data/lib/mongo/error/socket_timeout_error.rb +1 -1
  220. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  221. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  222. data/lib/mongo/error/unexpected_response.rb +1 -1
  223. data/lib/mongo/error/unknown_payload_type.rb +1 -1
  224. data/lib/mongo/error/unmet_dependency.rb +1 -1
  225. data/lib/mongo/error/unsupported_array_filters.rb +1 -1
  226. data/lib/mongo/error/unsupported_collation.rb +1 -1
  227. data/lib/mongo/error/unsupported_features.rb +1 -1
  228. data/lib/mongo/error/unsupported_message_type.rb +1 -1
  229. data/lib/mongo/error/unsupported_option.rb +1 -1
  230. data/lib/mongo/error/write_retryable.rb +1 -1
  231. data/lib/mongo/error.rb +7 -1
  232. data/lib/mongo/event/base.rb +1 -1
  233. data/lib/mongo/event/listeners.rb +1 -1
  234. data/lib/mongo/event/publisher.rb +1 -1
  235. data/lib/mongo/event/subscriber.rb +1 -1
  236. data/lib/mongo/event.rb +1 -1
  237. data/lib/mongo/grid/file/chunk.rb +3 -2
  238. data/lib/mongo/grid/file/info.rb +3 -2
  239. data/lib/mongo/grid/file.rb +1 -1
  240. data/lib/mongo/grid/fs_bucket.rb +1 -1
  241. data/lib/mongo/grid/stream/read.rb +1 -1
  242. data/lib/mongo/grid/stream/write.rb +1 -1
  243. data/lib/mongo/grid/stream.rb +1 -1
  244. data/lib/mongo/grid.rb +1 -1
  245. data/lib/mongo/id.rb +1 -1
  246. data/lib/mongo/index/view.rb +1 -1
  247. data/lib/mongo/index.rb +1 -1
  248. data/lib/mongo/lint.rb +1 -1
  249. data/lib/mongo/loggable.rb +3 -3
  250. data/lib/mongo/logger.rb +1 -1
  251. data/lib/mongo/monitoring/cmap_log_subscriber.rb +1 -1
  252. data/lib/mongo/monitoring/command_log_subscriber.rb +1 -1
  253. data/lib/mongo/monitoring/event/cmap/base.rb +1 -1
  254. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -1
  255. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +1 -1
  256. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -1
  257. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +1 -1
  258. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -1
  259. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -1
  260. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -1
  261. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +9 -2
  262. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -1
  263. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -1
  264. data/lib/mongo/monitoring/event/cmap/pool_ready.rb +67 -0
  265. data/lib/mongo/monitoring/event/cmap.rb +2 -1
  266. data/lib/mongo/monitoring/event/command_failed.rb +1 -1
  267. data/lib/mongo/monitoring/event/command_started.rb +1 -1
  268. data/lib/mongo/monitoring/event/command_succeeded.rb +1 -1
  269. data/lib/mongo/monitoring/event/secure.rb +1 -1
  270. data/lib/mongo/monitoring/event/server_closed.rb +1 -1
  271. data/lib/mongo/monitoring/event/server_description_changed.rb +1 -1
  272. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +1 -1
  273. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -1
  274. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +1 -1
  275. data/lib/mongo/monitoring/event/server_opening.rb +1 -1
  276. data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
  277. data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
  278. data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
  279. data/lib/mongo/monitoring/event.rb +1 -1
  280. data/lib/mongo/monitoring/publishable.rb +1 -1
  281. data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
  282. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
  283. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
  284. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
  285. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  286. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +1 -1
  287. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
  288. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -1
  289. data/lib/mongo/monitoring.rb +1 -1
  290. data/lib/mongo/operation/aggregate/op_msg.rb +1 -1
  291. data/lib/mongo/operation/aggregate/result.rb +1 -1
  292. data/lib/mongo/operation/aggregate.rb +1 -1
  293. data/lib/mongo/operation/collections_info/result.rb +1 -1
  294. data/lib/mongo/operation/collections_info.rb +1 -1
  295. data/lib/mongo/operation/command/op_msg.rb +1 -1
  296. data/lib/mongo/operation/command.rb +1 -1
  297. data/lib/mongo/operation/context.rb +1 -1
  298. data/lib/mongo/operation/count/op_msg.rb +1 -1
  299. data/lib/mongo/operation/count.rb +1 -1
  300. data/lib/mongo/operation/create/op_msg.rb +1 -1
  301. data/lib/mongo/operation/create.rb +1 -1
  302. data/lib/mongo/operation/create_index/op_msg.rb +1 -1
  303. data/lib/mongo/operation/create_index.rb +1 -1
  304. data/lib/mongo/operation/create_user/op_msg.rb +1 -1
  305. data/lib/mongo/operation/create_user.rb +1 -1
  306. data/lib/mongo/operation/delete/bulk_result.rb +1 -1
  307. data/lib/mongo/operation/delete/op_msg.rb +1 -1
  308. data/lib/mongo/operation/delete/result.rb +1 -1
  309. data/lib/mongo/operation/delete.rb +1 -1
  310. data/lib/mongo/operation/distinct/op_msg.rb +1 -1
  311. data/lib/mongo/operation/distinct.rb +1 -1
  312. data/lib/mongo/operation/drop/op_msg.rb +1 -1
  313. data/lib/mongo/operation/drop.rb +1 -1
  314. data/lib/mongo/operation/drop_database/op_msg.rb +1 -1
  315. data/lib/mongo/operation/drop_database.rb +1 -1
  316. data/lib/mongo/operation/drop_index/op_msg.rb +1 -1
  317. data/lib/mongo/operation/drop_index.rb +1 -1
  318. data/lib/mongo/operation/explain/op_msg.rb +1 -1
  319. data/lib/mongo/operation/explain/result.rb +1 -1
  320. data/lib/mongo/operation/explain.rb +1 -1
  321. data/lib/mongo/operation/find/builder/command.rb +1 -1
  322. data/lib/mongo/operation/find/builder/flags.rb +1 -1
  323. data/lib/mongo/operation/find/builder/modifiers.rb +1 -1
  324. data/lib/mongo/operation/find/builder.rb +1 -1
  325. data/lib/mongo/operation/find/op_msg.rb +1 -1
  326. data/lib/mongo/operation/find/result.rb +1 -1
  327. data/lib/mongo/operation/find.rb +1 -1
  328. data/lib/mongo/operation/get_more/command_builder.rb +1 -1
  329. data/lib/mongo/operation/get_more/op_msg.rb +1 -1
  330. data/lib/mongo/operation/get_more/result.rb +1 -1
  331. data/lib/mongo/operation/get_more.rb +1 -1
  332. data/lib/mongo/operation/indexes/op_msg.rb +1 -1
  333. data/lib/mongo/operation/indexes/result.rb +1 -1
  334. data/lib/mongo/operation/indexes.rb +1 -1
  335. data/lib/mongo/operation/insert/bulk_result.rb +1 -1
  336. data/lib/mongo/operation/insert/op_msg.rb +1 -1
  337. data/lib/mongo/operation/insert/result.rb +1 -1
  338. data/lib/mongo/operation/insert.rb +1 -1
  339. data/lib/mongo/operation/kill_cursors/command_builder.rb +1 -1
  340. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -1
  341. data/lib/mongo/operation/kill_cursors.rb +1 -1
  342. data/lib/mongo/operation/list_collections/op_msg.rb +1 -1
  343. data/lib/mongo/operation/list_collections/result.rb +1 -1
  344. data/lib/mongo/operation/list_collections.rb +1 -1
  345. data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
  346. data/lib/mongo/operation/map_reduce/result.rb +1 -1
  347. data/lib/mongo/operation/map_reduce.rb +1 -1
  348. data/lib/mongo/operation/op_msg_base.rb +1 -1
  349. data/lib/mongo/operation/parallel_scan/op_msg.rb +1 -1
  350. data/lib/mongo/operation/parallel_scan/result.rb +1 -1
  351. data/lib/mongo/operation/parallel_scan.rb +1 -1
  352. data/lib/mongo/operation/remove_user/op_msg.rb +1 -1
  353. data/lib/mongo/operation/remove_user.rb +1 -1
  354. data/lib/mongo/operation/result.rb +1 -1
  355. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -1
  356. data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -1
  357. data/lib/mongo/operation/shared/executable.rb +1 -1
  358. data/lib/mongo/operation/shared/executable_no_validate.rb +1 -1
  359. data/lib/mongo/operation/shared/executable_transaction_label.rb +1 -1
  360. data/lib/mongo/operation/shared/idable.rb +1 -1
  361. data/lib/mongo/operation/shared/limited.rb +1 -1
  362. data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
  363. data/lib/mongo/operation/shared/op_msg_executable.rb +1 -1
  364. data/lib/mongo/operation/shared/polymorphic_lookup.rb +1 -1
  365. data/lib/mongo/operation/shared/polymorphic_result.rb +1 -1
  366. data/lib/mongo/operation/shared/read_preference_supported.rb +1 -1
  367. data/lib/mongo/operation/shared/response_handling.rb +1 -1
  368. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -1
  369. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +1 -1
  370. data/lib/mongo/operation/shared/sessions_supported.rb +1 -1
  371. data/lib/mongo/operation/shared/specifiable.rb +1 -1
  372. data/lib/mongo/operation/shared/validatable.rb +1 -1
  373. data/lib/mongo/operation/shared/write.rb +1 -1
  374. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
  375. data/lib/mongo/operation/update/bulk_result.rb +1 -1
  376. data/lib/mongo/operation/update/op_msg.rb +1 -1
  377. data/lib/mongo/operation/update/result.rb +1 -1
  378. data/lib/mongo/operation/update.rb +1 -1
  379. data/lib/mongo/operation/update_user/op_msg.rb +1 -1
  380. data/lib/mongo/operation/update_user.rb +1 -1
  381. data/lib/mongo/operation/users_info/op_msg.rb +1 -1
  382. data/lib/mongo/operation/users_info/result.rb +1 -1
  383. data/lib/mongo/operation/users_info.rb +1 -1
  384. data/lib/mongo/operation/write_command/op_msg.rb +1 -1
  385. data/lib/mongo/operation/write_command.rb +1 -1
  386. data/lib/mongo/operation.rb +1 -1
  387. data/lib/mongo/options/mapper.rb +1 -1
  388. data/lib/mongo/options/redacted.rb +1 -1
  389. data/lib/mongo/options.rb +1 -1
  390. data/lib/mongo/protocol/bit_vector.rb +4 -2
  391. data/lib/mongo/protocol/caching_hash.rb +4 -21
  392. data/lib/mongo/protocol/compressed.rb +1 -1
  393. data/lib/mongo/protocol/get_more.rb +1 -1
  394. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  395. data/lib/mongo/protocol/message.rb +5 -9
  396. data/lib/mongo/protocol/msg.rb +2 -1
  397. data/lib/mongo/protocol/query.rb +1 -1
  398. data/lib/mongo/protocol/registry.rb +1 -1
  399. data/lib/mongo/protocol/reply.rb +1 -1
  400. data/lib/mongo/protocol/serializers.rb +25 -18
  401. data/lib/mongo/protocol.rb +1 -1
  402. data/lib/mongo/query_cache.rb +1 -1
  403. data/lib/mongo/retryable/base_worker.rb +91 -0
  404. data/lib/mongo/retryable/read_worker.rb +296 -0
  405. data/lib/mongo/retryable/write_worker.rb +364 -0
  406. data/lib/mongo/retryable.rb +31 -502
  407. data/lib/mongo/semaphore.rb +2 -2
  408. data/lib/mongo/server/app_metadata/environment.rb +259 -0
  409. data/lib/mongo/server/app_metadata/platform.rb +114 -0
  410. data/lib/mongo/server/app_metadata/truncator.rb +142 -0
  411. data/lib/mongo/server/app_metadata.rb +75 -108
  412. data/lib/mongo/server/connection.rb +61 -20
  413. data/lib/mongo/server/connection_base.rb +1 -1
  414. data/lib/mongo/server/connection_common.rb +1 -1
  415. data/lib/mongo/server/connection_pool/generation_manager.rb +56 -12
  416. data/lib/mongo/server/connection_pool/populator.rb +33 -31
  417. data/lib/mongo/server/connection_pool.rb +670 -263
  418. data/lib/mongo/server/description/features.rb +2 -2
  419. data/lib/mongo/server/description/load_balancer.rb +1 -1
  420. data/lib/mongo/server/description.rb +7 -6
  421. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  422. data/lib/mongo/server/monitor/connection.rb +1 -1
  423. data/lib/mongo/server/monitor.rb +11 -7
  424. data/lib/mongo/server/pending_connection.rb +1 -1
  425. data/lib/mongo/server/push_monitor/connection.rb +1 -1
  426. data/lib/mongo/server/push_monitor.rb +1 -1
  427. data/lib/mongo/server/round_trip_time_averager.rb +1 -1
  428. data/lib/mongo/server.rb +96 -30
  429. data/lib/mongo/server_selector/base.rb +24 -3
  430. data/lib/mongo/server_selector/nearest.rb +1 -1
  431. data/lib/mongo/server_selector/primary.rb +1 -1
  432. data/lib/mongo/server_selector/primary_preferred.rb +1 -1
  433. data/lib/mongo/server_selector/secondary.rb +1 -1
  434. data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
  435. data/lib/mongo/server_selector.rb +1 -1
  436. data/lib/mongo/session/server_session.rb +1 -1
  437. data/lib/mongo/session/session_pool.rb +1 -1
  438. data/lib/mongo/session.rb +1 -1
  439. data/lib/mongo/socket/ocsp_cache.rb +1 -1
  440. data/lib/mongo/socket/ocsp_verifier.rb +1 -1
  441. data/lib/mongo/socket/ssl.rb +1 -1
  442. data/lib/mongo/socket/tcp.rb +1 -1
  443. data/lib/mongo/socket/unix.rb +1 -1
  444. data/lib/mongo/socket.rb +29 -2
  445. data/lib/mongo/srv/monitor.rb +1 -3
  446. data/lib/mongo/srv/resolver.rb +1 -1
  447. data/lib/mongo/srv/result.rb +1 -1
  448. data/lib/mongo/srv.rb +1 -1
  449. data/lib/mongo/timeout.rb +2 -2
  450. data/lib/mongo/topology_version.rb +1 -1
  451. data/lib/mongo/uri/options_mapper.rb +321 -81
  452. data/lib/mongo/uri/srv_protocol.rb +1 -1
  453. data/lib/mongo/uri.rb +41 -13
  454. data/lib/mongo/utils.rb +1 -1
  455. data/lib/mongo/version.rb +2 -2
  456. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  457. data/lib/mongo/write_concern/base.rb +1 -1
  458. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  459. data/lib/mongo/write_concern.rb +1 -1
  460. data/lib/mongo.rb +2 -1
  461. data/mongo.gemspec +5 -2
  462. data/spec/atlas/atlas_connectivity_spec.rb +1 -1
  463. data/spec/atlas/operations_spec.rb +3 -8
  464. data/spec/integration/auth_spec.rb +1 -1
  465. data/spec/integration/awaited_ismaster_spec.rb +1 -1
  466. data/spec/integration/aws_auth_credentials_cache_spec.rb +51 -0
  467. data/spec/integration/aws_auth_request_spec.rb +2 -2
  468. data/spec/integration/aws_credentials_retriever_spec.rb +32 -2
  469. data/spec/integration/aws_lambda_examples_spec.rb +1 -1
  470. data/spec/integration/bson_symbol_spec.rb +1 -1
  471. data/spec/integration/bulk_insert_spec.rb +1 -1
  472. data/spec/integration/bulk_write_error_message_spec.rb +1 -0
  473. data/spec/integration/bulk_write_spec.rb +1 -1
  474. data/spec/integration/change_stream_examples_spec.rb +1 -1
  475. data/spec/integration/change_stream_spec.rb +6 -1
  476. data/spec/integration/check_clean_slate_spec.rb +1 -1
  477. data/spec/integration/client_authentication_options_spec.rb +1 -1
  478. data/spec/integration/client_connectivity_spec.rb +1 -1
  479. data/spec/integration/client_construction_aws_auth_spec.rb +12 -3
  480. data/spec/integration/client_construction_spec.rb +23 -1
  481. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +1 -1
  482. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +1 -1
  483. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +1 -1
  484. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +1 -1
  485. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +10 -5
  486. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +38 -2
  487. data/spec/integration/client_side_encryption/automatic_data_encryption_keys_prose_spec.rb +153 -0
  488. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +1 -1
  489. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +1 -1
  490. data/spec/integration/client_side_encryption/client_close_spec.rb +1 -1
  491. data/spec/integration/client_side_encryption/corpus_spec.rb +1 -1
  492. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +3 -3
  493. data/spec/integration/client_side_encryption/data_key_spec.rb +1 -1
  494. data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +59 -58
  495. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +1 -1
  496. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +36 -33
  497. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +1 -1
  498. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +3 -3
  499. data/spec/integration/client_side_encryption/kms_tls_spec.rb +1 -1
  500. data/spec/integration/client_side_encryption/mongocryptd_prose_spec.rb +105 -0
  501. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +49 -0
  502. data/spec/integration/client_side_encryption/on_demand_azure_credentials_spec.rb +46 -0
  503. data/spec/integration/client_side_encryption/on_demand_gcp_credentials_spec.rb +47 -0
  504. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +14 -11
  505. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +536 -0
  506. data/spec/integration/client_side_encryption/rewrap_prose_spec.rb +114 -0
  507. data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +20 -16
  508. data/spec/integration/client_side_encryption/views_spec.rb +1 -1
  509. data/spec/integration/client_spec.rb +8 -3
  510. data/spec/integration/client_update_spec.rb +7 -3
  511. data/spec/integration/collection_indexes_prose_spec.rb +1 -1
  512. data/spec/integration/command_monitoring_spec.rb +1 -1
  513. data/spec/integration/command_spec.rb +1 -1
  514. data/spec/integration/connect_single_rs_name_spec.rb +1 -1
  515. data/spec/integration/connection/faas_env_spec.rb +62 -0
  516. data/spec/integration/connection_pool_populator_spec.rb +27 -7
  517. data/spec/integration/connection_spec.rb +1 -1
  518. data/spec/integration/crud_spec.rb +1 -1
  519. data/spec/integration/cursor_pinning_spec.rb +6 -2
  520. data/spec/integration/cursor_reaping_spec.rb +1 -1
  521. data/spec/integration/docs_examples_spec.rb +1 -1
  522. data/spec/integration/error_detection_spec.rb +1 -1
  523. data/spec/integration/fork_reconnect_spec.rb +2 -2
  524. data/spec/integration/get_more_spec.rb +1 -1
  525. data/spec/integration/grid_fs_bucket_spec.rb +1 -1
  526. data/spec/integration/heartbeat_events_spec.rb +1 -1
  527. data/spec/integration/map_reduce_spec.rb +5 -1
  528. data/spec/integration/mmapv1_spec.rb +1 -1
  529. data/spec/integration/mongos_pinning_spec.rb +1 -1
  530. data/spec/integration/ocsp_connectivity_spec.rb +1 -1
  531. data/spec/integration/ocsp_verifier_cache_spec.rb +1 -1
  532. data/spec/integration/ocsp_verifier_spec.rb +2 -2
  533. data/spec/integration/operation_failure_code_spec.rb +1 -1
  534. data/spec/integration/operation_failure_message_spec.rb +1 -0
  535. data/spec/integration/query_cache_spec.rb +90 -3
  536. data/spec/integration/query_cache_transactions_spec.rb +1 -1
  537. data/spec/integration/read_concern_spec.rb +1 -1
  538. data/spec/integration/read_preference_spec.rb +1 -1
  539. data/spec/integration/reconnect_spec.rb +4 -1
  540. data/spec/integration/retryable_errors_spec.rb +1 -1
  541. data/spec/integration/retryable_reads_errors_spec.rb +110 -0
  542. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
  543. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
  544. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +1 -1
  545. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +1 -1
  546. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +1 -1
  547. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +1 -1
  548. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +1 -1
  549. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +1 -1
  550. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +1 -1
  551. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +1 -1
  552. data/spec/integration/retryable_writes/shared/supports_retries.rb +1 -1
  553. data/spec/integration/retryable_writes_errors_spec.rb +160 -2
  554. data/spec/integration/sdam_error_handling_spec.rb +65 -4
  555. data/spec/integration/sdam_events_spec.rb +1 -1
  556. data/spec/integration/sdam_prose_spec.rb +3 -3
  557. data/spec/integration/secondary_reads_spec.rb +1 -0
  558. data/spec/integration/server_description_spec.rb +1 -1
  559. data/spec/integration/server_monitor_spec.rb +1 -1
  560. data/spec/integration/server_selection_spec.rb +1 -1
  561. data/spec/integration/server_selector_spec.rb +5 -3
  562. data/spec/integration/server_spec.rb +23 -26
  563. data/spec/integration/shell_examples_spec.rb +1 -1
  564. data/spec/integration/size_limit_spec.rb +1 -1
  565. data/spec/integration/snappy_compression_spec.rb +1 -1
  566. data/spec/integration/snapshot_query_examples_spec.rb +9 -7
  567. data/spec/integration/srv_monitoring_spec.rb +2 -1
  568. data/spec/integration/srv_spec.rb +3 -3
  569. data/spec/integration/ssl_uri_options_spec.rb +1 -1
  570. data/spec/integration/step_down_spec.rb +5 -3
  571. data/spec/integration/time_zone_querying_spec.rb +1 -1
  572. data/spec/integration/transaction_pinning_spec.rb +18 -4
  573. data/spec/integration/transactions_api_examples_spec.rb +1 -1
  574. data/spec/integration/transactions_examples_spec.rb +1 -1
  575. data/spec/integration/truncated_utf8_spec.rb +1 -1
  576. data/spec/integration/versioned_api_examples_spec.rb +2 -2
  577. data/spec/integration/x509_auth_spec.rb +1 -1
  578. data/spec/integration/zlib_compression_spec.rb +1 -1
  579. data/spec/integration/zstd_compression_spec.rb +1 -1
  580. data/spec/kerberos/kerberos_spec.rb +1 -1
  581. data/spec/lite_spec_helper.rb +10 -1
  582. data/spec/mongo/address/ipv4_spec.rb +1 -1
  583. data/spec/mongo/address/ipv6_spec.rb +1 -1
  584. data/spec/mongo/address/unix_spec.rb +1 -1
  585. data/spec/mongo/address/validator_spec.rb +1 -1
  586. data/spec/mongo/address_spec.rb +8 -2
  587. data/spec/mongo/auth/aws/credential_cache_spec.rb +63 -0
  588. data/spec/mongo/auth/aws/credentials_retriever_spec.rb +90 -0
  589. data/spec/mongo/auth/aws/credentials_spec.rb +46 -0
  590. data/spec/mongo/auth/aws/request_region_spec.rb +1 -1
  591. data/spec/mongo/auth/aws/request_spec.rb +1 -1
  592. data/spec/mongo/auth/cr_spec.rb +2 -22
  593. data/spec/mongo/auth/gssapi/conversation_spec.rb +1 -1
  594. data/spec/mongo/auth/invalid_mechanism_spec.rb +1 -1
  595. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  596. data/spec/mongo/auth/ldap_spec.rb +1 -1
  597. data/spec/mongo/auth/scram/conversation_spec.rb +1 -1
  598. data/spec/mongo/auth/scram256/conversation_spec.rb +1 -1
  599. data/spec/mongo/auth/scram_negotiation_spec.rb +1 -1
  600. data/spec/mongo/auth/scram_spec.rb +1 -1
  601. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +1 -1
  602. data/spec/mongo/auth/stringprep_spec.rb +1 -1
  603. data/spec/mongo/auth/user/view_spec.rb +96 -1
  604. data/spec/mongo/auth/user_spec.rb +1 -1
  605. data/spec/mongo/auth/x509/conversation_spec.rb +1 -1
  606. data/spec/mongo/auth/x509_spec.rb +1 -1
  607. data/spec/mongo/auth_spec.rb +1 -1
  608. data/spec/mongo/bson_spec.rb +1 -1
  609. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +1 -1
  610. data/spec/mongo/bulk_write/result_spec.rb +1 -1
  611. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +1 -1
  612. data/spec/mongo/bulk_write_spec.rb +1 -1
  613. data/spec/mongo/caching_cursor_spec.rb +1 -1
  614. data/spec/mongo/client_construction_spec.rb +572 -694
  615. data/spec/mongo/client_encryption_spec.rb +1 -1
  616. data/spec/mongo/client_spec.rb +172 -231
  617. data/spec/mongo/cluster/cursor_reaper_spec.rb +1 -1
  618. data/spec/mongo/cluster/periodic_executor_spec.rb +1 -1
  619. data/spec/mongo/cluster/socket_reaper_spec.rb +1 -1
  620. data/spec/mongo/cluster/topology/replica_set_spec.rb +1 -1
  621. data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
  622. data/spec/mongo/cluster/topology/single_spec.rb +1 -1
  623. data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
  624. data/spec/mongo/cluster/topology_spec.rb +1 -1
  625. data/spec/mongo/cluster_spec.rb +156 -154
  626. data/spec/mongo/cluster_time_spec.rb +1 -1
  627. data/spec/mongo/collection/view/aggregation_spec.rb +1 -1
  628. data/spec/mongo/collection/view/builder/find_command_spec.rb +1 -1
  629. data/spec/mongo/collection/view/builder/op_query_spec.rb +1 -1
  630. data/spec/mongo/collection/view/change_stream_resume_spec.rb +1 -1
  631. data/spec/mongo/collection/view/change_stream_spec.rb +1 -1
  632. data/spec/mongo/collection/view/explainable_spec.rb +1 -1
  633. data/spec/mongo/collection/view/immutable_spec.rb +1 -1
  634. data/spec/mongo/collection/view/iterable_spec.rb +1 -1
  635. data/spec/mongo/collection/view/map_reduce_spec.rb +11 -1
  636. data/spec/mongo/collection/view/readable_spec.rb +139 -1
  637. data/spec/mongo/collection/view/writable_spec.rb +1 -1
  638. data/spec/mongo/collection/view_spec.rb +1 -1
  639. data/spec/mongo/collection_crud_spec.rb +1 -1
  640. data/spec/mongo/collection_ddl_spec.rb +112 -66
  641. data/spec/mongo/collection_spec.rb +3 -3
  642. data/spec/mongo/condition_variable_spec.rb +104 -0
  643. data/spec/mongo/config/options_spec.rb +1 -0
  644. data/spec/mongo/config_spec.rb +2 -1
  645. data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
  646. data/spec/mongo/crypt/auto_encrypter_spec.rb +8 -1
  647. data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
  648. data/spec/mongo/crypt/binary_spec.rb +1 -1
  649. data/spec/mongo/crypt/binding/binary_spec.rb +1 -1
  650. data/spec/mongo/crypt/binding/context_spec.rb +1 -1
  651. data/spec/mongo/crypt/binding/helpers_spec.rb +1 -1
  652. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +1 -1
  653. data/spec/mongo/crypt/binding/status_spec.rb +1 -1
  654. data/spec/mongo/crypt/binding/version_spec.rb +19 -5
  655. data/spec/mongo/crypt/binding_unloaded_spec.rb +1 -1
  656. data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
  657. data/spec/mongo/crypt/encryption_io_spec.rb +1 -1
  658. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
  659. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +3 -3
  660. data/spec/mongo/crypt/handle_spec.rb +19 -4
  661. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +1 -1
  662. data/spec/mongo/crypt/hooks_spec.rb +2 -2
  663. data/spec/mongo/crypt/kms/azure/credentials_retriever_spec.rb +86 -0
  664. data/spec/mongo/crypt/kms/credentials_spec.rb +17 -1
  665. data/spec/mongo/crypt/kms_spec.rb +1 -1
  666. data/spec/mongo/crypt/status_spec.rb +1 -1
  667. data/spec/mongo/crypt_spec.rb +21 -0
  668. data/spec/mongo/cursor/builder/get_more_command_spec.rb +1 -1
  669. data/spec/mongo/cursor/builder/op_get_more_spec.rb +1 -1
  670. data/spec/mongo/cursor_spec.rb +58 -11
  671. data/spec/mongo/database_spec.rb +1 -1
  672. data/spec/mongo/distinguishing_semaphore_spec.rb +7 -7
  673. data/spec/mongo/error/bulk_write_error_spec.rb +1 -1
  674. data/spec/mongo/error/crypt_error_spec.rb +1 -1
  675. data/spec/mongo/error/max_bson_size_spec.rb +1 -1
  676. data/spec/mongo/error/no_server_available_spec.rb +1 -1
  677. data/spec/mongo/error/notable_spec.rb +1 -1
  678. data/spec/mongo/error/operation_failure_heavy_spec.rb +1 -1
  679. data/spec/mongo/error/operation_failure_spec.rb +1 -1
  680. data/spec/mongo/error/parser_spec.rb +1 -1
  681. data/spec/mongo/error/unsupported_option_spec.rb +1 -1
  682. data/spec/mongo/event/publisher_spec.rb +1 -1
  683. data/spec/mongo/event/subscriber_spec.rb +1 -1
  684. data/spec/mongo/grid/file/chunk_spec.rb +1 -1
  685. data/spec/mongo/grid/file/info_spec.rb +1 -1
  686. data/spec/mongo/grid/file_spec.rb +1 -1
  687. data/spec/mongo/grid/fs_bucket_spec.rb +1 -1
  688. data/spec/mongo/grid/stream/read_spec.rb +1 -1
  689. data/spec/mongo/grid/stream/write_spec.rb +1 -1
  690. data/spec/mongo/grid/stream_spec.rb +1 -1
  691. data/spec/mongo/id_spec.rb +2 -2
  692. data/spec/mongo/index/view_spec.rb +4 -4
  693. data/spec/mongo/lint_spec.rb +2 -2
  694. data/spec/mongo/logger_spec.rb +1 -1
  695. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +1 -1
  696. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +2 -2
  697. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +2 -2
  698. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +2 -2
  699. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +2 -2
  700. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +2 -2
  701. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +2 -2
  702. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +2 -2
  703. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +2 -2
  704. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +2 -2
  705. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +2 -2
  706. data/spec/mongo/monitoring/event/command_failed_spec.rb +1 -1
  707. data/spec/mongo/monitoring/event/command_started_spec.rb +1 -1
  708. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +1 -1
  709. data/spec/mongo/monitoring/event/secure_spec.rb +1 -1
  710. data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
  711. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -1
  712. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
  713. data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +1 -1
  714. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
  715. data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
  716. data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
  717. data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
  718. data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
  719. data/spec/mongo/monitoring_spec.rb +1 -1
  720. data/spec/mongo/operation/aggregate/result_spec.rb +1 -1
  721. data/spec/mongo/operation/aggregate_spec.rb +1 -1
  722. data/spec/mongo/operation/collections_info_spec.rb +1 -1
  723. data/spec/mongo/operation/command_spec.rb +1 -1
  724. data/spec/mongo/operation/create/op_msg_spec.rb +1 -1
  725. data/spec/mongo/operation/create_index_spec.rb +1 -1
  726. data/spec/mongo/operation/create_user_spec.rb +1 -1
  727. data/spec/mongo/operation/delete/bulk_spec.rb +1 -1
  728. data/spec/mongo/operation/delete/op_msg_spec.rb +1 -1
  729. data/spec/mongo/operation/delete_spec.rb +1 -1
  730. data/spec/mongo/operation/drop_index_spec.rb +1 -1
  731. data/spec/mongo/operation/find/builder/flags_spec.rb +1 -1
  732. data/spec/mongo/operation/find/builder/modifiers_spec.rb +1 -1
  733. data/spec/mongo/operation/indexes_spec.rb +1 -1
  734. data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
  735. data/spec/mongo/operation/insert/op_msg_spec.rb +1 -1
  736. data/spec/mongo/operation/insert_spec.rb +1 -1
  737. data/spec/mongo/operation/limited_spec.rb +1 -1
  738. data/spec/mongo/operation/map_reduce_spec.rb +1 -1
  739. data/spec/mongo/operation/read_preference_legacy_spec.rb +1 -1
  740. data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
  741. data/spec/mongo/operation/remove_user_spec.rb +1 -1
  742. data/spec/mongo/operation/result_spec.rb +1 -1
  743. data/spec/mongo/operation/specifiable_spec.rb +1 -1
  744. data/spec/mongo/operation/update/bulk_spec.rb +1 -1
  745. data/spec/mongo/operation/update/op_msg_spec.rb +1 -1
  746. data/spec/mongo/operation/update_spec.rb +1 -1
  747. data/spec/mongo/operation/update_user_spec.rb +1 -1
  748. data/spec/mongo/options/redacted_spec.rb +2 -2
  749. data/spec/mongo/protocol/caching_hash_spec.rb +1 -46
  750. data/spec/mongo/protocol/compressed_spec.rb +1 -1
  751. data/spec/mongo/protocol/get_more_spec.rb +1 -1
  752. data/spec/mongo/protocol/kill_cursors_spec.rb +1 -1
  753. data/spec/mongo/protocol/msg_spec.rb +4 -5
  754. data/spec/mongo/protocol/query_spec.rb +1 -1
  755. data/spec/mongo/protocol/registry_spec.rb +1 -1
  756. data/spec/mongo/protocol/reply_spec.rb +1 -1
  757. data/spec/mongo/query_cache_middleware_spec.rb +1 -1
  758. data/spec/mongo/query_cache_spec.rb +1 -1
  759. data/spec/mongo/retryable_spec.rb +5 -3
  760. data/spec/mongo/semaphore_spec.rb +7 -7
  761. data/spec/mongo/server/app_metadata/environment_spec.rb +209 -0
  762. data/spec/mongo/server/app_metadata/truncator_spec.rb +158 -0
  763. data/spec/mongo/server/app_metadata_spec.rb +44 -66
  764. data/spec/mongo/server/connection_auth_spec.rb +1 -1
  765. data/spec/mongo/server/connection_common_spec.rb +1 -1
  766. data/spec/mongo/server/connection_pool/populator_spec.rb +17 -3
  767. data/spec/mongo/server/connection_pool_spec.rb +447 -10
  768. data/spec/mongo/server/connection_spec.rb +17 -4
  769. data/spec/mongo/server/description/features_spec.rb +1 -1
  770. data/spec/mongo/server/description_query_methods_spec.rb +1 -1
  771. data/spec/mongo/server/description_spec.rb +1 -1
  772. data/spec/mongo/server/monitor/app_metadata_spec.rb +1 -1
  773. data/spec/mongo/server/monitor/connection_spec.rb +3 -3
  774. data/spec/mongo/server/monitor_spec.rb +6 -5
  775. data/spec/mongo/server/push_monitor_spec.rb +1 -1
  776. data/spec/mongo/server/round_trip_time_averager_spec.rb +1 -1
  777. data/spec/mongo/server_selector/nearest_spec.rb +1 -1
  778. data/spec/mongo/server_selector/primary_preferred_spec.rb +1 -1
  779. data/spec/mongo/server_selector/primary_spec.rb +1 -1
  780. data/spec/mongo/server_selector/secondary_preferred_spec.rb +1 -1
  781. data/spec/mongo/server_selector/secondary_spec.rb +1 -1
  782. data/spec/mongo/server_selector_spec.rb +1 -1
  783. data/spec/mongo/server_spec.rb +32 -5
  784. data/spec/mongo/session/server_session_spec.rb +1 -1
  785. data/spec/mongo/session/session_pool_spec.rb +1 -1
  786. data/spec/mongo/session_spec.rb +1 -1
  787. data/spec/mongo/session_transaction_spec.rb +2 -2
  788. data/spec/mongo/socket/ssl_spec.rb +3 -9
  789. data/spec/mongo/socket/tcp_spec.rb +1 -1
  790. data/spec/mongo/socket/unix_spec.rb +1 -1
  791. data/spec/mongo/socket_spec.rb +1 -1
  792. data/spec/mongo/srv/monitor_spec.rb +1 -1
  793. data/spec/mongo/srv/result_spec.rb +1 -1
  794. data/spec/mongo/timeout_spec.rb +1 -1
  795. data/spec/mongo/tls_context_hooks_spec.rb +1 -1
  796. data/spec/mongo/uri/options_mapper_spec.rb +1605 -0
  797. data/spec/mongo/uri/srv_protocol_spec.rb +150 -2
  798. data/spec/mongo/uri_option_parsing_spec.rb +1 -1
  799. data/spec/mongo/uri_spec.rb +143 -2
  800. data/spec/mongo/utils_spec.rb +1 -1
  801. data/spec/mongo/write_concern/acknowledged_spec.rb +1 -1
  802. data/spec/mongo/write_concern/unacknowledged_spec.rb +1 -1
  803. data/spec/mongo/write_concern_spec.rb +1 -1
  804. data/spec/runners/auth.rb +1 -1
  805. data/spec/runners/change_streams/outcome.rb +1 -1
  806. data/spec/runners/change_streams/spec.rb +1 -1
  807. data/spec/runners/change_streams/test.rb +1 -1
  808. data/spec/runners/cmap/verifier.rb +2 -2
  809. data/spec/runners/cmap.rb +188 -45
  810. data/spec/runners/command_monitoring.rb +1 -1
  811. data/spec/runners/connection_string.rb +1 -1
  812. data/spec/runners/crud/context.rb +1 -1
  813. data/spec/runners/crud/operation.rb +2 -2
  814. data/spec/runners/crud/outcome.rb +1 -1
  815. data/spec/runners/crud/requirement.rb +3 -3
  816. data/spec/runners/crud/spec.rb +2 -2
  817. data/spec/runners/crud/test.rb +1 -1
  818. data/spec/runners/crud/test_base.rb +2 -2
  819. data/spec/runners/crud/verifier.rb +3 -3
  820. data/spec/runners/crud.rb +1 -1
  821. data/spec/runners/gridfs.rb +1 -1
  822. data/spec/runners/read_write_concern_document.rb +1 -1
  823. data/spec/runners/sdam/verifier.rb +1 -1
  824. data/spec/runners/sdam.rb +1 -1
  825. data/spec/runners/server_selection.rb +1 -1
  826. data/spec/runners/server_selection_rtt.rb +1 -1
  827. data/spec/runners/transactions/operation.rb +15 -9
  828. data/spec/runners/transactions/spec.rb +1 -1
  829. data/spec/runners/transactions/test.rb +44 -3
  830. data/spec/runners/transactions.rb +1 -1
  831. data/spec/runners/unified/assertions.rb +94 -77
  832. data/spec/runners/unified/change_stream_operations.rb +14 -3
  833. data/spec/runners/unified/client_side_encryption_operations.rb +1 -1
  834. data/spec/runners/unified/crud_operations.rb +11 -2
  835. data/spec/runners/unified/ddl_operations.rb +80 -4
  836. data/spec/runners/unified/entity_map.rb +1 -1
  837. data/spec/runners/unified/error.rb +1 -1
  838. data/spec/runners/unified/event_subscriber.rb +9 -3
  839. data/spec/runners/unified/exceptions.rb +1 -1
  840. data/spec/runners/unified/grid_fs_operations.rb +1 -1
  841. data/spec/runners/unified/support_operations.rb +66 -2
  842. data/spec/runners/unified/test.rb +86 -12
  843. data/spec/runners/unified/test_group.rb +1 -1
  844. data/spec/runners/unified/thread_operations.rb +73 -0
  845. data/spec/runners/unified.rb +9 -6
  846. data/spec/shared/lib/mrss/docker_runner.rb +4 -0
  847. data/spec/shared/lib/mrss/lite_constraints.rb +10 -2
  848. data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
  849. data/spec/shared/lib/mrss/utils.rb +28 -6
  850. data/spec/shared/share/Dockerfile.erb +24 -19
  851. data/spec/shared/shlib/server.sh +32 -8
  852. data/spec/shared/shlib/set_env.sh +4 -4
  853. data/spec/solo/clean_exit_spec.rb +4 -11
  854. data/spec/spec_helper.rb +1 -1
  855. data/spec/spec_tests/auth_spec.rb +1 -1
  856. data/spec/spec_tests/change_streams_unified_spec.rb +2 -1
  857. data/spec/spec_tests/client_side_encryption_spec.rb +25 -2
  858. data/spec/spec_tests/client_side_encryption_unified_spec.rb +12 -2
  859. data/spec/spec_tests/cmap_spec.rb +29 -15
  860. data/spec/spec_tests/collection_management_spec.rb +1 -1
  861. data/spec/spec_tests/command_monitoring_unified_spec.rb +1 -1
  862. data/spec/spec_tests/connection_string_spec.rb +1 -1
  863. data/spec/spec_tests/crud_spec.rb +1 -1
  864. data/spec/spec_tests/crud_unified_spec.rb +1 -1
  865. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +41 -0
  866. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +103 -0
  867. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +2 -6
  868. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +1 -1
  869. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1 -3
  870. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1 -3
  871. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +15 -6
  872. data/spec/spec_tests/data/client_side_encryption/awsTemporary.yml +57 -0
  873. data/spec/spec_tests/data/client_side_encryption/{fle2-BypassQueryAnalysis.yml → fle2v2-BypassQueryAnalysis.yml} +18 -30
  874. data/spec/spec_tests/data/client_side_encryption/{fle2-Compact.yml → fle2v2-Compact.yml} +5 -3
  875. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection-OldServer.yml +61 -0
  876. data/spec/spec_tests/data/client_side_encryption/{fle2-CreateCollection.yml → fle2v2-CreateCollection.yml} +212 -538
  877. data/spec/spec_tests/data/client_side_encryption/{fle2-DecryptExistingData.yml → fle2v2-DecryptExistingData.yml} +4 -2
  878. data/spec/spec_tests/data/client_side_encryption/{fle2-Delete.yml → fle2v2-Delete.yml} +17 -24
  879. data/spec/spec_tests/data/client_side_encryption/{fle2-EncryptedFields-vs-EncryptedFieldsMap.yml → fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml} +5 -6
  880. data/spec/spec_tests/data/client_side_encryption/{fle2-EncryptedFields-vs-jsonSchema.yml → fle2v2-EncryptedFields-vs-jsonSchema.yml} +18 -6
  881. data/spec/spec_tests/data/client_side_encryption/{fle2-EncryptedFieldsMap-defaults.yml → fle2v2-EncryptedFieldsMap-defaults.yml} +6 -5
  882. data/spec/spec_tests/data/client_side_encryption/{fle2-FindOneAndUpdate.yml → fle2v2-FindOneAndUpdate.yml} +31 -44
  883. data/spec/spec_tests/data/client_side_encryption/{fle2-InsertFind-Indexed.yml → fle2v2-InsertFind-Indexed.yml} +16 -6
  884. data/spec/spec_tests/data/client_side_encryption/{fle2-InsertFind-Unindexed.yml → fle2v2-InsertFind-Unindexed.yml} +10 -4
  885. data/spec/spec_tests/data/client_side_encryption/{fle2-MissingKey.yml → fle2v2-MissingKey.yml} +5 -3
  886. data/spec/spec_tests/data/client_side_encryption/{fle2-NoEncryption.yml → fle2v2-NoEncryption.yml} +4 -2
  887. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +241 -0
  888. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +422 -0
  889. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +182 -0
  890. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +239 -0
  891. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +235 -0
  892. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +252 -0
  893. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +1687 -0
  894. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +293 -0
  895. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +905 -0
  896. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +1684 -0
  897. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +1680 -0
  898. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +1697 -0
  899. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +329 -0
  900. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +424 -0
  901. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +226 -0
  902. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +327 -0
  903. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +319 -0
  904. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +336 -0
  905. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +913 -0
  906. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +292 -0
  907. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +518 -0
  908. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +911 -0
  909. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +907 -0
  910. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +924 -0
  911. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +325 -0
  912. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +424 -0
  913. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +224 -0
  914. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +323 -0
  915. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +319 -0
  916. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +338 -0
  917. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +241 -0
  918. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +423 -0
  919. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +182 -0
  920. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +239 -0
  921. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +235 -0
  922. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +254 -0
  923. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +241 -0
  924. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +422 -0
  925. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +182 -0
  926. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +239 -0
  927. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +235 -0
  928. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +254 -0
  929. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +43 -0
  930. data/spec/spec_tests/data/client_side_encryption/{fle2-Update.yml → fle2v2-Update.yml} +33 -44
  931. data/spec/spec_tests/data/client_side_encryption/{fle2-validatorAndPartialFieldExpression.yml → fle2v2-validatorAndPartialFieldExpression.yml} +10 -9
  932. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +1 -1
  933. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +1 -1
  934. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +2 -0
  935. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +2 -0
  936. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +2 -0
  937. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +2 -0
  938. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +3 -1
  939. data/spec/spec_tests/data/cmap/pool-checkin.yml +5 -0
  940. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +2 -0
  941. data/spec/spec_tests/data/cmap/pool-checkout-custom-maxConnecting-is-enforced.yml +50 -0
  942. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +2 -0
  943. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-is-enforced.yml +81 -0
  944. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-timeout.yml +71 -0
  945. data/spec/spec_tests/data/cmap/pool-checkout-minPoolSize-connection-maxConnecting.yml +66 -0
  946. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +2 -0
  947. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +6 -0
  948. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +8 -0
  949. data/spec/spec_tests/data/cmap/pool-checkout-returned-connection-maxConnecting.yml +88 -0
  950. data/spec/spec_tests/data/cmap/pool-clear-interrupt-immediately.yml +49 -0
  951. data/spec/spec_tests/data/cmap/pool-clear-interrupting-pending-connections.yml +43 -0
  952. data/spec/spec_tests/data/cmap/pool-clear-min-size.yml +41 -0
  953. data/spec/spec_tests/data/cmap/pool-clear-paused.yml +18 -0
  954. data/spec/spec_tests/data/cmap/pool-clear-ready.yml +39 -0
  955. data/spec/spec_tests/data/cmap/pool-clear-schedule-run-interruptInUseConnections-false.yml +48 -0
  956. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +2 -0
  957. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +2 -0
  958. data/spec/spec_tests/data/cmap/pool-create-min-size-error.yml +43 -0
  959. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +9 -0
  960. data/spec/spec_tests/data/cmap/pool-ready-ready.yml +22 -0
  961. data/spec/spec_tests/data/cmap/pool-ready.yml +30 -0
  962. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +2 -0
  963. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +6 -1
  964. data/spec/spec_tests/data/collection_management/modifyCollection-errorResponse.yml +59 -0
  965. data/spec/spec_tests/data/collection_management/timeseries-collection.yml +35 -0
  966. data/spec/spec_tests/data/command_monitoring_unified/redacted-commands.yml +8 -0
  967. data/spec/spec_tests/data/command_monitoring_unified/writeConcernError.yml +80 -0
  968. data/spec/spec_tests/data/crud_unified/aggregate-merge-errorResponse.yml +42 -0
  969. data/spec/spec_tests/data/crud_unified/bulkWrite-errorResponse.yml +50 -0
  970. data/spec/spec_tests/data/crud_unified/deleteOne-errorResponse.yml +46 -0
  971. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +44 -0
  972. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-errorResponse.yml +69 -0
  973. data/spec/spec_tests/data/crud_unified/insertOne-errorResponse.yml +46 -0
  974. data/spec/spec_tests/data/crud_unified/updateOne-errorResponse.yml +47 -0
  975. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +1266 -53
  976. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +1 -1
  977. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +706 -58
  978. data/spec/spec_tests/data/retryable_writes/unified/insertOne-noWritesPerformedError.yml +54 -0
  979. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +1 -1
  980. data/spec/spec_tests/data/sdam/rs/electionId_precedence_setVersion.yml +62 -0
  981. data/spec/spec_tests/data/sdam/rs/null_election_id-pre-6.0.yml +175 -0
  982. data/spec/spec_tests/data/sdam/rs/null_election_id.yml +20 -18
  983. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0-pre-6.0.yml +87 -0
  984. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +1 -1
  985. data/spec/spec_tests/data/sdam/rs/set_version_can_rollback.yml +101 -0
  986. data/spec/spec_tests/data/sdam/rs/setversion_equal_max_without_electionid.yml +78 -0
  987. data/spec/spec_tests/data/sdam/rs/setversion_greaterthan_max_without_electionid.yml +79 -0
  988. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid-pre-6.0.yml +79 -0
  989. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +9 -10
  990. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid-pre-6.0.yml +117 -0
  991. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +23 -21
  992. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -1
  993. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +38 -39
  994. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +38 -39
  995. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +1 -1
  996. data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +1 -1
  997. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +1 -1
  998. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  999. data/spec/spec_tests/data/sdam_unified/auth-error.yml +130 -0
  1000. data/spec/spec_tests/data/sdam_unified/auth-misc-command-error.yml +132 -0
  1001. data/spec/spec_tests/data/sdam_unified/auth-network-error.yml +132 -0
  1002. data/spec/spec_tests/data/sdam_unified/auth-network-timeout-error.yml +138 -0
  1003. data/spec/spec_tests/data/sdam_unified/auth-shutdown-error.yml +133 -0
  1004. data/spec/spec_tests/data/sdam_unified/cancel-server-check.yml +143 -0
  1005. data/spec/spec_tests/data/sdam_unified/connectTimeoutMS.yml +130 -0
  1006. data/spec/spec_tests/data/sdam_unified/find-network-error.yml +135 -0
  1007. data/spec/spec_tests/data/sdam_unified/find-network-timeout-error.yml +119 -0
  1008. data/spec/spec_tests/data/sdam_unified/find-shutdown-error.yml +163 -0
  1009. data/spec/spec_tests/data/sdam_unified/hello-command-error.yml +233 -0
  1010. data/spec/spec_tests/data/sdam_unified/hello-network-error.yml +228 -0
  1011. data/spec/spec_tests/data/sdam_unified/hello-timeout.yml +318 -0
  1012. data/spec/spec_tests/data/sdam_unified/insert-network-error.yml +137 -0
  1013. data/spec/spec_tests/data/sdam_unified/insert-shutdown-error.yml +162 -0
  1014. data/spec/spec_tests/data/sdam_unified/interruptInUse-pool-clear.yml +340 -0
  1015. data/spec/spec_tests/data/sdam_unified/minPoolSize-error.yml +125 -0
  1016. data/spec/spec_tests/data/sdam_unified/pool-cleared-error.yml +239 -0
  1017. data/spec/spec_tests/data/sdam_unified/rediscover-quickly-after-step-down.yml +144 -0
  1018. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +6 -5
  1019. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +2 -2
  1020. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +5 -4
  1021. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +1 -1
  1022. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +4 -3
  1023. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +4 -3
  1024. data/spec/spec_tests/data/sessions_unified/implicit-sessions-default-causal-consistency.yml +119 -0
  1025. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +1 -1
  1026. data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +1 -1
  1027. data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +1 -1
  1028. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor-malformed.yml +31 -0
  1029. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor.yml +31 -0
  1030. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError-malformed.yml +34 -0
  1031. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError.yml +35 -0
  1032. data/spec/spec_tests/data/unified/valid-pass/assertNumberConnectionsCheckedOut.yml +17 -0
  1033. data/spec/spec_tests/data/unified/valid-pass/entity-client-cmap-events.yml +40 -0
  1034. data/spec/spec_tests/data/unified/valid-pass/entity-client-storeEventsAsEntities.yml +37 -0
  1035. data/spec/spec_tests/data/unified/valid-pass/expectedError-errorResponse.yml +39 -0
  1036. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-eventType.yml +66 -0
  1037. data/spec/spec_tests/data/unified/valid-pass/ignoreResultAndError.yml +34 -0
  1038. data/spec/spec_tests/data/unified/valid-pass/observeSensitiveCommands.yml +255 -0
  1039. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +18 -0
  1040. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +18 -12
  1041. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +3 -3
  1042. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +2 -2
  1043. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +1 -1
  1044. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +1 -1
  1045. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +4 -4
  1046. data/spec/spec_tests/gridfs_spec.rb +1 -1
  1047. data/spec/spec_tests/gridfs_unified_spec.rb +1 -1
  1048. data/spec/spec_tests/load_balancers_spec.rb +1 -1
  1049. data/spec/spec_tests/max_staleness_spec.rb +1 -1
  1050. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
  1051. data/spec/spec_tests/read_write_concern_document_spec.rb +1 -1
  1052. data/spec/spec_tests/read_write_concern_operaton_spec.rb +1 -1
  1053. data/spec/spec_tests/retryable_reads_spec.rb +3 -1
  1054. data/spec/spec_tests/retryable_reads_unified_spec.rb +1 -1
  1055. data/spec/spec_tests/retryable_writes_spec.rb +1 -1
  1056. data/spec/spec_tests/retryable_writes_unified_spec.rb +1 -1
  1057. data/spec/spec_tests/sdam_monitoring_spec.rb +1 -1
  1058. data/spec/spec_tests/sdam_spec.rb +5 -1
  1059. data/spec/spec_tests/sdam_unified_spec.rb +13 -0
  1060. data/spec/spec_tests/seed_list_discovery_spec.rb +1 -1
  1061. data/spec/spec_tests/server_selection_rtt_spec.rb +1 -1
  1062. data/spec/spec_tests/server_selection_spec.rb +1 -1
  1063. data/spec/spec_tests/sessions_unified_spec.rb +1 -1
  1064. data/spec/spec_tests/transactions_api_spec.rb +1 -1
  1065. data/spec/spec_tests/transactions_spec.rb +1 -1
  1066. data/spec/spec_tests/transactions_unified_spec.rb +1 -1
  1067. data/spec/spec_tests/unified_spec.rb +1 -6
  1068. data/spec/spec_tests/uri_options_spec.rb +1 -1
  1069. data/spec/spec_tests/versioned_api_spec.rb +1 -1
  1070. data/spec/stress/cleanup_spec.rb +1 -1
  1071. data/spec/stress/connection_pool_stress_spec.rb +1 -62
  1072. data/spec/stress/connection_pool_timing_spec.rb +9 -34
  1073. data/spec/stress/fork_reconnect_stress_spec.rb +7 -8
  1074. data/spec/stress/push_monitor_close_spec.rb +1 -1
  1075. data/spec/support/authorization.rb +1 -1
  1076. data/spec/support/aws_utils/base.rb +1 -1
  1077. data/spec/support/aws_utils/inspector.rb +1 -1
  1078. data/spec/support/aws_utils/orchestrator.rb +20 -8
  1079. data/spec/support/aws_utils/provisioner.rb +1 -1
  1080. data/spec/support/aws_utils.rb +4 -3
  1081. data/spec/support/background_thread_registry.rb +1 -1
  1082. data/spec/support/certificates/atlas-ocsp-ca.crt +67 -67
  1083. data/spec/support/certificates/atlas-ocsp.crt +103 -103
  1084. data/spec/support/certificates/retrieve-atlas-cert +2 -0
  1085. data/spec/support/client_registry.rb +6 -2
  1086. data/spec/support/client_registry_macros.rb +1 -1
  1087. data/spec/support/cluster_tools.rb +13 -8
  1088. data/spec/support/common_shortcuts.rb +30 -5
  1089. data/spec/support/constraints.rb +15 -1
  1090. data/spec/support/crypt/{encryptedFields.json → encrypted_fields/encryptedFields.json} +0 -1
  1091. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +30 -0
  1092. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +21 -0
  1093. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +29 -0
  1094. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +21 -0
  1095. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +30 -0
  1096. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +27 -0
  1097. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +27 -0
  1098. data/spec/support/crypt.rb +13 -3
  1099. data/spec/support/dns.rb +1 -1
  1100. data/spec/support/json_ext_formatter.rb +1 -1
  1101. data/spec/support/keyword_struct.rb +1 -1
  1102. data/spec/support/local_resource_registry.rb +1 -1
  1103. data/spec/support/macros.rb +1 -0
  1104. data/spec/support/matchers.rb +5 -5
  1105. data/spec/support/mongos_macros.rb +7 -0
  1106. data/spec/support/monitoring_ext.rb +1 -1
  1107. data/spec/support/primary_socket.rb +1 -1
  1108. data/spec/support/sdam_formatter_integration.rb +1 -1
  1109. data/spec/support/shared/app_metadata.rb +15 -3
  1110. data/spec/support/shared/auth_context.rb +1 -0
  1111. data/spec/support/shared/protocol.rb +1 -1
  1112. data/spec/support/shared/scram_conversation.rb +1 -1
  1113. data/spec/support/shared/server_selector.rb +1 -1
  1114. data/spec/support/shared/session.rb +1 -1
  1115. data/spec/support/spec_config.rb +40 -3
  1116. data/spec/support/spec_setup.rb +1 -1
  1117. data/spec/support/using_hash.rb +11 -2
  1118. data/spec/support/utils.rb +277 -249
  1119. data.tar.gz.sig +0 -0
  1120. metadata +1456 -1173
  1121. metadata.gz.sig +0 -0
  1122. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +0 -96
  1123. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +0 -88
  1124. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +0 -85
  1125. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +0 -118
  1126. data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +0 -152
  1127. data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +0 -148
  1128. data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +0 -219
  1129. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +0 -88
  1130. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +0 -117
  1131. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +0 -98
  1132. data/spec/spec_tests/data/unified/invalid/expectedEventsForClient-ignoreExtraEvents-type.yml +0 -15
  1133. data/spec/spec_tests/sdam_integration_spec.rb +0 -16
@@ -1,8 +1,9 @@
1
- # This test requires libmongocrypt 1.5.0-alpha2.
1
+ # Requires libmongocrypt 1.8.0.
2
2
  runOn:
3
- - minServerVersion: "6.0.0"
3
+ - minServerVersion: "7.0.0"
4
+ # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
4
5
  # FLE 2 Encrypted collections are not supported on standalone.
5
- topology: [ "replicaset", "sharded" ]
6
+ topology: [ "replicaset", "sharded", "load-balanced" ]
6
7
 
7
8
  database_name: &database_name "default"
8
9
  collection_name: &collection_name "default"
@@ -14,10 +15,7 @@ tests:
14
15
  kmsProviders:
15
16
  aws: {} # Credentials filled in from environment.
16
17
  encryptedFieldsMap:
17
- default.encryptedCollection: &encrypted_fields0 {
18
- "escCollection": "encryptedCollection.esc",
19
- "eccCollection": "encryptedCollection.ecc",
20
- "ecocCollection": "encryptedCollection.ecoc",
18
+ default.encryptedCollection: &encrypted_fields {
21
19
  "fields": [
22
20
  {
23
21
  "path": "firstName",
@@ -32,58 +30,54 @@ tests:
32
30
  - name: dropCollection
33
31
  object: database
34
32
  arguments:
35
- collection: "encryptedCollection"
33
+ collection: &encrypted_collection_name "encryptedCollection"
36
34
  - name: createCollection
37
35
  object: database
38
36
  arguments:
39
- collection: "encryptedCollection"
37
+ collection: *encrypted_collection_name
40
38
  - name: assertCollectionExists
41
39
  object: testRunner
42
40
  arguments:
43
41
  database: *database_name
44
- collection: "encryptedCollection.esc"
45
- - name: assertCollectionExists
42
+ collection: &esc_collection_name "enxcol_.encryptedCollection.esc"
43
+ # ecc collection is no longer created for QEv2
44
+ - name: assertCollectionNotExists
46
45
  object: testRunner
47
46
  arguments:
48
47
  database: *database_name
49
- collection: "encryptedCollection.ecc"
48
+ collection: &ecc_collection_name "enxcol_.encryptedCollection.ecc"
50
49
  - name: assertCollectionExists
51
50
  object: testRunner
52
51
  arguments:
53
52
  database: *database_name
54
- collection: "encryptedCollection.ecoc"
53
+ collection: &ecoc_collection_name "enxcol_.encryptedCollection.ecoc"
55
54
  - name: assertCollectionExists
56
55
  object: testRunner
57
56
  arguments:
58
57
  database: *database_name
59
- collection: "encryptedCollection"
58
+ collection: *encrypted_collection_name
60
59
  - name: assertIndexExists
61
60
  object: testRunner
62
61
  arguments:
63
62
  database: *database_name
64
- collection: "encryptedCollection"
63
+ collection: *encrypted_collection_name
65
64
  index: __safeContent___1
66
65
 
67
66
  expectations:
68
67
  # events from dropCollection ... begin
69
68
  - command_started_event:
70
69
  command:
71
- drop: "encryptedCollection.esc"
72
- command_name: drop
73
- database_name: *database_name
74
- - command_started_event:
75
- command:
76
- drop: "encryptedCollection.ecc"
70
+ drop: *esc_collection_name
77
71
  command_name: drop
78
72
  database_name: *database_name
79
73
  - command_started_event:
80
74
  command:
81
- drop: "encryptedCollection.ecoc"
75
+ drop: *ecoc_collection_name
82
76
  command_name: drop
83
77
  database_name: *database_name
84
78
  - command_started_event:
85
79
  command:
86
- drop: "encryptedCollection"
80
+ drop: *encrypted_collection_name
87
81
  command_name: drop
88
82
  database_name: *database_name
89
83
  # events from dropCollection ... end
@@ -91,33 +85,35 @@ tests:
91
85
  # State collections are created first.
92
86
  - command_started_event:
93
87
  command:
94
- create: "encryptedCollection.esc"
95
- clusteredIndex: {key: {_id: 1}, unique: true}
96
- command_name: create
97
- database_name: *database_name
98
- - command_started_event:
99
- command:
100
- create: "encryptedCollection.ecc"
88
+ create: *esc_collection_name
101
89
  clusteredIndex: {key: {_id: 1}, unique: true}
102
90
  command_name: create
103
91
  database_name: *database_name
104
92
  - command_started_event:
105
93
  command:
106
- create: "encryptedCollection.ecoc"
94
+ create: *ecoc_collection_name
107
95
  clusteredIndex: {key: {_id: 1}, unique: true}
108
96
  command_name: create
109
97
  database_name: *database_name
110
98
  # Data collection is created after.
111
99
  - command_started_event:
112
100
  command:
113
- create: "encryptedCollection"
114
- encryptedFields: *encrypted_fields0
101
+ create: *encrypted_collection_name
102
+ encryptedFields: &encrypted_fields_expectation {
103
+ "fields": [
104
+ {
105
+ "path": "firstName",
106
+ "bsonType": "string",
107
+ "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }}
108
+ }
109
+ ]
110
+ }
115
111
  command_name: create
116
112
  database_name: *database_name
117
113
  # Index on __safeContents__ is then created.
118
114
  - command_started_event:
119
115
  command:
120
- createIndexes: "encryptedCollection"
116
+ createIndexes: *encrypted_collection_name
121
117
  indexes:
122
118
  - name: __safeContent___1
123
119
  key: { __safeContent__: 1 }
@@ -130,79 +126,61 @@ tests:
130
126
  kmsProviders:
131
127
  aws: {} # Credentials filled in from environment.
132
128
  encryptedFieldsMap:
133
- default.encryptedCollection: &encrypted_fields1 {
134
- "fields": [
135
- {
136
- "path": "firstName",
137
- "bsonType": "string",
138
- "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }},
139
- "queries": {
140
- "queryType": "equality",
141
- "contention": {
142
- "$numberLong": "0"
143
- }
144
- }
145
- }
146
- ]
147
- }
129
+ default.encryptedCollection: *encrypted_fields
148
130
 
149
131
  operations:
150
132
  # Do an initial drop to remove collections that may exist from previous test runs.
151
133
  - name: dropCollection
152
134
  object: database
153
135
  arguments:
154
- collection: "encryptedCollection"
136
+ collection: *encrypted_collection_name
155
137
  - name: createCollection
156
138
  object: database
157
139
  arguments:
158
- collection: "encryptedCollection"
140
+ collection: *encrypted_collection_name
159
141
  - name: assertCollectionExists
160
142
  object: testRunner
161
143
  arguments:
162
144
  database: *database_name
163
- collection: "enxcol_.encryptedCollection.esc"
164
- - name: assertCollectionExists
145
+ collection: *esc_collection_name
146
+ # ecc collection is no longer created for QEv2
147
+ - name: assertCollectionNotExists
165
148
  object: testRunner
166
149
  arguments:
167
150
  database: *database_name
168
- collection: "enxcol_.encryptedCollection.ecc"
151
+ collection: *ecc_collection_name
169
152
  - name: assertCollectionExists
170
153
  object: testRunner
171
154
  arguments:
172
155
  database: *database_name
173
- collection: "enxcol_.encryptedCollection.ecoc"
156
+ collection: *ecoc_collection_name
174
157
  - name: assertCollectionExists
175
158
  object: testRunner
176
159
  arguments:
177
160
  database: *database_name
178
- collection: "encryptedCollection"
161
+ collection: *encrypted_collection_name
179
162
  - name: assertIndexExists
180
163
  object: testRunner
181
164
  arguments:
182
165
  database: *database_name
183
- collection: "encryptedCollection"
166
+ collection: *encrypted_collection_name
184
167
  index: __safeContent___1
185
168
 
186
169
  expectations:
187
170
  # events from dropCollection ... begin
188
171
  - command_started_event:
189
172
  command:
190
- drop: "enxcol_.encryptedCollection.esc"
191
- command_name: drop
192
- database_name: *database_name
193
- - command_started_event:
194
- command:
195
- drop: "enxcol_.encryptedCollection.ecc"
173
+ drop: *esc_collection_name
196
174
  command_name: drop
197
175
  database_name: *database_name
198
176
  - command_started_event:
199
177
  command:
200
- drop: "enxcol_.encryptedCollection.ecoc"
178
+ drop: *ecoc_collection_name
201
179
  command_name: drop
202
180
  database_name: *database_name
203
181
  - command_started_event:
204
182
  command:
205
- drop: "encryptedCollection"
183
+ drop: *encrypted_collection_name
206
184
  command_name: drop
207
185
  database_name: *database_name
208
186
  # events from dropCollection ... end
@@ -210,33 +188,27 @@ tests:
210
188
  # State collections are created first.
211
189
  - command_started_event:
212
190
  command:
213
- create: "enxcol_.encryptedCollection.esc"
214
- clusteredIndex: {key: {_id: 1}, unique: true}
215
- command_name: create
216
- database_name: *database_name
217
- - command_started_event:
218
- command:
219
- create: "enxcol_.encryptedCollection.ecc"
191
+ create: *esc_collection_name
220
192
  clusteredIndex: {key: {_id: 1}, unique: true}
221
193
  command_name: create
222
194
  database_name: *database_name
223
195
  - command_started_event:
224
196
  command:
225
- create: "enxcol_.encryptedCollection.ecoc"
197
+ create: *ecoc_collection_name
226
198
  clusteredIndex: {key: {_id: 1}, unique: true}
227
199
  command_name: create
228
200
  database_name: *database_name
229
201
  # Data collection is created after.
230
202
  - command_started_event:
231
203
  command:
232
- create: "encryptedCollection"
233
- encryptedFields: *encrypted_fields1
204
+ create: *encrypted_collection_name
205
+ encryptedFields: *encrypted_fields_expectation
234
206
  command_name: create
235
207
  database_name: *database_name
236
208
  # Index on __safeContents__ is then created.
237
209
  - command_started_event:
238
210
  command:
239
- createIndexes: "encryptedCollection"
211
+ createIndexes: *encrypted_collection_name
240
212
  indexes:
241
213
  - name: __safeContent___1
242
214
  key: { __safeContent__: 1 }
@@ -249,104 +221,83 @@ tests:
249
221
  kmsProviders:
250
222
  aws: {} # Credentials filled in from environment.
251
223
  encryptedFieldsMap:
252
- default.encryptedCollection: &encrypted_fields2 {
253
- "fields": [
254
- {
255
- "path": "firstName",
256
- "bsonType": "string",
257
- "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }},
258
- "queries": {
259
- "queryType": "equality",
260
- "contention": {
261
- "$numberLong": "0"
262
- }
263
- }
264
- }
265
- ]
266
- }
224
+ default.encryptedCollection: *encrypted_fields
267
225
 
268
226
  operations:
269
227
  # Do an initial drop to remove collections that may exist from previous test runs.
270
228
  - name: dropCollection
271
229
  object: database
272
230
  arguments:
273
- collection: "encryptedCollection"
231
+ collection: *encrypted_collection_name
274
232
  - name: createCollection
275
233
  object: database
276
234
  arguments:
277
- collection: "encryptedCollection"
235
+ collection: *encrypted_collection_name
278
236
  - name: assertCollectionExists
279
237
  object: testRunner
280
238
  arguments:
281
239
  database: *database_name
282
- collection: "enxcol_.encryptedCollection.esc"
283
- - name: assertCollectionExists
240
+ collection: *esc_collection_name
241
+ # ecc collection is no longer created for QEv2
242
+ - name: assertCollectionNotExists
284
243
  object: testRunner
285
244
  arguments:
286
245
  database: *database_name
287
- collection: "enxcol_.encryptedCollection.ecc"
246
+ collection: *ecc_collection_name
288
247
  - name: assertCollectionExists
289
248
  object: testRunner
290
249
  arguments:
291
250
  database: *database_name
292
- collection: "enxcol_.encryptedCollection.ecoc"
251
+ collection: *ecoc_collection_name
293
252
  - name: assertCollectionExists
294
253
  object: testRunner
295
254
  arguments:
296
255
  database: *database_name
297
- collection: "encryptedCollection"
256
+ collection: *encrypted_collection_name
298
257
  - name: assertIndexExists
299
258
  object: testRunner
300
259
  arguments:
301
260
  database: *database_name
302
- collection: "encryptedCollection"
261
+ collection: *encrypted_collection_name
303
262
  index: __safeContent___1
304
263
  - name: dropCollection
305
264
  object: database
306
265
  arguments:
307
- collection: "encryptedCollection"
266
+ collection: *encrypted_collection_name
267
+ # ecc collection is no longer created for QEv2
308
268
  - name: assertCollectionNotExists
309
269
  object: testRunner
310
270
  arguments:
311
271
  database: *database_name
312
- collection: "enxcol_.encryptedCollection.ecc"
272
+ collection: *ecoc_collection_name
273
+ # ecc collection is no longer created for QEv2
313
274
  - name: assertCollectionNotExists
314
275
  object: testRunner
315
276
  arguments:
316
277
  database: *database_name
317
- collection: "enxcol_.encryptedCollection.ecoc"
318
- - name: assertCollectionNotExists
319
- object: testRunner
320
- arguments:
321
- database: *database_name
322
- collection: "encryptedCollection"
278
+ collection: *encrypted_collection_name
323
279
  - name: assertIndexNotExists
324
280
  object: testRunner
325
281
  arguments:
326
282
  database: *database_name
327
- collection: "encryptedCollection"
283
+ collection: *encrypted_collection_name
328
284
  index: __safeContent___1
329
285
 
330
286
  expectations:
331
287
  # events from dropCollection ... begin
332
288
  - command_started_event:
333
289
  command:
334
- drop: "enxcol_.encryptedCollection.esc"
335
- command_name: drop
336
- database_name: *database_name
337
- - command_started_event:
338
- command:
339
- drop: "enxcol_.encryptedCollection.ecc"
290
+ drop: *esc_collection_name
340
291
  command_name: drop
341
292
  database_name: *database_name
342
293
  - command_started_event:
343
294
  command:
344
- drop: "enxcol_.encryptedCollection.ecoc"
295
+ drop: *ecoc_collection_name
345
296
  command_name: drop
346
297
  database_name: *database_name
347
298
  - command_started_event:
348
299
  command:
349
- drop: "encryptedCollection"
300
+ drop: *encrypted_collection_name
350
301
  command_name: drop
351
302
  database_name: *database_name
352
303
  # events from dropCollection ... end
@@ -354,33 +305,27 @@ tests:
354
305
  # State collections are created first.
355
306
  - command_started_event:
356
307
  command:
357
- create: "enxcol_.encryptedCollection.esc"
358
- clusteredIndex: {key: {_id: 1}, unique: true}
359
- command_name: create
360
- database_name: *database_name
361
- - command_started_event:
362
- command:
363
- create: "enxcol_.encryptedCollection.ecc"
308
+ create: *esc_collection_name
364
309
  clusteredIndex: {key: {_id: 1}, unique: true}
365
310
  command_name: create
366
311
  database_name: *database_name
367
312
  - command_started_event:
368
313
  command:
369
- create: "enxcol_.encryptedCollection.ecoc"
314
+ create: *ecoc_collection_name
370
315
  clusteredIndex: {key: {_id: 1}, unique: true}
371
316
  command_name: create
372
317
  database_name: *database_name
373
318
  # Data collection is created after.
374
319
  - command_started_event:
375
320
  command:
376
- create: "encryptedCollection"
377
- encryptedFields: *encrypted_fields2
321
+ create: *encrypted_collection_name
322
+ encryptedFields: *encrypted_fields
378
323
  command_name: create
379
324
  database_name: *database_name
380
325
  # Index on __safeContents__ is then created.
381
326
  - command_started_event:
382
327
  command:
383
- createIndexes: "encryptedCollection"
328
+ createIndexes: *encrypted_collection_name
384
329
  indexes:
385
330
  - name: __safeContent___1
386
331
  key: { __safeContent__: 1 }
@@ -390,171 +335,27 @@ tests:
390
335
  # events from dropCollection ... begin
391
336
  - command_started_event:
392
337
  command:
393
- drop: "enxcol_.encryptedCollection.esc"
394
- command_name: drop
395
- database_name: *database_name
396
- - command_started_event:
397
- command:
398
- drop: "enxcol_.encryptedCollection.ecc"
399
- command_name: drop
400
- database_name: *database_name
401
- - command_started_event:
402
- command:
403
- drop: "enxcol_.encryptedCollection.ecoc"
404
- command_name: drop
405
- database_name: *database_name
406
- - command_started_event:
407
- command:
408
- drop: "encryptedCollection"
409
- command_name: drop
410
- database_name: *database_name
411
- # events from dropCollection ... end
412
- - description: "encryptedFieldsMap with cyclic entries does not loop"
413
- clientOptions:
414
- autoEncryptOpts:
415
- kmsProviders:
416
- aws: {} # Credentials filled in from environment.
417
- encryptedFieldsMap:
418
- # encryptedCollection has encryptedCollection.esc as the escCollection.
419
- # encryptedCollection.esc has encryptedCollection as the escCollection.
420
- default.encryptedCollection: &encrypted_fields3 {
421
- "escCollection": "encryptedCollection.esc",
422
- "eccCollection": "encryptedCollection.ecc",
423
- "ecocCollection": "encryptedCollection.ecoc",
424
- "fields": [
425
- {
426
- "path": "firstName",
427
- "bsonType": "string",
428
- "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }}
429
- }
430
- ]
431
- }
432
- default.encryptedCollection.esc: {
433
- "escCollection": "encryptedCollection",
434
- "eccCollection": "encryptedCollection.ecc",
435
- "ecocCollection": "encryptedCollection.ecoc",
436
- "fields": [
437
- {
438
- "path": "firstName",
439
- "bsonType": "string",
440
- "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }}
441
- }
442
- ]
443
- }
444
- operations:
445
- # Do an initial drop to remove collections that may exist from previous test runs.
446
- - name: dropCollection
447
- object: database
448
- arguments:
449
- collection: "encryptedCollection"
450
- - name: createCollection
451
- object: database
452
- arguments:
453
- collection: "encryptedCollection"
454
- - name: assertCollectionExists
455
- object: testRunner
456
- arguments:
457
- database: *database_name
458
- collection: "encryptedCollection.esc"
459
- - name: assertCollectionExists
460
- object: testRunner
461
- arguments:
462
- database: *database_name
463
- collection: "encryptedCollection.ecc"
464
- - name: assertCollectionExists
465
- object: testRunner
466
- arguments:
467
- database: *database_name
468
- collection: "encryptedCollection.ecoc"
469
- - name: assertCollectionExists
470
- object: testRunner
471
- arguments:
472
- database: *database_name
473
- collection: "encryptedCollection"
474
- - name: assertIndexExists
475
- object: testRunner
476
- arguments:
477
- database: *database_name
478
- collection: "encryptedCollection"
479
- index: __safeContent___1
480
- expectations:
481
- # events from dropCollection ... begin
482
- - command_started_event:
483
- command:
484
- drop: "encryptedCollection.esc"
338
+ drop: *esc_collection_name
485
339
  command_name: drop
486
340
  database_name: *database_name
487
341
  - command_started_event:
488
342
  command:
489
- drop: "encryptedCollection.ecc"
343
+ drop: *ecoc_collection_name
490
344
  command_name: drop
491
345
  database_name: *database_name
492
346
  - command_started_event:
493
347
  command:
494
- drop: "encryptedCollection.ecoc"
495
- command_name: drop
496
- database_name: *database_name
497
- - command_started_event:
498
- command:
499
- drop: "encryptedCollection"
348
+ drop: *encrypted_collection_name
500
349
  command_name: drop
501
350
  database_name: *database_name
502
351
  # events from dropCollection ... end
503
- # events from createCollection ... begin
504
- # State collections are created first.
505
- - command_started_event:
506
- command:
507
- create: "encryptedCollection.esc"
508
- clusteredIndex: {key: {_id: 1}, unique: true}
509
- command_name: create
510
- database_name: *database_name
511
- - command_started_event:
512
- command:
513
- create: "encryptedCollection.ecc"
514
- clusteredIndex: {key: {_id: 1}, unique: true}
515
- command_name: create
516
- database_name: *database_name
517
- - command_started_event:
518
- command:
519
- create: "encryptedCollection.ecoc"
520
- clusteredIndex: {key: {_id: 1}, unique: true}
521
- command_name: create
522
- database_name: *database_name
523
- # Data collection is created after.
524
- - command_started_event:
525
- command:
526
- create: "encryptedCollection"
527
- encryptedFields: *encrypted_fields3
528
- command_name: create
529
- database_name: *database_name
530
- # Index on __safeContents__ is then created.
531
- - command_started_event:
532
- command:
533
- createIndexes: "encryptedCollection"
534
- indexes:
535
- - name: __safeContent___1
536
- key: { __safeContent__: 1 }
537
- command_name: createIndexes
538
- database_name: *database_name
539
- # events from createCollection ... end
540
352
  - description: "CreateCollection without encryptedFields."
541
353
  clientOptions:
542
354
  autoEncryptOpts:
543
355
  kmsProviders:
544
356
  aws: {} # Credentials filled in from environment.
545
357
  encryptedFieldsMap:
546
- default.encryptedCollection: {
547
- "escCollection": "encryptedCollection.esc",
548
- "eccCollection": "encryptedCollection.ecc",
549
- "ecocCollection": "encryptedCollection.ecoc",
550
- "fields": [
551
- {
552
- "path": "firstName",
553
- "bsonType": "string",
554
- "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }}
555
- }
556
- ]
557
- }
358
+ default.encryptedCollection: *encrypted_fields
558
359
  operations:
559
360
  # Do an initial drop to remove collections that may exist from previous test runs.
560
361
  - name: dropCollection
@@ -597,75 +398,60 @@ tests:
597
398
  kmsProviders:
598
399
  aws: {} # Credentials filled in from environment.
599
400
  encryptedFieldsMap:
600
- default.encryptedCollection: &encrypted_fields4 {
601
- "escCollection": "encryptedCollection.esc",
602
- "eccCollection": "encryptedCollection.ecc",
603
- "ecocCollection": "encryptedCollection.ecoc",
604
- "fields": [
605
- {
606
- "path": "firstName",
607
- "bsonType": "string",
608
- "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }}
609
- }
610
- ]
611
- }
401
+ default.encryptedCollection: *encrypted_fields
612
402
  operations:
613
403
  # Do an initial drop to remove collections that may exist from previous test runs.
614
404
  - name: dropCollection
615
405
  object: database
616
406
  arguments:
617
- collection: "encryptedCollection"
407
+ collection: *encrypted_collection_name
618
408
  - name: createCollection
619
409
  object: database
620
410
  arguments:
621
- collection: "encryptedCollection"
411
+ collection: *encrypted_collection_name
622
412
  - name: assertCollectionExists
623
413
  object: testRunner
624
414
  arguments:
625
415
  database: *database_name
626
- collection: "encryptedCollection.esc"
627
- - name: assertCollectionExists
416
+ collection: *esc_collection_name
417
+ # ecc collection is no longer created for QEv2
418
+ - name: assertCollectionNotExists
628
419
  object: testRunner
629
420
  arguments:
630
421
  database: *database_name
631
- collection: "encryptedCollection.ecc"
422
+ collection: *ecc_collection_name
632
423
  - name: assertCollectionExists
633
424
  object: testRunner
634
425
  arguments:
635
426
  database: *database_name
636
- collection: "encryptedCollection.ecoc"
427
+ collection: *ecoc_collection_name
637
428
  - name: assertCollectionExists
638
429
  object: testRunner
639
430
  arguments:
640
431
  database: *database_name
641
- collection: "encryptedCollection"
432
+ collection: *encrypted_collection_name
642
433
  - name: assertIndexExists
643
434
  object: testRunner
644
435
  arguments:
645
436
  database: *database_name
646
- collection: "encryptedCollection"
437
+ collection: *encrypted_collection_name
647
438
  index: __safeContent___1
648
439
 
649
440
  expectations:
650
441
  # events from dropCollection ... begin
651
442
  - command_started_event:
652
443
  command:
653
- drop: "encryptedCollection.esc"
654
- command_name: drop
655
- database_name: *database_name
656
- - command_started_event:
657
- command:
658
- drop: "encryptedCollection.ecc"
444
+ drop: *esc_collection_name
659
445
  command_name: drop
660
446
  database_name: *database_name
661
447
  - command_started_event:
662
448
  command:
663
- drop: "encryptedCollection.ecoc"
449
+ drop: *ecoc_collection_name
664
450
  command_name: drop
665
451
  database_name: *database_name
666
452
  - command_started_event:
667
453
  command:
668
- drop: "encryptedCollection"
454
+ drop: *encrypted_collection_name
669
455
  command_name: drop
670
456
  database_name: *database_name
671
457
  # events from dropCollection ... end
@@ -673,33 +459,27 @@ tests:
673
459
  # State collections are created first.
674
460
  - command_started_event:
675
461
  command:
676
- create: "encryptedCollection.esc"
677
- clusteredIndex: {key: {_id: 1}, unique: true}
678
- command_name: create
679
- database_name: *database_name
680
- - command_started_event:
681
- command:
682
- create: "encryptedCollection.ecc"
462
+ create: *esc_collection_name
683
463
  clusteredIndex: {key: {_id: 1}, unique: true}
684
464
  command_name: create
685
465
  database_name: *database_name
686
466
  - command_started_event:
687
467
  command:
688
- create: "encryptedCollection.ecoc"
468
+ create: *ecoc_collection_name
689
469
  clusteredIndex: {key: {_id: 1}, unique: true}
690
470
  command_name: create
691
471
  database_name: *database_name
692
472
  # Data collection is created after.
693
473
  - command_started_event:
694
474
  command:
695
- create: "encryptedCollection"
696
- encryptedFields: *encrypted_fields4
475
+ create: *encrypted_collection_name
476
+ encryptedFields: *encrypted_fields_expectation
697
477
  command_name: create
698
478
  database_name: *database_name
699
479
  # Index on __safeContents__ is then created.
700
480
  - command_started_event:
701
481
  command:
702
- createIndexes: "encryptedCollection"
482
+ createIndexes: *encrypted_collection_name
703
483
  indexes:
704
484
  - name: __safeContent___1
705
485
  key: { __safeContent__: 1 }
@@ -716,82 +496,56 @@ tests:
716
496
  - name: dropCollection
717
497
  object: database
718
498
  arguments:
719
- collection: "encryptedCollection"
720
- encryptedFields: {
721
- "escCollection": "encryptedCollection.esc",
722
- "eccCollection": "encryptedCollection.ecc",
723
- "ecocCollection": "encryptedCollection.ecoc",
724
- "fields": [
725
- {
726
- "path": "firstName",
727
- "bsonType": "string",
728
- "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }}
729
- }
730
- ]
731
- }
499
+ collection: *encrypted_collection_name
500
+ encryptedFields: *encrypted_fields
732
501
  - name: createCollection
733
502
  object: database
734
503
  arguments:
735
- collection: "encryptedCollection"
736
- encryptedFields: &encrypted_fields5 {
737
- "escCollection": "encryptedCollection.esc",
738
- "eccCollection": "encryptedCollection.ecc",
739
- "ecocCollection": "encryptedCollection.ecoc",
740
- "fields": [
741
- {
742
- "path": "firstName",
743
- "bsonType": "string",
744
- "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }}
745
- }
746
- ]
747
- }
504
+ collection: *encrypted_collection_name
505
+ encryptedFields: *encrypted_fields
748
506
  - name: assertCollectionExists
749
507
  object: testRunner
750
508
  arguments:
751
509
  database: *database_name
752
- collection: "encryptedCollection.esc"
753
- - name: assertCollectionExists
510
+ collection: *esc_collection_name
511
+ # ecc collection is no longer created for QEv2
512
+ - name: assertCollectionNotExists
754
513
  object: testRunner
755
514
  arguments:
756
515
  database: *database_name
757
- collection: "encryptedCollection.ecc"
516
+ collection: *ecc_collection_name
758
517
  - name: assertCollectionExists
759
518
  object: testRunner
760
519
  arguments:
761
520
  database: *database_name
762
- collection: "encryptedCollection.ecoc"
521
+ collection: *ecoc_collection_name
763
522
  - name: assertCollectionExists
764
523
  object: testRunner
765
524
  arguments:
766
525
  database: *database_name
767
- collection: "encryptedCollection"
526
+ collection: *encrypted_collection_name
768
527
  - name: assertIndexExists
769
528
  object: testRunner
770
529
  arguments:
771
530
  database: *database_name
772
- collection: "encryptedCollection"
531
+ collection: *encrypted_collection_name
773
532
  index: __safeContent___1
774
533
 
775
534
  expectations:
776
535
  # events from dropCollection ... begin
777
536
  - command_started_event:
778
537
  command:
779
- drop: "encryptedCollection.esc"
538
+ drop: *esc_collection_name
780
539
  command_name: drop
781
540
  database_name: *database_name
782
541
  - command_started_event:
783
542
  command:
784
- drop: "encryptedCollection.ecc"
543
+ drop: *ecoc_collection_name
785
544
  command_name: drop
786
545
  database_name: *database_name
787
546
  - command_started_event:
788
547
  command:
789
- drop: "encryptedCollection.ecoc"
790
- command_name: drop
791
- database_name: *database_name
792
- - command_started_event:
793
- command:
794
- drop: "encryptedCollection"
548
+ drop: *encrypted_collection_name
795
549
  command_name: drop
796
550
  database_name: *database_name
797
551
  # events from dropCollection ... end
@@ -799,40 +553,34 @@ tests:
799
553
  # State collections are created first.
800
554
  - command_started_event:
801
555
  command:
802
- create: "encryptedCollection.esc"
803
- clusteredIndex: {key: {_id: 1}, unique: true}
804
- command_name: create
805
- database_name: *database_name
806
- - command_started_event:
807
- command:
808
- create: "encryptedCollection.ecc"
556
+ create: *esc_collection_name
809
557
  clusteredIndex: {key: {_id: 1}, unique: true}
810
558
  command_name: create
811
559
  database_name: *database_name
812
560
  - command_started_event:
813
561
  command:
814
- create: "encryptedCollection.ecoc"
562
+ create: *ecoc_collection_name
815
563
  clusteredIndex: {key: {_id: 1}, unique: true}
816
564
  command_name: create
817
565
  database_name: *database_name
818
566
  # Data collection is created after.
819
567
  - command_started_event:
820
568
  command:
821
- create: "encryptedCollection"
822
- encryptedFields: *encrypted_fields5
569
+ create: *encrypted_collection_name
570
+ encryptedFields: *encrypted_fields_expectation
823
571
  command_name: create
824
572
  database_name: *database_name
825
573
  # libmongocrypt requests listCollections to get a schema for the "createIndexes" command.
826
574
  - command_started_event:
827
575
  command:
828
576
  listCollections: 1
829
- filter: { name: "encryptedCollection" }
577
+ filter: { name: *encrypted_collection_name }
830
578
  command_name: listCollections
831
579
  database_name: *database_name
832
580
  # Index on __safeContents__ is then created.
833
581
  - command_started_event:
834
582
  command:
835
- createIndexes: "encryptedCollection"
583
+ createIndexes: *encrypted_collection_name
836
584
  indexes:
837
585
  - name: __safeContent___1
838
586
  key: { __safeContent__: 1 }
@@ -846,43 +594,27 @@ tests:
846
594
  kmsProviders:
847
595
  aws: {} # Credentials filled in from environment.
848
596
  encryptedFieldsMap:
849
- default.encryptedCollection: {
850
- "escCollection": "encryptedCollection.esc",
851
- "eccCollection": "encryptedCollection.ecc",
852
- "ecocCollection": "encryptedCollection.ecoc",
853
- "fields": [
854
- {
855
- "path": "firstName",
856
- "bsonType": "string",
857
- "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }}
858
- }
859
- ]
860
- }
597
+ default.encryptedCollection: *encrypted_fields
861
598
  operations:
862
599
  - name: dropCollection
863
600
  object: database
864
601
  arguments:
865
- collection: "encryptedCollection"
602
+ collection: *encrypted_collection_name
866
603
  expectations:
867
604
  # events from dropCollection ... begin
868
605
  - command_started_event:
869
606
  command:
870
- drop: "encryptedCollection.esc"
871
- command_name: drop
872
- database_name: *database_name
873
- - command_started_event:
874
- command:
875
- drop: "encryptedCollection.ecc"
607
+ drop: *esc_collection_name
876
608
  command_name: drop
877
609
  database_name: *database_name
878
610
  - command_started_event:
879
611
  command:
880
- drop: "encryptedCollection.ecoc"
612
+ drop: *ecoc_collection_name
881
613
  command_name: drop
882
614
  database_name: *database_name
883
615
  - command_started_event:
884
616
  command:
885
- drop: "encryptedCollection"
617
+ drop: *encrypted_collection_name
886
618
  command_name: drop
887
619
  database_name: *database_name
888
620
  # events from dropCollection ... end
@@ -897,156 +629,111 @@ tests:
897
629
  - name: dropCollection
898
630
  object: database
899
631
  arguments:
900
- collection: "encryptedCollection"
901
- encryptedFields: {
902
- "escCollection": "encryptedCollection.esc",
903
- "eccCollection": "encryptedCollection.ecc",
904
- "ecocCollection": "encryptedCollection.ecoc",
905
- "fields": [
906
- {
907
- "path": "firstName",
908
- "bsonType": "string",
909
- "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }}
910
- }
911
- ]
912
- }
632
+ collection: *encrypted_collection_name
633
+ encryptedFields: *encrypted_fields
913
634
  - name: createCollection
914
635
  object: database
915
636
  arguments:
916
- collection: "encryptedCollection"
917
- encryptedFields: {
918
- "escCollection": "encryptedCollection.esc",
919
- "eccCollection": "encryptedCollection.ecc",
920
- "ecocCollection": "encryptedCollection.ecoc",
921
- "fields": [
922
- {
923
- "path": "firstName",
924
- "bsonType": "string",
925
- "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }}
926
- }
927
- ]
928
- }
637
+ collection: *encrypted_collection_name
638
+ encryptedFields: *encrypted_fields
929
639
  - name: assertCollectionExists
930
640
  object: testRunner
931
641
  arguments:
932
642
  database: *database_name
933
- collection: "encryptedCollection.esc"
934
- - name: assertCollectionExists
643
+ collection: *esc_collection_name
644
+ # ecc collection is no longer created for QEv2
645
+ - name: assertCollectionNotExists
935
646
  object: testRunner
936
647
  arguments:
937
648
  database: *database_name
938
- collection: "encryptedCollection.ecc"
649
+ collection: *ecc_collection_name
939
650
  - name: assertCollectionExists
940
651
  object: testRunner
941
652
  arguments:
942
653
  database: *database_name
943
- collection: "encryptedCollection.ecoc"
654
+ collection: *ecoc_collection_name
944
655
  - name: assertCollectionExists
945
656
  object: testRunner
946
657
  arguments:
947
658
  database: *database_name
948
- collection: "encryptedCollection"
659
+ collection: *encrypted_collection_name
949
660
  - name: assertIndexExists
950
661
  object: testRunner
951
662
  arguments:
952
663
  database: *database_name
953
- collection: "encryptedCollection"
664
+ collection: *encrypted_collection_name
954
665
  index: __safeContent___1
955
666
  - name: dropCollection
956
667
  object: database
957
668
  arguments:
958
- collection: "encryptedCollection"
959
- encryptedFields: &encrypted_fields6 {
960
- "escCollection": "encryptedCollection.esc",
961
- "eccCollection": "encryptedCollection.ecc",
962
- "ecocCollection": "encryptedCollection.ecoc",
963
- "fields": [
964
- {
965
- "path": "firstName",
966
- "bsonType": "string",
967
- "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }}
968
- }
969
- ]
970
- }
971
- - name: assertCollectionNotExists
972
- object: testRunner
973
- arguments:
974
- database: *database_name
975
- collection: "encryptedCollection.esc"
669
+ collection: *encrypted_collection_name
670
+ encryptedFields: *encrypted_fields
671
+ # ecc collection is no longer created for QEv2
976
672
  - name: assertCollectionNotExists
977
673
  object: testRunner
978
674
  arguments:
979
675
  database: *database_name
980
- collection: "encryptedCollection.ecc"
676
+ collection: *esc_collection_name
677
+ # ecc collection is no longer created for QEv2
981
678
  - name: assertCollectionNotExists
982
679
  object: testRunner
983
680
  arguments:
984
681
  database: *database_name
985
- collection: "encryptedCollection.ecoc"
682
+ collection: *ecoc_collection_name
683
+ # ecc collection is no longer created for QEv2
986
684
  - name: assertCollectionNotExists
987
685
  object: testRunner
988
686
  arguments:
989
687
  database: *database_name
990
- collection: "encryptedCollection"
688
+ collection: *encrypted_collection_name
991
689
  expectations:
992
690
  # events from dropCollection ... begin
993
691
  - command_started_event:
994
692
  command:
995
- drop: "encryptedCollection.esc"
693
+ drop: *esc_collection_name
996
694
  command_name: drop
997
695
  database_name: *database_name
998
696
  - command_started_event:
999
697
  command:
1000
- drop: "encryptedCollection.ecc"
698
+ drop: *ecoc_collection_name
1001
699
  command_name: drop
1002
700
  database_name: *database_name
1003
701
  - command_started_event:
1004
702
  command:
1005
- drop: "encryptedCollection.ecoc"
1006
- command_name: drop
1007
- database_name: *database_name
1008
- - command_started_event:
1009
- command:
1010
- drop: "encryptedCollection"
703
+ drop: *encrypted_collection_name
1011
704
  command_name: drop
1012
705
  database_name: *database_name
1013
706
  # events from dropCollection ... end
1014
707
  # events from createCollection ... begin
1015
708
  - command_started_event:
1016
709
  command:
1017
- create: "encryptedCollection.esc"
1018
- clusteredIndex: {key: {_id: 1}, unique: true}
1019
- command_name: create
1020
- database_name: *database_name
1021
- - command_started_event:
1022
- command:
1023
- create: "encryptedCollection.ecc"
710
+ create: *esc_collection_name
1024
711
  clusteredIndex: {key: {_id: 1}, unique: true}
1025
712
  command_name: create
1026
713
  database_name: *database_name
1027
714
  - command_started_event:
1028
715
  command:
1029
- create: "encryptedCollection.ecoc"
716
+ create: *ecoc_collection_name
1030
717
  clusteredIndex: {key: {_id: 1}, unique: true}
1031
718
  command_name: create
1032
719
  database_name: *database_name
1033
720
  - command_started_event:
1034
721
  command:
1035
- create: "encryptedCollection"
1036
- encryptedFields: *encrypted_fields6
722
+ create: *encrypted_collection_name
723
+ encryptedFields: *encrypted_fields_expectation
1037
724
  command_name: create
1038
725
  database_name: *database_name
1039
726
  # libmongocrypt requests listCollections to get a schema for the "createIndexes" command.
1040
727
  - command_started_event:
1041
728
  command:
1042
729
  listCollections: 1
1043
- filter: { name: "encryptedCollection" }
730
+ filter: { name: *encrypted_collection_name }
1044
731
  command_name: listCollections
1045
732
  database_name: *database_name
1046
733
  # Index on __safeContents__ is then created.
1047
734
  - command_started_event:
1048
735
  command:
1049
- createIndexes: "encryptedCollection"
736
+ createIndexes: *encrypted_collection_name
1050
737
  indexes:
1051
738
  - name: __safeContent___1
1052
739
  key: { __safeContent__: 1 }
@@ -1056,22 +743,17 @@ tests:
1056
743
  # events from dropCollection ... begin
1057
744
  - command_started_event:
1058
745
  command:
1059
- drop: "encryptedCollection.esc"
746
+ drop: *esc_collection_name
1060
747
  command_name: drop
1061
748
  database_name: *database_name
1062
749
  - command_started_event:
1063
750
  command:
1064
- drop: "encryptedCollection.ecc"
751
+ drop: *ecoc_collection_name
1065
752
  command_name: drop
1066
753
  database_name: *database_name
1067
754
  - command_started_event:
1068
755
  command:
1069
- drop: "encryptedCollection.ecoc"
1070
- command_name: drop
1071
- database_name: *database_name
1072
- - command_started_event:
1073
- command:
1074
- drop: "encryptedCollection"
756
+ drop: *encrypted_collection_name
1075
757
  command_name: drop
1076
758
  database_name: *database_name
1077
759
  # events from dropCollection ... end
@@ -1088,145 +770,111 @@ tests:
1088
770
  - name: dropCollection
1089
771
  object: database
1090
772
  arguments:
1091
- collection: "encryptedCollection"
1092
- encryptedFields: {
1093
- "escCollection": "encryptedCollection.esc",
1094
- "eccCollection": "encryptedCollection.ecc",
1095
- "ecocCollection": "encryptedCollection.ecoc",
1096
- "fields": [
1097
- {
1098
- "path": "firstName",
1099
- "bsonType": "string",
1100
- "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }}
1101
- }
1102
- ]
1103
- }
773
+ collection: *encrypted_collection_name
774
+ encryptedFields: *encrypted_fields
1104
775
  - name: createCollection
1105
776
  object: database
1106
777
  arguments:
1107
- collection: "encryptedCollection"
1108
- encryptedFields: &encrypted_fields7 {
1109
- "escCollection": "encryptedCollection.esc",
1110
- "eccCollection": "encryptedCollection.ecc",
1111
- "ecocCollection": "encryptedCollection.ecoc",
1112
- "fields": [
1113
- {
1114
- "path": "firstName",
1115
- "bsonType": "string",
1116
- "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }}
1117
- }
1118
- ]
1119
- }
778
+ collection: *encrypted_collection_name
779
+ encryptedFields: *encrypted_fields
1120
780
  - name: assertCollectionExists
1121
781
  object: testRunner
1122
782
  arguments:
1123
783
  database: *database_name
1124
- collection: "encryptedCollection.esc"
1125
- - name: assertCollectionExists
784
+ collection: *esc_collection_name
785
+ # ecc collection is no longer created for QEv2
786
+ - name: assertCollectionNotExists
1126
787
  object: testRunner
1127
788
  arguments:
1128
789
  database: *database_name
1129
- collection: "encryptedCollection.ecc"
790
+ collection: *ecc_collection_name
1130
791
  - name: assertCollectionExists
1131
792
  object: testRunner
1132
793
  arguments:
1133
794
  database: *database_name
1134
- collection: "encryptedCollection.ecoc"
795
+ collection: *ecoc_collection_name
1135
796
  - name: assertCollectionExists
1136
797
  object: testRunner
1137
798
  arguments:
1138
799
  database: *database_name
1139
- collection: "encryptedCollection"
800
+ collection: *encrypted_collection_name
1140
801
  - name: assertIndexExists
1141
802
  object: testRunner
1142
803
  arguments:
1143
804
  database: *database_name
1144
- collection: "encryptedCollection"
805
+ collection: *encrypted_collection_name
1145
806
  index: __safeContent___1
1146
807
  - name: dropCollection
1147
808
  object: database
1148
809
  arguments:
1149
- collection: "encryptedCollection"
810
+ collection: *encrypted_collection_name
811
+ # ecc collection is no longer created for QEv2
1150
812
  - name: assertCollectionNotExists
1151
813
  object: testRunner
1152
814
  arguments:
1153
815
  database: *database_name
1154
- collection: "encryptedCollection.esc"
816
+ collection: *esc_collection_name
817
+ # ecc collection is no longer created for QEv2
1155
818
  - name: assertCollectionNotExists
1156
819
  object: testRunner
1157
820
  arguments:
1158
821
  database: *database_name
1159
- collection: "encryptedCollection.ecc"
822
+ collection: *ecoc_collection_name
823
+ # ecc collection is no longer created for QEv2
1160
824
  - name: assertCollectionNotExists
1161
825
  object: testRunner
1162
826
  arguments:
1163
827
  database: *database_name
1164
- collection: "encryptedCollection.ecoc"
1165
- - name: assertCollectionNotExists
1166
- object: testRunner
1167
- arguments:
1168
- database: *database_name
1169
- collection: "encryptedCollection"
828
+ collection: *encrypted_collection_name
1170
829
 
1171
830
  expectations:
1172
831
  # events from dropCollection ... begin
1173
832
  - command_started_event:
1174
833
  command:
1175
- drop: "encryptedCollection.esc"
1176
- command_name: drop
1177
- database_name: *database_name
1178
- - command_started_event:
1179
- command:
1180
- drop: "encryptedCollection.ecc"
834
+ drop: *esc_collection_name
1181
835
  command_name: drop
1182
836
  database_name: *database_name
1183
837
  - command_started_event:
1184
838
  command:
1185
- drop: "encryptedCollection.ecoc"
839
+ drop: *ecoc_collection_name
1186
840
  command_name: drop
1187
841
  database_name: *database_name
1188
842
  - command_started_event:
1189
843
  command:
1190
- drop: "encryptedCollection"
844
+ drop: *encrypted_collection_name
1191
845
  command_name: drop
1192
846
  database_name: *database_name
1193
847
  # events from dropCollection ... end
1194
848
  # events from createCollection ... begin
1195
849
  - command_started_event:
1196
850
  command:
1197
- create: "encryptedCollection.esc"
1198
- clusteredIndex: {key: {_id: 1}, unique: true}
1199
- command_name: create
1200
- database_name: *database_name
1201
- - command_started_event:
1202
- command:
1203
- create: "encryptedCollection.ecc"
851
+ create: *esc_collection_name
1204
852
  clusteredIndex: {key: {_id: 1}, unique: true}
1205
853
  command_name: create
1206
854
  database_name: *database_name
1207
855
  - command_started_event:
1208
856
  command:
1209
- create: "encryptedCollection.ecoc"
857
+ create: *ecoc_collection_name
1210
858
  clusteredIndex: {key: {_id: 1}, unique: true}
1211
859
  command_name: create
1212
860
  database_name: *database_name
1213
861
  - command_started_event:
1214
862
  command:
1215
- create: "encryptedCollection"
1216
- encryptedFields: *encrypted_fields7
863
+ create: *encrypted_collection_name
864
+ encryptedFields: *encrypted_fields_expectation
1217
865
  command_name: create
1218
866
  database_name: *database_name
1219
867
  # libmongocrypt requests listCollections to get a schema for the "createIndexes" command.
1220
868
  - command_started_event:
1221
869
  command:
1222
870
  listCollections: 1
1223
- filter: { name: "encryptedCollection" }
871
+ filter: { name: *encrypted_collection_name }
1224
872
  command_name: listCollections
1225
873
  database_name: *database_name
1226
874
  # Index on __safeContents__ is then created.
1227
875
  - command_started_event:
1228
876
  command:
1229
- createIndexes: "encryptedCollection"
877
+ createIndexes: *encrypted_collection_name
1230
878
  indexes:
1231
879
  - name: __safeContent___1
1232
880
  key: { __safeContent__: 1 }
@@ -1237,27 +885,53 @@ tests:
1237
885
  - command_started_event:
1238
886
  command:
1239
887
  listCollections: 1
1240
- filter: { name: "encryptedCollection" }
888
+ filter: { name: *encrypted_collection_name }
1241
889
  command_name: listCollections
1242
890
  database_name: *database_name
1243
891
  - command_started_event:
1244
892
  command:
1245
- drop: "encryptedCollection.esc"
1246
- command_name: drop
1247
- database_name: *database_name
1248
- - command_started_event:
1249
- command:
1250
- drop: "encryptedCollection.ecc"
893
+ drop: *esc_collection_name
1251
894
  command_name: drop
1252
895
  database_name: *database_name
1253
896
  - command_started_event:
1254
897
  command:
1255
- drop: "encryptedCollection.ecoc"
898
+ drop: *ecoc_collection_name
1256
899
  command_name: drop
1257
900
  database_name: *database_name
1258
901
  - command_started_event:
1259
902
  command:
1260
- drop: "encryptedCollection"
903
+ drop: *encrypted_collection_name
1261
904
  command_name: drop
1262
905
  database_name: *database_name
1263
906
  # events from dropCollection ... end
907
+ - description: "encryptedFields are consulted for metadata collection names"
908
+ clientOptions:
909
+ autoEncryptOpts:
910
+ kmsProviders:
911
+ aws: {} # Credentials filled in from environment.
912
+ encryptedFieldsMap:
913
+ default.encryptedCollection: {
914
+ "escCollection": "invalid_esc_name",
915
+ "ecocCollection": "invalid_ecoc_name",
916
+ "fields": [
917
+ {
918
+ "path": "firstName",
919
+ "bsonType": "string",
920
+ "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }}
921
+ }
922
+ ]
923
+ }
924
+
925
+ operations:
926
+ # Do an initial drop to remove collections that may exist from previous test runs.
927
+ - name: dropCollection
928
+ object: database
929
+ arguments:
930
+ collection: *encrypted_collection_name
931
+ - name: createCollection
932
+ object: database
933
+ arguments:
934
+ collection: *encrypted_collection_name
935
+ result:
936
+ # Expect error due to server constraints added in SERVER-74069
937
+ errorContains: "Encrypted State Collection name should follow"