mongo 2.17.3 → 2.18.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (622) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +21 -37
  4. data/lib/mongo/auth/base.rb +8 -1
  5. data/lib/mongo/auth.rb +12 -1
  6. data/lib/mongo/bulk_write/result.rb +10 -1
  7. data/lib/mongo/bulk_write/result_combiner.rb +2 -4
  8. data/lib/mongo/bulk_write.rb +108 -28
  9. data/lib/mongo/client.rb +114 -12
  10. data/lib/mongo/client_encryption.rb +30 -9
  11. data/lib/mongo/cluster/reapers/cursor_reaper.rb +11 -1
  12. data/lib/mongo/cluster.rb +20 -24
  13. data/lib/mongo/collection/helpers.rb +43 -0
  14. data/lib/mongo/collection/queryable_encryption.rb +122 -0
  15. data/lib/mongo/collection/view/aggregation.rb +19 -16
  16. data/lib/mongo/collection/view/change_stream.rb +56 -23
  17. data/lib/mongo/collection/view/explainable.rb +1 -1
  18. data/lib/mongo/collection/view/iterable.rb +2 -3
  19. data/lib/mongo/collection/view/map_reduce.rb +18 -9
  20. data/lib/mongo/collection/view/readable.rb +19 -23
  21. data/lib/mongo/collection/view/writable.rb +133 -40
  22. data/lib/mongo/collection.rb +108 -48
  23. data/lib/mongo/config/options.rb +62 -0
  24. data/lib/mongo/config/validators/option.rb +26 -0
  25. data/lib/mongo/config.rb +31 -0
  26. data/lib/mongo/crypt/auto_encrypter.rb +79 -6
  27. data/lib/mongo/crypt/binding.rb +395 -143
  28. data/lib/mongo/crypt/context.rb +5 -2
  29. data/lib/mongo/crypt/data_key_context.rb +7 -104
  30. data/lib/mongo/crypt/encryption_io.rb +28 -60
  31. data/lib/mongo/crypt/explicit_encrypter.rb +27 -25
  32. data/lib/mongo/crypt/explicit_encryption_context.rb +31 -3
  33. data/lib/mongo/crypt/handle.rb +102 -79
  34. data/lib/mongo/crypt/hooks.rb +25 -2
  35. data/lib/mongo/crypt/kms/aws.rb +128 -0
  36. data/lib/mongo/crypt/kms/azure.rb +136 -0
  37. data/lib/mongo/crypt/kms/credentials.rb +81 -0
  38. data/lib/mongo/crypt/kms/gcp.rb +182 -0
  39. data/lib/mongo/crypt/kms/kmip.rb +110 -0
  40. data/lib/mongo/crypt/kms/local.rb +74 -0
  41. data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
  42. data/lib/mongo/crypt/kms.rb +117 -0
  43. data/lib/mongo/crypt.rb +1 -0
  44. data/lib/mongo/cursor/kill_spec.rb +27 -6
  45. data/lib/mongo/cursor.rb +21 -16
  46. data/lib/mongo/database/view.rb +6 -3
  47. data/lib/mongo/database.rb +73 -12
  48. data/lib/mongo/dbref.rb +1 -105
  49. data/lib/mongo/error/bulk_write_error.rb +31 -4
  50. data/lib/mongo/error/invalid_config_option.rb +20 -0
  51. data/lib/mongo/error/invalid_replacement_document.rb +27 -9
  52. data/lib/mongo/error/invalid_update_document.rb +27 -7
  53. data/lib/mongo/error/labelable.rb +72 -0
  54. data/lib/mongo/error/missing_connection.rb +25 -0
  55. data/lib/mongo/error/notable.rb +7 -0
  56. data/lib/mongo/error/operation_failure.rb +34 -86
  57. data/lib/mongo/error/read_write_retryable.rb +108 -0
  58. data/lib/mongo/{operation/kill_cursors/legacy.rb → error/session_not_materialized.rb} +7 -19
  59. data/lib/mongo/error.rb +5 -37
  60. data/lib/mongo/index/view.rb +22 -7
  61. data/lib/mongo/monitoring/event/command_failed.rb +8 -2
  62. data/lib/mongo/monitoring/event/command_started.rb +1 -1
  63. data/lib/mongo/monitoring/event/command_succeeded.rb +9 -2
  64. data/lib/mongo/monitoring/publishable.rb +9 -5
  65. data/lib/mongo/operation/collections_info/result.rb +5 -2
  66. data/lib/mongo/operation/command/op_msg.rb +6 -0
  67. data/lib/mongo/operation/context.rb +24 -6
  68. data/lib/mongo/operation/count/op_msg.rb +4 -1
  69. data/lib/mongo/operation/create/op_msg.rb +16 -1
  70. data/lib/mongo/operation/create_index/op_msg.rb +2 -1
  71. data/lib/mongo/operation/delete/op_msg.rb +1 -0
  72. data/lib/mongo/operation/delete.rb +0 -1
  73. data/lib/mongo/operation/drop_index/op_msg.rb +5 -1
  74. data/lib/mongo/operation/get_more/command_builder.rb +5 -1
  75. data/lib/mongo/operation/insert/bulk_result.rb +5 -1
  76. data/lib/mongo/operation/insert/command.rb +0 -4
  77. data/lib/mongo/operation/insert/op_msg.rb +6 -3
  78. data/lib/mongo/operation/insert/result.rb +6 -3
  79. data/lib/mongo/operation/insert.rb +0 -1
  80. data/lib/mongo/operation/kill_cursors.rb +0 -1
  81. data/lib/mongo/operation/list_collections/op_msg.rb +4 -1
  82. data/lib/mongo/operation/map_reduce/result.rb +16 -0
  83. data/lib/mongo/operation/result.rb +21 -5
  84. data/lib/mongo/operation/shared/executable.rb +21 -6
  85. data/lib/mongo/operation/shared/polymorphic_operation.rb +15 -3
  86. data/lib/mongo/operation/shared/response_handling.rb +6 -5
  87. data/lib/mongo/operation/shared/sessions_supported.rb +3 -7
  88. data/lib/mongo/operation/shared/write.rb +18 -12
  89. data/lib/mongo/operation/update/op_msg.rb +2 -1
  90. data/lib/mongo/operation/update.rb +0 -1
  91. data/lib/mongo/protocol/caching_hash.rb +69 -0
  92. data/lib/mongo/protocol/msg.rb +37 -1
  93. data/lib/mongo/protocol.rb +1 -0
  94. data/lib/mongo/query_cache.rb +15 -0
  95. data/lib/mongo/retryable.rb +78 -30
  96. data/lib/mongo/server/connection.rb +33 -0
  97. data/lib/mongo/server/connection_base.rb +2 -0
  98. data/lib/mongo/server/connection_common.rb +4 -1
  99. data/lib/mongo/server/connection_pool.rb +69 -42
  100. data/lib/mongo/server/description/features.rb +3 -1
  101. data/lib/mongo/server/description.rb +7 -2
  102. data/lib/mongo/server/monitor/connection.rb +5 -10
  103. data/lib/mongo/server/monitor.rb +21 -13
  104. data/lib/mongo/server/push_monitor.rb +9 -3
  105. data/lib/mongo/server.rb +9 -5
  106. data/lib/mongo/session/session_pool.rb +8 -0
  107. data/lib/mongo/session.rb +111 -35
  108. data/lib/mongo/socket/ocsp_verifier.rb +4 -5
  109. data/lib/mongo/socket/tcp.rb +3 -0
  110. data/lib/mongo/srv/resolver.rb +24 -3
  111. data/lib/mongo/uri/options_mapper.rb +2 -0
  112. data/lib/mongo/uri/srv_protocol.rb +1 -1
  113. data/lib/mongo/uri.rb +20 -0
  114. data/lib/mongo/version.rb +1 -1
  115. data/lib/mongo.rb +20 -0
  116. data/mongo.gemspec +10 -4
  117. data/spec/README.md +5 -5
  118. data/spec/integration/aws_lambda_examples_spec.rb +68 -0
  119. data/spec/integration/bulk_write_error_message_spec.rb +32 -0
  120. data/spec/integration/bulk_write_spec.rb +0 -16
  121. data/spec/integration/change_stream_spec.rb +6 -5
  122. data/spec/integration/client_construction_spec.rb +1 -1
  123. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -9
  124. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +18 -19
  125. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +0 -1
  126. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +31 -0
  127. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +108 -1
  128. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +2 -2
  129. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +2 -2
  130. data/spec/integration/client_side_encryption/client_close_spec.rb +1 -1
  131. data/spec/integration/client_side_encryption/corpus_spec.rb +64 -35
  132. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +39 -42
  133. data/spec/integration/client_side_encryption/data_key_spec.rb +97 -7
  134. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +59 -0
  135. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +147 -0
  136. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +6 -6
  137. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +394 -0
  138. data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
  139. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +111 -0
  140. data/spec/integration/client_side_encryption/views_spec.rb +1 -1
  141. data/spec/integration/client_update_spec.rb +2 -2
  142. data/spec/integration/crud_spec.rb +12 -0
  143. data/spec/integration/cursor_pinning_spec.rb +3 -3
  144. data/spec/integration/fork_reconnect_spec.rb +15 -8
  145. data/spec/integration/grid_fs_bucket_spec.rb +3 -3
  146. data/spec/integration/ocsp_verifier_spec.rb +1 -0
  147. data/spec/integration/query_cache_spec.rb +34 -30
  148. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
  149. data/spec/integration/sdam_events_spec.rb +0 -40
  150. data/spec/integration/server_monitor_spec.rb +2 -1
  151. data/spec/integration/size_limit_spec.rb +4 -1
  152. data/spec/integration/snapshot_query_examples_spec.rb +127 -0
  153. data/spec/integration/srv_monitoring_spec.rb +37 -0
  154. data/spec/integration/step_down_spec.rb +20 -4
  155. data/spec/integration/transaction_pinning_spec.rb +2 -2
  156. data/spec/integration/versioned_api_examples_spec.rb +37 -31
  157. data/spec/lite_spec_helper.rb +14 -5
  158. data/spec/mongo/address/ipv6_spec.rb +7 -0
  159. data/spec/mongo/address_spec.rb +7 -0
  160. data/spec/mongo/auth/scram/conversation_spec.rb +23 -23
  161. data/spec/mongo/auth/scram256/conversation_spec.rb +20 -20
  162. data/spec/mongo/auth/scram_negotiation_spec.rb +1 -0
  163. data/spec/mongo/bulk_write/result_spec.rb +15 -1
  164. data/spec/mongo/bulk_write_spec.rb +128 -20
  165. data/spec/mongo/client_construction_spec.rb +141 -7
  166. data/spec/mongo/client_encryption_spec.rb +11 -11
  167. data/spec/mongo/client_spec.rb +297 -1
  168. data/spec/mongo/cluster/cursor_reaper_spec.rb +21 -3
  169. data/spec/mongo/cluster_spec.rb +0 -44
  170. data/spec/mongo/collection/view/aggregation_spec.rb +2 -2
  171. data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
  172. data/spec/mongo/collection/view/readable_spec.rb +35 -56
  173. data/spec/mongo/collection/view/writable_spec.rb +144 -32
  174. data/spec/mongo/collection_crud_spec.rb +63 -13
  175. data/spec/mongo/config/options_spec.rb +75 -0
  176. data/spec/mongo/config_spec.rb +73 -0
  177. data/spec/mongo/crypt/auto_decryption_context_spec.rb +17 -1
  178. data/spec/mongo/crypt/auto_encrypter_spec.rb +106 -0
  179. data/spec/mongo/crypt/auto_encryption_context_spec.rb +17 -1
  180. data/spec/mongo/crypt/binding/context_spec.rb +99 -17
  181. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +17 -46
  182. data/spec/mongo/crypt/binding/version_spec.rb +25 -0
  183. data/spec/mongo/crypt/binding_unloaded_spec.rb +14 -0
  184. data/spec/mongo/crypt/data_key_context_spec.rb +42 -114
  185. data/spec/mongo/crypt/encryption_io_spec.rb +2 -0
  186. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +32 -1
  187. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +89 -1
  188. data/spec/mongo/crypt/handle_spec.rb +47 -169
  189. data/spec/mongo/crypt/hooks_spec.rb +30 -0
  190. data/spec/mongo/crypt/kms/credentials_spec.rb +404 -0
  191. data/spec/mongo/crypt/kms_spec.rb +59 -0
  192. data/spec/mongo/cursor_spec.rb +37 -51
  193. data/spec/mongo/database_spec.rb +66 -1
  194. data/spec/mongo/error/operation_failure_heavy_spec.rb +49 -0
  195. data/spec/mongo/index/view_spec.rb +69 -0
  196. data/spec/mongo/operation/create/op_msg_spec.rb +286 -0
  197. data/spec/mongo/operation/delete/op_msg_spec.rb +13 -4
  198. data/spec/mongo/operation/delete_spec.rb +0 -30
  199. data/spec/mongo/operation/insert/op_msg_spec.rb +18 -10
  200. data/spec/mongo/operation/insert_spec.rb +0 -32
  201. data/spec/mongo/operation/result_spec.rb +20 -0
  202. data/spec/mongo/operation/update/op_msg_spec.rb +13 -4
  203. data/spec/mongo/operation/update_spec.rb +0 -29
  204. data/spec/mongo/protocol/caching_hash_spec.rb +82 -0
  205. data/spec/mongo/protocol/msg_spec.rb +41 -0
  206. data/spec/mongo/query_cache_spec.rb +1 -0
  207. data/spec/mongo/retryable_spec.rb +32 -3
  208. data/spec/mongo/server/connection_auth_spec.rb +3 -1
  209. data/spec/mongo/server/connection_common_spec.rb +13 -1
  210. data/spec/mongo/server/connection_pool_spec.rb +94 -49
  211. data/spec/mongo/server/connection_spec.rb +50 -159
  212. data/spec/mongo/server/description/features_spec.rb +24 -0
  213. data/spec/mongo/server/push_monitor_spec.rb +2 -8
  214. data/spec/mongo/session_spec.rb +26 -6
  215. data/spec/mongo/session_transaction_spec.rb +2 -1
  216. data/spec/mongo/socket/ssl_spec.rb +15 -4
  217. data/spec/mongo/uri/srv_protocol_spec.rb +101 -2
  218. data/spec/mongo/uri_spec.rb +25 -0
  219. data/spec/runners/connection_string.rb +8 -0
  220. data/spec/runners/crud/operation.rb +12 -3
  221. data/spec/runners/crud/requirement.rb +3 -3
  222. data/spec/runners/crud/spec.rb +5 -0
  223. data/spec/runners/crud/verifier.rb +6 -0
  224. data/spec/runners/transactions/test.rb +33 -14
  225. data/spec/runners/transactions.rb +9 -6
  226. data/spec/runners/unified/assertions.rb +59 -10
  227. data/spec/runners/unified/change_stream_operations.rb +9 -0
  228. data/spec/runners/unified/crud_operations.rb +50 -2
  229. data/spec/runners/unified/ddl_operations.rb +20 -0
  230. data/spec/runners/unified/error.rb +2 -1
  231. data/spec/runners/unified/support_operations.rb +5 -2
  232. data/spec/runners/unified/test.rb +19 -4
  233. data/spec/runners/unified.rb +9 -2
  234. data/spec/shared/lib/mrss/constraints.rb +10 -17
  235. data/spec/shared/lib/mrss/docker_runner.rb +21 -3
  236. data/spec/shared/lib/mrss/lite_constraints.rb +32 -1
  237. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  238. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  239. data/spec/shared/share/Dockerfile.erb +56 -54
  240. data/spec/shared/shlib/config.sh +27 -0
  241. data/spec/shared/shlib/distro.sh +2 -1
  242. data/spec/shared/shlib/server.sh +46 -21
  243. data/spec/shared/shlib/set_env.sh +40 -5
  244. data/spec/spec_helper.rb +0 -1
  245. data/spec/spec_tests/crud_spec.rb +0 -10
  246. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +124 -0
  247. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
  248. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1171 -0
  249. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1068 -0
  250. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +859 -4
  251. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
  252. data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
  253. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +12 -2
  254. data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
  255. data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
  256. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
  257. data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
  258. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
  259. data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
  260. data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
  261. data/spec/spec_tests/data/client_side_encryption/explain.yml +1 -8
  262. data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
  263. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
  264. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
  265. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
  266. data/spec/spec_tests/data/client_side_encryption/fle2-BypassQueryAnalysis.yml +101 -0
  267. data/spec/spec_tests/data/client_side_encryption/fle2-Compact.yml +80 -0
  268. data/spec/spec_tests/data/client_side_encryption/fle2-CreateCollection.yml +1263 -0
  269. data/spec/spec_tests/data/client_side_encryption/fle2-DecryptExistingData.yml +64 -0
  270. data/spec/spec_tests/data/client_side_encryption/fle2-Delete.yml +107 -0
  271. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-EncryptedFieldsMap.yml +80 -0
  272. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-jsonSchema.yml +90 -0
  273. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFieldsMap-defaults.yml +57 -0
  274. data/spec/spec_tests/data/client_side_encryption/fle2-FindOneAndUpdate.yml +213 -0
  275. data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Indexed.yml +86 -0
  276. data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Unindexed.yml +83 -0
  277. data/spec/spec_tests/data/client_side_encryption/fle2-MissingKey.yml +41 -0
  278. data/spec/spec_tests/data/client_side_encryption/fle2-NoEncryption.yml +42 -0
  279. data/spec/spec_tests/data/client_side_encryption/fle2-Update.yml +221 -0
  280. data/spec/spec_tests/data/client_side_encryption/fle2-validatorAndPartialFieldExpression.yml +168 -0
  281. data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
  282. data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
  283. data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
  284. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
  285. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
  286. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
  287. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +2 -0
  288. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
  289. data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
  290. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
  291. data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
  292. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
  293. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
  294. data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
  295. data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
  296. data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
  297. data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
  298. data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
  299. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +1 -1
  300. data/spec/spec_tests/data/crud/read/count-collation.yml +1 -1
  301. data/spec/spec_tests/data/crud/read/distinct-collation.yml +1 -1
  302. data/spec/spec_tests/data/crud/read/find-collation.yml +1 -1
  303. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +1 -1
  304. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +1 -1
  305. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +1 -1
  306. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +1 -1
  307. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +1 -1
  308. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +1 -1
  309. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +1 -1
  310. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +1 -1
  311. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +1 -1
  312. data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
  313. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
  314. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
  315. data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
  316. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
  317. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
  318. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
  319. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
  320. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
  321. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
  322. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
  323. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
  324. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
  325. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
  326. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
  327. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
  328. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
  329. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
  330. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
  331. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
  332. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
  333. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
  334. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
  335. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
  336. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
  337. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
  338. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
  339. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
  340. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
  341. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
  342. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
  343. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
  344. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
  345. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
  346. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
  347. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +2 -0
  348. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
  349. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
  350. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
  351. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
  352. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
  353. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +2 -0
  354. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
  355. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +5 -135
  356. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
  357. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
  358. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
  359. data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
  360. data/spec/spec_tests/data/crud_unified/find.yml +68 -0
  361. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
  362. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
  363. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
  364. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
  365. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
  366. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +2 -4
  367. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
  368. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
  369. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
  370. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
  371. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
  372. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
  373. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
  374. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
  375. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
  376. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
  377. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
  378. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
  379. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
  380. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
  381. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
  382. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
  383. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
  384. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
  385. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
  386. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
  387. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
  388. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
  389. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
  390. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
  391. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
  392. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
  393. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
  394. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
  395. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +5 -1
  396. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
  397. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
  398. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
  399. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
  400. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
  401. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
  402. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
  403. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +5 -1
  404. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
  405. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
  406. data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
  407. data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
  408. data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
  409. data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
  410. data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
  411. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
  412. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
  413. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
  414. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +0 -0
  415. data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
  416. data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
  417. data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
  418. data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
  419. data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
  420. data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
  421. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
  422. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
  423. data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
  424. data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
  425. data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
  426. data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
  427. data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
  428. data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
  429. data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
  430. data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
  431. data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
  432. data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
  433. data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
  434. data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
  435. data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
  436. data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
  437. data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
  438. data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
  439. data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
  440. data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
  441. data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
  442. data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
  443. data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
  444. data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
  445. data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
  446. data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
  447. data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
  448. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +129 -0
  449. data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
  450. data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
  451. data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
  452. data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
  453. data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
  454. data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
  455. data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
  456. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
  457. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
  458. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
  459. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
  460. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
  461. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
  462. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
  463. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
  464. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
  465. data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
  466. data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
  467. data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
  468. data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
  469. data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
  470. data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
  471. data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
  472. data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
  473. data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
  474. data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
  475. data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
  476. data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
  477. data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
  478. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +96 -0
  479. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +137 -0
  480. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +78 -0
  481. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
  482. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
  483. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
  484. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
  485. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +10 -0
  486. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +10 -0
  487. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
  488. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
  489. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
  490. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
  491. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
  492. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
  493. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
  494. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
  495. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
  496. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
  497. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
  498. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
  499. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
  500. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
  501. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
  502. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +9 -3
  503. data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
  504. data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
  505. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
  506. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -2
  507. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
  508. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
  509. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
  510. data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
  511. data/spec/spec_tests/data/unified/invalid/expectedEventsForClient-ignoreExtraEvents-type.yml +15 -0
  512. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
  513. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
  514. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +4 -1
  515. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
  516. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -2
  517. data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
  518. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
  519. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
  520. data/spec/spec_tests/retryable_reads_spec.rb +4 -1
  521. data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
  522. data/spec/spec_tests/retryable_writes_spec.rb +4 -1
  523. data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
  524. data/spec/spec_tests/seed_list_discovery_spec.rb +10 -1
  525. data/spec/spec_tests/unified_spec.rb +6 -1
  526. data/spec/stress/connection_pool_timing_spec.rb +2 -1
  527. data/spec/stress/fork_reconnect_stress_spec.rb +3 -2
  528. data/spec/support/authorization.rb +1 -1
  529. data/spec/support/certificates/atlas-ocsp-ca.crt +47 -40
  530. data/spec/support/certificates/atlas-ocsp.crt +106 -101
  531. data/spec/support/cluster_tools.rb +1 -1
  532. data/spec/support/common_shortcuts.rb +22 -0
  533. data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
  534. data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
  535. data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
  536. data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
  537. data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
  538. data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
  539. data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
  540. data/spec/support/crypt/corpus/corpus.json +4999 -37
  541. data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
  542. data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
  543. data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
  544. data/spec/support/crypt/encryptedFields.json +33 -0
  545. data/spec/support/crypt/keys/key1-document.json +30 -0
  546. data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
  547. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  548. data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
  549. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  550. data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
  551. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  552. data/spec/support/crypt.rb +207 -6
  553. data/spec/support/macros.rb +18 -0
  554. data/spec/support/mongos_macros.rb +17 -0
  555. data/spec/support/shared/scram_conversation.rb +2 -1
  556. data/spec/support/shared/session.rb +13 -7
  557. data/spec/support/spec_config.rb +82 -1
  558. data/spec/support/utils.rb +25 -4
  559. data.tar.gz.sig +0 -0
  560. metadata +1468 -1214
  561. metadata.gz.sig +0 -0
  562. data/lib/mongo/operation/delete/legacy.rb +0 -64
  563. data/lib/mongo/operation/insert/legacy.rb +0 -68
  564. data/lib/mongo/operation/update/legacy/result.rb +0 -112
  565. data/lib/mongo/operation/update/legacy.rb +0 -76
  566. data/spec/mongo/dbref_spec.rb +0 -152
  567. data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
  568. data/spec/spec_tests/change_streams_spec.rb +0 -93
  569. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -101
  570. data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +0 -1173
  571. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
  572. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -535
  573. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
  574. data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -111
  575. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
  576. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
  577. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
  578. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
  579. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
  580. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
  581. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
  582. data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -39
  583. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
  584. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
  585. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
  586. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
  587. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
  588. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
  589. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
  590. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
  591. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
  592. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
  593. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
  594. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
  595. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
  596. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
  597. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
  598. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
  599. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
  600. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
  601. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
  602. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
  603. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
  604. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
  605. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
  606. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
  607. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
  608. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
  609. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
  610. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
  611. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
  612. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
  613. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
  614. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
  615. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
  616. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
  617. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
  618. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
  619. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +0 -60
  620. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +0 -146
  621. data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
  622. data/spec/support/session_registry.rb +0 -55
