mongo 2.17.1 → 2.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (692) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +21 -37
  4. data/lib/mongo/auth/base.rb +8 -1
  5. data/lib/mongo/auth.rb +12 -1
  6. data/lib/mongo/bulk_write/result.rb +10 -1
  7. data/lib/mongo/bulk_write/result_combiner.rb +2 -4
  8. data/lib/mongo/bulk_write.rb +115 -29
  9. data/lib/mongo/client.rb +133 -17
  10. data/lib/mongo/client_encryption.rb +113 -10
  11. data/lib/mongo/cluster/reapers/cursor_reaper.rb +11 -1
  12. data/lib/mongo/cluster.rb +26 -28
  13. data/lib/mongo/collection/helpers.rb +43 -0
  14. data/lib/mongo/collection/queryable_encryption.rb +122 -0
  15. data/lib/mongo/collection/view/aggregation.rb +22 -16
  16. data/lib/mongo/collection/view/change_stream.rb +65 -23
  17. data/lib/mongo/collection/view/explainable.rb +1 -1
  18. data/lib/mongo/collection/view/iterable.rb +4 -3
  19. data/lib/mongo/collection/view/map_reduce.rb +18 -9
  20. data/lib/mongo/collection/view/readable.rb +29 -25
  21. data/lib/mongo/collection/view/writable.rb +133 -40
  22. data/lib/mongo/collection.rb +117 -49
  23. data/lib/mongo/config/options.rb +62 -0
  24. data/lib/mongo/config/validators/option.rb +26 -0
  25. data/lib/mongo/config.rb +42 -0
  26. data/lib/mongo/crypt/auto_encrypter.rb +136 -14
  27. data/lib/mongo/crypt/binding.rb +513 -144
  28. data/lib/mongo/crypt/context.rb +5 -2
  29. data/lib/mongo/crypt/data_key_context.rb +12 -104
  30. data/lib/mongo/crypt/encryption_io.rb +94 -60
  31. data/lib/mongo/crypt/explicit_encrypter.rb +143 -26
  32. data/lib/mongo/crypt/explicit_encryption_context.rb +25 -2
  33. data/lib/mongo/crypt/handle.rb +160 -86
  34. data/lib/mongo/crypt/hooks.rb +25 -2
  35. data/lib/mongo/crypt/kms/aws.rb +136 -0
  36. data/lib/mongo/crypt/kms/azure.rb +144 -0
  37. data/lib/mongo/crypt/kms/credentials.rb +81 -0
  38. data/lib/mongo/crypt/kms/gcp.rb +189 -0
  39. data/lib/mongo/crypt/kms/kmip.rb +116 -0
  40. data/lib/mongo/crypt/kms/local.rb +82 -0
  41. data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
  42. data/lib/mongo/crypt/kms.rb +117 -0
  43. data/lib/mongo/crypt/rewrap_many_data_key_context.rb +46 -0
  44. data/lib/mongo/crypt/rewrap_many_data_key_result.rb +37 -0
  45. data/lib/mongo/crypt/status.rb +8 -2
  46. data/lib/mongo/crypt.rb +3 -0
  47. data/lib/mongo/cursor/kill_spec.rb +27 -6
  48. data/lib/mongo/cursor.rb +26 -11
  49. data/lib/mongo/database/view.rb +6 -3
  50. data/lib/mongo/database.rb +57 -13
  51. data/lib/mongo/dbref.rb +1 -105
  52. data/lib/mongo/error/bulk_write_error.rb +31 -4
  53. data/lib/mongo/error/invalid_config_option.rb +20 -0
  54. data/lib/mongo/error/invalid_replacement_document.rb +27 -9
  55. data/lib/mongo/error/invalid_update_document.rb +27 -7
  56. data/lib/mongo/error/labelable.rb +72 -0
  57. data/lib/mongo/error/missing_connection.rb +25 -0
  58. data/lib/mongo/error/missing_file_chunk.rb +8 -2
  59. data/lib/mongo/error/notable.rb +7 -0
  60. data/lib/mongo/error/operation_failure.rb +34 -86
  61. data/lib/mongo/error/read_write_retryable.rb +108 -0
  62. data/lib/mongo/{operation/kill_cursors/legacy.rb → error/session_not_materialized.rb} +7 -19
  63. data/lib/mongo/error.rb +5 -37
  64. data/lib/mongo/grid/stream/read.rb +6 -0
  65. data/lib/mongo/index/view.rb +23 -7
  66. data/lib/mongo/monitoring/event/command_failed.rb +8 -2
  67. data/lib/mongo/monitoring/event/command_started.rb +1 -1
  68. data/lib/mongo/monitoring/event/command_succeeded.rb +9 -2
  69. data/lib/mongo/monitoring/publishable.rb +9 -5
  70. data/lib/mongo/operation/collections_info/result.rb +5 -2
  71. data/lib/mongo/operation/command/op_msg.rb +6 -0
  72. data/lib/mongo/operation/context.rb +24 -6
  73. data/lib/mongo/operation/count/op_msg.rb +4 -1
  74. data/lib/mongo/operation/create/op_msg.rb +4 -1
  75. data/lib/mongo/operation/create_index/op_msg.rb +2 -1
  76. data/lib/mongo/operation/delete/op_msg.rb +1 -0
  77. data/lib/mongo/operation/delete.rb +0 -1
  78. data/lib/mongo/operation/distinct/op_msg.rb +4 -1
  79. data/lib/mongo/operation/drop_index/op_msg.rb +5 -1
  80. data/lib/mongo/operation/get_more/command_builder.rb +5 -1
  81. data/lib/mongo/operation/insert/bulk_result.rb +5 -1
  82. data/lib/mongo/operation/insert/command.rb +0 -4
  83. data/lib/mongo/operation/insert/op_msg.rb +6 -3
  84. data/lib/mongo/operation/insert/result.rb +6 -3
  85. data/lib/mongo/operation/insert.rb +0 -1
  86. data/lib/mongo/operation/kill_cursors.rb +0 -1
  87. data/lib/mongo/operation/list_collections/op_msg.rb +4 -1
  88. data/lib/mongo/operation/map_reduce/result.rb +16 -0
  89. data/lib/mongo/operation/result.rb +21 -5
  90. data/lib/mongo/operation/shared/executable.rb +21 -6
  91. data/lib/mongo/operation/shared/polymorphic_operation.rb +15 -3
  92. data/lib/mongo/operation/shared/response_handling.rb +6 -5
  93. data/lib/mongo/operation/shared/sessions_supported.rb +7 -3
  94. data/lib/mongo/operation/shared/write.rb +18 -12
  95. data/lib/mongo/operation/update/op_msg.rb +2 -1
  96. data/lib/mongo/operation/update.rb +0 -1
  97. data/lib/mongo/protocol/caching_hash.rb +69 -0
  98. data/lib/mongo/protocol/msg.rb +21 -1
  99. data/lib/mongo/protocol.rb +1 -0
  100. data/lib/mongo/query_cache.rb +27 -2
  101. data/lib/mongo/retryable.rb +78 -30
  102. data/lib/mongo/server/connection.rb +33 -0
  103. data/lib/mongo/server/connection_base.rb +2 -0
  104. data/lib/mongo/server/connection_common.rb +4 -1
  105. data/lib/mongo/server/connection_pool.rb +74 -46
  106. data/lib/mongo/server/description/features.rb +3 -1
  107. data/lib/mongo/server/description.rb +7 -2
  108. data/lib/mongo/server/monitor/connection.rb +11 -4
  109. data/lib/mongo/server/monitor.rb +25 -13
  110. data/lib/mongo/server/push_monitor.rb +13 -3
  111. data/lib/mongo/server.rb +9 -5
  112. data/lib/mongo/session/session_pool.rb +8 -0
  113. data/lib/mongo/session.rb +111 -35
  114. data/lib/mongo/socket/ocsp_verifier.rb +4 -5
  115. data/lib/mongo/socket/tcp.rb +3 -0
  116. data/lib/mongo/srv/resolver.rb +24 -3
  117. data/lib/mongo/uri/options_mapper.rb +2 -0
  118. data/lib/mongo/uri/srv_protocol.rb +1 -1
  119. data/lib/mongo/uri.rb +20 -0
  120. data/lib/mongo/version.rb +1 -1
  121. data/lib/mongo.rb +22 -0
  122. data/mongo.gemspec +10 -4
  123. data/spec/README.md +23 -5
  124. data/spec/integration/aws_lambda_examples_spec.rb +68 -0
  125. data/spec/integration/bulk_write_error_message_spec.rb +32 -0
  126. data/spec/integration/bulk_write_spec.rb +16 -0
  127. data/spec/integration/change_stream_spec.rb +6 -5
  128. data/spec/integration/client_construction_spec.rb +74 -8
  129. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -9
  130. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +168 -168
  131. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +0 -1
  132. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +31 -0
  133. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +108 -1
  134. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +2 -2
  135. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +2 -2
  136. data/spec/integration/client_side_encryption/client_close_spec.rb +1 -1
  137. data/spec/integration/client_side_encryption/corpus_spec.rb +64 -35
  138. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +39 -42
  139. data/spec/integration/client_side_encryption/data_key_spec.rb +97 -7
  140. data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +158 -0
  141. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +59 -0
  142. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +147 -0
  143. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +6 -6
  144. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +436 -0
  145. data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
  146. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +111 -0
  147. data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +85 -0
  148. data/spec/integration/client_side_encryption/views_spec.rb +1 -1
  149. data/spec/integration/client_update_spec.rb +2 -2
  150. data/spec/integration/crud_spec.rb +12 -0
  151. data/spec/integration/cursor_pinning_spec.rb +3 -3
  152. data/spec/integration/fork_reconnect_spec.rb +15 -8
  153. data/spec/integration/grid_fs_bucket_spec.rb +3 -3
  154. data/spec/integration/ocsp_verifier_spec.rb +3 -0
  155. data/spec/integration/query_cache_spec.rb +193 -30
  156. data/spec/integration/reconnect_spec.rb +2 -0
  157. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
  158. data/spec/integration/sdam_events_spec.rb +40 -0
  159. data/spec/integration/server_monitor_spec.rb +2 -1
  160. data/spec/integration/size_limit_spec.rb +4 -1
  161. data/spec/integration/snapshot_query_examples_spec.rb +127 -0
  162. data/spec/integration/srv_monitoring_spec.rb +38 -0
  163. data/spec/integration/srv_spec.rb +1 -0
  164. data/spec/integration/step_down_spec.rb +20 -4
  165. data/spec/integration/transaction_pinning_spec.rb +2 -2
  166. data/spec/integration/versioned_api_examples_spec.rb +37 -31
  167. data/spec/lite_spec_helper.rb +19 -9
  168. data/spec/mongo/address/ipv6_spec.rb +7 -0
  169. data/spec/mongo/address_spec.rb +7 -0
  170. data/spec/mongo/auth/scram/conversation_spec.rb +23 -23
  171. data/spec/mongo/auth/scram256/conversation_spec.rb +20 -20
  172. data/spec/mongo/auth/scram_negotiation_spec.rb +1 -0
  173. data/spec/mongo/bulk_write/result_spec.rb +15 -1
  174. data/spec/mongo/bulk_write_spec.rb +141 -20
  175. data/spec/mongo/client_construction_spec.rb +186 -9
  176. data/spec/mongo/client_encryption_spec.rb +10 -22
  177. data/spec/mongo/client_spec.rb +297 -1
  178. data/spec/mongo/cluster/cursor_reaper_spec.rb +21 -3
  179. data/spec/mongo/cluster_spec.rb +0 -44
  180. data/spec/mongo/collection/view/aggregation_spec.rb +121 -2
  181. data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
  182. data/spec/mongo/collection/view/readable_spec.rb +661 -1
  183. data/spec/mongo/collection/view/writable_spec.rb +144 -32
  184. data/spec/mongo/collection_crud_spec.rb +63 -13
  185. data/spec/mongo/collection_spec.rb +32 -0
  186. data/spec/mongo/config/options_spec.rb +75 -0
  187. data/spec/mongo/config_spec.rb +73 -0
  188. data/spec/mongo/crypt/auto_decryption_context_spec.rb +17 -1
  189. data/spec/mongo/crypt/auto_encrypter_spec.rb +256 -5
  190. data/spec/mongo/crypt/auto_encryption_context_spec.rb +17 -1
  191. data/spec/mongo/crypt/binding/context_spec.rb +67 -17
  192. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +17 -46
  193. data/spec/mongo/crypt/binding/version_spec.rb +33 -0
  194. data/spec/mongo/crypt/binding_unloaded_spec.rb +14 -0
  195. data/spec/mongo/crypt/data_key_context_spec.rb +42 -114
  196. data/spec/mongo/crypt/encryption_io_spec.rb +2 -0
  197. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +32 -1
  198. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +94 -1
  199. data/spec/mongo/crypt/handle_spec.rb +172 -156
  200. data/spec/mongo/crypt/hooks_spec.rb +30 -0
  201. data/spec/mongo/crypt/kms/credentials_spec.rb +357 -0
  202. data/spec/mongo/crypt/kms_spec.rb +59 -0
  203. data/spec/mongo/cursor_spec.rb +87 -1
  204. data/spec/mongo/database_spec.rb +66 -1
  205. data/spec/mongo/error/operation_failure_heavy_spec.rb +49 -0
  206. data/spec/mongo/index/view_spec.rb +125 -0
  207. data/spec/mongo/operation/create/op_msg_spec.rb +244 -0
  208. data/spec/mongo/operation/delete/op_msg_spec.rb +13 -4
  209. data/spec/mongo/operation/delete_spec.rb +0 -30
  210. data/spec/mongo/operation/insert/op_msg_spec.rb +18 -10
  211. data/spec/mongo/operation/insert_spec.rb +0 -32
  212. data/spec/mongo/operation/result_spec.rb +20 -0
  213. data/spec/mongo/operation/update/op_msg_spec.rb +13 -4
  214. data/spec/mongo/operation/update_spec.rb +0 -29
  215. data/spec/mongo/protocol/caching_hash_spec.rb +82 -0
  216. data/spec/mongo/protocol/msg_spec.rb +41 -0
  217. data/spec/mongo/query_cache_spec.rb +166 -0
  218. data/spec/mongo/retryable_spec.rb +32 -3
  219. data/spec/mongo/server/connection_auth_spec.rb +3 -1
  220. data/spec/mongo/server/connection_common_spec.rb +13 -1
  221. data/spec/mongo/server/connection_pool_spec.rb +120 -53
  222. data/spec/mongo/server/connection_spec.rb +50 -159
  223. data/spec/mongo/server/description/features_spec.rb +24 -0
  224. data/spec/mongo/server/push_monitor_spec.rb +2 -8
  225. data/spec/mongo/session_spec.rb +26 -6
  226. data/spec/mongo/session_transaction_spec.rb +2 -1
  227. data/spec/mongo/socket/ssl_spec.rb +18 -7
  228. data/spec/mongo/uri/srv_protocol_spec.rb +101 -2
  229. data/spec/mongo/uri_spec.rb +25 -0
  230. data/spec/runners/connection_string.rb +8 -0
  231. data/spec/runners/crud/operation.rb +12 -3
  232. data/spec/runners/crud/requirement.rb +9 -4
  233. data/spec/runners/crud/spec.rb +5 -0
  234. data/spec/runners/crud/test.rb +1 -1
  235. data/spec/runners/crud/verifier.rb +6 -0
  236. data/spec/runners/transactions/spec.rb +2 -2
  237. data/spec/runners/transactions/test.rb +19 -16
  238. data/spec/runners/transactions.rb +11 -8
  239. data/spec/runners/unified/assertions.rb +90 -11
  240. data/spec/runners/unified/change_stream_operations.rb +12 -0
  241. data/spec/runners/unified/client_side_encryption_operations.rb +83 -0
  242. data/spec/runners/unified/crud_operations.rb +67 -4
  243. data/spec/runners/unified/ddl_operations.rb +45 -0
  244. data/spec/runners/unified/error.rb +2 -1
  245. data/spec/runners/unified/grid_fs_operations.rb +21 -0
  246. data/spec/runners/unified/support_operations.rb +5 -2
  247. data/spec/runners/unified/test.rb +78 -5
  248. data/spec/runners/unified.rb +9 -2
  249. data/spec/shared/lib/mrss/constraints.rb +10 -17
  250. data/spec/shared/lib/mrss/docker_runner.rb +23 -3
  251. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  252. data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
  253. data/spec/shared/lib/mrss/lite_constraints.rb +40 -1
  254. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  255. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  256. data/spec/shared/share/Dockerfile.erb +56 -54
  257. data/spec/shared/shlib/config.sh +27 -0
  258. data/spec/shared/shlib/distro.sh +2 -1
  259. data/spec/shared/shlib/server.sh +46 -21
  260. data/spec/shared/shlib/set_env.sh +43 -5
  261. data/spec/solo/clean_exit_spec.rb +5 -0
  262. data/spec/spec_helper.rb +0 -1
  263. data/spec/spec_tests/client_side_encryption_spec.rb +1 -1
  264. data/spec/spec_tests/client_side_encryption_unified_spec.rb +16 -0
  265. data/spec/spec_tests/crud_spec.rb +0 -10
  266. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +124 -0
  267. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
  268. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1171 -0
  269. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1071 -0
  270. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +298 -0
  271. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +859 -4
  272. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
  273. data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
  274. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +12 -2
  275. data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
  276. data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
  277. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
  278. data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
  279. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
  280. data/spec/spec_tests/data/client_side_encryption/create-and-createIndexes.yml +58 -0
  281. data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
  282. data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
  283. data/spec/spec_tests/data/client_side_encryption/explain.yml +1 -8
  284. data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
  285. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
  286. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
  287. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
  288. data/spec/spec_tests/data/client_side_encryption/fle2-BypassQueryAnalysis.yml +101 -0
  289. data/spec/spec_tests/data/client_side_encryption/fle2-Compact.yml +80 -0
  290. data/spec/spec_tests/data/client_side_encryption/fle2-CreateCollection.yml +1263 -0
  291. data/spec/spec_tests/data/client_side_encryption/fle2-DecryptExistingData.yml +64 -0
  292. data/spec/spec_tests/data/client_side_encryption/fle2-Delete.yml +107 -0
  293. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-EncryptedFieldsMap.yml +80 -0
  294. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-jsonSchema.yml +90 -0
  295. data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFieldsMap-defaults.yml +57 -0
  296. data/spec/spec_tests/data/client_side_encryption/fle2-FindOneAndUpdate.yml +213 -0
  297. data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Indexed.yml +86 -0
  298. data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Unindexed.yml +83 -0
  299. data/spec/spec_tests/data/client_side_encryption/fle2-MissingKey.yml +41 -0
  300. data/spec/spec_tests/data/client_side_encryption/fle2-NoEncryption.yml +42 -0
  301. data/spec/spec_tests/data/client_side_encryption/fle2-Update.yml +221 -0
  302. data/spec/spec_tests/data/client_side_encryption/fle2-validatorAndPartialFieldExpression.yml +168 -0
  303. data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
  304. data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
  305. data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
  306. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
  307. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
  308. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
  309. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +2 -0
  310. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
  311. data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
  312. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
  313. data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
  314. data/spec/spec_tests/data/client_side_encryption/unified/addKeyAltName.yml +194 -0
  315. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +67 -0
  316. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey.yml +309 -0
  317. data/spec/spec_tests/data/client_side_encryption/unified/deleteKey.yml +159 -0
  318. data/spec/spec_tests/data/client_side_encryption/unified/getKey.yml +105 -0
  319. data/spec/spec_tests/data/client_side_encryption/unified/getKeyByAltName.yml +104 -0
  320. data/spec/spec_tests/data/client_side_encryption/unified/getKeys.yml +122 -0
  321. data/spec/spec_tests/data/client_side_encryption/unified/removeKeyAltName.yml +157 -0
  322. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-decrypt_failure.yml +69 -0
  323. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-encrypt_failure.yml +122 -0
  324. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +432 -0
  325. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
  326. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
  327. data/spec/spec_tests/data/client_side_encryption/validatorAndPartialFieldExpression.yml +166 -0
  328. data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
  329. data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
  330. data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
  331. data/spec/spec_tests/data/command_monitoring_unified/bulkWrite.yml +68 -0
  332. data/spec/spec_tests/data/command_monitoring_unified/command.yml +50 -0
  333. data/spec/spec_tests/data/command_monitoring_unified/deleteMany.yml +79 -0
  334. data/spec/spec_tests/data/command_monitoring_unified/deleteOne.yml +79 -0
  335. data/spec/spec_tests/data/command_monitoring_unified/find.yml +254 -0
  336. data/spec/spec_tests/data/command_monitoring_unified/insertMany.yml +79 -0
  337. data/spec/spec_tests/data/command_monitoring_unified/insertOne.yml +77 -0
  338. data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
  339. data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
  340. data/spec/spec_tests/data/command_monitoring_unified/unacknowledgedBulkWrite.yml +55 -0
  341. data/spec/spec_tests/data/command_monitoring_unified/updateMany.yml +87 -0
  342. data/spec/spec_tests/data/command_monitoring_unified/updateOne.yml +118 -0
  343. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +1 -1
  344. data/spec/spec_tests/data/crud/read/count-collation.yml +1 -1
  345. data/spec/spec_tests/data/crud/read/distinct-collation.yml +1 -1
  346. data/spec/spec_tests/data/crud/read/find-collation.yml +1 -1
  347. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +1 -1
  348. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +1 -1
  349. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +1 -1
  350. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +1 -1
  351. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +1 -1
  352. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +1 -1
  353. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +1 -1
  354. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +1 -1
  355. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +1 -1
  356. data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
  357. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
  358. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
  359. data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
  360. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
  361. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
  362. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
  363. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
  364. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
  365. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
  366. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
  367. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
  368. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
  369. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
  370. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
  371. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
  372. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
  373. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
  374. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
  375. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
  376. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
  377. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
  378. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
  379. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
  380. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
  381. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
  382. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
  383. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
  384. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
  385. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
  386. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
  387. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
  388. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
  389. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
  390. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
  391. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +2 -0
  392. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
  393. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
  394. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
  395. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
  396. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
  397. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +2 -0
  398. data/spec/spec_tests/data/crud_unified/distinct-comment.yml +98 -0
  399. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
  400. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +5 -135
  401. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
  402. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
  403. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
  404. data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
  405. data/spec/spec_tests/data/crud_unified/find.yml +68 -0
  406. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
  407. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
  408. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
  409. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
  410. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
  411. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +2 -4
  412. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
  413. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
  414. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
  415. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
  416. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
  417. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
  418. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
  419. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
  420. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
  421. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
  422. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
  423. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
  424. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
  425. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
  426. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
  427. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
  428. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
  429. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
  430. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
  431. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
  432. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
  433. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
  434. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
  435. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
  436. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
  437. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
  438. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
  439. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
  440. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +5 -1
  441. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
  442. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
  443. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
  444. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
  445. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
  446. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
  447. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
  448. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +5 -1
  449. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
  450. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
  451. data/spec/spec_tests/data/gridfs_unified/delete.yml +198 -0
  452. data/spec/spec_tests/data/gridfs_unified/download.yml +241 -0
  453. data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +159 -0
  454. data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +92 -0
  455. data/spec/spec_tests/data/gridfs_unified/upload.yml +288 -0
  456. data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
  457. data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
  458. data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
  459. data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
  460. data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
  461. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
  462. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
  463. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
  464. data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +0 -0
  465. data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
  466. data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
  467. data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
  468. data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
  469. data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
  470. data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
  471. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
  472. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
  473. data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
  474. data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
  475. data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
  476. data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
  477. data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
  478. data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
  479. data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
  480. data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
  481. data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
  482. data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
  483. data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
  484. data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
  485. data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
  486. data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
  487. data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
  488. data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
  489. data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
  490. data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
  491. data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
  492. data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
  493. data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
  494. data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
  495. data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
  496. data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
  497. data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
  498. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +129 -0
  499. data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
  500. data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
  501. data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
  502. data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
  503. data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
  504. data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
  505. data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
  506. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
  507. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
  508. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
  509. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
  510. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
  511. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
  512. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
  513. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
  514. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
  515. data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
  516. data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
  517. data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
  518. data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
  519. data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
  520. data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
  521. data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
  522. data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
  523. data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
  524. data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
  525. data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
  526. data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
  527. data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
  528. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +96 -0
  529. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +137 -0
  530. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +78 -0
  531. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
  532. data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +6 -14
  533. data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +4 -14
  534. data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +8 -14
  535. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
  536. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
  537. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
  538. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +10 -0
  539. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +10 -0
  540. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
  541. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
  542. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
  543. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
  544. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
  545. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
  546. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
  547. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
  548. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
  549. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
  550. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
  551. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
  552. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
  553. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
  554. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
  555. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +9 -3
  556. data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
  557. data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
  558. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
  559. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -2
  560. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
  561. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
  562. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
  563. data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
  564. data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
  565. data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +118 -0
  566. data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +118 -0
  567. data/spec/spec_tests/data/unified/invalid/expectedEventsForClient-ignoreExtraEvents-type.yml +15 -0
  568. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
  569. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
  570. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +4 -1
  571. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
  572. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -2
  573. data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
  574. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
  575. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
  576. data/spec/spec_tests/gridfs_unified_spec.rb +13 -0
  577. data/spec/spec_tests/retryable_reads_spec.rb +4 -1
  578. data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
  579. data/spec/spec_tests/retryable_writes_spec.rb +4 -1
  580. data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
  581. data/spec/spec_tests/seed_list_discovery_spec.rb +10 -1
  582. data/spec/spec_tests/unified_spec.rb +6 -1
  583. data/spec/stress/connection_pool_timing_spec.rb +3 -2
  584. data/spec/stress/fork_reconnect_stress_spec.rb +3 -2
  585. data/spec/support/authorization.rb +1 -1
  586. data/spec/support/background_thread_registry.rb +3 -13
  587. data/spec/support/certificates/atlas-ocsp-ca.crt +40 -47
  588. data/spec/support/certificates/atlas-ocsp.crt +101 -106
  589. data/spec/support/certificates/retrieve-atlas-cert +38 -0
  590. data/spec/support/cluster_tools.rb +1 -1
  591. data/spec/support/common_shortcuts.rb +22 -0
  592. data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
  593. data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
  594. data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
  595. data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
  596. data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
  597. data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
  598. data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
  599. data/spec/support/crypt/corpus/corpus.json +4999 -37
  600. data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
  601. data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
  602. data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
  603. data/spec/support/crypt/encryptedFields.json +33 -0
  604. data/spec/support/crypt/keys/key1-document.json +30 -0
  605. data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
  606. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  607. data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
  608. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  609. data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
  610. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  611. data/spec/support/crypt.rb +258 -13
  612. data/spec/support/macros.rb +28 -0
  613. data/spec/support/mongos_macros.rb +17 -0
  614. data/spec/support/shared/scram_conversation.rb +2 -1
  615. data/spec/support/shared/session.rb +13 -7
  616. data/spec/support/spec_config.rb +90 -1
  617. data/spec/support/utils.rb +26 -5
  618. data.tar.gz.sig +0 -0
  619. metadata +604 -290
  620. metadata.gz.sig +0 -0
  621. data/lib/mongo/operation/delete/legacy.rb +0 -64
  622. data/lib/mongo/operation/insert/legacy.rb +0 -68
  623. data/lib/mongo/operation/update/legacy/result.rb +0 -112
  624. data/lib/mongo/operation/update/legacy.rb +0 -76
  625. data/spec/mongo/dbref_spec.rb +0 -152
  626. data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
  627. data/spec/spec_tests/change_streams_spec.rb +0 -93
  628. data/spec/spec_tests/command_monitoring_spec.rb +0 -71
  629. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -101
  630. data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +0 -1173
  631. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
  632. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -535
  633. data/spec/spec_tests/data/command_monitoring/bulkWrite.yml +0 -49
  634. data/spec/spec_tests/data/command_monitoring/command.yml +0 -61
  635. data/spec/spec_tests/data/command_monitoring/deleteMany.yml +0 -55
  636. data/spec/spec_tests/data/command_monitoring/deleteOne.yml +0 -55
  637. data/spec/spec_tests/data/command_monitoring/find.yml +0 -266
  638. data/spec/spec_tests/data/command_monitoring/insertMany.yml +0 -75
  639. data/spec/spec_tests/data/command_monitoring/insertOne.yml +0 -51
  640. data/spec/spec_tests/data/command_monitoring/unacknowledgedBulkWrite.yml +0 -34
  641. data/spec/spec_tests/data/command_monitoring/updateMany.yml +0 -65
  642. data/spec/spec_tests/data/command_monitoring/updateOne.yml +0 -90
  643. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
  644. data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -111
  645. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
  646. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
  647. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
  648. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
  649. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
  650. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
  651. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
  652. data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -39
  653. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
  654. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
  655. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
  656. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
  657. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
  658. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
  659. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
  660. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
  661. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
  662. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
  663. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
  664. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
  665. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
  666. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
  667. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
  668. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
  669. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
  670. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
  671. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
  672. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
  673. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
  674. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
  675. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
  676. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
  677. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
  678. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
  679. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
  680. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
  681. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
  682. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
  683. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
  684. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
  685. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
  686. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
  687. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
  688. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
  689. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +0 -60
  690. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +0 -146
  691. data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
  692. data/spec/support/session_registry.rb +0 -55
