mongo 2.17.3 → 2.18.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +21 -37
- 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 +108 -28
- data/lib/mongo/client.rb +114 -12
- data/lib/mongo/client_encryption.rb +30 -9
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +11 -1
- data/lib/mongo/cluster.rb +20 -24
- data/lib/mongo/collection/helpers.rb +43 -0
- data/lib/mongo/collection/queryable_encryption.rb +122 -0
- data/lib/mongo/collection/view/aggregation.rb +19 -16
- data/lib/mongo/collection/view/change_stream.rb +56 -23
- data/lib/mongo/collection/view/explainable.rb +1 -1
- data/lib/mongo/collection/view/iterable.rb +2 -3
- data/lib/mongo/collection/view/map_reduce.rb +18 -9
- data/lib/mongo/collection/view/readable.rb +19 -23
- data/lib/mongo/collection/view/writable.rb +133 -40
- data/lib/mongo/collection.rb +108 -48
- data/lib/mongo/config/options.rb +62 -0
- data/lib/mongo/config/validators/option.rb +26 -0
- data/lib/mongo/config.rb +31 -0
- data/lib/mongo/crypt/auto_encrypter.rb +79 -6
- data/lib/mongo/crypt/binding.rb +395 -143
- data/lib/mongo/crypt/context.rb +5 -2
- data/lib/mongo/crypt/data_key_context.rb +7 -104
- data/lib/mongo/crypt/encryption_io.rb +28 -60
- data/lib/mongo/crypt/explicit_encrypter.rb +27 -25
- data/lib/mongo/crypt/explicit_encryption_context.rb +31 -3
- data/lib/mongo/crypt/handle.rb +102 -79
- data/lib/mongo/crypt/hooks.rb +25 -2
- data/lib/mongo/crypt/kms/aws.rb +128 -0
- data/lib/mongo/crypt/kms/azure.rb +136 -0
- data/lib/mongo/crypt/kms/credentials.rb +81 -0
- data/lib/mongo/crypt/kms/gcp.rb +182 -0
- data/lib/mongo/crypt/kms/kmip.rb +110 -0
- data/lib/mongo/crypt/kms/local.rb +74 -0
- data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
- data/lib/mongo/crypt/kms.rb +117 -0
- data/lib/mongo/crypt.rb +1 -0
- data/lib/mongo/cursor/kill_spec.rb +27 -6
- data/lib/mongo/cursor.rb +21 -16
- data/lib/mongo/database/view.rb +6 -3
- data/lib/mongo/database.rb +73 -12
- data/lib/mongo/dbref.rb +1 -105
- 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/notable.rb +7 -0
- data/lib/mongo/error/operation_failure.rb +34 -86
- data/lib/mongo/error/read_write_retryable.rb +108 -0
- data/lib/mongo/{operation/kill_cursors/legacy.rb → error/session_not_materialized.rb} +7 -19
- data/lib/mongo/error.rb +5 -37
- data/lib/mongo/index/view.rb +22 -7
- data/lib/mongo/monitoring/event/command_failed.rb +8 -2
- data/lib/mongo/monitoring/event/command_started.rb +1 -1
- data/lib/mongo/monitoring/event/command_succeeded.rb +9 -2
- data/lib/mongo/monitoring/publishable.rb +9 -5
- 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 +24 -6
- data/lib/mongo/operation/count/op_msg.rb +4 -1
- data/lib/mongo/operation/create/op_msg.rb +16 -1
- data/lib/mongo/operation/create_index/op_msg.rb +2 -1
- data/lib/mongo/operation/delete/op_msg.rb +1 -0
- data/lib/mongo/operation/delete.rb +0 -1
- data/lib/mongo/operation/drop_index/op_msg.rb +5 -1
- data/lib/mongo/operation/get_more/command_builder.rb +5 -1
- 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.rb +0 -1
- data/lib/mongo/operation/list_collections/op_msg.rb +4 -1
- data/lib/mongo/operation/map_reduce/result.rb +16 -0
- data/lib/mongo/operation/result.rb +21 -5
- data/lib/mongo/operation/shared/executable.rb +21 -6
- data/lib/mongo/operation/shared/polymorphic_operation.rb +15 -3
- data/lib/mongo/operation/shared/response_handling.rb +6 -5
- data/lib/mongo/operation/shared/sessions_supported.rb +3 -7
- data/lib/mongo/operation/shared/write.rb +18 -12
- data/lib/mongo/operation/update/op_msg.rb +2 -1
- data/lib/mongo/operation/update.rb +0 -1
- data/lib/mongo/protocol/caching_hash.rb +69 -0
- data/lib/mongo/protocol/msg.rb +37 -1
- data/lib/mongo/protocol.rb +1 -0
- data/lib/mongo/query_cache.rb +15 -0
- data/lib/mongo/retryable.rb +78 -30
- data/lib/mongo/server/connection.rb +33 -0
- data/lib/mongo/server/connection_base.rb +2 -0
- data/lib/mongo/server/connection_common.rb +4 -1
- data/lib/mongo/server/connection_pool.rb +69 -42
- data/lib/mongo/server/description/features.rb +3 -1
- data/lib/mongo/server/description.rb +7 -2
- data/lib/mongo/server/monitor/connection.rb +5 -10
- data/lib/mongo/server/monitor.rb +21 -13
- data/lib/mongo/server/push_monitor.rb +9 -3
- data/lib/mongo/server.rb +9 -5
- data/lib/mongo/session/session_pool.rb +8 -0
- data/lib/mongo/session.rb +111 -35
- data/lib/mongo/socket/ocsp_verifier.rb +4 -5
- data/lib/mongo/socket/tcp.rb +3 -0
- data/lib/mongo/srv/resolver.rb +24 -3
- data/lib/mongo/uri/options_mapper.rb +2 -0
- data/lib/mongo/uri/srv_protocol.rb +1 -1
- data/lib/mongo/uri.rb +20 -0
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo.rb +20 -0
- data/mongo.gemspec +10 -4
- data/spec/README.md +5 -5
- 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 +0 -16
- data/spec/integration/change_stream_spec.rb +6 -5
- data/spec/integration/client_construction_spec.rb +1 -1
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -9
- data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +18 -19
- 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 +2 -2
- 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 +97 -7
- 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 +394 -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/views_spec.rb +1 -1
- data/spec/integration/client_update_spec.rb +2 -2
- data/spec/integration/crud_spec.rb +12 -0
- data/spec/integration/cursor_pinning_spec.rb +3 -3
- data/spec/integration/fork_reconnect_spec.rb +15 -8
- data/spec/integration/grid_fs_bucket_spec.rb +3 -3
- data/spec/integration/ocsp_verifier_spec.rb +1 -0
- data/spec/integration/query_cache_spec.rb +34 -30
- data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
- data/spec/integration/sdam_events_spec.rb +0 -40
- data/spec/integration/server_monitor_spec.rb +2 -1
- 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 +37 -0
- data/spec/integration/step_down_spec.rb +20 -4
- data/spec/integration/transaction_pinning_spec.rb +2 -2
- data/spec/integration/versioned_api_examples_spec.rb +37 -31
- data/spec/lite_spec_helper.rb +14 -5
- data/spec/mongo/address/ipv6_spec.rb +7 -0
- data/spec/mongo/address_spec.rb +7 -0
- 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/bulk_write/result_spec.rb +15 -1
- data/spec/mongo/bulk_write_spec.rb +128 -20
- data/spec/mongo/client_construction_spec.rb +141 -7
- data/spec/mongo/client_encryption_spec.rb +11 -11
- data/spec/mongo/client_spec.rb +297 -1
- data/spec/mongo/cluster/cursor_reaper_spec.rb +21 -3
- data/spec/mongo/cluster_spec.rb +0 -44
- data/spec/mongo/collection/view/aggregation_spec.rb +2 -2
- data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
- data/spec/mongo/collection/view/readable_spec.rb +35 -56
- data/spec/mongo/collection/view/writable_spec.rb +144 -32
- data/spec/mongo/collection_crud_spec.rb +63 -13
- 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 +106 -0
- data/spec/mongo/crypt/auto_encryption_context_spec.rb +17 -1
- data/spec/mongo/crypt/binding/context_spec.rb +99 -17
- data/spec/mongo/crypt/binding/mongocrypt_spec.rb +17 -46
- data/spec/mongo/crypt/binding/version_spec.rb +25 -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 +89 -1
- data/spec/mongo/crypt/handle_spec.rb +47 -169
- data/spec/mongo/crypt/hooks_spec.rb +30 -0
- data/spec/mongo/crypt/kms/credentials_spec.rb +404 -0
- data/spec/mongo/crypt/kms_spec.rb +59 -0
- data/spec/mongo/cursor_spec.rb +37 -51
- data/spec/mongo/database_spec.rb +66 -1
- data/spec/mongo/error/operation_failure_heavy_spec.rb +49 -0
- data/spec/mongo/index/view_spec.rb +69 -0
- data/spec/mongo/operation/create/op_msg_spec.rb +286 -0
- data/spec/mongo/operation/delete/op_msg_spec.rb +13 -4
- data/spec/mongo/operation/delete_spec.rb +0 -30
- data/spec/mongo/operation/insert/op_msg_spec.rb +18 -10
- data/spec/mongo/operation/insert_spec.rb +0 -32
- data/spec/mongo/operation/result_spec.rb +20 -0
- data/spec/mongo/operation/update/op_msg_spec.rb +13 -4
- 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 +1 -0
- 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 +13 -1
- data/spec/mongo/server/connection_pool_spec.rb +94 -49
- data/spec/mongo/server/connection_spec.rb +50 -159
- data/spec/mongo/server/description/features_spec.rb +24 -0
- data/spec/mongo/server/push_monitor_spec.rb +2 -8
- data/spec/mongo/session_spec.rb +26 -6
- data/spec/mongo/session_transaction_spec.rb +2 -1
- data/spec/mongo/socket/ssl_spec.rb +15 -4
- data/spec/mongo/uri/srv_protocol_spec.rb +101 -2
- data/spec/mongo/uri_spec.rb +25 -0
- data/spec/runners/connection_string.rb +8 -0
- data/spec/runners/crud/operation.rb +12 -3
- data/spec/runners/crud/requirement.rb +3 -3
- data/spec/runners/crud/spec.rb +5 -0
- data/spec/runners/crud/verifier.rb +6 -0
- data/spec/runners/transactions/test.rb +33 -14
- data/spec/runners/transactions.rb +9 -6
- data/spec/runners/unified/assertions.rb +59 -10
- data/spec/runners/unified/change_stream_operations.rb +9 -0
- data/spec/runners/unified/crud_operations.rb +50 -2
- data/spec/runners/unified/ddl_operations.rb +20 -0
- data/spec/runners/unified/error.rb +2 -1
- data/spec/runners/unified/support_operations.rb +5 -2
- data/spec/runners/unified/test.rb +19 -4
- data/spec/runners/unified.rb +9 -2
- data/spec/shared/lib/mrss/constraints.rb +10 -17
- data/spec/shared/lib/mrss/docker_runner.rb +21 -3
- data/spec/shared/lib/mrss/lite_constraints.rb +32 -1
- 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 +56 -54
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +2 -1
- data/spec/shared/shlib/server.sh +46 -21
- data/spec/shared/shlib/set_env.sh +40 -5
- data/spec/spec_helper.rb +0 -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 +1068 -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/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/updateMany.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
- 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/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/crud/read/aggregate-collation.yml +1 -1
- data/spec/spec_tests/data/crud/read/count-collation.yml +1 -1
- data/spec/spec_tests/data/crud/read/distinct-collation.yml +1 -1
- data/spec/spec_tests/data/crud/read/find-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/updateMany-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/updateOne-collation.yml +1 -1
- data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -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.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.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 +2 -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 +2 -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.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 +2 -4
- 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/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/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 +5 -1
- 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 +5 -1
- 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/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/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.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/{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/{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_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +129 -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-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
- 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-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
- 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-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
- 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-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
- 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-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
- 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-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
- 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-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
- 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-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
- 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-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
- 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/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -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/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/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 +9 -3
- 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-errorLabels.yml +0 -2
- data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
- data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
- data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
- data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
- 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/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/retryable_reads_spec.rb +4 -1
- data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
- data/spec/spec_tests/retryable_writes_spec.rb +4 -1
- data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
- data/spec/spec_tests/seed_list_discovery_spec.rb +10 -1
- data/spec/spec_tests/unified_spec.rb +6 -1
- data/spec/stress/connection_pool_timing_spec.rb +2 -1
- data/spec/stress/fork_reconnect_stress_spec.rb +3 -2
- data/spec/support/authorization.rb +1 -1
- data/spec/support/certificates/atlas-ocsp-ca.crt +47 -40
- data/spec/support/certificates/atlas-ocsp.crt +106 -101
- data/spec/support/cluster_tools.rb +1 -1
- data/spec/support/common_shortcuts.rb +22 -0
- 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 +207 -6
- data/spec/support/macros.rb +18 -0
- data/spec/support/mongos_macros.rb +17 -0
- data/spec/support/shared/scram_conversation.rb +2 -1
- data/spec/support/shared/session.rb +13 -7
- data/spec/support/spec_config.rb +82 -1
- data/spec/support/utils.rb +25 -4
- data.tar.gz.sig +0 -0
- metadata +1468 -1214
- metadata.gz.sig +0 -0
- data/lib/mongo/operation/delete/legacy.rb +0 -64
- 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 -76
- data/spec/mongo/dbref_spec.rb +0 -152
- data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
- data/spec/spec_tests/change_streams_spec.rb +0 -93
- 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/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/support/crypt/corpus/corpus_encrypted.json +0 -4152
- data/spec/support/session_registry.rb +0 -55
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.0.alpha")
|
87
|
+
|
62
88
|
# @!method self.mongocrypt_version(len)
|
63
89
|
# @api private
|
64
90
|
#
|
@@ -68,6 +94,23 @@ 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
|
+
end
|
111
|
+
|
112
|
+
validate_version(mongocrypt_version(nil))
|
113
|
+
|
71
114
|
# @!method self.mongocrypt_binary_new
|
72
115
|
# @api private
|
73
116
|
#
|
@@ -253,69 +296,36 @@ module Mongo
|
|
253
296
|
end
|
254
297
|
end
|
255
298
|
|
256
|
-
# @!method self.
|
299
|
+
# @!method self.mongocrypt_setopt_kms_providers(crypt, kms_providers)
|
257
300
|
# @api private
|
258
301
|
#
|
259
|
-
# Configure
|
302
|
+
# Configure KMS providers with a BSON document.
|
260
303
|
# @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
|
304
|
+
# @param [ FFI::Pointer ] kms_providers A pointer to a
|
305
|
+
# mongocrypt_binary_t object that references a BSON document mapping
|
306
|
+
# the KMS provider names to credentials.
|
307
|
+
# @note Do not initialize ctx before calling this method.
|
297
308
|
#
|
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.
|
309
|
+
# @returns [ true | false ] Returns whether the options was set successfully.
|
303
310
|
attach_function(
|
304
|
-
:
|
311
|
+
:mongocrypt_setopt_kms_providers,
|
305
312
|
[:pointer, :pointer],
|
306
313
|
:bool
|
307
314
|
)
|
308
315
|
|
309
|
-
# Set
|
316
|
+
# Set KMS providers options on the Mongo::Crypt::Handle object
|
310
317
|
#
|
311
318
|
# @param [ Mongo::Crypt::Handle ] handle
|
312
|
-
# @param [
|
319
|
+
# @param [ BSON::Document ] kms_providers BSON document mapping
|
320
|
+
# the KMS provider names to credentials.
|
313
321
|
#
|
314
322
|
# @raise [ Mongo::Error::CryptError ] If the option is not set successfully
|
315
|
-
def self.
|
316
|
-
|
323
|
+
def self.setopt_kms_providers(handle, kms_providers)
|
324
|
+
validate_document(kms_providers)
|
325
|
+
data = kms_providers.to_bson.to_s
|
326
|
+
Binary.wrap_string(data) do |data_p|
|
317
327
|
check_status(handle) do
|
318
|
-
|
328
|
+
mongocrypt_setopt_kms_providers(handle.ref, data_p)
|
319
329
|
end
|
320
330
|
end
|
321
331
|
end
|
@@ -496,95 +506,36 @@ module Mongo
|
|
496
506
|
end
|
497
507
|
end
|
498
508
|
|
499
|
-
# @!method self.
|
500
|
-
# @api private
|
501
|
-
#
|
502
|
-
# Configure the ctx to take a master key from AWS.
|
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)
|
509
|
+
# @!method self.mongocrypt_ctx_setopt_key_encryption_key(ctx)
|
568
510
|
# @api private
|
569
511
|
#
|
570
|
-
# Set
|
512
|
+
# Set key encryption key document for creating a data key.
|
571
513
|
# @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
|
514
|
+
# @param [ FFI::Pointer ] bin A pointer to a mongocrypt_binary_t
|
515
|
+
# object that references a BSON document representing the key
|
516
|
+
# encryption key document with an additional "provider" field.
|
572
517
|
# @note Do not initialize ctx before calling this method.
|
573
518
|
# @return [ Boolean ] Whether the option was successfully set.
|
574
519
|
attach_function(
|
575
|
-
:
|
576
|
-
[:pointer],
|
520
|
+
:mongocrypt_ctx_setopt_key_encryption_key,
|
521
|
+
[:pointer, :pointer],
|
577
522
|
:bool
|
578
523
|
)
|
579
524
|
|
580
|
-
#
|
525
|
+
# Set key encryption key document for creating a data key.
|
581
526
|
#
|
582
527
|
# @param [ Mongo::Crypt::Context ] context
|
528
|
+
# @param [ BSON::Document ] key_document BSON document representing the key
|
529
|
+
# encryption key document with an additional "provider" field.
|
583
530
|
#
|
584
531
|
# @raise [ Mongo::Error::CryptError ] If the operation failed
|
585
|
-
def self.
|
586
|
-
|
587
|
-
|
532
|
+
def self.ctx_setopt_key_encryption_key(context, key_document)
|
533
|
+
validate_document(key_document)
|
534
|
+
data = key_document.to_bson.to_s
|
535
|
+
Binary.wrap_string(data) do |data_p|
|
536
|
+
check_ctx_status(context) do
|
537
|
+
mongocrypt_ctx_setopt_key_encryption_key(context.ctx_p, data_p)
|
538
|
+
end
|
588
539
|
end
|
589
540
|
end
|
590
541
|
|
@@ -850,6 +801,58 @@ module Mongo
|
|
850
801
|
end
|
851
802
|
end
|
852
803
|
|
804
|
+
# @!method self.mongocrypt_kms_ctx_get_kms_provider(crypt, kms_providers)
|
805
|
+
# @api private
|
806
|
+
#
|
807
|
+
# Get the KMS provider identifier associated with this KMS request.
|
808
|
+
#
|
809
|
+
# This is used to conditionally configure TLS connections based on the KMS
|
810
|
+
# request. It is useful for KMIP, which authenticates with a client
|
811
|
+
# certificate.
|
812
|
+
#
|
813
|
+
# @param [ FFI::Pointer ] kms Pointer mongocrypt_kms_ctx_t object.
|
814
|
+
# @param [ FFI::Pointer ] len (outparam) Receives the length of the
|
815
|
+
# returned string. It may be NULL. If it is not NULL, it is set to
|
816
|
+
# the length of the returned string without the NULL terminator.
|
817
|
+
#
|
818
|
+
# @returns [ FFI::Pointer ] One of the NULL terminated static strings: "aws", "azure", "gcp", or
|
819
|
+
# "kmip".
|
820
|
+
attach_function(
|
821
|
+
:mongocrypt_kms_ctx_get_kms_provider,
|
822
|
+
[:pointer, :pointer],
|
823
|
+
:pointer
|
824
|
+
)
|
825
|
+
|
826
|
+
# Get the KMS provider identifier associated with this KMS request.
|
827
|
+
#
|
828
|
+
# This is used to conditionally configure TLS connections based on the KMS
|
829
|
+
# request. It is useful for KMIP, which authenticates with a client
|
830
|
+
# certificate.
|
831
|
+
#
|
832
|
+
# @param [ FFI::Pointer ] kms Pointer mongocrypt_kms_ctx_t object.
|
833
|
+
#
|
834
|
+
# @returns [ Symbol | nil ] KMS provider identifier.
|
835
|
+
def self.kms_ctx_get_kms_provider(kms_context)
|
836
|
+
len_ptr = FFI::MemoryPointer.new(:uint32, 1)
|
837
|
+
provider = mongocrypt_kms_ctx_get_kms_provider(
|
838
|
+
kms_context.kms_ctx_p,
|
839
|
+
len_ptr
|
840
|
+
)
|
841
|
+
if len_ptr.nil?
|
842
|
+
nil
|
843
|
+
else
|
844
|
+
len = if BSON::Environment.jruby?
|
845
|
+
# JRuby FFI implementation does not have `read(type)` method, but it
|
846
|
+
# has this `get_uint32`.
|
847
|
+
len_ptr.get_uint32
|
848
|
+
else
|
849
|
+
# For MRI we use a documented `read` method - https://www.rubydoc.info/github/ffi/ffi/FFI%2FPointer:read
|
850
|
+
len_ptr.read(:uint32)
|
851
|
+
end
|
852
|
+
provider.read_string(len).to_sym
|
853
|
+
end
|
854
|
+
end
|
855
|
+
|
853
856
|
# @!method self.mongocrypt_kms_ctx_message(kms, msg)
|
854
857
|
# @api private
|
855
858
|
#
|
@@ -1174,6 +1177,255 @@ module Mongo
|
|
1174
1177
|
end
|
1175
1178
|
end
|
1176
1179
|
|
1180
|
+
# @!method self.mongocrypt_setopt_crypto_hook_sign_rsaes_pkcs1_v1_5(crypt, sign_rsaes_pkcs1_v1_5, ctx=nil)
|
1181
|
+
# @api private
|
1182
|
+
#
|
1183
|
+
# Set a crypto hook for the RSASSA-PKCS1-v1_5 algorithm with a SHA-256 hash.
|
1184
|
+
# @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
|
1185
|
+
# @param [ Proc ] sign_rsaes_pkcs1_v1_5 A RSASSA-PKCS1-v1_5 signing method.
|
1186
|
+
# @param [ FFI::Pointer | nil ] ctx An optional pointer to a context object
|
1187
|
+
# that may have been set when hooks were enabled.
|
1188
|
+
# @return [ Boolean ] Whether setting this option succeeded.
|
1189
|
+
attach_function(
|
1190
|
+
:mongocrypt_setopt_crypto_hook_sign_rsaes_pkcs1_v1_5,
|
1191
|
+
[
|
1192
|
+
:pointer,
|
1193
|
+
:mongocrypt_hmac_fn,
|
1194
|
+
:pointer
|
1195
|
+
],
|
1196
|
+
:bool
|
1197
|
+
)
|
1198
|
+
|
1199
|
+
# Set a crypto hook for the RSASSA-PKCS1-v1_5 algorithm with
|
1200
|
+
# a SHA-256 hash oh the Handle.
|
1201
|
+
#
|
1202
|
+
# @param [ Mongo::Crypt::Handle ] handle
|
1203
|
+
# @param [ Method ] rsaes_pkcs_signature_cb A RSASSA-PKCS1-v1_5 signing method.
|
1204
|
+
#
|
1205
|
+
# @raise [ Mongo::Error::CryptError ] If the callbacks aren't set successfully
|
1206
|
+
def self.setopt_crypto_hook_sign_rsaes_pkcs1_v1_5(
|
1207
|
+
handle,
|
1208
|
+
rsaes_pkcs_signature_cb
|
1209
|
+
)
|
1210
|
+
check_status(handle) do
|
1211
|
+
mongocrypt_setopt_crypto_hook_sign_rsaes_pkcs1_v1_5(
|
1212
|
+
handle.ref,
|
1213
|
+
rsaes_pkcs_signature_cb,
|
1214
|
+
nil
|
1215
|
+
)
|
1216
|
+
end
|
1217
|
+
end
|
1218
|
+
|
1219
|
+
# @!method self.mongocrypt_setopt_encrypted_field_config_map(crypt, efc_map)
|
1220
|
+
# @api private
|
1221
|
+
#
|
1222
|
+
# Set a local EncryptedFieldConfigMap for encryption.
|
1223
|
+
#
|
1224
|
+
# @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
|
1225
|
+
# @param [ FFI::Pointer ] efc_map A pointer to mongocrypt_binary_t object that
|
1226
|
+
# references a BSON document representing the EncryptedFieldConfigMap
|
1227
|
+
# supplied by the user. The keys are collection namespaces and values are
|
1228
|
+
# EncryptedFieldConfigMap documents.
|
1229
|
+
#
|
1230
|
+
# @return [ Boolean ] Whether the operation succeeded.
|
1231
|
+
attach_function(
|
1232
|
+
:mongocrypt_setopt_encrypted_field_config_map,
|
1233
|
+
[
|
1234
|
+
:pointer,
|
1235
|
+
:pointer
|
1236
|
+
],
|
1237
|
+
:bool
|
1238
|
+
)
|
1239
|
+
|
1240
|
+
# Set a local EncryptedFieldConfigMap for encryption.
|
1241
|
+
#
|
1242
|
+
# @param [ Mongo::Crypt::Handle ] handle
|
1243
|
+
# @param [ BSON::Document ] efc_map A BSON document representing
|
1244
|
+
# the EncryptedFieldConfigMap supplied by the user.
|
1245
|
+
# The keys are collection namespaces and values are
|
1246
|
+
# EncryptedFieldConfigMap documents.
|
1247
|
+
#
|
1248
|
+
# @raise [ Mongo::Error::CryptError ] If the operation failed.
|
1249
|
+
def self.setopt_encrypted_field_config_map(handle, efc_map)
|
1250
|
+
validate_document(efc_map)
|
1251
|
+
data = efc_map.to_bson.to_s
|
1252
|
+
Binary.wrap_string(data) do |data_p|
|
1253
|
+
check_status(handle) do
|
1254
|
+
mongocrypt_setopt_encrypted_field_config_map(
|
1255
|
+
handle.ref,
|
1256
|
+
data_p
|
1257
|
+
)
|
1258
|
+
end
|
1259
|
+
end
|
1260
|
+
end
|
1261
|
+
|
1262
|
+
# @!method self.mongocrypt_setopt_bypass_query_analysis(crypt)
|
1263
|
+
# @api private
|
1264
|
+
#
|
1265
|
+
# Opt into skipping query analysis.
|
1266
|
+
#
|
1267
|
+
# If opted in:
|
1268
|
+
# - The csfle shared library will not attempt to be loaded.
|
1269
|
+
# - A mongocrypt_ctx_t will never enter the MONGOCRYPT_CTX_NEED_MARKINGS state.
|
1270
|
+
#
|
1271
|
+
# @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
|
1272
|
+
attach_function(:mongocrypt_setopt_bypass_query_analysis, [:pointer], :void)
|
1273
|
+
|
1274
|
+
# Opt-into skipping query analysis.
|
1275
|
+
#
|
1276
|
+
# If opted in:
|
1277
|
+
# - The csfle shared library will not attempt to be loaded.
|
1278
|
+
# - A mongocrypt_ctx_t will never enter the MONGOCRYPT_CTX_NEED_MARKINGS state.
|
1279
|
+
#
|
1280
|
+
# @param [ Mongo::Crypt::Handle ] handle
|
1281
|
+
def self.setopt_bypass_query_analysis(handle)
|
1282
|
+
mongocrypt_setopt_bypass_query_analysis(handle.ref)
|
1283
|
+
end
|
1284
|
+
|
1285
|
+
# @!method self.mongocrypt_setopt_aes_256_ctr(crypt, aes_256_ctr_encrypt, aes_256_ctr_decrypt, ctx)
|
1286
|
+
# @api private
|
1287
|
+
#
|
1288
|
+
# Set a crypto hook for the AES256-CTR operations.
|
1289
|
+
#
|
1290
|
+
# @param [ FFI::Pointer ] crypt A pointer to a mongocrypt_t object.
|
1291
|
+
# @param [ Proc ] aes_enc_fn An AES-CTR encryption method.
|
1292
|
+
# @param [ Proc ] aes_dec_fn An AES-CTR decryption method.
|
1293
|
+
# @param [ FFI::Pointer | nil ] ctx An optional pointer to a context object
|
1294
|
+
# that may have been set when hooks were enabled.
|
1295
|
+
# @return [ Boolean ] Whether setting this option succeeded.
|
1296
|
+
attach_function(
|
1297
|
+
:mongocrypt_setopt_aes_256_ctr,
|
1298
|
+
[
|
1299
|
+
:pointer,
|
1300
|
+
:mongocrypt_crypto_fn,
|
1301
|
+
:mongocrypt_crypto_fn,
|
1302
|
+
:pointer
|
1303
|
+
],
|
1304
|
+
:bool
|
1305
|
+
)
|
1306
|
+
|
1307
|
+
# Set a crypto hook for the AES256-CTR operations.
|
1308
|
+
#
|
1309
|
+
# @param [ Mongo::Crypt::Handle ] handle
|
1310
|
+
# @param [ Method ] aes_encrypt_cb An AES-CTR encryption method
|
1311
|
+
# @param [ Method ] aes_decrypt_cb A AES-CTR decryption method
|
1312
|
+
#
|
1313
|
+
# @raise [ Mongo::Error::CryptError ] If the callbacks aren't set successfully
|
1314
|
+
def self.setopt_aes_256_ctr(handle, aes_ctr_encrypt_cb, aes_ctr_decrypt_cb)
|
1315
|
+
check_status(handle) do
|
1316
|
+
mongocrypt_setopt_aes_256_ctr(handle.ref,
|
1317
|
+
aes_ctr_encrypt_cb, aes_ctr_decrypt_cb, nil
|
1318
|
+
)
|
1319
|
+
end
|
1320
|
+
end
|
1321
|
+
|
1322
|
+
enum :mongocrypt_index_type, [
|
1323
|
+
:none, 1,
|
1324
|
+
:equality
|
1325
|
+
]
|
1326
|
+
|
1327
|
+
# @!method self.mongocrypt_ctx_setopt_index_type(ctx, mongocrypt_index_type)
|
1328
|
+
# @api private
|
1329
|
+
#
|
1330
|
+
# Set the index type used for explicit encryption.
|
1331
|
+
# The index type is only used for FLE 2 encryption.
|
1332
|
+
#
|
1333
|
+
# @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
|
1334
|
+
# @param[ mongocrypt_index_type ] index_type Type of the index.
|
1335
|
+
#
|
1336
|
+
# @return [ Boolean ] Whether setting this option succeeded.
|
1337
|
+
attach_function(
|
1338
|
+
:mongocrypt_ctx_setopt_index_type,
|
1339
|
+
[
|
1340
|
+
:pointer,
|
1341
|
+
:mongocrypt_index_type
|
1342
|
+
],
|
1343
|
+
:bool
|
1344
|
+
)
|
1345
|
+
|
1346
|
+
# Set the index type used for explicit encryption.
|
1347
|
+
# The index type is only used for FLE 2 encryption.
|
1348
|
+
#
|
1349
|
+
# @param [ Mongo::Crypt::Context ] context Explicit encryption context.
|
1350
|
+
# @param [ Symbol ] :mongocrypt_index_type index_type Type of the index.
|
1351
|
+
# Allowed values are :none, :equality.
|
1352
|
+
#
|
1353
|
+
# @raise [ Mongo::Error::CryptError ] If the operation failed.
|
1354
|
+
def self.ctx_setopt_index_type(context, index_type)
|
1355
|
+
check_ctx_status(context) do
|
1356
|
+
mongocrypt_ctx_setopt_index_type(context.ctx_p, index_type)
|
1357
|
+
end
|
1358
|
+
end
|
1359
|
+
|
1360
|
+
enum :mongocrypt_query_type, [
|
1361
|
+
:equality, 1
|
1362
|
+
]
|
1363
|
+
|
1364
|
+
# @!method self.mongocrypt_ctx_setopt_query_type(ctx, mongocrypt_query_type)
|
1365
|
+
# @api private
|
1366
|
+
#
|
1367
|
+
# Set the query type to use for FLE 2 explicit encryption.
|
1368
|
+
# The query type is only used for indexed FLE 2 encryption.
|
1369
|
+
#
|
1370
|
+
# @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
|
1371
|
+
# @param [ mongocrypt_query_type ] query_type Type of the query.
|
1372
|
+
#
|
1373
|
+
# @return [ Boolean ] Whether setting this option succeeded.
|
1374
|
+
attach_function(
|
1375
|
+
:mongocrypt_ctx_setopt_query_type,
|
1376
|
+
[
|
1377
|
+
:pointer,
|
1378
|
+
:mongocrypt_query_type
|
1379
|
+
],
|
1380
|
+
:bool
|
1381
|
+
)
|
1382
|
+
|
1383
|
+
# Set the query type to use for FLE 2 explicit encryption.
|
1384
|
+
# The query type is only used for indexed FLE 2 encryption.
|
1385
|
+
#
|
1386
|
+
# @param [ Mongo::Crypt::Context ] context Explicit encryption context.
|
1387
|
+
# @param [ Symbol ] :mongocrypt_query_type query_type Type of the query.
|
1388
|
+
# Allowed value is :equality.
|
1389
|
+
#
|
1390
|
+
# @raise [ Mongo::Error::CryptError ] If the operation failed.
|
1391
|
+
def self.ctx_setopt_query_type(context, query_type)
|
1392
|
+
check_ctx_status(context) do
|
1393
|
+
mongocrypt_ctx_setopt_query_type(context.ctx_p, query_type)
|
1394
|
+
end
|
1395
|
+
end
|
1396
|
+
|
1397
|
+
# @!method self.mongocrypt_ctx_setopt_contention_factor(ctx, contention_factor)
|
1398
|
+
# @api private
|
1399
|
+
#
|
1400
|
+
# Set the contention factor used for explicit encryption.
|
1401
|
+
# The contention factor is only used for indexed FLE 2 encryption.
|
1402
|
+
#
|
1403
|
+
# @param [ FFI::Pointer ] ctx A pointer to a mongocrypt_ctx_t object.
|
1404
|
+
# @param [ int64 ] contention_factor
|
1405
|
+
#
|
1406
|
+
# @return [ Boolean ] Whether setting this option succeeded.
|
1407
|
+
attach_function(
|
1408
|
+
:mongocrypt_ctx_setopt_contention_factor,
|
1409
|
+
[
|
1410
|
+
:pointer,
|
1411
|
+
:int64
|
1412
|
+
],
|
1413
|
+
:bool
|
1414
|
+
)
|
1415
|
+
|
1416
|
+
# Set the contention factor used for explicit encryption.
|
1417
|
+
# The contention factor is only used for indexed FLE 2 encryption.
|
1418
|
+
#
|
1419
|
+
# @param [ Mongo::Crypt::Context ] context Explicit encryption context.
|
1420
|
+
# @param [ Integer ] factor Contention factor used for explicit encryption.
|
1421
|
+
#
|
1422
|
+
# @raise [ Mongo::Error::CryptError ] If the operation failed.
|
1423
|
+
def self.ctx_setopt_contention_factor(context, factor)
|
1424
|
+
check_ctx_status(context) do
|
1425
|
+
mongocrypt_ctx_setopt_contention_factor(context.ctx_p, factor)
|
1426
|
+
end
|
1427
|
+
end
|
1428
|
+
|
1177
1429
|
# Raise a Mongo::Error::CryptError based on the status of the underlying
|
1178
1430
|
# mongocrypt_t object.
|
1179
1431
|
#
|
data/lib/mongo/crypt/context.rb
CHANGED
@@ -35,13 +35,14 @@ module Mongo
|
|
35
35
|
# that implements driver I/O methods required to run the
|
36
36
|
# state machine.
|
37
37
|
def initialize(mongocrypt_handle, io)
|
38
|
+
@mongocrypt_handle = mongocrypt_handle
|
38
39
|
# Ideally, this level of the API wouldn't be passing around pointer
|
39
40
|
# references between objects, so this method signature is subject to change.
|
40
41
|
|
41
42
|
# FFI::AutoPointer uses a custom release strategy to automatically free
|
42
43
|
# the pointer once this object goes out of scope
|
43
44
|
@ctx_p = FFI::AutoPointer.new(
|
44
|
-
Binding.mongocrypt_ctx_new(mongocrypt_handle.ref),
|
45
|
+
Binding.mongocrypt_ctx_new(@mongocrypt_handle.ref),
|
45
46
|
Binding.method(:mongocrypt_ctx_destroy)
|
46
47
|
)
|
47
48
|
|
@@ -103,7 +104,9 @@ module Mongo
|
|
103
104
|
mongocrypt_done
|
104
105
|
when :need_kms
|
105
106
|
while kms_context = Binding.ctx_next_kms_ctx(self) do
|
106
|
-
|
107
|
+
provider = Binding.kms_ctx_get_kms_provider(kms_context)
|
108
|
+
tls_options = @mongocrypt_handle.kms_tls_options(provider)
|
109
|
+
@encryption_io.feed_kms(kms_context, tls_options)
|
107
110
|
end
|
108
111
|
|
109
112
|
Binding.ctx_kms_done(self)
|