@@ -0,0 +1,1263 @@
1
+ # This test requires libmongocrypt 1.5.0-alpha2.
2
+ runOn:
3
+ - minServerVersion: "6.0.0"
4
+ # FLE 2 Encrypted collections are not supported on standalone.
5
+ topology: [ "replicaset", "sharded" ]
6
+
7
+ database_name: &database_name "default"
8
+ collection_name: &collection_name "default"
9
+
10
+ tests:
11
+ - description: "state collections and index are created"
12
+ clientOptions:
13
+ autoEncryptOpts:
14
+ kmsProviders:
15
+ aws: {} # Credentials filled in from environment.
16
+ encryptedFieldsMap:
17
+ default.encryptedCollection: &encrypted_fields0 {
18
+ "escCollection": "encryptedCollection.esc",
19
+ "eccCollection": "encryptedCollection.ecc",
20
+ "ecocCollection": "encryptedCollection.ecoc",
21
+ "fields": [
22
+ {
23
+ "path": "firstName",
24
+ "bsonType": "string",
25
+ "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }}
26
+ }
27
+ ]
28
+ }
29
+
30
+ operations:
31
+ # Do an initial drop to remove collections that may exist from previous test runs.
32
+ - name: dropCollection
33
+ object: database
34
+ arguments:
35
+ collection: "encryptedCollection"
36
+ - name: createCollection
37
+ object: database
38
+ arguments:
39
+ collection: "encryptedCollection"
40
+ - name: assertCollectionExists
41
+ object: testRunner
42
+ arguments:
43
+ database: *database_name
44
+ collection: "encryptedCollection.esc"
45
+ - name: assertCollectionExists
46
+ object: testRunner
47
+ arguments:
48
+ database: *database_name
49
+ collection: "encryptedCollection.ecc"
50
+ - name: assertCollectionExists
51
+ object: testRunner
52
+ arguments:
53
+ database: *database_name
54
+ collection: "encryptedCollection.ecoc"
55
+ - name: assertCollectionExists
56
+ object: testRunner
57
+ arguments:
58
+ database: *database_name
59
+ collection: "encryptedCollection"
60
+ - name: assertIndexExists
61
+ object: testRunner
62
+ arguments:
63
+ database: *database_name
64
+ collection: "encryptedCollection"
65
+ index: __safeContent___1
66
+
67
+ expectations:
68
+ # events from dropCollection ... begin
69
+ - command_started_event:
70
+ command:
71
+ drop: "encryptedCollection.esc"
72
+ command_name: drop
73
+ database_name: *database_name
74
+ - command_started_event:
75
+ command:
76
+ drop: "encryptedCollection.ecc"
77
+ command_name: drop
78
+ database_name: *database_name
79
+ - command_started_event:
80
+ command:
81
+ drop: "encryptedCollection.ecoc"
82
+ command_name: drop
83
+ database_name: *database_name
84
+ - command_started_event:
85
+ command:
86
+ drop: "encryptedCollection"
87
+ command_name: drop
88
+ database_name: *database_name
89
+ # events from dropCollection ... end
90
+ # events from createCollection ... begin
91
+ # State collections are created first.
92
+ - command_started_event:
93
+ 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"
101
+ clusteredIndex: {key: {_id: 1}, unique: true}
102
+ command_name: create
103
+ database_name: *database_name
104
+ - command_started_event:
105
+ command:
106
+ create: "encryptedCollection.ecoc"
107
+ clusteredIndex: {key: {_id: 1}, unique: true}
108
+ command_name: create
109
+ database_name: *database_name
110
+ # Data collection is created after.
111
+ - command_started_event:
112
+ command:
113
+ create: "encryptedCollection"
114
+ encryptedFields: *encrypted_fields0
115
+ command_name: create
116
+ database_name: *database_name
117
+ # Index on __safeContents__ is then created.
118
+ - command_started_event:
119
+ command:
120
+ createIndexes: "encryptedCollection"
121
+ indexes:
122
+ - name: __safeContent___1
123
+ key: { __safeContent__: 1 }
124
+ command_name: createIndexes
125
+ database_name: *database_name
126
+ # events from createCollection ... end
127
+ - description: "default state collection names are applied"
128
+ clientOptions:
129
+ autoEncryptOpts:
130
+ kmsProviders:
131
+ aws: {} # Credentials filled in from environment.
132
+ 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
+ }
148
+
149
+ operations:
150
+ # Do an initial drop to remove collections that may exist from previous test runs.
151
+ - name: dropCollection
152
+ object: database
153
+ arguments:
154
+ collection: "encryptedCollection"
155
+ - name: createCollection
156
+ object: database
157
+ arguments:
158
+ collection: "encryptedCollection"
159
+ - name: assertCollectionExists
160
+ object: testRunner
161
+ arguments:
162
+ database: *database_name
163
+ collection: "enxcol_.encryptedCollection.esc"
164
+ - name: assertCollectionExists
165
+ object: testRunner
166
+ arguments:
167
+ database: *database_name
168
+ collection: "enxcol_.encryptedCollection.ecc"
169
+ - name: assertCollectionExists
170
+ object: testRunner
171
+ arguments:
172
+ database: *database_name
173
+ collection: "enxcol_.encryptedCollection.ecoc"
174
+ - name: assertCollectionExists
175
+ object: testRunner
176
+ arguments:
177
+ database: *database_name
178
+ collection: "encryptedCollection"
179
+ - name: assertIndexExists
180
+ object: testRunner
181
+ arguments:
182
+ database: *database_name
183
+ collection: "encryptedCollection"
184
+ index: __safeContent___1
185
+
186
+ expectations:
187
+ # events from dropCollection ... begin
188
+ - command_started_event:
189
+ 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"
196
+ command_name: drop
197
+ database_name: *database_name
198
+ - command_started_event:
199
+ command:
200
+ drop: "enxcol_.encryptedCollection.ecoc"
201
+ command_name: drop
202
+ database_name: *database_name
203
+ - command_started_event:
204
+ command:
205
+ drop: "encryptedCollection"
206
+ command_name: drop
207
+ database_name: *database_name
208
+ # events from dropCollection ... end
209
+ # events from createCollection ... begin
210
+ # State collections are created first.
211
+ - command_started_event:
212
+ 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"
220
+ clusteredIndex: {key: {_id: 1}, unique: true}
221
+ command_name: create
222
+ database_name: *database_name
223
+ - command_started_event:
224
+ command:
225
+ create: "enxcol_.encryptedCollection.ecoc"
226
+ clusteredIndex: {key: {_id: 1}, unique: true}
227
+ command_name: create
228
+ database_name: *database_name
229
+ # Data collection is created after.
230
+ - command_started_event:
231
+ command:
232
+ create: "encryptedCollection"
233
+ encryptedFields: *encrypted_fields1
234
+ command_name: create
235
+ database_name: *database_name
236
+ # Index on __safeContents__ is then created.
237
+ - command_started_event:
238
+ command:
239
+ createIndexes: "encryptedCollection"
240
+ indexes:
241
+ - name: __safeContent___1
242
+ key: { __safeContent__: 1 }
243
+ command_name: createIndexes
244
+ database_name: *database_name
245
+ # events from createCollection ... end
246
+ - description: "drop removes all state collections"
247
+ clientOptions:
248
+ autoEncryptOpts:
249
+ kmsProviders:
250
+ aws: {} # Credentials filled in from environment.
251
+ 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
+ }
267
+
268
+ operations:
269
+ # Do an initial drop to remove collections that may exist from previous test runs.
270
+ - name: dropCollection
271
+ object: database
272
+ arguments:
273
+ collection: "encryptedCollection"
274
+ - name: createCollection
275
+ object: database
276
+ arguments:
277
+ collection: "encryptedCollection"
278
+ - name: assertCollectionExists
279
+ object: testRunner
280
+ arguments:
281
+ database: *database_name
282
+ collection: "enxcol_.encryptedCollection.esc"
283
+ - name: assertCollectionExists
284
+ object: testRunner
285
+ arguments:
286
+ database: *database_name
287
+ collection: "enxcol_.encryptedCollection.ecc"
288
+ - name: assertCollectionExists
289
+ object: testRunner
290
+ arguments:
291
+ database: *database_name
292
+ collection: "enxcol_.encryptedCollection.ecoc"
293
+ - name: assertCollectionExists
294
+ object: testRunner
295
+ arguments:
296
+ database: *database_name
297
+ collection: "encryptedCollection"
298
+ - name: assertIndexExists
299
+ object: testRunner
300
+ arguments:
301
+ database: *database_name
302
+ collection: "encryptedCollection"
303
+ index: __safeContent___1
304
+ - name: dropCollection
305
+ object: database
306
+ arguments:
307
+ collection: "encryptedCollection"
308
+ - name: assertCollectionNotExists
309
+ object: testRunner
310
+ arguments:
311
+ database: *database_name
312
+ collection: "enxcol_.encryptedCollection.ecc"
313
+ - name: assertCollectionNotExists
314
+ object: testRunner
315
+ arguments:
316
+ database: *database_name
317
+ collection: "enxcol_.encryptedCollection.ecoc"
318
+ - name: assertCollectionNotExists
319
+ object: testRunner
320
+ arguments:
321
+ database: *database_name
322
+ collection: "encryptedCollection"
323
+ - name: assertIndexNotExists
324
+ object: testRunner
325
+ arguments:
326
+ database: *database_name
327
+ collection: "encryptedCollection"
328
+ index: __safeContent___1
329
+
330
+ expectations:
331
+ # events from dropCollection ... begin
332
+ - command_started_event:
333
+ 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"
340
+ command_name: drop
341
+ database_name: *database_name
342
+ - command_started_event:
343
+ command:
344
+ drop: "enxcol_.encryptedCollection.ecoc"
345
+ command_name: drop
346
+ database_name: *database_name
347
+ - command_started_event:
348
+ command:
349
+ drop: "encryptedCollection"
350
+ command_name: drop
351
+ database_name: *database_name
352
+ # events from dropCollection ... end
353
+ # events from createCollection ... begin
354
+ # State collections are created first.
355
+ - command_started_event:
356
+ 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"
364
+ clusteredIndex: {key: {_id: 1}, unique: true}
365
+ command_name: create
366
+ database_name: *database_name
367
+ - command_started_event:
368
+ command:
369
+ create: "enxcol_.encryptedCollection.ecoc"
370
+ clusteredIndex: {key: {_id: 1}, unique: true}
371
+ command_name: create
372
+ database_name: *database_name
373
+ # Data collection is created after.
374
+ - command_started_event:
375
+ command:
376
+ create: "encryptedCollection"
377
+ encryptedFields: *encrypted_fields2
378
+ command_name: create
379
+ database_name: *database_name
380
+ # Index on __safeContents__ is then created.
381
+ - command_started_event:
382
+ command:
383
+ createIndexes: "encryptedCollection"
384
+ indexes:
385
+ - name: __safeContent___1
386
+ key: { __safeContent__: 1 }
387
+ command_name: createIndexes
388
+ database_name: *database_name
389
+ # events from createCollection ... end
390
+ # events from dropCollection ... begin
391
+ - command_started_event:
392
+ 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"
485
+ command_name: drop
486
+ database_name: *database_name
487
+ - command_started_event:
488
+ command:
489
+ drop: "encryptedCollection.ecc"
490
+ command_name: drop
491
+ database_name: *database_name
492
+ - command_started_event:
493
+ command:
494
+ drop: "encryptedCollection.ecoc"
495
+ command_name: drop
496
+ database_name: *database_name
497
+ - command_started_event:
498
+ command:
499
+ drop: "encryptedCollection"
500
+ command_name: drop
501
+ database_name: *database_name
502
+ # 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
+ - description: "CreateCollection without encryptedFields."
541
+ clientOptions:
542
+ autoEncryptOpts:
543
+ kmsProviders:
544
+ aws: {} # Credentials filled in from environment.
545
+ 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
+ }
558
+ operations:
559
+ # Do an initial drop to remove collections that may exist from previous test runs.
560
+ - name: dropCollection
561
+ object: database
562
+ arguments:
563
+ collection: "plaintextCollection"
564
+ - name: createCollection
565
+ object: database
566
+ arguments:
567
+ collection: "plaintextCollection"
568
+ - name: assertCollectionExists
569
+ object: testRunner
570
+ arguments:
571
+ database: *database_name
572
+ collection: "plaintextCollection"
573
+
574
+ expectations:
575
+ # events from dropCollection ... begin
576
+ # expect listCollections to be sent on drop to check for remote encryptedFields.
577
+ - command_started_event:
578
+ command:
579
+ listCollections: 1
580
+ filter: { name: "plaintextCollection" }
581
+ command_name: listCollections
582
+ database_name: *database_name
583
+ - command_started_event:
584
+ command:
585
+ drop: "plaintextCollection"
586
+ command_name: drop
587
+ database_name: *database_name
588
+ # events from dropCollection ... end
589
+ - command_started_event:
590
+ command:
591
+ create: "plaintextCollection"
592
+ command_name: create
593
+ database_name: *database_name
594
+ - description: "CreateCollection from encryptedFieldsMap."
595
+ clientOptions:
596
+ autoEncryptOpts:
597
+ kmsProviders:
598
+ aws: {} # Credentials filled in from environment.
599
+ 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
+ }
612
+ operations:
613
+ # Do an initial drop to remove collections that may exist from previous test runs.
614
+ - name: dropCollection
615
+ object: database
616
+ arguments:
617
+ collection: "encryptedCollection"
618
+ - name: createCollection
619
+ object: database
620
+ arguments:
621
+ collection: "encryptedCollection"
622
+ - name: assertCollectionExists
623
+ object: testRunner
624
+ arguments:
625
+ database: *database_name
626
+ collection: "encryptedCollection.esc"
627
+ - name: assertCollectionExists
628
+ object: testRunner
629
+ arguments:
630
+ database: *database_name
631
+ collection: "encryptedCollection.ecc"
632
+ - name: assertCollectionExists
633
+ object: testRunner
634
+ arguments:
635
+ database: *database_name
636
+ collection: "encryptedCollection.ecoc"
637
+ - name: assertCollectionExists
638
+ object: testRunner
639
+ arguments:
640
+ database: *database_name
641
+ collection: "encryptedCollection"
642
+ - name: assertIndexExists
643
+ object: testRunner
644
+ arguments:
645
+ database: *database_name
646
+ collection: "encryptedCollection"
647
+ index: __safeContent___1
648
+
649
+ expectations:
650
+ # events from dropCollection ... begin
651
+ - command_started_event:
652
+ command:
653
+ drop: "encryptedCollection.esc"
654
+ command_name: drop
655
+ database_name: *database_name
656
+ - command_started_event:
657
+ command:
658
+ drop: "encryptedCollection.ecc"
659
+ command_name: drop
660
+ database_name: *database_name
661
+ - command_started_event:
662
+ command:
663
+ drop: "encryptedCollection.ecoc"
664
+ command_name: drop
665
+ database_name: *database_name
666
+ - command_started_event:
667
+ command:
668
+ drop: "encryptedCollection"
669
+ command_name: drop
670
+ database_name: *database_name
671
+ # events from dropCollection ... end
672
+ # events from createCollection ... begin
673
+ # State collections are created first.
674
+ - command_started_event:
675
+ 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"
683
+ clusteredIndex: {key: {_id: 1}, unique: true}
684
+ command_name: create
685
+ database_name: *database_name
686
+ - command_started_event:
687
+ command:
688
+ create: "encryptedCollection.ecoc"
689
+ clusteredIndex: {key: {_id: 1}, unique: true}
690
+ command_name: create
691
+ database_name: *database_name
692
+ # Data collection is created after.
693
+ - command_started_event:
694
+ command:
695
+ create: "encryptedCollection"
696
+ encryptedFields: *encrypted_fields4
697
+ command_name: create
698
+ database_name: *database_name
699
+ # Index on __safeContents__ is then created.
700
+ - command_started_event:
701
+ command:
702
+ createIndexes: "encryptedCollection"
703
+ indexes:
704
+ - name: __safeContent___1
705
+ key: { __safeContent__: 1 }
706
+ command_name: createIndexes
707
+ database_name: *database_name
708
+ # events from createCollection ... end
709
+ - description: "CreateCollection from encryptedFields."
710
+ clientOptions:
711
+ autoEncryptOpts:
712
+ kmsProviders:
713
+ aws: {} # Credentials filled in from environment.
714
+ operations:
715
+ # Do initial drops to remove collections that may exist from previous test runs.
716
+ - name: dropCollection
717
+ object: database
718
+ 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
+ }
732
+ - name: createCollection
733
+ object: database
734
+ 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
+ }
748
+ - name: assertCollectionExists
749
+ object: testRunner
750
+ arguments:
751
+ database: *database_name
752
+ collection: "encryptedCollection.esc"
753
+ - name: assertCollectionExists
754
+ object: testRunner
755
+ arguments:
756
+ database: *database_name
757
+ collection: "encryptedCollection.ecc"
758
+ - name: assertCollectionExists
759
+ object: testRunner
760
+ arguments:
761
+ database: *database_name
762
+ collection: "encryptedCollection.ecoc"
763
+ - name: assertCollectionExists
764
+ object: testRunner
765
+ arguments:
766
+ database: *database_name
767
+ collection: "encryptedCollection"
768
+ - name: assertIndexExists
769
+ object: testRunner
770
+ arguments:
771
+ database: *database_name
772
+ collection: "encryptedCollection"
773
+ index: __safeContent___1
774
+
775
+ expectations:
776
+ # events from dropCollection ... begin
777
+ - command_started_event:
778
+ command:
779
+ drop: "encryptedCollection.esc"
780
+ command_name: drop
781
+ database_name: *database_name
782
+ - command_started_event:
783
+ command:
784
+ drop: "encryptedCollection.ecc"
785
+ command_name: drop
786
+ database_name: *database_name
787
+ - command_started_event:
788
+ command:
789
+ drop: "encryptedCollection.ecoc"
790
+ command_name: drop
791
+ database_name: *database_name
792
+ - command_started_event:
793
+ command:
794
+ drop: "encryptedCollection"
795
+ command_name: drop
796
+ database_name: *database_name
797
+ # events from dropCollection ... end
798
+ # events from createCollection ... begin
799
+ # State collections are created first.
800
+ - command_started_event:
801
+ 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"
809
+ clusteredIndex: {key: {_id: 1}, unique: true}
810
+ command_name: create
811
+ database_name: *database_name
812
+ - command_started_event:
813
+ command:
814
+ create: "encryptedCollection.ecoc"
815
+ clusteredIndex: {key: {_id: 1}, unique: true}
816
+ command_name: create
817
+ database_name: *database_name
818
+ # Data collection is created after.
819
+ - command_started_event:
820
+ command:
821
+ create: "encryptedCollection"
822
+ encryptedFields: *encrypted_fields5
823
+ command_name: create
824
+ database_name: *database_name
825
+ # libmongocrypt requests listCollections to get a schema for the "createIndexes" command.
826
+ - command_started_event:
827
+ command:
828
+ listCollections: 1
829
+ filter: { name: "encryptedCollection" }
830
+ command_name: listCollections
831
+ database_name: *database_name
832
+ # Index on __safeContents__ is then created.
833
+ - command_started_event:
834
+ command:
835
+ createIndexes: "encryptedCollection"
836
+ indexes:
837
+ - name: __safeContent___1
838
+ key: { __safeContent__: 1 }
839
+ command_name: createIndexes
840
+ database_name: *database_name
841
+ # events from createCollection ... end
842
+
843
+ - description: "DropCollection from encryptedFieldsMap"
844
+ clientOptions:
845
+ autoEncryptOpts:
846
+ kmsProviders:
847
+ aws: {} # Credentials filled in from environment.
848
+ 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
+ }
861
+ operations:
862
+ - name: dropCollection
863
+ object: database
864
+ arguments:
865
+ collection: "encryptedCollection"
866
+ expectations:
867
+ # events from dropCollection ... begin
868
+ - command_started_event:
869
+ command:
870
+ drop: "encryptedCollection.esc"
871
+ command_name: drop
872
+ database_name: *database_name
873
+ - command_started_event:
874
+ command:
875
+ drop: "encryptedCollection.ecc"
876
+ command_name: drop
877
+ database_name: *database_name
878
+ - command_started_event:
879
+ command:
880
+ drop: "encryptedCollection.ecoc"
881
+ command_name: drop
882
+ database_name: *database_name
883
+ - command_started_event:
884
+ command:
885
+ drop: "encryptedCollection"
886
+ command_name: drop
887
+ database_name: *database_name
888
+ # events from dropCollection ... end
889
+ - description: "DropCollection from encryptedFields"
890
+ clientOptions:
891
+ autoEncryptOpts:
892
+ kmsProviders:
893
+ aws: {} # Credentials filled in from environment.
894
+ encryptedFieldsMap: {}
895
+ operations:
896
+ # Do initial drops to remove collections that may exist from previous test runs.
897
+ - name: dropCollection
898
+ object: database
899
+ 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
+ }
913
+ - name: createCollection
914
+ object: database
915
+ 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
+ }
929
+ - name: assertCollectionExists
930
+ object: testRunner
931
+ arguments:
932
+ database: *database_name
933
+ collection: "encryptedCollection.esc"
934
+ - name: assertCollectionExists
935
+ object: testRunner
936
+ arguments:
937
+ database: *database_name
938
+ collection: "encryptedCollection.ecc"
939
+ - name: assertCollectionExists
940
+ object: testRunner
941
+ arguments:
942
+ database: *database_name
943
+ collection: "encryptedCollection.ecoc"
944
+ - name: assertCollectionExists
945
+ object: testRunner
946
+ arguments:
947
+ database: *database_name
948
+ collection: "encryptedCollection"
949
+ - name: assertIndexExists
950
+ object: testRunner
951
+ arguments:
952
+ database: *database_name
953
+ collection: "encryptedCollection"
954
+ index: __safeContent___1
955
+ - name: dropCollection
956
+ object: database
957
+ 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"
976
+ - name: assertCollectionNotExists
977
+ object: testRunner
978
+ arguments:
979
+ database: *database_name
980
+ collection: "encryptedCollection.ecc"
981
+ - name: assertCollectionNotExists
982
+ object: testRunner
983
+ arguments:
984
+ database: *database_name
985
+ collection: "encryptedCollection.ecoc"
986
+ - name: assertCollectionNotExists
987
+ object: testRunner
988
+ arguments:
989
+ database: *database_name
990
+ collection: "encryptedCollection"
991
+ expectations:
992
+ # events from dropCollection ... begin
993
+ - command_started_event:
994
+ command:
995
+ drop: "encryptedCollection.esc"
996
+ command_name: drop
997
+ database_name: *database_name
998
+ - command_started_event:
999
+ command:
1000
+ drop: "encryptedCollection.ecc"
1001
+ command_name: drop
1002
+ database_name: *database_name
1003
+ - command_started_event:
1004
+ command:
1005
+ drop: "encryptedCollection.ecoc"
1006
+ command_name: drop
1007
+ database_name: *database_name
1008
+ - command_started_event:
1009
+ command:
1010
+ drop: "encryptedCollection"
1011
+ command_name: drop
1012
+ database_name: *database_name
1013
+ # events from dropCollection ... end
1014
+ # events from createCollection ... begin
1015
+ - command_started_event:
1016
+ 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"
1024
+ clusteredIndex: {key: {_id: 1}, unique: true}
1025
+ command_name: create
1026
+ database_name: *database_name
1027
+ - command_started_event:
1028
+ command:
1029
+ create: "encryptedCollection.ecoc"
1030
+ clusteredIndex: {key: {_id: 1}, unique: true}
1031
+ command_name: create
1032
+ database_name: *database_name
1033
+ - command_started_event:
1034
+ command:
1035
+ create: "encryptedCollection"
1036
+ encryptedFields: *encrypted_fields6
1037
+ command_name: create
1038
+ database_name: *database_name
1039
+ # libmongocrypt requests listCollections to get a schema for the "createIndexes" command.
1040
+ - command_started_event:
1041
+ command:
1042
+ listCollections: 1
1043
+ filter: { name: "encryptedCollection" }
1044
+ command_name: listCollections
1045
+ database_name: *database_name
1046
+ # Index on __safeContents__ is then created.
1047
+ - command_started_event:
1048
+ command:
1049
+ createIndexes: "encryptedCollection"
1050
+ indexes:
1051
+ - name: __safeContent___1
1052
+ key: { __safeContent__: 1 }
1053
+ command_name: createIndexes
1054
+ database_name: *database_name
1055
+ # events from createCollection ... end
1056
+ # events from dropCollection ... begin
1057
+ - command_started_event:
1058
+ command:
1059
+ drop: "encryptedCollection.esc"
1060
+ command_name: drop
1061
+ database_name: *database_name
1062
+ - command_started_event:
1063
+ command:
1064
+ drop: "encryptedCollection.ecc"
1065
+ command_name: drop
1066
+ database_name: *database_name
1067
+ - command_started_event:
1068
+ command:
1069
+ drop: "encryptedCollection.ecoc"
1070
+ command_name: drop
1071
+ database_name: *database_name
1072
+ - command_started_event:
1073
+ command:
1074
+ drop: "encryptedCollection"
1075
+ command_name: drop
1076
+ database_name: *database_name
1077
+ # events from dropCollection ... end
1078
+
1079
+ - description: "DropCollection from remote encryptedFields"
1080
+ clientOptions:
1081
+ autoEncryptOpts:
1082
+ kmsProviders:
1083
+ aws: {} # Credentials filled in from environment.
1084
+ encryptedFieldsMap: {}
1085
+
1086
+ operations:
1087
+ # Do initial drops to remove collections that may exist from previous test runs.
1088
+ - name: dropCollection
1089
+ object: database
1090
+ 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
+ }
1104
+ - name: createCollection
1105
+ object: database
1106
+ 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
+ }
1120
+ - name: assertCollectionExists
1121
+ object: testRunner
1122
+ arguments:
1123
+ database: *database_name
1124
+ collection: "encryptedCollection.esc"
1125
+ - name: assertCollectionExists
1126
+ object: testRunner
1127
+ arguments:
1128
+ database: *database_name
1129
+ collection: "encryptedCollection.ecc"
1130
+ - name: assertCollectionExists
1131
+ object: testRunner
1132
+ arguments:
1133
+ database: *database_name
1134
+ collection: "encryptedCollection.ecoc"
1135
+ - name: assertCollectionExists
1136
+ object: testRunner
1137
+ arguments:
1138
+ database: *database_name
1139
+ collection: "encryptedCollection"
1140
+ - name: assertIndexExists
1141
+ object: testRunner
1142
+ arguments:
1143
+ database: *database_name
1144
+ collection: "encryptedCollection"
1145
+ index: __safeContent___1
1146
+ - name: dropCollection
1147
+ object: database
1148
+ arguments:
1149
+ collection: "encryptedCollection"
1150
+ - name: assertCollectionNotExists
1151
+ object: testRunner
1152
+ arguments:
1153
+ database: *database_name
1154
+ collection: "encryptedCollection.esc"
1155
+ - name: assertCollectionNotExists
1156
+ object: testRunner
1157
+ arguments:
1158
+ database: *database_name
1159
+ collection: "encryptedCollection.ecc"
1160
+ - name: assertCollectionNotExists
1161
+ object: testRunner
1162
+ arguments:
1163
+ database: *database_name
1164
+ collection: "encryptedCollection.ecoc"
1165
+ - name: assertCollectionNotExists
1166
+ object: testRunner
1167
+ arguments:
1168
+ database: *database_name
1169
+ collection: "encryptedCollection"
1170
+
1171
+ expectations:
1172
+ # events from dropCollection ... begin
1173
+ - command_started_event:
1174
+ command:
1175
+ drop: "encryptedCollection.esc"
1176
+ command_name: drop
1177
+ database_name: *database_name
1178
+ - command_started_event:
1179
+ command:
1180
+ drop: "encryptedCollection.ecc"
1181
+ command_name: drop
1182
+ database_name: *database_name
1183
+ - command_started_event:
1184
+ command:
1185
+ drop: "encryptedCollection.ecoc"
1186
+ command_name: drop
1187
+ database_name: *database_name
1188
+ - command_started_event:
1189
+ command:
1190
+ drop: "encryptedCollection"
1191
+ command_name: drop
1192
+ database_name: *database_name
1193
+ # events from dropCollection ... end
1194
+ # events from createCollection ... begin
1195
+ - command_started_event:
1196
+ 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"
1204
+ clusteredIndex: {key: {_id: 1}, unique: true}
1205
+ command_name: create
1206
+ database_name: *database_name
1207
+ - command_started_event:
1208
+ command:
1209
+ create: "encryptedCollection.ecoc"
1210
+ clusteredIndex: {key: {_id: 1}, unique: true}
1211
+ command_name: create
1212
+ database_name: *database_name
1213
+ - command_started_event:
1214
+ command:
1215
+ create: "encryptedCollection"
1216
+ encryptedFields: *encrypted_fields7
1217
+ command_name: create
1218
+ database_name: *database_name
1219
+ # libmongocrypt requests listCollections to get a schema for the "createIndexes" command.
1220
+ - command_started_event:
1221
+ command:
1222
+ listCollections: 1
1223
+ filter: { name: "encryptedCollection" }
1224
+ command_name: listCollections
1225
+ database_name: *database_name
1226
+ # Index on __safeContents__ is then created.
1227
+ - command_started_event:
1228
+ command:
1229
+ createIndexes: "encryptedCollection"
1230
+ indexes:
1231
+ - name: __safeContent___1
1232
+ key: { __safeContent__: 1 }
1233
+ command_name: createIndexes
1234
+ database_name: *database_name
1235
+ # events from createCollection ... end
1236
+ # events from dropCollection ... begin
1237
+ - command_started_event:
1238
+ command:
1239
+ listCollections: 1
1240
+ filter: { name: "encryptedCollection" }
1241
+ command_name: listCollections
1242
+ database_name: *database_name
1243
+ - command_started_event:
1244
+ command:
1245
+ drop: "encryptedCollection.esc"
1246
+ command_name: drop
1247
+ database_name: *database_name
1248
+ - command_started_event:
1249
+ command:
1250
+ drop: "encryptedCollection.ecc"
1251
+ command_name: drop
1252
+ database_name: *database_name
1253
+ - command_started_event:
1254
+ command:
1255
+ drop: "encryptedCollection.ecoc"
1256
+ command_name: drop
1257
+ database_name: *database_name
1258
+ - command_started_event:
1259
+ command:
1260
+ drop: "encryptedCollection"
1261
+ command_name: drop
1262
+ database_name: *database_name
1263
+ # events from dropCollection ... end