@@ -12,15 +12,21 @@ server_url = "http://downloads.10gen.com/linux/mongodb-linux-x86_64-enterprise-#
12
12
  server_archive_basename = File.basename(server_url)
13
13
  server_extracted_dir = server_archive_basename.sub(/\.(tar\.gz|tgz)$/, '')
14
14
 
15
- toolchain_upper='291ba4a4e8297f142796e70eee71b99f333e35e1'
15
+ # When changing, also update the hash in shlib/set_env.sh.
16
+ TOOLCHAIN_VERSION='219833abad4d9d3bf43c0fef101a8ca082ac4ae9'
16
17
 
17
- ruby_toolchain_url = "http://boxes.10gen.com/build/toolchain-drivers/mongo-ruby-driver/ruby-toolchain-#{distro}-#{toolchain_upper}.tar.xz"
18
- #ruby_toolchain_url = "https://s3.amazonaws.com//mciuploads/mongo-ruby-toolchain/#{distro}/#{toolchain_upper}/mongo_ruby_driver_toolchain_#{distro.gsub('-', '_')}_patch_#{toolchain_upper}_#{toolchain_lower}.tar.gz"
18
+ def ruby_toolchain_url(ruby)
19
+ "http://boxes.10gen.com/build/toolchain-drivers/mongo-ruby-driver/#{TOOLCHAIN_VERSION}/#{distro}/#{ruby}.tar.xz"
20
+ end
21
+
22
+ #ruby_toolchain_url = "https://s3.amazonaws.com//mciuploads/mongo-ruby-toolchain/#{distro}/#{TOOLCHAIN_VERSION}/mongo_ruby_driver_toolchain_#{distro.gsub('-', '_')}_patch_#{TOOLCHAIN_VERSION}_#{toolchain_lower}.tar.gz"
19
23
 
