mongo 2.15.0 → 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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +22 -38
- data/lib/mongo/auth/aws/request.rb +0 -1
- data/lib/mongo/auth/base.rb +8 -1
- data/lib/mongo/auth.rb +12 -1
- data/lib/mongo/bulk_write/result.rb +10 -1
- data/lib/mongo/bulk_write/result_combiner.rb +2 -4
- data/lib/mongo/bulk_write.rb +115 -29
- data/lib/mongo/client.rb +182 -22
- data/lib/mongo/client_encryption.rb +113 -10
- data/lib/mongo/cluster/periodic_executor.rb +4 -3
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +98 -43
- data/lib/mongo/cluster/sdam_flow.rb +9 -3
- data/lib/mongo/cluster/topology/base.rb +13 -9
- data/lib/mongo/cluster/topology/load_balanced.rb +102 -0
- data/lib/mongo/cluster/topology.rb +28 -8
- data/lib/mongo/cluster.rb +162 -79
- data/lib/mongo/collection/helpers.rb +43 -0
- data/lib/mongo/collection/queryable_encryption.rb +122 -0
- data/lib/mongo/collection/view/aggregation.rb +68 -22
- data/lib/mongo/collection/view/builder/aggregation.rb +16 -17
- data/lib/mongo/collection/view/builder/map_reduce.rb +15 -49
- data/lib/mongo/collection/view/builder.rb +0 -4
- data/lib/mongo/collection/view/change_stream.rb +66 -20
- data/lib/mongo/collection/view/explainable.rb +1 -1
- data/lib/mongo/collection/view/iterable.rb +64 -30
- data/lib/mongo/collection/view/map_reduce.rb +72 -24
- data/lib/mongo/collection/view/readable.rb +106 -70
- data/lib/mongo/collection/view/writable.rb +296 -177
- data/lib/mongo/collection/view.rb +15 -21
- data/lib/mongo/collection.rb +141 -53
- data/lib/mongo/config/options.rb +62 -0
- data/lib/mongo/config/validators/option.rb +26 -0
- data/lib/mongo/config.rb +42 -0
- data/lib/mongo/crypt/auto_encrypter.rb +136 -14
- data/lib/mongo/crypt/binding.rb +513 -144
- data/lib/mongo/crypt/context.rb +5 -2
- data/lib/mongo/crypt/data_key_context.rb +12 -104
- data/lib/mongo/crypt/encryption_io.rb +94 -60
- data/lib/mongo/crypt/explicit_encrypter.rb +143 -26
- data/lib/mongo/crypt/explicit_encryption_context.rb +25 -2
- data/lib/mongo/crypt/handle.rb +160 -86
- data/lib/mongo/crypt/hooks.rb +25 -2
- data/lib/mongo/crypt/kms/aws.rb +136 -0
- data/lib/mongo/crypt/kms/azure.rb +144 -0
- data/lib/mongo/crypt/kms/credentials.rb +81 -0
- data/lib/mongo/crypt/kms/gcp.rb +189 -0
- data/lib/mongo/crypt/kms/kmip.rb +116 -0
- data/lib/mongo/crypt/kms/local.rb +82 -0
- data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
- data/lib/mongo/crypt/kms.rb +117 -0
- data/lib/mongo/crypt/rewrap_many_data_key_context.rb +46 -0
- data/lib/mongo/crypt/rewrap_many_data_key_result.rb +37 -0
- data/lib/mongo/crypt/status.rb +8 -2
- data/lib/mongo/crypt.rb +3 -0
- data/lib/mongo/cursor/kill_spec.rb +76 -0
- data/lib/mongo/cursor.rb +92 -36
- data/lib/mongo/database/view.rb +11 -6
- data/lib/mongo/database.rb +63 -19
- data/lib/mongo/dbref.rb +1 -105
- data/lib/mongo/error/bad_load_balancer_target.rb +26 -0
- data/lib/mongo/error/bulk_write_error.rb +31 -4
- data/lib/mongo/error/invalid_config_option.rb +20 -0
- data/lib/mongo/error/invalid_replacement_document.rb +27 -9
- data/lib/mongo/error/invalid_update_document.rb +27 -7
- data/lib/mongo/error/labelable.rb +72 -0
- data/lib/mongo/error/missing_connection.rb +25 -0
- data/lib/mongo/error/missing_file_chunk.rb +8 -2
- data/lib/mongo/error/missing_service_id.rb +26 -0
- data/lib/mongo/error/no_service_connection_available.rb +49 -0
- data/lib/mongo/error/notable.rb +14 -0
- data/lib/mongo/error/operation_failure.rb +34 -86
- data/lib/mongo/error/read_write_retryable.rb +108 -0
- data/lib/mongo/error/session_not_materialized.rb +29 -0
- data/lib/mongo/error/snapshot_session_invalid_server_version.rb +31 -0
- data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +30 -0
- data/lib/mongo/error.rb +10 -37
- data/lib/mongo/grid/fs_bucket.rb +21 -2
- data/lib/mongo/grid/stream/read.rb +6 -0
- data/lib/mongo/id.rb +7 -5
- data/lib/mongo/index/view.rb +45 -48
- data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +7 -4
- data/lib/mongo/monitoring/event/command_failed.rb +9 -3
- data/lib/mongo/monitoring/event/command_started.rb +3 -1
- data/lib/mongo/monitoring/event/command_succeeded.rb +9 -2
- data/lib/mongo/monitoring/publishable.rb +11 -7
- data/lib/mongo/operation/aggregate/command.rb +8 -0
- data/lib/mongo/operation/collections_info/result.rb +5 -2
- data/lib/mongo/operation/command/op_msg.rb +6 -0
- data/lib/mongo/operation/context.rb +37 -1
- data/lib/mongo/operation/count/command.rb +6 -0
- data/lib/mongo/operation/count/op_msg.rb +9 -0
- data/lib/mongo/operation/create/command.rb +7 -1
- data/lib/mongo/operation/create/op_msg.rb +10 -0
- data/lib/mongo/operation/create_index/command.rb +17 -1
- data/lib/mongo/operation/create_index/op_msg.rb +18 -4
- data/lib/mongo/operation/delete/command.rb +6 -3
- data/lib/mongo/operation/delete/op_msg.rb +10 -1
- data/lib/mongo/operation/delete.rb +0 -1
- data/lib/mongo/operation/distinct/command.rb +6 -0
- data/lib/mongo/operation/distinct/op_msg.rb +10 -0
- data/lib/mongo/operation/drop_index/op_msg.rb +5 -1
- data/lib/mongo/operation/explain/command.rb +13 -1
- data/lib/mongo/operation/explain/legacy.rb +12 -5
- data/lib/mongo/operation/explain/op_msg.rb +9 -1
- data/lib/mongo/operation/find/builder/command.rb +111 -0
- data/lib/mongo/{collection/view → operation/find}/builder/flags.rb +10 -14
- data/lib/mongo/operation/find/builder/legacy.rb +123 -0
- data/lib/mongo/{collection/view → operation/find}/builder/modifiers.rb +31 -25
- data/lib/mongo/{cursor → operation/find}/builder.rb +4 -4
- data/lib/mongo/operation/find/command.rb +9 -0
- data/lib/mongo/operation/find/legacy.rb +10 -1
- data/lib/mongo/operation/find/op_msg.rb +12 -0
- data/lib/mongo/operation/find.rb +1 -0
- data/lib/mongo/operation/get_more/command.rb +1 -0
- data/lib/mongo/operation/get_more/command_builder.rb +42 -0
- data/lib/mongo/operation/get_more/op_msg.rb +1 -0
- data/lib/mongo/operation/get_more.rb +1 -0
- data/lib/mongo/operation/insert/bulk_result.rb +5 -1
- data/lib/mongo/operation/insert/command.rb +0 -4
- data/lib/mongo/operation/insert/op_msg.rb +6 -3
- data/lib/mongo/operation/insert/result.rb +6 -3
- data/lib/mongo/operation/insert.rb +0 -1
- data/lib/mongo/operation/kill_cursors/command.rb +8 -0
- data/lib/mongo/operation/kill_cursors/{legacy.rb → command_builder.rb} +6 -11
- data/lib/mongo/operation/kill_cursors/op_msg.rb +10 -0
- data/lib/mongo/operation/kill_cursors.rb +1 -1
- data/lib/mongo/operation/list_collections/op_msg.rb +4 -1
- data/lib/mongo/operation/map_reduce/command.rb +8 -0
- data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
- data/lib/mongo/operation/map_reduce/result.rb +16 -0
- data/lib/mongo/operation/result.rb +27 -5
- data/lib/mongo/operation/shared/executable.rb +36 -3
- data/lib/mongo/operation/shared/polymorphic_operation.rb +15 -3
- data/lib/mongo/operation/shared/read_preference_supported.rb +3 -1
- data/lib/mongo/operation/shared/response_handling.rb +7 -5
- data/lib/mongo/operation/shared/sessions_supported.rb +35 -15
- data/lib/mongo/operation/shared/specifiable.rb +11 -29
- data/lib/mongo/operation/shared/validatable.rb +87 -0
- data/lib/mongo/operation/shared/write.rb +18 -12
- data/lib/mongo/operation/update/command.rb +6 -3
- data/lib/mongo/operation/update/op_msg.rb +9 -4
- data/lib/mongo/operation/update.rb +0 -1
- data/lib/mongo/operation/{delete/legacy.rb → write_command/command.rb} +17 -23
- data/lib/mongo/operation/write_command/op_msg.rb +43 -0
- data/lib/mongo/operation/write_command.rb +32 -0
- data/lib/mongo/operation.rb +10 -0
- data/lib/mongo/protocol/caching_hash.rb +69 -0
- data/lib/mongo/protocol/msg.rb +21 -1
- data/lib/mongo/protocol/query.rb +35 -18
- data/lib/mongo/protocol.rb +1 -0
- data/lib/mongo/query_cache.rb +27 -2
- data/lib/mongo/retryable.rb +78 -30
- data/lib/mongo/server/connection.rb +58 -3
- data/lib/mongo/server/connection_base.rb +14 -1
- data/lib/mongo/server/connection_common.rb +41 -1
- data/lib/mongo/server/connection_pool/generation_manager.rb +71 -0
- data/lib/mongo/server/connection_pool.rb +144 -43
- data/lib/mongo/server/description/features.rb +22 -17
- data/lib/mongo/server/description/load_balancer.rb +33 -0
- data/lib/mongo/server/description.rb +90 -6
- data/lib/mongo/server/monitor/connection.rb +16 -10
- data/lib/mongo/server/monitor.rb +27 -14
- data/lib/mongo/server/pending_connection.rb +47 -31
- data/lib/mongo/server/push_monitor.rb +21 -2
- data/lib/mongo/server.rb +78 -27
- data/lib/mongo/server_selector/base.rb +31 -5
- data/lib/mongo/session/session_pool.rb +19 -0
- data/lib/mongo/session.rb +142 -27
- data/lib/mongo/socket/ocsp_cache.rb +2 -3
- data/lib/mongo/socket/ocsp_verifier.rb +7 -39
- data/lib/mongo/socket/tcp.rb +3 -0
- data/lib/mongo/socket.rb +1 -5
- data/lib/mongo/srv/resolver.rb +24 -3
- data/lib/mongo/uri/options_mapper.rb +3 -0
- data/lib/mongo/uri/srv_protocol.rb +7 -9
- data/lib/mongo/uri.rb +38 -0
- data/lib/mongo/utils.rb +0 -13
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo.rb +22 -0
- data/mongo.gemspec +11 -5
- data/spec/README.md +23 -5
- data/spec/integration/auth_spec.rb +31 -1
- data/spec/integration/awaited_ismaster_spec.rb +1 -1
- data/spec/integration/aws_lambda_examples_spec.rb +68 -0
- data/spec/integration/bulk_write_error_message_spec.rb +32 -0
- data/spec/integration/bulk_write_spec.rb +17 -1
- data/spec/integration/change_stream_spec.rb +9 -8
- data/spec/integration/client_construction_spec.rb +128 -8
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +10 -10
- data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +169 -169
- data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +0 -1
- data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +31 -0
- data/spec/integration/client_side_encryption/auto_encryption_spec.rb +108 -1
- data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +3 -3
- data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +2 -2
- data/spec/integration/client_side_encryption/client_close_spec.rb +1 -1
- data/spec/integration/client_side_encryption/corpus_spec.rb +64 -35
- data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +39 -42
- data/spec/integration/client_side_encryption/data_key_spec.rb +98 -8
- data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +158 -0
- data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +59 -0
- data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +147 -0
- data/spec/integration/client_side_encryption/external_key_vault_spec.rb +6 -6
- data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +436 -0
- data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
- data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +111 -0
- data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +85 -0
- data/spec/integration/client_side_encryption/views_spec.rb +1 -1
- data/spec/integration/client_spec.rb +2 -0
- data/spec/integration/client_update_spec.rb +2 -2
- data/spec/integration/command_monitoring_spec.rb +1 -1
- data/spec/integration/command_spec.rb +1 -1
- data/spec/integration/connection_spec.rb +52 -35
- data/spec/integration/crud_spec.rb +186 -1
- data/spec/integration/cursor_pinning_spec.rb +121 -0
- data/spec/integration/cursor_reaping_spec.rb +8 -4
- data/spec/integration/fork_reconnect_spec.rb +16 -13
- data/spec/integration/get_more_spec.rb +1 -1
- data/spec/integration/grid_fs_bucket_spec.rb +3 -3
- data/spec/integration/heartbeat_events_spec.rb +1 -1
- data/spec/integration/map_reduce_spec.rb +77 -0
- data/spec/integration/ocsp_verifier_spec.rb +3 -0
- data/spec/integration/query_cache_spec.rb +240 -32
- data/spec/integration/query_cache_transactions_spec.rb +1 -1
- data/spec/integration/read_concern_spec.rb +1 -1
- data/spec/integration/read_preference_spec.rb +17 -13
- data/spec/integration/reconnect_spec.rb +32 -12
- data/spec/integration/retryable_errors_spec.rb +1 -1
- data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +2 -2
- data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
- data/spec/integration/sdam_error_handling_spec.rb +5 -3
- data/spec/integration/sdam_events_spec.rb +75 -19
- data/spec/integration/sdam_prose_spec.rb +1 -1
- data/spec/integration/server_monitor_spec.rb +3 -1
- data/spec/integration/server_selector_spec.rb +22 -5
- data/spec/integration/server_spec.rb +2 -0
- data/spec/integration/size_limit_spec.rb +4 -1
- data/spec/integration/snapshot_query_examples_spec.rb +127 -0
- data/spec/integration/srv_monitoring_spec.rb +39 -1
- data/spec/integration/srv_spec.rb +1 -0
- data/spec/integration/step_down_spec.rb +21 -5
- data/spec/integration/transaction_pinning_spec.rb +120 -0
- data/spec/integration/versioned_api_examples_spec.rb +52 -1
- data/spec/integration/x509_auth_spec.rb +1 -1
- data/spec/lite_spec_helper.rb +27 -11
- data/spec/mongo/address/ipv6_spec.rb +7 -0
- data/spec/mongo/address/unix_spec.rb +1 -0
- data/spec/mongo/address_spec.rb +7 -0
- data/spec/mongo/auth/cr_spec.rb +2 -3
- data/spec/mongo/auth/ldap_spec.rb +2 -3
- data/spec/mongo/auth/scram/conversation_spec.rb +23 -23
- data/spec/mongo/auth/scram256/conversation_spec.rb +20 -20
- data/spec/mongo/auth/scram_negotiation_spec.rb +1 -0
- data/spec/mongo/auth/scram_spec.rb +2 -3
- data/spec/mongo/auth/user/view_spec.rb +1 -1
- data/spec/mongo/auth/x509_spec.rb +2 -3
- data/spec/mongo/bulk_write/result_spec.rb +15 -1
- data/spec/mongo/bulk_write_spec.rb +144 -23
- data/spec/mongo/client_construction_spec.rb +443 -35
- data/spec/mongo/client_encryption_spec.rb +10 -22
- data/spec/mongo/client_spec.rb +303 -5
- data/spec/mongo/cluster/cursor_reaper_spec.rb +63 -23
- data/spec/mongo/cluster/periodic_executor_spec.rb +3 -1
- data/spec/mongo/cluster_spec.rb +33 -36
- data/spec/mongo/collection/view/aggregation_spec.rb +178 -83
- data/spec/mongo/collection/view/builder/find_command_spec.rb +4 -0
- data/spec/mongo/collection/view/builder/op_query_spec.rb +4 -0
- data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
- data/spec/mongo/collection/view/map_reduce_spec.rb +31 -2
- data/spec/mongo/collection/view/readable_spec.rb +661 -1
- data/spec/mongo/collection/view/writable_spec.rb +144 -32
- data/spec/mongo/collection_crud_spec.rb +70 -15
- data/spec/mongo/collection_ddl_spec.rb +1 -1
- data/spec/mongo/collection_spec.rb +33 -1
- data/spec/mongo/config/options_spec.rb +75 -0
- data/spec/mongo/config_spec.rb +73 -0
- data/spec/mongo/crypt/auto_decryption_context_spec.rb +17 -1
- data/spec/mongo/crypt/auto_encrypter_spec.rb +256 -5
- data/spec/mongo/crypt/auto_encryption_context_spec.rb +17 -1
- data/spec/mongo/crypt/binding/context_spec.rb +67 -17
- data/spec/mongo/crypt/binding/mongocrypt_spec.rb +17 -46
- data/spec/mongo/crypt/binding/version_spec.rb +33 -0
- data/spec/mongo/crypt/binding_unloaded_spec.rb +14 -0
- data/spec/mongo/crypt/data_key_context_spec.rb +42 -114
- data/spec/mongo/crypt/encryption_io_spec.rb +2 -0
- data/spec/mongo/crypt/explicit_decryption_context_spec.rb +32 -1
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +94 -1
- data/spec/mongo/crypt/handle_spec.rb +172 -156
- data/spec/mongo/crypt/hooks_spec.rb +30 -0
- data/spec/mongo/crypt/kms/credentials_spec.rb +357 -0
- data/spec/mongo/crypt/kms_spec.rb +59 -0
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +4 -0
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +4 -0
- data/spec/mongo/cursor_spec.rb +104 -7
- data/spec/mongo/database_spec.rb +81 -16
- data/spec/mongo/error/operation_failure_heavy_spec.rb +50 -1
- data/spec/mongo/grid/fs_bucket_spec.rb +18 -12
- data/spec/mongo/grid/stream/write_spec.rb +3 -9
- data/spec/mongo/grid/stream_spec.rb +1 -1
- data/spec/mongo/index/view_spec.rb +127 -2
- data/spec/mongo/operation/create/op_msg_spec.rb +244 -0
- data/spec/mongo/operation/delete/op_msg_spec.rb +14 -5
- data/spec/mongo/operation/delete_spec.rb +0 -30
- data/spec/mongo/{collection/view → operation/find}/builder/flags_spec.rb +2 -2
- data/spec/mongo/{collection/view → operation/find}/builder/modifiers_spec.rb +2 -2
- data/spec/mongo/operation/find/legacy_spec.rb +1 -0
- data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
- data/spec/mongo/operation/insert/op_msg_spec.rb +19 -11
- data/spec/mongo/operation/insert_spec.rb +0 -32
- data/spec/mongo/operation/read_preference_legacy_spec.rb +4 -0
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +26 -1
- data/spec/mongo/operation/result_spec.rb +20 -0
- data/spec/mongo/operation/update/bulk_spec.rb +1 -1
- data/spec/mongo/operation/update/op_msg_spec.rb +14 -5
- data/spec/mongo/operation/update_spec.rb +0 -29
- data/spec/mongo/protocol/caching_hash_spec.rb +82 -0
- data/spec/mongo/protocol/msg_spec.rb +41 -0
- data/spec/mongo/query_cache_spec.rb +172 -2
- data/spec/mongo/retryable_spec.rb +32 -3
- data/spec/mongo/server/connection_auth_spec.rb +3 -1
- data/spec/mongo/server/connection_common_spec.rb +76 -13
- data/spec/mongo/server/connection_pool_spec.rb +178 -45
- data/spec/mongo/server/connection_spec.rb +186 -200
- data/spec/mongo/server/description/features_spec.rb +24 -0
- data/spec/mongo/server/description_spec.rb +1 -1
- data/spec/mongo/server/monitor/connection_spec.rb +22 -0
- data/spec/mongo/server/monitor_spec.rb +4 -3
- data/spec/mongo/server/push_monitor_spec.rb +95 -0
- data/spec/mongo/server_selector_spec.rb +136 -15
- data/spec/mongo/session/session_pool_spec.rb +42 -10
- data/spec/mongo/session_spec.rb +26 -6
- data/spec/mongo/session_transaction_spec.rb +15 -29
- data/spec/mongo/socket/ssl_spec.rb +42 -63
- data/spec/mongo/socket/unix_spec.rb +1 -0
- data/spec/mongo/uri/srv_protocol_spec.rb +101 -2
- data/spec/mongo/uri_option_parsing_spec.rb +38 -5
- data/spec/mongo/uri_spec.rb +25 -0
- data/spec/mongo/utils_spec.rb +0 -14
- data/spec/runners/auth.rb +1 -1
- data/spec/runners/change_streams/spec.rb +1 -1
- data/spec/runners/change_streams/test.rb +1 -1
- data/spec/runners/cmap.rb +2 -2
- data/spec/runners/command_monitoring.rb +1 -1
- data/spec/runners/connection_string.rb +16 -4
- data/spec/runners/crud/operation.rb +17 -6
- data/spec/runners/crud/requirement.rb +10 -4
- data/spec/runners/crud/spec.rb +6 -3
- data/spec/runners/crud/test.rb +1 -1
- data/spec/runners/crud/verifier.rb +7 -2
- data/spec/runners/crud.rb +1 -1
- data/spec/runners/gridfs.rb +1 -1
- data/spec/runners/read_write_concern_document.rb +1 -1
- data/spec/runners/sdam.rb +3 -2
- data/spec/runners/server_selection.rb +1 -1
- data/spec/runners/server_selection_rtt.rb +1 -1
- data/spec/runners/transactions/spec.rb +2 -2
- data/spec/runners/transactions/test.rb +21 -18
- data/spec/runners/transactions.rb +11 -8
- data/spec/runners/unified/assertions.rb +95 -15
- data/spec/runners/unified/change_stream_operations.rb +12 -0
- data/spec/runners/unified/client_side_encryption_operations.rb +83 -0
- data/spec/runners/unified/crud_operations.rb +143 -26
- data/spec/runners/unified/ddl_operations.rb +74 -1
- data/spec/runners/unified/entity_map.rb +3 -3
- data/spec/runners/unified/error.rb +2 -1
- data/spec/runners/unified/event_subscriber.rb +2 -2
- data/spec/runners/unified/grid_fs_operations.rb +21 -0
- data/spec/runners/unified/support_operations.rb +21 -5
- data/spec/runners/unified/test.rb +96 -8
- data/spec/runners/unified/test_group.rb +1 -1
- data/spec/runners/unified.rb +10 -3
- data/spec/shared/lib/mrss/cluster_config.rb +6 -1
- data/spec/shared/lib/mrss/constraints.rb +21 -22
- data/spec/shared/lib/mrss/docker_runner.rb +23 -3
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +40 -1
- data/spec/shared/lib/mrss/server_version_registry.rb +17 -12
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/share/Dockerfile.erb +61 -58
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +2 -1
- data/spec/shared/shlib/server.sh +114 -39
- data/spec/shared/shlib/set_env.sh +43 -5
- data/spec/solo/clean_exit_spec.rb +5 -0
- data/spec/spec_helper.rb +0 -1
- data/spec/spec_tests/client_side_encryption_spec.rb +1 -1
- data/spec/spec_tests/client_side_encryption_unified_spec.rb +16 -0
- data/spec/spec_tests/cmap_spec.rb +4 -1
- data/spec/spec_tests/crud_spec.rb +0 -10
- data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +124 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1171 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1071 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +298 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams.yml +859 -4
- data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
- data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
- data/spec/spec_tests/data/client_side_encryption/badQueries.yml +12 -2
- data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
- data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
- data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/create-and-createIndexes.yml +58 -0
- data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
- data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/explain.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
- data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/fle2-BypassQueryAnalysis.yml +101 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-Compact.yml +80 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-CreateCollection.yml +1263 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-DecryptExistingData.yml +64 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-Delete.yml +107 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-EncryptedFieldsMap.yml +80 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-jsonSchema.yml +90 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFieldsMap-defaults.yml +57 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-FindOneAndUpdate.yml +213 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Indexed.yml +86 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Unindexed.yml +83 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-MissingKey.yml +41 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-NoEncryption.yml +42 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-Update.yml +221 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-validatorAndPartialFieldExpression.yml +168 -0
- data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
- data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
- data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +2 -0
- data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
- data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
- data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
- data/spec/spec_tests/data/client_side_encryption/unified/addKeyAltName.yml +194 -0
- data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +67 -0
- data/spec/spec_tests/data/client_side_encryption/unified/createDataKey.yml +309 -0
- data/spec/spec_tests/data/client_side_encryption/unified/deleteKey.yml +159 -0
- data/spec/spec_tests/data/client_side_encryption/unified/getKey.yml +105 -0
- data/spec/spec_tests/data/client_side_encryption/unified/getKeyByAltName.yml +104 -0
- data/spec/spec_tests/data/client_side_encryption/unified/getKeys.yml +122 -0
- data/spec/spec_tests/data/client_side_encryption/unified/removeKeyAltName.yml +157 -0
- data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-decrypt_failure.yml +69 -0
- data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-encrypt_failure.yml +122 -0
- data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +432 -0
- data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/validatorAndPartialFieldExpression.yml +166 -0
- data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
- data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
- data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
- data/spec/spec_tests/data/command_monitoring_unified/bulkWrite.yml +68 -0
- data/spec/spec_tests/data/command_monitoring_unified/command.yml +50 -0
- data/spec/spec_tests/data/command_monitoring_unified/deleteMany.yml +79 -0
- data/spec/spec_tests/data/command_monitoring_unified/deleteOne.yml +79 -0
- data/spec/spec_tests/data/command_monitoring_unified/find.yml +254 -0
- data/spec/spec_tests/data/command_monitoring_unified/insertMany.yml +79 -0
- data/spec/spec_tests/data/command_monitoring_unified/insertOne.yml +77 -0
- data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
- data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
- data/spec/spec_tests/data/command_monitoring_unified/unacknowledgedBulkWrite.yml +55 -0
- data/spec/spec_tests/data/command_monitoring_unified/updateMany.yml +87 -0
- data/spec/spec_tests/data/command_monitoring_unified/updateOne.yml +118 -0
- data/spec/spec_tests/data/crud/read/aggregate-collation.yml +2 -1
- data/spec/spec_tests/data/crud/read/aggregate-out.yml +1 -0
- data/spec/spec_tests/data/crud/read/count-collation.yml +2 -1
- data/spec/spec_tests/data/crud/read/distinct-collation.yml +2 -1
- data/spec/spec_tests/data/crud/read/find-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +3 -2
- data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +3 -2
- data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +3 -2
- data/spec/spec_tests/data/crud/write/updateMany-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/updateOne-collation.yml +2 -1
- data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
- data/spec/spec_tests/data/crud_unified/aggregate-let.yml +138 -0
- data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
- data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
- data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +155 -0
- data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
- data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
- data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +151 -0
- data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +93 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +91 -0
- data/spec/spec_tests/data/crud_unified/distinct-comment.yml +98 -0
- data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
- data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +5 -135
- data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
- data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
- data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
- data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
- data/spec/spec_tests/data/crud_unified/find-let.yml +71 -0
- data/spec/spec_tests/data/crud_unified/find.yml +68 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +86 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-let.yml +94 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-let.yml +96 -0
- data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
- data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
- data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
- data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
- data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
- data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
- data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
- data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
- data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
- data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
- data/spec/spec_tests/data/crud_unified/updateMany-let.yml +107 -0
- data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
- data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
- data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
- data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
- data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
- data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
- data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
- data/spec/spec_tests/data/crud_unified/updateOne-let.yml +102 -0
- data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
- data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
- data/spec/spec_tests/data/gridfs_unified/delete.yml +198 -0
- data/spec/spec_tests/data/gridfs_unified/download.yml +241 -0
- data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +159 -0
- data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +92 -0
- data/spec/spec_tests/data/gridfs_unified/upload.yml +288 -0
- data/spec/spec_tests/data/load_balancers/event-monitoring.yml +99 -0
- data/spec/spec_tests/data/load_balancers/lb-connection-establishment.yml +36 -0
- data/spec/spec_tests/data/load_balancers/non-lb-connection-establishment.yml +56 -0
- data/spec/spec_tests/data/load_balancers/server-selection.yml +50 -0
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/DefaultNoMaxStaleness.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +3 -3
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest.yml +3 -3
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +3 -3
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Secondary.yml +4 -4
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +4 -4
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +3 -3
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest.yml +3 -3
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +3 -3
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +5 -5
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +3 -3
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +5 -5
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +3 -3
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +2 -2
- data/spec/spec_tests/data/max_staleness/Sharded/SmallMaxStaleness.yml +2 -2
- data/spec/spec_tests/data/max_staleness/Single/SmallMaxStaleness.yml +1 -1
- data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
- data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +3 -1
- data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +129 -0
- data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
- data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +96 -0
- data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +137 -0
- data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +78 -0
- data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
- data/spec/spec_tests/data/sdam/load-balanced/discover_load_balancer.yml +25 -0
- data/spec/spec_tests/data/sdam_integration/find-network-error.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +9 -15
- data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +7 -15
- data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +10 -14
- data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +2 -0
- data/spec/spec_tests/data/sdam_monitoring/load_balancer.yml +65 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +13 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +6 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-multiple-hosts.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +10 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +10 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +10 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/encoded-userinfo-and-db.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/loadBalanced-false-txt.yml +10 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-admin-database.yml +13 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-auth.yml +12 -0
- data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
- data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
- data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
- data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
- data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
- data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
- data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
- data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +75 -0
- data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-server-error.yml +102 -0
- data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +258 -0
- data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +482 -0
- data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
- data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
- data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
- data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -7
- data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -7
- data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
- data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +118 -0
- data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +118 -0
- data/spec/spec_tests/data/unified/invalid/expectedEventsForClient-ignoreExtraEvents-type.yml +15 -0
- data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
- data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +4 -1
- data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -2
- data/spec/spec_tests/data/uri_options/connection-options.yml +60 -0
- data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
- data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
- data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
- data/spec/spec_tests/gridfs_unified_spec.rb +13 -0
- data/spec/spec_tests/load_balancers_spec.rb +15 -0
- data/spec/spec_tests/retryable_reads_spec.rb +6 -3
- data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
- data/spec/spec_tests/retryable_writes_spec.rb +5 -2
- data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
- data/spec/spec_tests/sdam_integration_spec.rb +1 -1
- data/spec/spec_tests/sdam_monitoring_spec.rb +10 -5
- data/spec/spec_tests/sdam_spec.rb +1 -1
- data/spec/spec_tests/seed_list_discovery_spec.rb +127 -0
- data/spec/spec_tests/sessions_unified_spec.rb +13 -0
- data/spec/spec_tests/unified_spec.rb +6 -1
- data/spec/spec_tests/uri_options_spec.rb +4 -4
- data/spec/stress/connection_pool_timing_spec.rb +3 -2
- data/spec/stress/fork_reconnect_stress_spec.rb +4 -7
- data/spec/stress/push_monitor_close_spec.rb +44 -0
- data/spec/support/authorization.rb +1 -1
- data/spec/support/background_thread_registry.rb +3 -13
- data/spec/support/certificates/atlas-ocsp-ca.crt +81 -96
- data/spec/support/certificates/atlas-ocsp.crt +125 -125
- data/spec/support/certificates/retrieve-atlas-cert +38 -0
- data/spec/support/cluster_tools.rb +1 -1
- data/spec/support/common_shortcuts.rb +24 -3
- data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
- data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
- data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
- data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
- data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
- data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
- data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
- data/spec/support/crypt/corpus/corpus.json +4999 -37
- data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
- data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
- data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
- data/spec/support/crypt/encryptedFields.json +33 -0
- data/spec/support/crypt/keys/key1-document.json +30 -0
- data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/crypt.rb +258 -13
- data/spec/support/macros.rb +28 -0
- data/spec/support/matchers.rb +13 -0
- data/spec/support/mongos_macros.rb +17 -0
- data/spec/support/shared/auth_context.rb +16 -0
- data/spec/support/shared/scram_conversation.rb +2 -1
- data/spec/support/shared/session.rb +15 -9
- data/spec/support/spec_config.rb +100 -12
- data/spec/support/using_hash.rb +31 -0
- data/spec/support/utils.rb +57 -5
- data.tar.gz.sig +0 -0
- metadata +778 -381
- metadata.gz.sig +0 -0
- data/lib/mongo/collection/view/builder/find_command.rb +0 -173
- data/lib/mongo/collection/view/builder/op_query.rb +0 -94
- data/lib/mongo/cursor/builder/get_more_command.rb +0 -80
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +0 -111
- data/lib/mongo/cursor/builder/op_get_more.rb +0 -64
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +0 -106
- data/lib/mongo/operation/insert/legacy.rb +0 -68
- data/lib/mongo/operation/update/legacy/result.rb +0 -112
- data/lib/mongo/operation/update/legacy.rb +0 -68
- data/lib/mongo/server/context.rb +0 -72
- data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +0 -66
- data/spec/mongo/dbref_spec.rb +0 -152
- data/spec/mongo/operation/kill_cursors_spec.rb +0 -44
- data/spec/runners/unified/using_hash.rb +0 -34
- data/spec/spec_tests/change_streams_spec.rb +0 -93
- data/spec/spec_tests/command_monitoring_spec.rb +0 -71
- data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -101
- data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +0 -1173
- data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
- data/spec/spec_tests/data/change_streams/change-streams.yml +0 -535
- data/spec/spec_tests/data/command_monitoring/bulkWrite.yml +0 -49
- data/spec/spec_tests/data/command_monitoring/command.yml +0 -61
- data/spec/spec_tests/data/command_monitoring/deleteMany.yml +0 -55
- data/spec/spec_tests/data/command_monitoring/deleteOne.yml +0 -55
- data/spec/spec_tests/data/command_monitoring/find.yml +0 -266
- data/spec/spec_tests/data/command_monitoring/insertMany.yml +0 -75
- data/spec/spec_tests/data/command_monitoring/insertOne.yml +0 -51
- data/spec/spec_tests/data/command_monitoring/unacknowledgedBulkWrite.yml +0 -34
- data/spec/spec_tests/data/command_monitoring/updateMany.yml +0 -65
- data/spec/spec_tests/data/command_monitoring/updateOne.yml +0 -90
- data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
- data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -111
- data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
- data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
- data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
- data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
- data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
- data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
- data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
- data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -39
- data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
- data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
- data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
- data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
- data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
- data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
- data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
- data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
- data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
- data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
- data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
- data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
- data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
- data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
- data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
- data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
- data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
- data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
- data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
- data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
- data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
- data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
- data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
- data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
- data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
- data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
- data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
- data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
- data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +0 -60
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +0 -146
- data/spec/spec_tests/dns_seedlist_discovery_spec.rb +0 -79
- data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
- data/spec/support/event_subscriber.rb +0 -221
- data/spec/support/session_registry.rb +0 -55
- /data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
- /data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-false.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-true.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/longer-parent-in-return.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/misformatted-option.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/no-results.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/not-enough-parts.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-result-default-port.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record-multiple-strings.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch1.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch2.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch3.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch4.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch5.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-too-short.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-wrong.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-default-port.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-nonstandard-port.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-txt-records.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-not-allowed-option.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-ssl-option.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-uri-option.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-unallowed-option.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-port.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-two-hosts.yml +0 -0
data/lib/mongo/crypt/binding.rb
CHANGED
@@ -16,20 +16,28 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
|
18
18
|
unless ENV['LIBMONGOCRYPT_PATH']
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
module
|
25
|
-
|
26
|
-
|
19
|
+
begin
|
20
|
+
require 'libmongocrypt_helper'
|
21
|
+
rescue LoadError => e
|
22
|
+
# It seems that MRI maintains autoload configuration for a module until
|
23
|
+
# that module is defined, but JRuby removes autoload configuration as soon
|
24
|
+
# as the referenced file is attempted to be loaded, even if the module
|
25
|
+
# never ends up being defined.
|
26
|
+
if BSON::Environment.jruby?
|
27
|
+
module Mongo
|
28
|
+
module Crypt
|
29
|
+
autoload :Binding, 'mongo/crypt/binding'
|
30
|
+
end
|
27
31
|
end
|
28
32
|
end
|
29
|
-
end
|
30
33
|
|
31
|
-
|
32
|
-
|
34
|
+
# JRuby 9.3.2.0 replaces a LoadError with our custom message with a
|
35
|
+
# generic NameError, when this load is attempted as part of autoloading
|
36
|
+
# process. JRuby 9.2.20.0 propagates LoadError as expected.
|
37
|
+
raise LoadError, "Cannot load Mongo::Crypt::Binding because there is no path " +
|
38
|
+
"to libmongocrypt specified in the LIBMONGOCRYPT_PATH environment variable " +
|
39
|
+
"and libmongocrypt-helper is not installed: #{e.class}: #{e}"
|
40
|
+
end
|
33
41
|
end
|
34
42
|
|
35
43
|
require 'ffi'
|
@@ -50,15 +58,33 @@ module Mongo
|
|
50
58
|
class Binding
|
51
59
|
extend FFI::Library
|
52
60
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
"
|
59
|
-
|
61
|
+
if ENV['LIBMONGOCRYPT_PATH']
|
62
|
+
begin
|
63
|
+
ffi_lib ENV['LIBMONGOCRYPT_PATH']
|
64
|
+
rescue LoadError => e
|
65
|
+
Crypt.reset_autoload
|
66
|
+
raise LoadError, "Cannot load Mongo::Crypt::Binding because the path to " +
|
67
|
+
"libmongocrypt specified in the LIBMONGOCRYPT_PATH environment variable " +
|
68
|
+
"is invalid: #{ENV['LIBMONGOCRYPT_PATH']}\n\n#{e.class}: #{e.message}"
|
69
|
+
end
|
70
|
+
else
|
71
|
+
begin
|
72
|
+
ffi_lib LibmongocryptHelper.libmongocrypt_path
|
73
|
+
rescue LoadError => e
|
74
|
+
Crypt.reset_autoload
|
75
|
+
raise LoadError, "Cannot load Mongo::Crypt::Binding because the path to " +
|
76
|
+
"libmongocrypt specified in libmongocrypt-helper " +
|
77
|
+
"is invalid: #{LibmongocryptHelper.libmongocrypt_path}\n\n#{e.class}: #{e.message}"
|
78
|
+
end
|
60
79
|
end
|
61
80
|
|
81
|
+
# Minimum version of libmongocrypt required by this version of the driver.
|
82
|
+
# An attempt to use the driver with any previous version of libmongocrypt
|
83
|
+
# will cause a `LoadError`.
|
84
|
+
#
|
85
|
+
# @api private
|
86
|
+
MIN_LIBMONGOCRYPT_VERSION = Gem::Version.new("1.5.2")
|
87
|
+
|
62
88
|
# @!method self.mongocrypt_version(len)
|
63
89
|
# @api private
|
64
90
|
#
|
@@ -68,6 +94,41 @@ module Mongo
|
|
68
94
|
# @return [ String ] A version string for libmongocrypt.
|
69
95
|
attach_function :mongocrypt_version, [:pointer], :string
|
70
96
|
|
97
|
+
# Validates if provided version of libmongocrypt is valid, i.e. equal or
|
98
|
+
# greater than minimum required version. Raises a LoadError if not.
|
99
|
+
#
|
100
|
+
# @param [ String ] lmc_version String representing libmongocrypt version.
|
101
|
+
#
|
102
|
+
# @raise [ LoadError ] if given version is lesser than minimum required version.
|
103
|
+
#
|
104
|
+
# @api private
|
105
|
+
def self.validate_version(lmc_version)
|
106
|
+
if (actual_version = Gem::Version.new(lmc_version)) < MIN_LIBMONGOCRYPT_VERSION
|
107
|
+
raise LoadError, "libmongocrypt version #{MIN_LIBMONGOCRYPT_VERSION} or above is required, " +
|
108
|
+
"but version #{actual_version} was found."
|
109
|
+
end
|
110
|
+
rescue ArgumentError => e
|
111
|
+
# Some lmc versions cannot be parsed with Gem::Version class,
|
112
|
+
# so we fall back to regex.
|
113
|
+
match = lmc_version.match(/\A(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)?(-[A-Za-z\+\d]+)?\z/)
|
114
|
+
if match.nil?
|
115
|
+
raise ArgumentError.new("Malformed version number string #{lmc_version}")
|
116
|
+
end
|
117
|
+
actual_version = Gem::Version.new(
|
118
|
+
[
|
119
|
+
match[:major],
|
120
|
+
match[:minor],
|
121
|
+
match[:patch]
|
122
|
+
].join('.')
|
123
|
+
)
|
124
|
+
if actual_version < MIN_LIBMONGOCRYPT_VERSION
|
125
|
+
raise LoadError, "libmongocrypt version #{MIN_LIBMONGOCRYPT_VERSION} or above is required, " +
|
126
|
+
"but version #{actual_version} was found."
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
validate_version(mongocrypt_version(nil))
|
131
|
+
|
71
132
|
# @!method self.mongocrypt_binary_new
|
72
133
|
# @api private
|
73
134
|
#
|
@@ -253,69 +314,36 @@ module Mongo
|
|
253
314
|
end
|
254
315
|
end
|
255
316
|
|
256
|
-
# @!method self.
|
317
|
+
# @!method self.mongocrypt_setopt_kms_providers(crypt, kms_providers)
|
257
318
|
# @api private
|
258
319
|
#
|
259
|
-
# Configure
|
320
|
+
# Configure KMS providers with a BSON document.
|
260
321
|
# @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
|
261
|
-
# @param [
|
262
|
-
#
|
263
|
-
#
|
264
|
-
# @
|
265
|
-
# @param [ Integer ] aws_secret_access_key_len The length of the AWS
|
266
|
-
# secret access key (or -1 for a null-terminated string).
|
267
|
-
# @return [ Boolean ] Returns whether the option was set successfully.
|
268
|
-
attach_function(
|
269
|
-
:mongocrypt_setopt_kms_provider_aws,
|
270
|
-
[:pointer, :string, :int, :string, :int],
|
271
|
-
:bool
|
272
|
-
)
|
273
|
-
|
274
|
-
# Configure the Handle object with AWS KMS provider options
|
275
|
-
#
|
276
|
-
# @param [ Mongo::Crypt::Handle ] handle
|
277
|
-
# @param [ String ] aws_access_key The AWS access key
|
278
|
-
# @param [ String ] aws_secret_access_key The AWS secret access key
|
279
|
-
#
|
280
|
-
# @raise [ Mongo::Error::CryptError ] If the option is not set successfully
|
281
|
-
def self.setopt_kms_provider_aws(handle,
|
282
|
-
aws_access_key, aws_secret_access_key
|
283
|
-
)
|
284
|
-
check_status(handle) do
|
285
|
-
mongocrypt_setopt_kms_provider_aws(
|
286
|
-
handle.ref,
|
287
|
-
aws_access_key,
|
288
|
-
-1,
|
289
|
-
aws_secret_access_key,
|
290
|
-
-1
|
291
|
-
)
|
292
|
-
end
|
293
|
-
end
|
294
|
-
|
295
|
-
# @!method self.mongocrypt_setopt_kms_provider_local(crypt, key)
|
296
|
-
# @api private
|
322
|
+
# @param [ FFI::Pointer ] kms_providers A pointer to a
|
323
|
+
# mongocrypt_binary_t object that references a BSON document mapping
|
324
|
+
# the KMS provider names to credentials.
|
325
|
+
# @note Do not initialize ctx before calling this method.
|
297
326
|
#
|
298
|
-
#
|
299
|
-
# @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
|
300
|
-
# @param [ FFI::Pointer ] key A pointer to a mongocrypt_binary_t object
|
301
|
-
# that references the 96-byte local master key.
|
302
|
-
# @return [ Boolean ] Returns whether the option was set successfully.
|
327
|
+
# @returns [ true | false ] Returns whether the options was set successfully.
|
303
328
|
attach_function(
|
304
|
-
:
|
329
|
+
:mongocrypt_setopt_kms_providers,
|
305
330
|
[:pointer, :pointer],
|
306
331
|
:bool
|
307
332
|
)
|
308
333
|
|
309
|
-
# Set
|
334
|
+
# Set KMS providers options on the Mongo::Crypt::Handle object
|
310
335
|
#
|
311
336
|
# @param [ Mongo::Crypt::Handle ] handle
|
312
|
-
# @param [
|
337
|
+
# @param [ BSON::Document ] kms_providers BSON document mapping
|
338
|
+
# the KMS provider names to credentials.
|
313
339
|
#
|
314
340
|
# @raise [ Mongo::Error::CryptError ] If the option is not set successfully
|
315
|
-
def self.
|
316
|
-
|
341
|
+
def self.setopt_kms_providers(handle, kms_providers)
|
342
|
+
validate_document(kms_providers)
|
343
|
+
data = kms_providers.to_bson.to_s
|
344
|
+
Binary.wrap_string(data) do |data_p|
|
317
345
|
check_status(handle) do
|
318
|
-
|
346
|
+
mongocrypt_setopt_kms_providers(handle.ref, data_p)
|
319
347
|
end
|
320
348
|
end
|
321
349
|
end
|
@@ -465,6 +493,38 @@ module Mongo
|
|
465
493
|
end
|
466
494
|
end
|
467
495
|
|
496
|
+
# @!method self.mongocrypt_ctx_setopt_key_material(ctx, binary)
|
497
|
+
# @api private
|
498
|
+
#
|
499
|
+
# When creating a data key, set a custom key material to use for
|
500
|
+
# encrypting data.
|
501
|
+
# @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
|
502
|
+
# @param [ FFI::Pointer ] binary A pointer to a mongocrypt_binary_t
|
503
|
+
# object that references the data encryption key to use.
|
504
|
+
# @return [ Boolean ] Whether the custom key material was successfully set.
|
505
|
+
# @note Do not initialize ctx before calling this method.
|
506
|
+
attach_function(
|
507
|
+
:mongocrypt_ctx_setopt_key_material,
|
508
|
+
[:pointer, :pointer],
|
509
|
+
:bool
|
510
|
+
)
|
511
|
+
|
512
|
+
# Set set a custom key material to use for
|
513
|
+
# encrypting data.
|
514
|
+
#
|
515
|
+
# @param [ Mongo::Crypt::Context ] context A DataKeyContext
|
516
|
+
# @param [ BSON::Binary ] key_material 96 bytes of custom key material
|
517
|
+
#
|
518
|
+
# @raise [ Mongo::Error::CryptError ] If the key material is not 96 bytes.
|
519
|
+
def self.ctx_setopt_key_material(context, key_material)
|
520
|
+
data = {'keyMaterial' => key_material}.to_bson.to_s
|
521
|
+
Binary.wrap_string(data) do |data_p|
|
522
|
+
check_ctx_status(context) do
|
523
|
+
mongocrypt_ctx_setopt_key_material(context.ctx_p, data_p)
|
524
|
+
end
|
525
|
+
end
|
526
|
+
end
|
527
|
+
|
468
528
|
# @!method self.mongocrypt_ctx_setopt_algorithm(ctx, algorithm, len)
|
469
529
|
# @api private
|
470
530
|
#
|
@@ -496,95 +556,36 @@ module Mongo
|
|
496
556
|
end
|
497
557
|
end
|
498
558
|
|
499
|
-
# @!method self.
|
559
|
+
# @!method self.mongocrypt_ctx_setopt_key_encryption_key(ctx)
|
500
560
|
# @api private
|
501
561
|
#
|
502
|
-
#
|
503
|
-
# @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_object.
|
504
|
-
# @param [ String ] region The AWS region.
|
505
|
-
# @param [ Integer ] region_len The length of the region string (or -1
|
506
|
-
# for a null-terminated string).
|
507
|
-
# @param [ String ] arn The Amazon Resource Name (ARN) of the mater key.
|
508
|
-
# @param [ Integer ] arn_len The length of the ARN (or -1 for a
|
509
|
-
# null-terminated string).
|
510
|
-
# @return [ Boolean ] Returns whether the option was set successfully.
|
511
|
-
attach_function(
|
512
|
-
:mongocrypt_ctx_setopt_masterkey_aws,
|
513
|
-
[:pointer, :string, :int, :string, :int],
|
514
|
-
:bool
|
515
|
-
)
|
516
|
-
|
517
|
-
# Configure the Context object to take a master key from AWS
|
518
|
-
#
|
519
|
-
# @param [ Mongo::Crypt::Context ] context
|
520
|
-
# @param [ String ] region The AWS region (e.g. "us-east-2")
|
521
|
-
# @param [ String ] arn The master key Amazon Resource Name
|
522
|
-
#
|
523
|
-
# @raise [ Mongo::Error::CryptError ] If the operation failed
|
524
|
-
def self.ctx_setopt_master_key_aws(context, region, arn)
|
525
|
-
check_ctx_status(context) do
|
526
|
-
mongocrypt_ctx_setopt_masterkey_aws(
|
527
|
-
context.ctx_p,
|
528
|
-
region,
|
529
|
-
-1,
|
530
|
-
arn,
|
531
|
-
-1
|
532
|
-
)
|
533
|
-
end
|
534
|
-
end
|
535
|
-
|
536
|
-
# @!method self.mongocrypt_ctx_setopt_masterkey_aws_endpoint(ctx, endpoint, endpoint_len)
|
537
|
-
# @api private
|
538
|
-
#
|
539
|
-
# Set a custom endpoint at which to fetch the AWS master key
|
540
|
-
# @param [ FFI::Pointer ] ctx
|
541
|
-
# @param [ String ] endpoint The custom endpoint.
|
542
|
-
# @param [ Integer ] endpoint_len The length of the endpoint string (or
|
543
|
-
# -1 for a null-terminated string).
|
544
|
-
# @return [ Boolean ] Returns whether the option was set successfully.
|
545
|
-
attach_function(
|
546
|
-
:mongocrypt_ctx_setopt_masterkey_aws_endpoint,
|
547
|
-
[:pointer, :string, :int],
|
548
|
-
:bool
|
549
|
-
)
|
550
|
-
|
551
|
-
# Configure the Context object to take a master key from AWS
|
552
|
-
#
|
553
|
-
# @param [ Mongo::Crypt::Context ] context
|
554
|
-
# @param [ String ] endpoint The custom AWS master key endpoint
|
555
|
-
#
|
556
|
-
# @raise [ Mongo::Error::CryptError ] If the operation failed
|
557
|
-
def self.ctx_setopt_master_key_aws_endpoint(context, endpoint)
|
558
|
-
check_ctx_status(context) do
|
559
|
-
mongocrypt_ctx_setopt_masterkey_aws_endpoint(
|
560
|
-
context.ctx_p,
|
561
|
-
endpoint,
|
562
|
-
-1,
|
563
|
-
)
|
564
|
-
end
|
565
|
-
end
|
566
|
-
|
567
|
-
# @!method self.mongocrypt_ctx_setopt_masterkey_local(ctx)
|
568
|
-
# @api private
|
569
|
-
#
|
570
|
-
# Set the ctx to take a local master key.
|
562
|
+
# Set key encryption key document for creating a data key.
|
571
563
|
# @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
|
564
|
+
# @param [ FFI::Pointer ] bin A pointer to a mongocrypt_binary_t
|
565
|
+
# object that references a BSON document representing the key
|
566
|
+
# encryption key document with an additional "provider" field.
|
572
567
|
# @note Do not initialize ctx before calling this method.
|
573
568
|
# @return [ Boolean ] Whether the option was successfully set.
|
574
569
|
attach_function(
|
575
|
-
:
|
576
|
-
[:pointer],
|
570
|
+
:mongocrypt_ctx_setopt_key_encryption_key,
|
571
|
+
[:pointer, :pointer],
|
577
572
|
:bool
|
578
573
|
)
|
579
574
|
|
580
|
-
#
|
575
|
+
# Set key encryption key document for creating a data key.
|
581
576
|
#
|
582
577
|
# @param [ Mongo::Crypt::Context ] context
|
578
|
+
# @param [ BSON::Document ] key_document BSON document representing the key
|
579
|
+
# encryption key document with an additional "provider" field.
|
583
580
|
#
|
584
581
|
# @raise [ Mongo::Error::CryptError ] If the operation failed
|
585
|
-
def self.
|
586
|
-
|
587
|
-
|
582
|
+
def self.ctx_setopt_key_encryption_key(context, key_document)
|
583
|
+
validate_document(key_document)
|
584
|
+
data = key_document.to_bson.to_s
|
585
|
+
Binary.wrap_string(data) do |data_p|
|
586
|
+
check_ctx_status(context) do
|
587
|
+
mongocrypt_ctx_setopt_key_encryption_key(context.ctx_p, data_p)
|
588
|
+
end
|
588
589
|
end
|
589
590
|
end
|
590
591
|
|
@@ -611,6 +612,40 @@ module Mongo
|
|
611
612
|
end
|
612
613
|
end
|
613
614
|
|
615
|
+
# @!method self.mongocrypt_ctx_datakey_init(ctx, filter)
|
616
|
+
# @api private
|
617
|
+
#
|
618
|
+
# Initialize a context to rewrap datakeys.
|
619
|
+
#
|
620
|
+
# @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
|
621
|
+
# @param [ FFI::Pointer ] filter A pointer to a mongocrypt_binary_t object
|
622
|
+
# that represents filter to use for the find command on the key vault
|
623
|
+
# collection to retrieve datakeys to rewrap.
|
624
|
+
#
|
625
|
+
# @return [ Boolean ] Whether the initialization was successful.
|
626
|
+
attach_function(
|
627
|
+
:mongocrypt_ctx_rewrap_many_datakey_init,
|
628
|
+
[:pointer, :pointer],
|
629
|
+
:bool
|
630
|
+
)
|
631
|
+
|
632
|
+
# Initialize a context to rewrap datakeys.
|
633
|
+
#
|
634
|
+
# @param [ Mongo::Crypt::Context ] context
|
635
|
+
# @param [ BSON::Document ] filter BSON Document
|
636
|
+
# that represents filter to use for the find command on the key vault
|
637
|
+
# collection to retrieve datakeys to rewrap.
|
638
|
+
#
|
639
|
+
# @return [ Boolean ] Whether the initialization was successful.
|
640
|
+
def self.ctx_rewrap_many_datakey_init(context, filter)
|
641
|
+
filter_data = filter.to_bson.to_s
|
642
|
+
Binary.wrap_string(filter_data) do |data_p|
|
643
|
+
check_ctx_status(context) do
|
644
|
+
mongocrypt_ctx_rewrap_many_datakey_init(context.ctx_p, data_p)
|
645
|
+
end
|
646
|
+
end
|
647
|
+
end
|
648
|
+
|
614
649
|
# @!method self.mongocrypt_ctx_encrypt_init(ctx, db, db_len, cmd)
|
615
650
|
# @api private
|
616
651
|
#
|
@@ -850,6 +885,58 @@ module Mongo
|
|
850
885
|
end
|
851
886
|
end
|
852
887
|
|
888
|
+
# @!method self.mongocrypt_kms_ctx_get_kms_provider(crypt, kms_providers)
|
889
|
+
# @api private
|
890
|
+
#
|
891
|
+
# Get the KMS provider identifier associated with this KMS request.
|
892
|
+
#
|
893
|
+
# This is used to conditionally configure TLS connections based on the KMS
|
894
|
+
# request. It is useful for KMIP, which authenticates with a client
|
895
|
+
# certificate.
|
896
|
+
#
|
897
|
+
# @param [ FFI::Pointer ] kms Pointer mongocrypt_kms_ctx_t object.
|
898
|
+
# @param [ FFI::Pointer ] len (outparam) Receives the length of the
|
899
|
+
# returned string. It may be NULL. If it is not NULL, it is set to
|
900
|
+
# the length of the returned string without the NULL terminator.
|
901
|
+
#
|
902
|
+
# @returns [ FFI::Pointer ] One of the NULL terminated static strings: "aws", "azure", "gcp", or
|
903
|
+
# "kmip".
|
904
|
+
attach_function(
|
905
|
+
:mongocrypt_kms_ctx_get_kms_provider,
|
906
|
+
[:pointer, :pointer],
|
907
|
+
:pointer
|
908
|
+
)
|
909
|
+
|
910
|
+
# Get the KMS provider identifier associated with this KMS request.
|
911
|
+
#
|
912
|
+
# This is used to conditionally configure TLS connections based on the KMS
|
913
|
+
# request. It is useful for KMIP, which authenticates with a client
|
914
|
+
# certificate.
|
915
|
+
#
|
916
|
+
# @param [ FFI::Pointer ] kms Pointer mongocrypt_kms_ctx_t object.
|
917
|
+
#
|
918
|
+
# @returns [ Symbol | nil ] KMS provider identifier.
|
919
|
+
def self.kms_ctx_get_kms_provider(kms_context)
|
920
|
+
len_ptr = FFI::MemoryPointer.new(:uint32, 1)
|
921
|
+
provider = mongocrypt_kms_ctx_get_kms_provider(
|
922
|
+
kms_context.kms_ctx_p,
|
923
|
+
len_ptr
|
924
|
+
)
|
925
|
+
if len_ptr.nil?
|
926
|
+
nil
|
927
|
+
else
|
928
|
+
len = if BSON::Environment.jruby?
|
929
|
+
# JRuby FFI implementation does not have `read(type)` method, but it
|
930
|
+
# has this `get_uint32`.
|
931
|
+
len_ptr.get_uint32
|
932
|
+
else
|
933
|
+
# For MRI we use a documented `read` method - https://www.rubydoc.info/github/ffi/ffi/FFI%2FPointer:read
|
934
|
+
len_ptr.read(:uint32)
|
935
|
+
end
|
936
|
+
provider.read_string(len).to_sym
|
937
|
+
end
|
938
|
+
end
|
939
|
+
|
853
940
|
# @!method self.mongocrypt_kms_ctx_message(kms, msg)
|
854
941
|
# @api private
|
855
942
|
#
|
@@ -971,7 +1058,7 @@ module Mongo
|
|
971
1058
|
status = Status.new
|
972
1059
|
|
973
1060
|
mongocrypt_kms_ctx_status(kms_context.kms_ctx_p, status.ref)
|
974
|
-
status.raise_crypt_error
|
1061
|
+
status.raise_crypt_error(kms: true)
|
975
1062
|
end
|
976
1063
|
end
|
977
1064
|
|
@@ -1174,6 +1261,288 @@ module Mongo
|
|
1174
1261
|
end
|
1175
1262
|
end
|
1176
1263
|
|
1264
|
+
# @!method self.mongocrypt_setopt_crypto_hook_sign_rsaes_pkcs1_v1_5(crypt, sign_rsaes_pkcs1_v1_5, ctx=nil)
|
1265
|
+
# @api private
|
1266
|
+
#
|
1267
|
+
# Set a crypto hook for the RSASSA-PKCS1-v1_5 algorithm with a SHA-256 hash.
|
1268
|
+
# @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
|
1269
|
+
# @param [ Proc ] sign_rsaes_pkcs1_v1_5 A RSASSA-PKCS1-v1_5 signing method.
|
1270
|
+
# @param [ FFI::Pointer | nil ] ctx An optional pointer to a context object
|
1271
|
+
# that may have been set when hooks were enabled.
|
1272
|
+
# @return [ Boolean ] Whether setting this option succeeded.
|
1273
|
+
attach_function(
|
1274
|
+
:mongocrypt_setopt_crypto_hook_sign_rsaes_pkcs1_v1_5,
|
1275
|
+
[
|
1276
|
+
:pointer,
|
1277
|
+
:mongocrypt_hmac_fn,
|
1278
|
+
:pointer
|
1279
|
+
],
|
1280
|
+
:bool
|
1281
|
+
)
|
1282
|
+
|
1283
|
+
# Set a crypto hook for the RSASSA-PKCS1-v1_5 algorithm with
|
1284
|
+
# a SHA-256 hash oh the Handle.
|
1285
|
+
#
|
1286
|
+
# @param [ Mongo::Crypt::Handle ] handle
|
1287
|
+
# @param [ Method ] rsaes_pkcs_signature_cb A RSASSA-PKCS1-v1_5 signing method.
|
1288
|
+
#
|
1289
|
+
# @raise [ Mongo::Error::CryptError ] If the callbacks aren't set successfully
|
1290
|
+
def self.setopt_crypto_hook_sign_rsaes_pkcs1_v1_5(
|
1291
|
+
handle,
|
1292
|
+
rsaes_pkcs_signature_cb
|
1293
|
+
)
|
1294
|
+
check_status(handle) do
|
1295
|
+
mongocrypt_setopt_crypto_hook_sign_rsaes_pkcs1_v1_5(
|
1296
|
+
handle.ref,
|
1297
|
+
rsaes_pkcs_signature_cb,
|
1298
|
+
nil
|
1299
|
+
)
|
1300
|
+
end
|
1301
|
+
end
|
1302
|
+
|
1303
|
+
# @!method self.mongocrypt_setopt_encrypted_field_config_map(crypt, efc_map)
|
1304
|
+
# @api private
|
1305
|
+
#
|
1306
|
+
# Set a local EncryptedFieldConfigMap for encryption.
|
1307
|
+
#
|
1308
|
+
# @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
|
1309
|
+
# @param [ FFI::Pointer ] efc_map A pointer to mongocrypt_binary_t object that
|
1310
|
+
# references a BSON document representing the EncryptedFieldConfigMap
|
1311
|
+
# supplied by the user. The keys are collection namespaces and values are
|
1312
|
+
# EncryptedFieldConfigMap documents.
|
1313
|
+
#
|
1314
|
+
# @return [ Boolean ] Whether the operation succeeded.
|
1315
|
+
attach_function(
|
1316
|
+
:mongocrypt_setopt_encrypted_field_config_map,
|
1317
|
+
[
|
1318
|
+
:pointer,
|
1319
|
+
:pointer
|
1320
|
+
],
|
1321
|
+
:bool
|
1322
|
+
)
|
1323
|
+
|
1324
|
+
# Set a local EncryptedFieldConfigMap for encryption.
|
1325
|
+
#
|
1326
|
+
# @param [ Mongo::Crypt::Handle ] handle
|
1327
|
+
# @param [ BSON::Document ] efc_map A BSON document representing
|
1328
|
+
# the EncryptedFieldConfigMap supplied by the user.
|
1329
|
+
# The keys are collection namespaces and values are
|
1330
|
+
# EncryptedFieldConfigMap documents.
|
1331
|
+
#
|
1332
|
+
# @raise [ Mongo::Error::CryptError ] If the operation failed.
|
1333
|
+
def self.setopt_encrypted_field_config_map(handle, efc_map)
|
1334
|
+
validate_document(efc_map)
|
1335
|
+
data = efc_map.to_bson.to_s
|
1336
|
+
Binary.wrap_string(data) do |data_p|
|
1337
|
+
check_status(handle) do
|
1338
|
+
mongocrypt_setopt_encrypted_field_config_map(
|
1339
|
+
handle.ref,
|
1340
|
+
data_p
|
1341
|
+
)
|
1342
|
+
end
|
1343
|
+
end
|
1344
|
+
end
|
1345
|
+
|
1346
|
+
# @!method self.mongocrypt_setopt_bypass_query_analysis(crypt)
|
1347
|
+
# @api private
|
1348
|
+
#
|
1349
|
+
# Opt into skipping query analysis.
|
1350
|
+
#
|
1351
|
+
# If opted in:
|
1352
|
+
# - The csfle shared library will not attempt to be loaded.
|
1353
|
+
# - A mongocrypt_ctx_t will never enter the MONGOCRYPT_CTX_NEED_MARKINGS state.
|
1354
|
+
#
|
1355
|
+
# @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
|
1356
|
+
attach_function(:mongocrypt_setopt_bypass_query_analysis, [:pointer], :void)
|
1357
|
+
|
1358
|
+
# Opt-into skipping query analysis.
|
1359
|
+
#
|
1360
|
+
# If opted in:
|
1361
|
+
# - The csfle shared library will not attempt to be loaded.
|
1362
|
+
# - A mongocrypt_ctx_t will never enter the MONGOCRYPT_CTX_NEED_MARKINGS state.
|
1363
|
+
#
|
1364
|
+
# @param [ Mongo::Crypt::Handle ] handle
|
1365
|
+
def self.setopt_bypass_query_analysis(handle)
|
1366
|
+
mongocrypt_setopt_bypass_query_analysis(handle.ref)
|
1367
|
+
end
|
1368
|
+
|
1369
|
+
# @!method self.mongocrypt_setopt_aes_256_ctr(crypt, aes_256_ctr_encrypt, aes_256_ctr_decrypt, ctx)
|
1370
|
+
# @api private
|
1371
|
+
#
|
1372
|
+
# Set a crypto hook for the AES256-CTR operations.
|
1373
|
+
#
|
1374
|
+
# @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
|
1375
|
+
# @param [ Proc ] aes_enc_fn An AES-CTR encryption method.
|
1376
|
+
# @param [ Proc ] aes_dec_fn An AES-CTR decryption method.
|
1377
|
+
# @param [ FFI::Pointer | nil ] ctx An optional pointer to a context object
|
1378
|
+
# that may have been set when hooks were enabled.
|
1379
|
+
# @return [ Boolean ] Whether setting this option succeeded.
|
1380
|
+
attach_function(
|
1381
|
+
:mongocrypt_setopt_aes_256_ctr,
|
1382
|
+
[
|
1383
|
+
:pointer,
|
1384
|
+
:mongocrypt_crypto_fn,
|
1385
|
+
:mongocrypt_crypto_fn,
|
1386
|
+
:pointer
|
1387
|
+
],
|
1388
|
+
:bool
|
1389
|
+
)
|
1390
|
+
|
1391
|
+
# Set a crypto hook for the AES256-CTR operations.
|
1392
|
+
#
|
1393
|
+
# @param [ Mongo::Crypt::Handle ] handle
|
1394
|
+
# @param [ Method ] aes_encrypt_cb An AES-CTR encryption method
|
1395
|
+
# @param [ Method ] aes_decrypt_cb A AES-CTR decryption method
|
1396
|
+
#
|
1397
|
+
# @raise [ Mongo::Error::CryptError ] If the callbacks aren't set successfully
|
1398
|
+
def self.setopt_aes_256_ctr(handle, aes_ctr_encrypt_cb, aes_ctr_decrypt_cb)
|
1399
|
+
check_status(handle) do
|
1400
|
+
mongocrypt_setopt_aes_256_ctr(handle.ref,
|
1401
|
+
aes_ctr_encrypt_cb, aes_ctr_decrypt_cb, nil
|
1402
|
+
)
|
1403
|
+
end
|
1404
|
+
end
|
1405
|
+
|
1406
|
+
# @!method self.mongocrypt_setopt_append_crypt_shared_lib_search_path(crypt, path)
|
1407
|
+
# @api private
|
1408
|
+
#
|
1409
|
+
# Append an additional search directory to the search path for loading
|
1410
|
+
# the crypt_shared dynamic library.
|
1411
|
+
#
|
1412
|
+
# @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
|
1413
|
+
# @param [ String ] path A path to search for the crypt shared library. If the leading element of
|
1414
|
+
# the path is the literal string "$ORIGIN", that substring will be replaced
|
1415
|
+
# with the directory path containing the executable libmongocrypt module. If
|
1416
|
+
# the path string is literal "$SYSTEM", then libmongocrypt will defer to the
|
1417
|
+
# system's library resolution mechanism to find the crypt_shared library.
|
1418
|
+
attach_function(
|
1419
|
+
:mongocrypt_setopt_append_crypt_shared_lib_search_path,
|
1420
|
+
[
|
1421
|
+
:pointer,
|
1422
|
+
:string,
|
1423
|
+
],
|
1424
|
+
:void
|
1425
|
+
)
|
1426
|
+
|
1427
|
+
# Append an additional search directory to the search path for loading
|
1428
|
+
# the crypt_shared dynamic library.
|
1429
|
+
#
|
1430
|
+
# @param [ Mongo::Crypt::Handle ] handle
|
1431
|
+
# @param [ String ] path A search path for the crypt shared library.
|
1432
|
+
def self.setopt_append_crypt_shared_lib_search_path(handle, path)
|
1433
|
+
check_status(handle) do
|
1434
|
+
mongocrypt_setopt_append_crypt_shared_lib_search_path(handle.ref, path)
|
1435
|
+
end
|
1436
|
+
end
|
1437
|
+
|
1438
|
+
# @!method self.mongocrypt_setopt_set_crypt_shared_lib_path_override(crypt, path)
|
1439
|
+
# @api private
|
1440
|
+
#
|
1441
|
+
# Set a single override path for loading the crypt shared library.
|
1442
|
+
#
|
1443
|
+
# @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
|
1444
|
+
# @param [ String ] path A path to crypt shared library file. If the leading element of
|
1445
|
+
# the path is the literal string "$ORIGIN", that substring will be replaced
|
1446
|
+
# with the directory path containing the executable libmongocrypt module.
|
1447
|
+
attach_function(
|
1448
|
+
:mongocrypt_setopt_set_crypt_shared_lib_path_override,
|
1449
|
+
[
|
1450
|
+
:pointer,
|
1451
|
+
:string,
|
1452
|
+
],
|
1453
|
+
:void
|
1454
|
+
)
|
1455
|
+
|
1456
|
+
# Set a single override path for loading the crypt shared library.
|
1457
|
+
#
|
1458
|
+
# @param [ Mongo::Crypt::Handle ] handle
|
1459
|
+
# @param [ String ] path A path to crypt shared library file.
|
1460
|
+
def self.setopt_set_crypt_shared_lib_path_override(handle, path)
|
1461
|
+
check_status(handle) do
|
1462
|
+
mongocrypt_setopt_set_crypt_shared_lib_path_override(handle.ref, path)
|
1463
|
+
end
|
1464
|
+
end
|
1465
|
+
|
1466
|
+
# MONGOCRYPT_EXPORT
|
1467
|
+
# uint64_t
|
1468
|
+
# mongocrypt_crypt_shared_lib_version (const mongocrypt_t *crypt);
|
1469
|
+
attach_function(
|
1470
|
+
:mongocrypt_crypt_shared_lib_version,
|
1471
|
+
[ :pointer ],
|
1472
|
+
:uint64
|
1473
|
+
)
|
1474
|
+
|
1475
|
+
def self.crypt_shared_lib_version(handle)
|
1476
|
+
mongocrypt_crypt_shared_lib_version(handle.ref)
|
1477
|
+
end
|
1478
|
+
|
1479
|
+
|
1480
|
+
# @!method self.mongocrypt_ctx_setopt_query_type(ctx, mongocrypt_query_type)
|
1481
|
+
# @api private
|
1482
|
+
#
|
1483
|
+
# Set the query type to use for FLE 2 explicit encryption.
|
1484
|
+
# The query type is only used for indexed FLE 2 encryption.
|
1485
|
+
#
|
1486
|
+
# @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
|
1487
|
+
# @param [ String ] query_type Type of the query.
|
1488
|
+
# @param [ Integer ] len The length of the query type string.
|
1489
|
+
#
|
1490
|
+
# @return [ Boolean ] Whether setting this option succeeded.
|
1491
|
+
attach_function(
|
1492
|
+
:mongocrypt_ctx_setopt_query_type,
|
1493
|
+
[
|
1494
|
+
:pointer,
|
1495
|
+
:string,
|
1496
|
+
:int
|
1497
|
+
],
|
1498
|
+
:bool
|
1499
|
+
)
|
1500
|
+
|
1501
|
+
# Set the query type to use for FLE 2 explicit encryption.
|
1502
|
+
# The query type is only used for indexed FLE 2 encryption.
|
1503
|
+
#
|
1504
|
+
# @param [ Mongo::Crypt::Context ] context Explicit encryption context.
|
1505
|
+
# @param [ String ] :mongocrypt_query_type query_type Type of the query.
|
1506
|
+
#
|
1507
|
+
# @raise [ Mongo::Error::CryptError ] If the operation failed.
|
1508
|
+
def self.ctx_setopt_query_type(context, query_type)
|
1509
|
+
check_ctx_status(context) do
|
1510
|
+
mongocrypt_ctx_setopt_query_type(context.ctx_p, query_type, -1)
|
1511
|
+
end
|
1512
|
+
end
|
1513
|
+
|
1514
|
+
# @!method self.mongocrypt_ctx_setopt_contention_factor(ctx, contention_factor)
|
1515
|
+
# @api private
|
1516
|
+
#
|
1517
|
+
# Set the contention factor used for explicit encryption.
|
1518
|
+
# The contention factor is only used for indexed FLE 2 encryption.
|
1519
|
+
#
|
1520
|
+
# @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
|
1521
|
+
# @param [ int64 ] contention_factor
|
1522
|
+
#
|
1523
|
+
# @return [ Boolean ] Whether setting this option succeeded.
|
1524
|
+
attach_function(
|
1525
|
+
:mongocrypt_ctx_setopt_contention_factor,
|
1526
|
+
[
|
1527
|
+
:pointer,
|
1528
|
+
:int64
|
1529
|
+
],
|
1530
|
+
:bool
|
1531
|
+
)
|
1532
|
+
|
1533
|
+
# Set the contention factor used for explicit encryption.
|
1534
|
+
# The contention factor is only used for indexed FLE 2 encryption.
|
1535
|
+
#
|
1536
|
+
# @param [ Mongo::Crypt::Context ] context Explicit encryption context.
|
1537
|
+
# @param [ Integer ] factor Contention factor used for explicit encryption.
|
1538
|
+
#
|
1539
|
+
# @raise [ Mongo::Error::CryptError ] If the operation failed.
|
1540
|
+
def self.ctx_setopt_contention_factor(context, factor)
|
1541
|
+
check_ctx_status(context) do
|
1542
|
+
mongocrypt_ctx_setopt_contention_factor(context.ctx_p, factor)
|
1543
|
+
end
|
1544
|
+
end
|
1545
|
+
|
1177
1546
|
# Raise a Mongo::Error::CryptError based on the status of the underlying
|
1178
1547
|
# mongocrypt_t object.
|
1179
1548
|
#
|