20
24
  %>
21
25
 
22
26
  FROM <%= base_image %>
23
27
 
28
+ ENV DOCKER=1
29
+
24
30
  <% if debian? %>
25
31
 
26
32
  ENV DEBIAN_FRONTEND=noninteractive
@@ -33,15 +39,10 @@ FROM <%= base_image %>
33
39
 
34
40
  <% if ruby_head? %>
35
41
 
36
- # To use current versions of mlaunch, Python 3.6+ is required.
37
- # Most distros ship with older Pythons, therefore we need to install
42
+ # To use current versions of mlaunch, Python 3.7+ is required.
43
+ # Many distros ship with older Pythons, therefore we need to install
38
44
  # a newer Python from somewhere. This section installs the Python
39
- # toolhcain which comes with recent Pythons.
40
- # Alternatively, Ruby toolchain compiles its own copy of Python 3 but
41
- # this is currently incomplete in that on older distros with old OpenSSL,
42
- # the built Python has no ssl module and hence practically is unusable.
43
- # Currently Ruby driver uses mtools-legacy which supports Python 2,
44
- # avoiding this entire issue for the time being.
45
+ # toolchain which comes with recent Pythons.
45
46
 
46
47
  #RUN curl --retry 3 -fL <%= python_toolchain_url %> -o python-toolchain.tar.gz
47
48
  #RUN tar -xC /opt -zf python-toolchain.tar.gz
@@ -54,7 +55,7 @@ FROM <%= base_image %>
54
55
  # than bash.
55
56
  # Ruby runtime dependencies: libyaml-0-2
56
57
  # Compiling ruby libraries: gcc make
57
- # Compiling pyhton packages: python2.7-dev
58
+ # Compiling python packages: python3-dev
58
59
  # JRuby: openjdk-8-jdk-headless
59
60
  # Server dependencies: libsnmp30 libcurl3/libcurl4
60
61
  # Determining OS we are running on: lsb-release
@@ -84,15 +85,6 @@ FROM <%= base_image %>
84
85
  tzdata shared-mime-info
85
86
  ) %>
86
87
 
87
- <% if distro =~ /ubuntu1404/ %>
88
- # For building python & setuptools
89
- <% packages += %w(libssl-dev unzip) %>
90
- <% end %>
91
-
92
- <% if distro !~ /ubuntu2004/ %>
93
- <% packages += %w(python2.7-dev) %>
94
- <% end %>
95
-
96
88
  <% if distro =~ /ubuntu2004/ %>
97
89
  <% packages << 'libsnmp35' %>
98
90
  <% else %>
@@ -119,15 +111,16 @@ FROM <%= base_image %>
119
111
  <% packages << 'libcurl3' %>
120
112
  <% end %>
121
113
 
122
- <% if distro =~ /ubuntu1804/ %>
114
+ <% if distro =~ /ubuntu1804|ubuntu2004/ %>
123
115
  <% packages << 'nodejs' %>
124
116
  <% end %>
125
117
 
126
118
  <% if distro =~ /ubuntu2004/ %>
127
- <% packages += %w(ruby ruby2.7 bundler python2 python2-dev) %>
119
+ <% packages += %w(ruby ruby2.7 bundler) %>
128
120
  <% end %>
129
121
 
130
122
  RUN apt-get update && apt-get install -y <%= packages.join(' ') %>
123
+
131
124
  <% else %>
132
125
 
133
126
  <% if distro =~ /rhel6/ %>
@@ -190,27 +183,13 @@ CFG
190
183
 
191
184
  <% if preload? %>
192
185
 
193
- <% if distro =~ /ubuntu1404/ %>
194
-
195
- # I couldn't find a prebuilt package of anything more recent than 2.7.6
196
- # for 14.04.
197
- RUN curl --retry 3 -fL https://www.python.org/ftp/python/2.7.16/Python-2.7.16.tar.xz | \
198
- tar xfJ - && \
199
- cd Python-2.7.16 && \
200
- ./configure && \
201
- nice make -j4 && \
202
- make install && \
203
- cd .. && rm -rf Python-2.7.16
204
-
205
- ENV PATH=/usr/local/bin:$PATH
206
-
207
- RUN curl --retry 3 -fL -o setuptools-44.1.1.zip https://files.pythonhosted.org/packages/b2/40/4e00501c204b457f10fe410da0c97537214b2265247bc9a5bc6edd55b9e4/setuptools-44.1.1.zip && \
208
- unzip setuptools-44.1.1.zip && \
209
- cd setuptools-44.1.1 && \
210
- python setup.py install && \
211
- cd .. && rm -rf setuptools-44.1.1
212
-
213
- <% end%>
186
+ <% if distro =~ /debian9|ubuntu1604|ubuntu1804/ %>
187
+ # Install python 3.7 for mlaunch.
188
+ RUN curl -fL --retry 3 https://github.com/p-mongodb/deps/raw/main/<%= distro %>-python37.tar.xz | \
189
+ tar xfJ - -C /opt
190
+ ENV PATH=/opt/python37/bin:$PATH
191
+ RUN python3 -V
192
+ <% end %>
214
193
 
215
194
  <% if true || distro =~ /rhel|ubuntu1604/ %>
216
195
 
@@ -226,30 +205,50 @@ CFG
226
205
  # therefore install it the manual way.
227
206
  #
228
207
  # https://pip.pypa.io/en/stable/installing/
229
- RUN curl --retry 3 -fL https://bootstrap.pypa.io/pip/2.7/get-pip.py | python2
208
+ RUN curl --retry 3 -fL https://bootstrap.pypa.io/pip/get-pip.py | python3
209
+ RUN python3 -m pip install --upgrade pip setuptools wheel
230
210
 
231
211
  <% end %>
232
212
 
233
213
  # Current virtualenv fails with
234
214
  # https://github.com/pypa/virtualenv/issues/1630
235
- <% if distro =~ /ubuntu2004/ %>
236
- RUN python3 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]'
215
+ <% mtools = 'legacy' %>
216
+ <% case mtools
217
+ when 'legacy' %>
218
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
219
+ RUN python3 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]' 'pymongo<4' python-dateutil
220
+ <% when 'git' %>
221
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
222
+ RUN python3 -m pip install virtualenv 'pymongo>=4' python-dateutil psutil
223
+
224
+ # Install mtools from git because released versions do not work with pymongo 4.0
225
+ RUN git clone https://github.com/p-mongodb/mtools && \
226
+ cd mtools && \
227
+ python3 setup.py install
237
228
  <% else %>
238
- RUN python2 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]'
229
+ # mtools[mlaunch] does not work: https://github.com/rueckstiess/mtools/issues/856
230
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
231
+ RUN python3 -m pip install virtualenv 'pymongo>=4' python-dateutil psutil mtools
239
232
  <% end %>
240
233
 
241
- RUN pip --version && \
242
- pip install mtools-legacy[mlaunch]
243
-
244
234
  <% if @env.fetch('MONGODB_VERSION') >= '4.4' %>
245
235
  # ubuntu1604 installs MarkupSafe 0.0.0 here instead of 2.0.0+
246
236
  # as specified by dependencies, causing OCSP mock to not work.
247
237
  RUN python3 -mpip install asn1crypto oscrypto flask --upgrade
248
238
  <% end %>
249
239
 
240
+ # FLE is tested against 4.0+ servers.
241
+ <% if @env.fetch('MONGODB_VERSION') >= '4.0' %>
242
+ # Requirements in drivers-evergreen-tools:
243
+ # boto3~=1.19 cryptography~=3.4.8 pykmip~=0.10.0
244
+ # cryptography does not install due to lacking setuptools_rust
245
+ # (either that version or anything that isn't part of system packages)
246
+ RUN python3 -mpip install boto3~=1.19 cryptography pykmip~=0.10.0
247
+ <% end %>
248
+
250
249
  <% unless ruby_head? || system_ruby? %>
251
250
 
252
- RUN curl --retry 3 -fL <%= ruby_toolchain_url %> |tar -xC /opt -Jf -
251
+ RUN curl --retry 3 -fL <%= ruby_toolchain_url(ruby) %> |tar -xC /opt -Jf -
253
252
  ENV PATH=/opt/rubies/<%= ruby %>/bin:$PATH \
254
253
  USE_OPT_TOOLCHAIN=1
255
254
  #ENV PATH=/opt/rubies/python/3/bin:$PATH
@@ -290,12 +289,15 @@ WORKDIR /app
290
289
  <% end %>
291
290
 
292
291
  <% if fle? %>
293
- RUN curl --retry 3 -fLo libmongocrypt-all.tar.gz "https://s3.amazonaws.com/mciuploads/libmongocrypt/all/master/latest/libmongocrypt-all.tar.gz"
294
- RUN tar xf libmongocrypt-all.tar.gz
292
+ RUN curl --retry 3 -fL "https://s3.amazonaws.com/mciuploads/libmongocrypt/all/master/latest/libmongocrypt-all.tar.gz" |tar zxf -
295
293
 
296
294
  <%= "ENV LIBMONGOCRYPT_PATH #{libmongocrypt_path}" %>
297
295
  <% end %>
298
296
 
297
+ <% if preload? %>
298
+ ENV DOCKER_PRELOAD=1
299
+ <% end %>
300
+
299
301
  ENV MONGO_ORCHESTRATION_HOME=/tmpfs \
300
302
  PROJECT_DIRECTORY=/app \
301
303
  <%= @env.map { |k, v| %Q`#{k}="#{v.gsub('$', "\\$").gsub('"', "\\\"")}"` }.join(" \\\n ") %>
@@ -0,0 +1,27 @@
1
+ show_local_instructions_impl() {
2
+ local arch="$1"
3
+ shift
4
+
5
+ echo To test this configuration locally:
6
+ local params=
7
+ while test -n "$1"; do
8
+ key="$1"
9
+ shift
10
+ # ${!foo} syntax is bash specific:
11
+ # https://stackoverflow.com/questions/14049057/bash-expand-variable-in-a-variable
12
+ value="${!key}"
13
+ if test -n "$value"; then
14
+ params="$params $key=$value"
15
+ fi
16
+ done
17
+
18
+ # $0 has the current script being executed which is also the script that
19
+ # was initially invoked EXCEPT for the AWS configurations which use the
20
+ # wrapper script.
21
+ if echo "$AUTH" |grep -q ^aws; then
22
+ script=.evergreen/run-tests-aws-auth.sh
23
+ else
24
+ script="$0"
25
+ fi
26
+ echo ./.evergreen/test-on-docker -d $arch $params -s "$script"
27
+ }
@@ -13,7 +13,8 @@ _detect_distro() {
13
13
  if test -f /etc/debian_version; then
14
14
  # Debian or Ubuntu
15
15
  if test "`uname -m`" = aarch64; then
16
- distro=ubuntu1604-arm
16
+ release=`lsb_release -rs |tr -d .`
17
+ distro="ubuntu$release"-arm
17
18
  elif lsb_release -is |grep -q Debian; then
18
19
  release=`lsb_release -rs |tr -d .`
19
20
  # In docker, release is something like 9.11.
@@ -1,6 +1,18 @@
1
1
  # This file contains functions pertaining to downloading, starting and
2
2
  # configuring a MongoDB server.
3
3
 
4
+ # Note that mlaunch is executed with (and therefore installed with) Python 2.
5
+ # The reason for this is that in the past, some of the distros we tested on
6
+ # had an ancient version of Python 3 that was unusable (e.g. it couldn't
7
+ # install anything from PyPI due to outdated TLS/SSL implementation).
8
+ # It is likely that all of the current distros we use have a recent enough
9
+ # and working Python 3 implementation, such that we could use Python 3 for
10
+ # everything.
11
+ #
12
+ # Note that some distros (e.g. ubuntu2004) do not contain a `python' binary
13
+ # at all, thus python2 or python3 must be explicitly specified depending on
14
+ # the desired version.
15
+
4
16
  set_fcv() {
5
17
  if test -n "$FCV"; then
6
18
  mongo --eval 'assert.commandWorked(db.adminCommand( { setFeatureCompatibilityVersion: "'"$FCV"'" } ));' "$MONGODB_URI"
@@ -34,44 +46,54 @@ prepare_server() {
34
46
  if test "$MONGODB_VERSION" = latest; then
35
47
  # Test on the most recent published 4.3 release.
36
48
  # https://jira.mongodb.org/browse/RUBY-1724
37
- echo 'Using "latest" server is not currently implemented' 1>&2
38
- exit 1
49
+
50
+ . $PROJECT_DIRECTORY/.mod/drivers-evergreen-tools/.evergreen/download-mongodb.sh
51
+
52
+ get_distro
53
+ get_mongodb_download_url_for "$DISTRO" "latest"
54
+ prepare_server_from_url $MONGODB_DOWNLOAD_URL
39
55
  else
40
56
  download_version="$MONGODB_VERSION"
57
+ url=`$(dirname $0)/get-mongodb-download-url $download_version $arch`
58
+ prepare_server_from_url $url
41
59
  fi
42
60
 
43
- url=`$(dirname $0)/get-mongodb-download-url $download_version $arch`
44
-
45
- prepare_server_from_url $url
46
61
  }
47
62
 
48
63
  prepare_server_from_url() {
49
64
  url=$1
50
65
 
51
- mongodb_dir="$MONGO_ORCHESTRATION_HOME"/mdb
66
+ dirname=`basename $url |sed -e s/.tgz//`
67
+ mongodb_dir="$MONGO_ORCHESTRATION_HOME"/mdb/"$dirname"
52
68
  mkdir -p "$mongodb_dir"
53
- curl --retry 3 $url |tar xz -C "$mongodb_dir" -f -
54
- BINDIR="$mongodb_dir"/`basename $url |sed -e s/.tgz//`/bin
69
+ curl --retry 3 $url | tar xz -C "$mongodb_dir" --strip-components 1 -f -
70
+ BINDIR="$mongodb_dir"/bin
55
71
  export PATH="$BINDIR":$PATH
56
72
  }
57
73
 
58
74
  install_mlaunch_virtualenv() {
59
- python2 -V || true
60
- if ! python2 -m virtualenv -h >/dev/null; then
75
+ python3 -V || true
76
+ if ! python3 -m virtualenv -h >/dev/null; then
61
77
  # Current virtualenv fails with
62
78
  # https://github.com/pypa/virtualenv/issues/1630
63
- python2 -m pip install 'virtualenv<20' --user
79
+ python3 -m pip install 'virtualenv<20' --user
64
80
  fi
65
81
  if test "$USE_SYSTEM_PYTHON_PACKAGES" = 1 &&
66
- python2 -m pip list |grep mtools-legacy
82
+ python3 -m pip list |grep mtools
67
83
  then
68
84
  # Use the existing mtools-legacy
69
85
  :
70
86
  else
71
87
  venvpath="$MONGO_ORCHESTRATION_HOME"/venv
72
- python2 -m virtualenv -p python2 $venvpath
88
+ python3 -m virtualenv -p python3 $venvpath
73
89
  . $venvpath/bin/activate
74
- pip install 'mtools-legacy[mlaunch]'
90
+ # [mlaunch] does not work:
91
+ # https://github.com/rueckstiess/mtools/issues/856
92
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
93
+ #pip install 'mtools==1.7' 'pymongo==4.1' python-dateutil psutil
94
+
95
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
96
+ pip install 'mtools-legacy[mlaunch]' 'pymongo<4' python-dateutil
75
97
  fi
76
98
  }
77
99
 
@@ -84,7 +106,8 @@ install_mlaunch_pip() {
84
106
  python -V || true
85
107
  python3 -V || true
86
108
  pythonpath="$MONGO_ORCHESTRATION_HOME"/python
87
- pip install -t "$pythonpath" 'mtools-legacy[mlaunch]'
109
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
110
+ pip install -t "$pythonpath" 'mtools-legacy[mlaunch]' 'pymongo<4' python-dateutil
88
111
  export PATH="$pythonpath/bin":$PATH
89
112
  export PYTHONPATH="$pythonpath"
90
113
  }
@@ -108,7 +131,8 @@ install_mlaunch_git() {
108
131
  virtualenv -p python3 $venvpath
109
132
  . $venvpath/bin/activate
110
133
 
111
- pip3 install psutil pymongo
134
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
135
+ pip3 install psutil pymongo python-dateutil
112
136
 
113
137
  git clone $repo mlaunch
114
138
  cd mlaunch
@@ -123,12 +147,13 @@ install_mlaunch_git() {
123
147
  virtualenv $venvpath
124
148
  . $venvpath/bin/activate
125
149
 
126
- pip install psutil pymongo
150
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
151
+ pip install psutil pymongo python-dateutil
127
152
 
128
153
  git clone $repo mlaunch
129
154
  (cd mlaunch &&
130
155
  git checkout origin/$branch &&
131
- python setup.py install
156
+ python2 setup.py install
132
157
  )
133
158
  fi
134
159
  }
@@ -148,7 +173,7 @@ calculate_server_args() {
148
173
  fi
149
174
 
150
175
  if test $mongo_version = latest; then
151
- mongo_version=49
176
+ mongo_version=60
152
177
  fi
153
178
 
154
179
  local args="--setParameter enableTestCommands=1"
@@ -309,7 +334,7 @@ launch_ocsp_mock() {
309
334
 
310
335
  launch_server() {
311
336
  local dbdir="$1"
312
- python -m mtools.mlaunch.mlaunch --dir "$dbdir" --binarypath "$BINDIR" $SERVER_ARGS
337
+ python3 -m mtools.mlaunch.mlaunch --dir "$dbdir" --binarypath "$BINDIR" $SERVER_ARGS
313
338
 
314
339
  if test "$TOPOLOGY" = sharded-cluster && test $MONGODB_VERSION = 3.6; then
315
340
  # On 3.6 server the sessions collection is not immediately available,
@@ -345,7 +370,7 @@ launch_server() {
345
370
  port="${BASH_REMATCH[1]}"
346
371
  mongoses+=("${base_url}:${port}")
347
372
  fi
348
- done < <(python -m mtools.mlaunch.mlaunch list --dir "$dbdir" --binarypath "$BINDIR")
373
+ done < <(python2 -m mtools.mlaunch.mlaunch list --dir "$dbdir" --binarypath "$BINDIR")
349
374
 
350
375
  if [ -n "$config_server" ]; then
351
376
  ${mongo_command} "$config_server" --eval 'db.adminCommand("refreshLogicalSessionCacheNow")'
@@ -1,4 +1,5 @@
1
- TOOLCHAIN_VERSION=289d4bec7c61e88000cea582c05fd8073b932122
1
+ # When changing, also update the hash in share/Dockerfile.
2
+ TOOLCHAIN_VERSION=219833abad4d9d3bf43c0fef101a8ca082ac4ae9
2
3
 
3
4
  set_env_java() {
4
5
  ls -l /opt || true
@@ -9,13 +10,13 @@ set_env_java() {
9
10
  export JAVACMD=/opt/java/jdk8/bin/java
10
11
  #export PATH=$PATH:/opt/java/jdk8/bin
11
12
  fi
12
-
13
+
13
14
  # ppc64le has it in a different place
14
15
  if test -z "$JAVACMD" && [ -f /usr/lib/jvm/java-1.8.0/bin/java ]; then
15
16
  export JAVACMD=/usr/lib/jvm/java-1.8.0/bin/java
16
17
  #export PATH=$PATH:/usr/lib/jvm/java-1.8.0/bin
17
18
  fi
18
-
19
+
19
20
  if true; then
20
21
  # newer
21
22
  # rhel71-ppc, https://jira.mongodb.org/browse/BUILD-9231
@@ -34,7 +35,7 @@ set_env_java() {
34
35
  # we will try the /usr/lib/jvm then
35
36
  fi
36
37
  fi
37
-
38
+
38
39
  if test -n "$JAVACMD"; then
39
40
  eval $JAVACMD -version
40
41
  elif which java 2>/dev/null; then
@@ -44,6 +45,43 @@ set_env_java() {
44
45
  fi
45
46
  }
46
47
 
48
+ set_env_python() {
49
+ if test "$DOCKER_PRELOAD" != 1; then
50
+ if test -n "$DOCKER"; then
51
+ # If we are running in Docker and not preloading, we need to fetch the
52
+ # Python binary.
53
+ curl -fL --retry 3 https://github.com/p-mongodb/deps/raw/main/"$arch"-python37.tar.xz | \
54
+ tar xfJ - -C /opt
55
+ fi
56
+
57
+ if test -d /opt/python/3.7/bin; then
58
+ # Most Evergreen configurations.
59
+ export PATH=/opt/python/3.7/bin:$PATH
60
+ elif test -d /opt/python37/bin; then
61
+ # Configurations that use Docker in Evergreen - these don't preload.
62
+ export PATH=/opt/python37/bin:$PATH
63
+ fi
64
+
65
+ python3 -V
66
+ fi
67
+ }
68
+
69
+ set_env_node() {
70
+ if test "$DOCKER_PRELOAD" != 1; then
71
+ dir=`ls -d /opt/nodejs/node-v12* |head -1`
72
+ if test -z "$dir"; then
73
+ echo "Node 12 missing" 1>&2
74
+ exit 2
75
+ fi
76
+ export PATH="$dir/bin:$PATH"
77
+ elif test -d /opt/node/bin; then
78
+ # Node from toolchain in Evergreen
79
+ export PATH=/opt/node/bin:$PATH
80
+ fi
81
+
82
+ node -v
83
+ }
84
+
47
85
  set_env_ruby() {
48
86
  if test -z "$RVM_RUBY"; then
49
87
  echo "Empty RVM_RUBY, aborting"
@@ -79,7 +117,7 @@ set_env_ruby() {
79
117
 
80
118
  # For testing toolchains:
81
119
  #toolchain_url=https://s3.amazonaws.com//mciuploads/mongo-ruby-toolchain/`host_distro`/f11598d091441ffc8d746aacfdc6c26741a3e629/mongo_ruby_driver_toolchain_`host_distro |tr - _`_patch_f11598d091441ffc8d746aacfdc6c26741a3e629_5e46f2793e8e866f36eda2c5_20_02_14_19_18_18.tar.gz
82
- toolchain_url=http://boxes.10gen.com/build/toolchain-drivers/mongo-ruby-driver/ruby-toolchain-`host_distro`-$TOOLCHAIN_VERSION.tar.xz
120
+ toolchain_url=http://boxes.10gen.com/build/toolchain-drivers/mongo-ruby-driver/$TOOLCHAIN_VERSION/`host_distro`/$RVM_RUBY.tar.xz
83
121
  curl --retry 3 -fL $toolchain_url |tar Jxf -
84
122
  export PATH=`pwd`/rubies/$RVM_RUBY/bin:$PATH
85
123
  #export PATH=`pwd`/rubies/python/3/bin:$PATH
@@ -9,9 +9,14 @@ describe 'Clean exit' do
9
9
  unless %w(1 true yes).include?(ENV['SOLO'])
10
10
  skip 'Set SOLO=1 in environment to run solo tests'
11
11
  end
12
+
13
+ if %w(1 true yes).include?(ENV['EXTERNAL_DISABLED'])
14
+ skip "Test requires external connectivity"
15
+ end
12
16
  end
13
17
 
14
18
  context 'with SRV URI' do
19
+
15
20
  let(:uri) do
16
21
  'mongodb+srv://test1.test.build.10gen.cc/?tls=false'
17
22
  end
data/spec/spec_helper.rb CHANGED
@@ -12,7 +12,6 @@ require 'support/constraints'
12
12
  require 'support/authorization'
13
13
  require 'support/primary_socket'
14
14
  require 'support/cluster_tools'
15
- require 'rspec/retry'
16
15
  require 'support/monitoring_ext'
17
16
 
18
17
  RSpec.configure do |config|
@@ -10,5 +10,5 @@ describe 'Client-Side Encryption' do
10
10
  require_libmongocrypt
11
11
  require_enterprise
12
12
 
13
- define_transactions_spec_tests(CLIENT_SIDE_ENCRYPTION_TESTS)
13
+ define_transactions_spec_tests(CLIENT_SIDE_ENCRYPTION_TESTS, expectations_bson_types: false)
14
14
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ require 'spec_helper'
5
+
6
+ require 'runners/unified'
7
+
8
+ base = "#{CURRENT_PATH}/spec_tests/data/client_side_encryption"
9
+ CLIENT_SIDE_ENCRYPTION_UNIFIED_TESTS = Dir.glob("#{base}/unified/**/*.yml").sort
10
+
11
+ describe 'Client side encryption spec tests - unified' do
12
+ require_libmongocrypt
13
+ require_enterprise
14
+
15
+ define_unified_spec_tests(base, CLIENT_SIDE_ENCRYPTION_UNIFIED_TESTS)
16
+ end
@@ -10,13 +10,3 @@ describe 'CRUD v1 spec tests' do
10
10
  let(:client) { authorized_client }
11
11
  end
12
12
  end
13
-
14
- describe 'CRUD v2 spec tests' do
15
- define_crud_spec_tests(CRUD2_TESTS) do |spec, req, test|
16
- let(:client) do
17
- authorized_client.use(spec.database_name || 'crud-default').tap do |client|
18
- client.subscribe(Mongo::Monitoring::COMMAND, event_subscriber)
19
- end
20
- end
21
- end
22
- end
@@ -0,0 +1,124 @@
1
+ description: "change-streams-errors"
2
+
3
+ schemaVersion: "1.7"
4
+
5
+ runOnRequirements:
6
+ - serverless: forbid
7
+
8
+ createEntities:
9
+ - client:
10
+ id: &client0 client0
11
+ observeEvents: [ commandStartedEvent ]
12
+ ignoreCommandMonitoringEvents: [ killCursors ]
13
+ useMultipleMongoses: false
14
+ - client:
15
+ id: &globalClient globalClient
16
+ useMultipleMongoses: false
17
+ - database:
18
+ id: &database0 database0
19
+ client: *client0
20
+ databaseName: *database0
21
+ - collection:
22
+ id: &collection0 collection0
23
+ database: *database0
24
+ collectionName: *collection0
25
+ - database:
26
+ id: &globalDatabase0 globalDatabase0
27
+ client: *globalClient
28
+ databaseName: *database0
29
+ - collection:
30
+ id: &globalCollection0 globalCollection0
31
+ database: *globalDatabase0
32
+ collectionName: *collection0
33
+
34
+ initialData:
35
+ - collectionName: *collection0
36
+ databaseName: *database0
37
+ documents: []
38
+
39
+ tests:
40
+ - description: "The watch helper must not throw a custom exception when executed against a single server topology, but instead depend on a server error"
41
+ runOnRequirements:
42
+ - minServerVersion: "3.6.0"
43
+ topologies: [ single ]
44
+ operations:
45
+ - name: createChangeStream
46
+ object: *collection0
47
+ arguments: { pipeline: [] }
48
+ expectError: { errorCode: 40573 }
49
+
50
+ - description: Change Stream should error when an invalid aggregation stage is passed in
51
+ runOnRequirements:
52
+ - minServerVersion: "3.6.0"
53
+ topologies: [ replicaset ]
54
+ operations:
55
+ - name: createChangeStream
56
+ object: *collection0
57
+ arguments:
58
+ pipeline: [ { $unsupported: foo } ]
59
+ expectError: { errorCode: 40324 }
60
+ expectEvents:
61
+ - client: *client0
62
+ ignoreExtraEvents: true
63
+ events:
64
+ - commandStartedEvent:
65
+ command:
66
+ aggregate: *collection0
67
+ cursor: {}
68
+ pipeline:
69
+ - $changeStream: {}
70
+ - $unsupported: foo
71
+ commandName: aggregate
72
+ databaseName: *database0
73
+
74
+ - description: Change Stream should error when _id is projected out
75
+ runOnRequirements:
76
+ - minServerVersion: "4.1.11"
77
+ # Removed load balanced tests as per RUBY-2952 because they were causing
78
+ # failures.
79
+ topologies: [ replicaset, sharded-replicaset ] #, load-balanced ]
80
+ operations:
81
+ - name: createChangeStream
82
+ object: *collection0
83
+ arguments:
84
+ pipeline:
85
+ - $project: { _id: 0 }
86
+ saveResultAsEntity: &changeStream0 changeStream0
87
+ - name: insertOne
88
+ object: *globalCollection0
89
+ arguments:
90
+ document: { z: 3 }
91
+ - name: iterateUntilDocumentOrError
92
+ object: *changeStream0
93
+ expectError: { errorCode: 280 }
94
+
95
+ - description: change stream errors on ElectionInProgress
96
+ runOnRequirements:
97
+ - minServerVersion: "4.2"
98
+ # Removed load balanced tests as per RUBY-2952 because they were causing
99
+ # failures.
100
+ topologies: [ replicaset, sharded-replicaset ] #, load-balanced ]
101
+ operations:
102
+ - name: failPoint
103
+ object: testRunner
104
+ arguments:
105
+ client: *globalClient
106
+ failPoint:
107
+ configureFailPoint: failCommand
108
+ mode: { times: 1 }
109
+ data:
110
+ failCommands: [ getMore ]
111
+ errorCode: 216
112
+ closeConnection: false
113
+ - name: createChangeStream
114
+ object: *collection0
115
+ arguments:
116
+ pipeline: []
117
+ saveResultAsEntity: &changeStream0 changeStream0
118
+ - name: insertOne
119
+ object: *globalCollection0
120
+ arguments:
121
+ document: { z: 3 }
122
+ - name: iterateUntilDocumentOrError
123
+ object: *changeStream0
124
+ expectError: { errorCode: 216 }