mongo 2.17.4 → 2.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +70 -37
- data/Rakefile +87 -177
- data/bin/mongo_console +2 -0
- data/lib/mongo/active_support.rb +1 -1
- data/lib/mongo/address/ipv4.rb +1 -1
- data/lib/mongo/address/ipv6.rb +1 -1
- data/lib/mongo/address/unix.rb +1 -1
- data/lib/mongo/address/validator.rb +1 -1
- data/lib/mongo/address.rb +23 -4
- data/lib/mongo/auth/aws/conversation.rb +1 -5
- data/lib/mongo/{operation/drop_database/command.rb → auth/aws/credentials.rb} +15 -18
- data/lib/mongo/auth/aws/credentials_cache.rb +75 -0
- data/lib/mongo/auth/aws/credentials_retriever.rb +232 -44
- data/lib/mongo/auth/aws/request.rb +1 -2
- data/lib/mongo/auth/aws.rb +6 -6
- data/lib/mongo/auth/base.rb +9 -2
- data/lib/mongo/auth/conversation_base.rb +1 -1
- data/lib/mongo/auth/cr/conversation.rb +1 -1
- data/lib/mongo/auth/cr.rb +1 -1
- data/lib/mongo/auth/credential_cache.rb +1 -1
- data/lib/mongo/auth/gssapi/conversation.rb +1 -1
- data/lib/mongo/auth/gssapi.rb +1 -1
- data/lib/mongo/auth/ldap/conversation.rb +1 -1
- data/lib/mongo/auth/ldap.rb +1 -1
- data/lib/mongo/auth/roles.rb +17 -17
- data/lib/mongo/auth/sasl_conversation_base.rb +1 -1
- data/lib/mongo/auth/scram/conversation.rb +1 -1
- data/lib/mongo/auth/scram.rb +1 -1
- data/lib/mongo/auth/scram256/conversation.rb +1 -1
- data/lib/mongo/auth/scram256.rb +1 -1
- data/lib/mongo/auth/scram_conversation_base.rb +1 -1
- data/lib/mongo/auth/stringprep/profiles/sasl.rb +1 -1
- data/lib/mongo/auth/stringprep/tables.rb +1 -1
- data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +1 -1
- data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +2 -1
- data/lib/mongo/auth/stringprep.rb +1 -1
- data/lib/mongo/auth/user/view.rb +1 -1
- data/lib/mongo/auth/user.rb +1 -1
- data/lib/mongo/auth/x509/conversation.rb +1 -1
- data/lib/mongo/auth/x509.rb +1 -1
- data/lib/mongo/auth.rb +13 -2
- data/lib/mongo/background_thread.rb +1 -1
- data/lib/mongo/bson.rb +1 -1
- data/lib/mongo/bulk_write/combineable.rb +1 -1
- data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
- data/lib/mongo/bulk_write/result.rb +11 -2
- data/lib/mongo/bulk_write/result_combiner.rb +3 -5
- data/lib/mongo/bulk_write/transformable.rb +1 -1
- data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
- data/lib/mongo/bulk_write/validatable.rb +1 -1
- data/lib/mongo/bulk_write.rb +152 -31
- data/lib/mongo/caching_cursor.rb +1 -1
- data/lib/mongo/client.rb +223 -27
- data/lib/mongo/client_encryption.rb +218 -11
- data/lib/mongo/cluster/periodic_executor.rb +1 -1
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +14 -3
- data/lib/mongo/cluster/reapers/socket_reaper.rb +2 -2
- data/lib/mongo/cluster/sdam_flow.rb +62 -22
- data/lib/mongo/cluster/topology/base.rb +17 -1
- data/lib/mongo/cluster/topology/load_balanced.rb +1 -1
- data/lib/mongo/cluster/topology/no_replica_set_options.rb +1 -1
- data/lib/mongo/cluster/topology/replica_set_no_primary.rb +1 -1
- data/lib/mongo/cluster/topology/replica_set_with_primary.rb +1 -1
- data/lib/mongo/cluster/topology/sharded.rb +1 -1
- data/lib/mongo/cluster/topology/single.rb +1 -1
- data/lib/mongo/cluster/topology/unknown.rb +1 -1
- data/lib/mongo/cluster/topology.rb +1 -1
- data/lib/mongo/cluster.rb +95 -44
- data/lib/mongo/cluster_time.rb +1 -1
- data/lib/mongo/collection/helpers.rb +43 -0
- data/lib/mongo/collection/queryable_encryption.rb +162 -0
- data/lib/mongo/collection/view/aggregation/behavior.rb +131 -0
- data/lib/mongo/collection/view/aggregation.rb +51 -111
- data/lib/mongo/collection/view/builder/aggregation.rb +2 -8
- data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
- data/lib/mongo/collection/view/builder.rb +1 -1
- data/lib/mongo/collection/view/change_stream/retryable.rb +1 -1
- data/lib/mongo/collection/view/change_stream.rb +143 -48
- data/lib/mongo/collection/view/explainable.rb +2 -2
- data/lib/mongo/collection/view/immutable.rb +1 -1
- data/lib/mongo/collection/view/iterable.rb +79 -62
- data/lib/mongo/collection/view/map_reduce.rb +41 -15
- data/lib/mongo/collection/view/readable.rb +114 -62
- data/lib/mongo/collection/view/writable.rb +222 -70
- data/lib/mongo/collection/view.rb +44 -4
- data/lib/mongo/collection.rb +463 -114
- data/lib/mongo/condition_variable.rb +58 -0
- data/lib/mongo/config/options.rb +63 -0
- data/lib/mongo/config/validators/option.rb +27 -0
- data/lib/mongo/config.rb +43 -0
- data/lib/mongo/crypt/auto_decryption_context.rb +1 -1
- data/lib/mongo/crypt/auto_encrypter.rb +142 -20
- data/lib/mongo/crypt/auto_encryption_context.rb +1 -1
- data/lib/mongo/crypt/binary.rb +1 -1
- data/lib/mongo/crypt/binding.rb +715 -152
- data/lib/mongo/crypt/context.rb +83 -11
- data/lib/mongo/crypt/data_key_context.rb +13 -105
- data/lib/mongo/crypt/encryption_io.rb +133 -69
- data/lib/mongo/crypt/explicit_decryption_context.rb +1 -1
- data/lib/mongo/crypt/explicit_encrypter.rb +266 -34
- data/lib/mongo/crypt/explicit_encryption_context.rb +82 -22
- data/lib/mongo/{operation/kill_cursors/legacy.rb → crypt/explicit_encryption_expression_context.rb} +9 -20
- data/lib/mongo/crypt/handle.rb +169 -87
- data/lib/mongo/crypt/hooks.rb +26 -3
- data/lib/mongo/crypt/kms/aws/credentials.rb +83 -0
- data/lib/mongo/crypt/kms/aws/master_document.rb +78 -0
- data/lib/mongo/crypt/kms/aws.rb +20 -0
- data/lib/mongo/crypt/kms/azure/access_token.rb +54 -0
- data/lib/mongo/crypt/kms/azure/credentials.rb +103 -0
- data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +138 -0
- data/lib/mongo/crypt/kms/azure/master_document.rb +79 -0
- data/lib/mongo/crypt/kms/azure.rb +21 -0
- data/lib/mongo/crypt/kms/credentials.rb +96 -0
- data/lib/mongo/crypt/kms/gcp/credentials.rb +127 -0
- data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +83 -0
- data/lib/mongo/crypt/kms/gcp/master_document.rb +99 -0
- data/lib/mongo/crypt/kms/gcp.rb +21 -0
- data/lib/mongo/crypt/kms/kmip/credentials.rb +68 -0
- data/lib/mongo/crypt/kms/kmip/master_document.rb +74 -0
- data/lib/mongo/crypt/kms/kmip.rb +19 -0
- data/lib/mongo/crypt/kms/local/credentials.rb +65 -0
- data/lib/mongo/crypt/kms/local/master_document.rb +43 -0
- data/lib/mongo/crypt/kms/local.rb +19 -0
- data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
- data/lib/mongo/crypt/kms.rb +122 -0
- data/lib/mongo/crypt/kms_context.rb +1 -1
- 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 +9 -3
- data/lib/mongo/crypt.rb +16 -1
- data/lib/mongo/csot_timeout_holder.rb +119 -0
- data/lib/mongo/cursor/kill_spec.rb +31 -7
- data/lib/mongo/cursor/nontailable.rb +27 -0
- data/lib/mongo/cursor.rb +141 -35
- data/lib/mongo/cursor_host.rb +82 -0
- data/lib/mongo/database/view.rb +123 -16
- data/lib/mongo/database.rb +149 -35
- data/lib/mongo/dbref.rb +2 -106
- data/lib/mongo/distinguishing_semaphore.rb +2 -2
- data/lib/mongo/error/auth_error.rb +1 -1
- data/lib/mongo/error/bad_load_balancer_target.rb +1 -1
- data/lib/mongo/error/bulk_write_error.rb +32 -5
- data/lib/mongo/error/change_stream_resumable.rb +1 -1
- data/lib/mongo/error/client_closed.rb +24 -0
- data/lib/mongo/error/closed_stream.rb +1 -1
- data/lib/mongo/error/connection_check_out_timeout.rb +1 -1
- data/lib/mongo/error/connection_perished.rb +3 -1
- data/lib/mongo/error/connection_unavailable.rb +27 -0
- data/lib/mongo/error/credential_check_error.rb +1 -1
- data/lib/mongo/error/crypt_error.rb +1 -1
- data/lib/mongo/error/extra_file_chunk.rb +1 -1
- data/lib/mongo/error/failed_string_prep_validation.rb +1 -1
- data/lib/mongo/error/file_not_found.rb +1 -1
- data/lib/mongo/error/handshake_error.rb +1 -1
- data/lib/mongo/error/insufficient_iteration_count.rb +1 -1
- data/lib/mongo/error/internal_driver_error.rb +1 -1
- data/lib/mongo/error/invalid_address.rb +1 -1
- data/lib/mongo/error/invalid_application_name.rb +1 -1
- data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
- data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
- data/lib/mongo/error/invalid_collection_name.rb +1 -1
- data/lib/mongo/error/invalid_config_option.rb +21 -0
- data/lib/mongo/error/invalid_cursor_operation.rb +1 -1
- data/lib/mongo/error/invalid_database_name.rb +1 -1
- data/lib/mongo/error/invalid_document.rb +1 -1
- data/lib/mongo/error/invalid_file.rb +1 -1
- data/lib/mongo/error/invalid_file_revision.rb +1 -1
- data/lib/mongo/{operation/drop/command.rb → error/invalid_max_connecting.rb} +8 -21
- data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
- data/lib/mongo/error/invalid_nonce.rb +1 -1
- data/lib/mongo/error/invalid_read_concern.rb +1 -1
- data/lib/mongo/error/invalid_read_option.rb +2 -2
- data/lib/mongo/error/invalid_replacement_document.rb +28 -10
- data/lib/mongo/error/invalid_server_auth_host.rb +1 -1
- data/lib/mongo/error/invalid_server_auth_response.rb +1 -1
- data/lib/mongo/error/invalid_server_preference.rb +1 -1
- data/lib/mongo/error/invalid_session.rb +1 -1
- data/lib/mongo/error/invalid_signature.rb +1 -1
- data/lib/mongo/error/invalid_transaction_operation.rb +1 -1
- data/lib/mongo/error/invalid_txt_record.rb +1 -1
- data/lib/mongo/error/invalid_update_document.rb +28 -8
- data/lib/mongo/error/invalid_uri.rb +1 -1
- data/lib/mongo/error/invalid_write_concern.rb +1 -1
- data/lib/mongo/error/kms_error.rb +1 -1
- data/lib/mongo/error/labelable.rb +72 -0
- data/lib/mongo/error/lint_error.rb +1 -1
- data/lib/mongo/error/max_bson_size.rb +1 -1
- data/lib/mongo/error/max_message_size.rb +1 -1
- data/lib/mongo/error/mismatched_domain.rb +1 -1
- data/lib/mongo/error/missing_connection.rb +27 -0
- data/lib/mongo/error/missing_file_chunk.rb +9 -3
- data/lib/mongo/error/missing_password.rb +1 -1
- data/lib/mongo/error/missing_resume_token.rb +1 -1
- data/lib/mongo/error/missing_scram_server_signature.rb +1 -1
- data/lib/mongo/error/missing_service_id.rb +1 -1
- data/lib/mongo/error/mongocryptd_spawn_error.rb +1 -1
- data/lib/mongo/error/multi_index_drop.rb +1 -1
- data/lib/mongo/error/need_primary_server.rb +1 -1
- data/lib/mongo/error/no_server_available.rb +1 -1
- data/lib/mongo/error/no_service_connection_available.rb +1 -1
- data/lib/mongo/error/no_srv_records.rb +1 -1
- data/lib/mongo/error/notable.rb +15 -1
- data/lib/mongo/error/operation_failure.rb +213 -260
- data/lib/mongo/error/parser.rb +1 -1
- data/lib/mongo/{operation/create_user/command.rb → error/pool_cleared_error.rb} +17 -23
- data/lib/mongo/error/pool_closed_error.rb +4 -17
- data/lib/mongo/{operation/update_user/command.rb → error/pool_error.rb} +21 -21
- data/lib/mongo/{operation/drop_index/command.rb → error/pool_paused_error.rb} +17 -22
- data/lib/mongo/error/raise_original_error.rb +1 -1
- data/lib/mongo/error/read_write_retryable.rb +108 -0
- data/lib/mongo/error/sdam_error_detection.rb +1 -1
- data/lib/mongo/error/server_api_conflict.rb +1 -1
- data/lib/mongo/error/server_api_not_supported.rb +1 -1
- data/lib/mongo/error/server_certificate_revoked.rb +1 -1
- data/lib/mongo/{operation/get_more/legacy.rb → error/server_not_usable.rb} +13 -16
- data/lib/mongo/error/server_timeout_error.rb +12 -0
- data/lib/mongo/error/session_ended.rb +1 -1
- data/lib/mongo/{operation/command/command.rb → error/session_not_materialized.rb} +8 -20
- data/lib/mongo/error/sessions_not_supported.rb +1 -1
- data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -1
- data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -1
- data/lib/mongo/error/socket_error.rb +1 -1
- data/lib/mongo/error/socket_timeout_error.rb +4 -2
- data/lib/mongo/error/timeout_error.rb +23 -0
- data/lib/mongo/{operation/shared/op_msg_or_command.rb → error/transactions_not_supported.rb} +13 -20
- data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
- data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
- data/lib/mongo/error/unexpected_response.rb +1 -1
- data/lib/mongo/error/unknown_payload_type.rb +1 -1
- data/lib/mongo/error/unmet_dependency.rb +1 -1
- data/lib/mongo/error/unsupported_array_filters.rb +1 -1
- data/lib/mongo/error/unsupported_collation.rb +1 -1
- data/lib/mongo/error/unsupported_features.rb +1 -1
- data/lib/mongo/error/unsupported_message_type.rb +1 -1
- data/lib/mongo/error/unsupported_option.rb +1 -1
- data/lib/mongo/error/write_retryable.rb +1 -1
- data/lib/mongo/error.rb +16 -38
- data/lib/mongo/event/base.rb +1 -1
- data/lib/mongo/event/listeners.rb +1 -1
- data/lib/mongo/event/publisher.rb +1 -1
- data/lib/mongo/event/subscriber.rb +1 -1
- data/lib/mongo/event.rb +1 -1
- data/lib/mongo/grid/file/chunk.rb +3 -2
- data/lib/mongo/grid/file/info.rb +3 -2
- data/lib/mongo/grid/file.rb +1 -1
- data/lib/mongo/grid/fs_bucket.rb +49 -10
- data/lib/mongo/grid/stream/read.rb +22 -2
- data/lib/mongo/grid/stream/write.rb +22 -5
- data/lib/mongo/grid/stream.rb +1 -1
- data/lib/mongo/grid.rb +1 -1
- data/lib/mongo/id.rb +1 -1
- data/lib/mongo/index/view.rb +96 -19
- data/lib/mongo/index.rb +1 -1
- data/lib/mongo/lint.rb +1 -1
- data/lib/mongo/loggable.rb +3 -3
- data/lib/mongo/logger.rb +1 -1
- data/lib/mongo/monitoring/cmap_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/command_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/base.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +9 -2
- data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/pool_ready.rb +67 -0
- data/lib/mongo/monitoring/event/cmap.rb +2 -1
- data/lib/mongo/monitoring/event/command_failed.rb +9 -3
- data/lib/mongo/monitoring/event/command_started.rb +2 -2
- data/lib/mongo/monitoring/event/command_succeeded.rb +10 -3
- data/lib/mongo/monitoring/event/secure.rb +2 -2
- data/lib/mongo/monitoring/event/server_closed.rb +1 -1
- data/lib/mongo/monitoring/event/server_description_changed.rb +1 -1
- data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +1 -1
- data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -1
- data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +1 -1
- data/lib/mongo/monitoring/event/server_opening.rb +1 -1
- data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
- data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
- data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
- data/lib/mongo/monitoring/event.rb +1 -1
- data/lib/mongo/monitoring/publishable.rb +10 -6
- data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring.rb +1 -1
- data/lib/mongo/operation/aggregate/op_msg.rb +1 -1
- data/lib/mongo/operation/aggregate/result.rb +1 -1
- data/lib/mongo/operation/aggregate.rb +2 -3
- data/lib/mongo/operation/collections_info/result.rb +6 -3
- data/lib/mongo/operation/collections_info.rb +4 -16
- data/lib/mongo/operation/command/op_msg.rb +7 -1
- data/lib/mongo/operation/command.rb +2 -3
- data/lib/mongo/operation/context.rb +64 -8
- data/lib/mongo/operation/count/op_msg.rb +5 -2
- data/lib/mongo/operation/count.rb +2 -3
- data/lib/mongo/operation/create/op_msg.rb +5 -2
- data/lib/mongo/operation/create.rb +2 -3
- data/lib/mongo/operation/create_index/op_msg.rb +3 -2
- data/lib/mongo/operation/create_index.rb +2 -3
- data/lib/mongo/operation/create_search_indexes/op_msg.rb +31 -0
- data/lib/mongo/operation/create_search_indexes.rb +15 -0
- data/lib/mongo/operation/create_user/op_msg.rb +1 -1
- data/lib/mongo/operation/create_user.rb +2 -3
- data/lib/mongo/operation/delete/bulk_result.rb +1 -1
- data/lib/mongo/operation/delete/op_msg.rb +4 -2
- data/lib/mongo/operation/delete/result.rb +1 -1
- data/lib/mongo/operation/delete.rb +1 -3
- data/lib/mongo/operation/distinct/op_msg.rb +5 -2
- data/lib/mongo/operation/distinct.rb +2 -3
- data/lib/mongo/operation/drop/op_msg.rb +1 -1
- data/lib/mongo/operation/drop.rb +2 -3
- data/lib/mongo/operation/drop_database/op_msg.rb +1 -1
- data/lib/mongo/operation/drop_database.rb +2 -3
- data/lib/mongo/operation/drop_index/op_msg.rb +6 -2
- data/lib/mongo/operation/drop_index.rb +2 -3
- data/lib/mongo/operation/drop_search_index/op_msg.rb +33 -0
- data/lib/mongo/operation/drop_search_index.rb +15 -0
- data/lib/mongo/operation/explain/op_msg.rb +1 -1
- data/lib/mongo/operation/explain/result.rb +1 -1
- data/lib/mongo/operation/explain.rb +2 -4
- data/lib/mongo/operation/find/builder/command.rb +1 -1
- data/lib/mongo/operation/find/builder/flags.rb +1 -1
- data/lib/mongo/operation/find/builder/modifiers.rb +1 -1
- data/lib/mongo/operation/find/builder.rb +1 -2
- data/lib/mongo/operation/find/op_msg.rb +46 -1
- data/lib/mongo/operation/find/result.rb +1 -1
- data/lib/mongo/operation/find.rb +2 -4
- data/lib/mongo/operation/get_more/command_builder.rb +6 -2
- data/lib/mongo/operation/get_more/op_msg.rb +34 -1
- data/lib/mongo/operation/get_more/result.rb +1 -1
- data/lib/mongo/operation/get_more.rb +2 -4
- data/lib/mongo/operation/indexes/op_msg.rb +1 -1
- data/lib/mongo/operation/indexes/result.rb +1 -1
- data/lib/mongo/operation/indexes.rb +2 -18
- data/lib/mongo/operation/insert/bulk_result.rb +6 -2
- data/lib/mongo/operation/insert/op_msg.rb +9 -5
- data/lib/mongo/operation/insert/result.rb +9 -4
- data/lib/mongo/operation/insert.rb +1 -3
- data/lib/mongo/operation/kill_cursors/command_builder.rb +1 -1
- data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -1
- data/lib/mongo/operation/kill_cursors.rb +2 -4
- data/lib/mongo/operation/list_collections/op_msg.rb +5 -2
- data/lib/mongo/operation/list_collections/result.rb +2 -2
- data/lib/mongo/operation/list_collections.rb +2 -3
- data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
- data/lib/mongo/operation/map_reduce/result.rb +18 -2
- data/lib/mongo/operation/map_reduce.rb +2 -3
- data/lib/mongo/operation/op_msg_base.rb +4 -2
- data/lib/mongo/operation/parallel_scan/op_msg.rb +1 -1
- data/lib/mongo/operation/parallel_scan/result.rb +1 -1
- data/lib/mongo/operation/parallel_scan.rb +2 -3
- data/lib/mongo/operation/remove_user/op_msg.rb +1 -1
- data/lib/mongo/operation/remove_user.rb +2 -3
- data/lib/mongo/operation/result.rb +47 -10
- data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -1
- data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -1
- data/lib/mongo/operation/shared/executable.rb +60 -18
- data/lib/mongo/operation/shared/executable_no_validate.rb +1 -1
- data/lib/mongo/operation/shared/executable_transaction_label.rb +1 -1
- data/lib/mongo/operation/shared/idable.rb +1 -1
- data/lib/mongo/operation/shared/limited.rb +1 -1
- data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
- data/lib/mongo/operation/shared/{polymorphic_operation.rb → op_msg_executable.rb} +28 -8
- data/lib/mongo/operation/shared/polymorphic_lookup.rb +1 -1
- data/lib/mongo/operation/shared/polymorphic_result.rb +1 -1
- data/lib/mongo/operation/shared/read_preference_supported.rb +1 -1
- data/lib/mongo/operation/shared/response_handling.rb +32 -33
- data/lib/mongo/operation/shared/result/aggregatable.rb +1 -1
- data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +1 -1
- data/lib/mongo/operation/shared/sessions_supported.rb +2 -3
- data/lib/mongo/operation/shared/specifiable.rb +8 -1
- data/lib/mongo/operation/shared/timed.rb +52 -0
- data/lib/mongo/operation/shared/validatable.rb +1 -1
- data/lib/mongo/operation/shared/write.rb +22 -13
- data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
- data/lib/mongo/operation/update/bulk_result.rb +1 -1
- data/lib/mongo/operation/update/op_msg.rb +5 -3
- data/lib/mongo/operation/update/result.rb +1 -1
- data/lib/mongo/operation/update.rb +1 -3
- data/lib/mongo/operation/update_search_index/op_msg.rb +34 -0
- data/lib/mongo/operation/update_search_index.rb +15 -0
- data/lib/mongo/operation/update_user/op_msg.rb +1 -1
- data/lib/mongo/operation/update_user.rb +2 -3
- data/lib/mongo/operation/users_info/op_msg.rb +1 -1
- data/lib/mongo/operation/users_info/result.rb +1 -1
- data/lib/mongo/operation/users_info.rb +2 -3
- data/lib/mongo/operation/write_command/op_msg.rb +1 -1
- data/lib/mongo/operation/write_command.rb +2 -3
- data/lib/mongo/operation.rb +6 -4
- data/lib/mongo/options/mapper.rb +1 -1
- data/lib/mongo/options/redacted.rb +1 -1
- data/lib/mongo/options.rb +1 -1
- data/lib/mongo/protocol/bit_vector.rb +4 -2
- data/lib/mongo/protocol/caching_hash.rb +52 -0
- data/lib/mongo/protocol/compressed.rb +1 -1
- data/lib/mongo/protocol/get_more.rb +1 -1
- data/lib/mongo/protocol/kill_cursors.rb +1 -1
- data/lib/mongo/protocol/message.rb +6 -13
- data/lib/mongo/protocol/msg.rb +25 -4
- data/lib/mongo/protocol/query.rb +1 -1
- data/lib/mongo/protocol/registry.rb +1 -1
- data/lib/mongo/protocol/reply.rb +1 -1
- data/lib/mongo/protocol/serializers.rb +25 -18
- data/lib/mongo/protocol.rb +2 -4
- data/lib/mongo/query_cache.rb +36 -21
- data/lib/mongo/retryable/base_worker.rb +116 -0
- data/lib/mongo/retryable/read_worker.rb +338 -0
- data/lib/mongo/retryable/write_worker.rb +398 -0
- data/lib/mongo/retryable.rb +37 -454
- data/lib/mongo/search_index/view.rb +232 -0
- data/lib/mongo/semaphore.rb +2 -2
- data/lib/mongo/server/app_metadata/environment.rb +314 -0
- data/lib/mongo/server/app_metadata/platform.rb +114 -0
- data/lib/mongo/server/app_metadata/truncator.rb +142 -0
- data/lib/mongo/server/app_metadata.rb +76 -108
- data/lib/mongo/server/connection.rb +102 -22
- data/lib/mongo/server/connection_base.rb +25 -3
- data/lib/mongo/server/connection_common.rb +5 -2
- data/lib/mongo/server/connection_pool/generation_manager.rb +56 -12
- data/lib/mongo/server/connection_pool/populator.rb +33 -31
- data/lib/mongo/server/connection_pool.rb +758 -251
- data/lib/mongo/server/description/features.rb +5 -2
- data/lib/mongo/server/description/load_balancer.rb +1 -1
- data/lib/mongo/server/description.rb +32 -13
- data/lib/mongo/server/monitor/app_metadata.rb +1 -1
- data/lib/mongo/server/monitor/connection.rb +2 -1
- data/lib/mongo/server/monitor.rb +43 -24
- data/lib/mongo/server/pending_connection.rb +26 -9
- data/lib/mongo/server/push_monitor/connection.rb +1 -1
- data/lib/mongo/server/push_monitor.rb +14 -4
- data/lib/mongo/server/{round_trip_time_averager.rb → round_trip_time_calculator.rb} +26 -8
- data/lib/mongo/server.rb +114 -39
- data/lib/mongo/server_selector/base.rb +75 -12
- data/lib/mongo/server_selector/nearest.rb +1 -1
- data/lib/mongo/server_selector/primary.rb +1 -1
- data/lib/mongo/server_selector/primary_preferred.rb +1 -1
- data/lib/mongo/server_selector/secondary.rb +1 -1
- data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
- data/lib/mongo/server_selector.rb +1 -1
- data/lib/mongo/session/server_session/dirtyable.rb +52 -0
- data/lib/mongo/session/server_session.rb +4 -1
- data/lib/mongo/session/session_pool.rb +21 -19
- data/lib/mongo/session.rb +221 -44
- data/lib/mongo/socket/ocsp_cache.rb +1 -1
- data/lib/mongo/socket/ocsp_verifier.rb +5 -6
- data/lib/mongo/socket/ssl.rb +132 -19
- data/lib/mongo/socket/tcp.rb +44 -7
- data/lib/mongo/socket/unix.rb +1 -1
- data/lib/mongo/socket.rb +183 -27
- data/lib/mongo/srv/monitor.rb +1 -3
- data/lib/mongo/srv/resolver.rb +25 -4
- data/lib/mongo/srv/result.rb +1 -1
- data/lib/mongo/srv.rb +1 -1
- data/lib/mongo/timeout.rb +2 -2
- data/lib/mongo/topology_version.rb +1 -1
- data/lib/mongo/uri/options_mapper.rb +325 -81
- data/lib/mongo/uri/srv_protocol.rb +2 -2
- data/lib/mongo/uri.rb +61 -17
- data/lib/mongo/utils.rb +1 -1
- data/lib/mongo/version.rb +1 -5
- data/lib/mongo/write_concern/acknowledged.rb +1 -1
- data/lib/mongo/write_concern/base.rb +1 -1
- data/lib/mongo/write_concern/unacknowledged.rb +1 -1
- data/lib/mongo/write_concern.rb +1 -1
- data/lib/mongo.rb +26 -1
- data/mongo.gemspec +14 -14
- data/spec/README.md +23 -5
- data/spec/atlas/atlas_connectivity_spec.rb +10 -10
- data/spec/atlas/operations_spec.rb +7 -12
- data/spec/faas/ruby-sam-app/Gemfile +9 -0
- data/spec/faas/ruby-sam-app/mongodb/Gemfile +4 -0
- data/spec/faas/ruby-sam-app/mongodb/app.rb +149 -0
- data/spec/faas/ruby-sam-app/template.yaml +48 -0
- data/spec/integration/auth_spec.rb +1 -1
- data/spec/integration/awaited_ismaster_spec.rb +1 -1
- data/spec/integration/aws_auth_credentials_cache_spec.rb +51 -0
- data/spec/integration/aws_auth_request_spec.rb +2 -2
- data/spec/integration/aws_credentials_retriever_spec.rb +32 -2
- data/spec/integration/aws_lambda_examples_spec.rb +68 -0
- data/spec/integration/bson_symbol_spec.rb +1 -1
- data/spec/integration/bulk_insert_spec.rb +1 -1
- data/spec/integration/bulk_write_error_message_spec.rb +33 -0
- data/spec/integration/bulk_write_spec.rb +1 -1
- data/spec/integration/change_stream_examples_spec.rb +1 -1
- data/spec/integration/change_stream_spec.rb +12 -6
- data/spec/integration/check_clean_slate_spec.rb +1 -1
- data/spec/integration/client_authentication_options_spec.rb +1 -1
- data/spec/integration/client_connectivity_spec.rb +1 -1
- data/spec/integration/client_construction_aws_auth_spec.rb +12 -3
- data/spec/integration/client_construction_spec.rb +97 -9
- 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 +3 -3
- data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +1 -1
- data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +41 -5
- data/spec/integration/client_side_encryption/auto_encryption_spec.rb +537 -387
- data/spec/integration/client_side_encryption/automatic_data_encryption_keys_prose_spec.rb +153 -0
- data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +3 -3
- data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +3 -3
- data/spec/integration/client_side_encryption/client_close_spec.rb +2 -2
- data/spec/integration/client_side_encryption/corpus_spec.rb +75 -38
- data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +40 -43
- data/spec/integration/client_side_encryption/data_key_spec.rb +98 -8
- data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +159 -0
- data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +60 -1
- data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +150 -0
- data/spec/integration/client_side_encryption/external_key_vault_spec.rb +7 -7
- 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/mongocryptd_prose_spec.rb +105 -0
- data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +49 -0
- data/spec/integration/client_side_encryption/on_demand_azure_credentials_spec.rb +46 -0
- data/spec/integration/client_side_encryption/on_demand_gcp_credentials_spec.rb +47 -0
- data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +114 -0
- data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +583 -0
- data/spec/integration/client_side_encryption/rewrap_prose_spec.rb +114 -0
- data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +89 -0
- data/spec/integration/client_side_encryption/views_spec.rb +2 -2
- data/spec/integration/client_side_operations_timeout/encryption_prose_spec.rb +131 -0
- data/spec/integration/client_spec.rb +8 -3
- data/spec/integration/client_update_spec.rb +7 -3
- data/spec/integration/collection_indexes_prose_spec.rb +1 -1
- data/spec/integration/command_monitoring_spec.rb +1 -1
- data/spec/integration/command_spec.rb +2 -24
- data/spec/integration/connect_single_rs_name_spec.rb +1 -1
- data/spec/integration/connection/faas_env_spec.rb +62 -0
- data/spec/integration/connection_pool_populator_spec.rb +29 -7
- data/spec/integration/connection_spec.rb +1 -1
- data/spec/integration/crud_spec.rb +13 -1
- data/spec/integration/cursor_pinning_spec.rb +21 -62
- data/spec/integration/cursor_reaping_spec.rb +2 -2
- data/spec/integration/docs_examples_spec.rb +3 -3
- data/spec/integration/error_detection_spec.rb +1 -1
- data/spec/integration/fork_reconnect_spec.rb +17 -10
- data/spec/integration/get_more_spec.rb +1 -1
- data/spec/integration/grid_fs_bucket_spec.rb +4 -4
- data/spec/integration/heartbeat_events_spec.rb +1 -1
- data/spec/integration/map_reduce_spec.rb +5 -1
- data/spec/integration/mmapv1_spec.rb +1 -1
- data/spec/integration/mongos_pinning_spec.rb +1 -1
- data/spec/integration/ocsp_connectivity_spec.rb +1 -1
- data/spec/integration/ocsp_verifier_cache_spec.rb +1 -1
- data/spec/integration/ocsp_verifier_spec.rb +5 -2
- data/spec/integration/operation_failure_code_spec.rb +2 -2
- data/spec/integration/operation_failure_message_spec.rb +4 -3
- data/spec/integration/query_cache_spec.rb +124 -33
- 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 +1 -1
- data/spec/integration/reconnect_spec.rb +6 -1
- data/spec/integration/retryable_errors_spec.rb +3 -3
- data/spec/integration/retryable_reads_errors_spec.rb +275 -0
- 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/retryable_writes/shared/adds_diagnostics.rb +1 -1
- data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +1 -1
- data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +1 -1
- data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +1 -1
- data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +1 -1
- data/spec/integration/retryable_writes/shared/performs_no_retries.rb +1 -1
- data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +1 -1
- data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +1 -1
- data/spec/integration/retryable_writes/shared/supports_retries.rb +1 -1
- data/spec/integration/retryable_writes_errors_spec.rb +316 -2
- data/spec/integration/sdam_error_handling_spec.rb +69 -5
- data/spec/integration/sdam_events_spec.rb +1 -1
- data/spec/integration/sdam_prose_spec.rb +3 -3
- data/spec/integration/search_indexes_prose_spec.rb +172 -0
- data/spec/integration/secondary_reads_spec.rb +1 -0
- data/spec/integration/server_description_spec.rb +1 -1
- data/spec/integration/server_monitor_spec.rb +3 -2
- data/spec/integration/server_selection_spec.rb +1 -1
- data/spec/integration/server_selector_spec.rb +5 -3
- data/spec/integration/server_spec.rb +26 -28
- data/spec/integration/shell_examples_spec.rb +1 -1
- data/spec/integration/size_limit_spec.rb +5 -2
- data/spec/integration/snappy_compression_spec.rb +1 -1
- data/spec/integration/snapshot_query_examples_spec.rb +129 -0
- data/spec/integration/srv_monitoring_spec.rb +40 -1
- data/spec/integration/srv_spec.rb +4 -3
- data/spec/integration/ssl_uri_options_spec.rb +1 -1
- data/spec/integration/step_down_spec.rb +25 -7
- data/spec/integration/time_zone_querying_spec.rb +1 -1
- data/spec/integration/transaction_pinning_spec.rb +20 -6
- data/spec/integration/transactions_api_examples_spec.rb +3 -1
- data/spec/integration/transactions_examples_spec.rb +1 -1
- data/spec/integration/truncated_utf8_spec.rb +1 -1
- data/spec/integration/versioned_api_examples_spec.rb +38 -32
- data/spec/integration/x509_auth_spec.rb +1 -1
- data/spec/integration/zlib_compression_spec.rb +1 -1
- data/spec/integration/zstd_compression_spec.rb +1 -1
- data/spec/kerberos/kerberos_spec.rb +5 -1
- data/spec/lite_spec_helper.rb +63 -26
- data/spec/mongo/address/ipv4_spec.rb +1 -1
- data/spec/mongo/address/ipv6_spec.rb +8 -1
- data/spec/mongo/address/unix_spec.rb +1 -1
- data/spec/mongo/address/validator_spec.rb +1 -1
- data/spec/mongo/address_spec.rb +15 -2
- data/spec/mongo/auth/aws/credential_cache_spec.rb +63 -0
- data/spec/mongo/auth/aws/credentials_retriever_spec.rb +90 -0
- data/spec/mongo/auth/aws/credentials_spec.rb +46 -0
- data/spec/mongo/auth/aws/request_region_spec.rb +1 -1
- data/spec/mongo/auth/aws/request_spec.rb +1 -1
- data/spec/mongo/auth/cr_spec.rb +2 -22
- data/spec/mongo/auth/gssapi/conversation_spec.rb +1 -1
- data/spec/mongo/auth/invalid_mechanism_spec.rb +1 -1
- data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
- data/spec/mongo/auth/ldap_spec.rb +1 -1
- data/spec/mongo/auth/scram/conversation_spec.rb +24 -24
- data/spec/mongo/auth/scram256/conversation_spec.rb +21 -21
- data/spec/mongo/auth/scram_negotiation_spec.rb +2 -1
- data/spec/mongo/auth/scram_spec.rb +1 -1
- data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +1 -1
- data/spec/mongo/auth/stringprep_spec.rb +1 -1
- data/spec/mongo/auth/user/view_spec.rb +96 -1
- data/spec/mongo/auth/user_spec.rb +1 -1
- data/spec/mongo/auth/x509/conversation_spec.rb +1 -1
- data/spec/mongo/auth/x509_spec.rb +1 -1
- data/spec/mongo/auth_spec.rb +1 -1
- data/spec/mongo/bson_spec.rb +1 -1
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +1 -1
- data/spec/mongo/bulk_write/result_spec.rb +16 -2
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +1 -1
- data/spec/mongo/bulk_write_spec.rb +142 -21
- data/spec/mongo/caching_cursor_spec.rb +2 -2
- data/spec/mongo/client_construction_spec.rb +734 -631
- data/spec/mongo/client_encryption_spec.rb +12 -23
- data/spec/mongo/client_spec.rb +547 -156
- data/spec/mongo/cluster/cursor_reaper_spec.rb +22 -4
- data/spec/mongo/cluster/periodic_executor_spec.rb +1 -1
- data/spec/mongo/cluster/socket_reaper_spec.rb +1 -1
- data/spec/mongo/cluster/topology/replica_set_spec.rb +1 -1
- data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
- data/spec/mongo/cluster/topology/single_spec.rb +1 -1
- data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
- data/spec/mongo/cluster/topology_spec.rb +1 -1
- data/spec/mongo/cluster_spec.rb +193 -199
- data/spec/mongo/cluster_time_spec.rb +1 -1
- data/spec/mongo/collection/view/aggregation_spec.rb +142 -43
- data/spec/mongo/collection/view/builder/find_command_spec.rb +1 -1
- data/spec/mongo/collection/view/builder/op_query_spec.rb +1 -1
- data/spec/mongo/collection/view/change_stream_resume_spec.rb +1 -1
- data/spec/mongo/collection/view/change_stream_spec.rb +6 -6
- data/spec/mongo/collection/view/explainable_spec.rb +3 -1
- data/spec/mongo/collection/view/immutable_spec.rb +1 -1
- data/spec/mongo/collection/view/iterable_spec.rb +1 -1
- data/spec/mongo/collection/view/map_reduce_spec.rb +11 -1
- data/spec/mongo/collection/view/readable_spec.rb +744 -2
- data/spec/mongo/collection/view/writable_spec.rb +145 -33
- data/spec/mongo/collection/view_spec.rb +1 -1
- data/spec/mongo/collection_crud_spec.rb +122 -15
- data/spec/mongo/collection_ddl_spec.rb +116 -66
- data/spec/mongo/collection_spec.rb +47 -2
- data/spec/mongo/condition_variable_spec.rb +104 -0
- data/spec/mongo/config/options_spec.rb +76 -0
- data/spec/mongo/config_spec.rb +74 -0
- data/spec/mongo/crypt/auto_decryption_context_spec.rb +18 -2
- data/spec/mongo/crypt/auto_encrypter_spec.rb +272 -12
- data/spec/mongo/crypt/auto_encryption_context_spec.rb +18 -2
- data/spec/mongo/crypt/binary_spec.rb +1 -1
- data/spec/mongo/crypt/binding/binary_spec.rb +1 -1
- data/spec/mongo/crypt/binding/context_spec.rb +68 -18
- data/spec/mongo/crypt/binding/helpers_spec.rb +1 -1
- data/spec/mongo/crypt/binding/mongocrypt_spec.rb +18 -47
- data/spec/mongo/crypt/binding/status_spec.rb +1 -1
- data/spec/mongo/crypt/binding/version_spec.rb +48 -1
- data/spec/mongo/crypt/binding_unloaded_spec.rb +15 -1
- data/spec/mongo/crypt/data_key_context_spec.rb +46 -116
- data/spec/mongo/crypt/encryption_io_spec.rb +3 -1
- data/spec/mongo/crypt/explicit_decryption_context_spec.rb +33 -2
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +95 -2
- data/spec/mongo/crypt/handle_spec.rb +187 -156
- data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +1 -1
- data/spec/mongo/crypt/hooks_spec.rb +30 -0
- data/spec/mongo/crypt/kms/azure/credentials_retriever_spec.rb +86 -0
- data/spec/mongo/crypt/kms/credentials_spec.rb +373 -0
- data/spec/mongo/crypt/kms_spec.rb +62 -0
- data/spec/mongo/crypt/status_spec.rb +1 -1
- data/spec/mongo/crypt_spec.rb +21 -0
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +1 -1
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +1 -1
- data/spec/mongo/cursor_spec.rb +119 -19
- data/spec/mongo/database_spec.rb +67 -2
- data/spec/mongo/distinguishing_semaphore_spec.rb +7 -7
- data/spec/mongo/error/bulk_write_error_spec.rb +1 -1
- data/spec/mongo/error/crypt_error_spec.rb +1 -1
- data/spec/mongo/error/max_bson_size_spec.rb +1 -1
- data/spec/mongo/error/no_server_available_spec.rb +1 -1
- data/spec/mongo/error/notable_spec.rb +1 -1
- data/spec/mongo/error/operation_failure_heavy_spec.rb +51 -2
- data/spec/mongo/error/operation_failure_spec.rb +1 -1
- data/spec/mongo/error/parser_spec.rb +1 -1
- data/spec/mongo/error/unsupported_option_spec.rb +1 -1
- data/spec/mongo/event/publisher_spec.rb +1 -1
- data/spec/mongo/event/subscriber_spec.rb +1 -1
- data/spec/mongo/grid/file/chunk_spec.rb +1 -1
- data/spec/mongo/grid/file/info_spec.rb +1 -1
- data/spec/mongo/grid/file_spec.rb +1 -1
- data/spec/mongo/grid/fs_bucket_spec.rb +1 -1
- data/spec/mongo/grid/stream/read_spec.rb +1 -1
- data/spec/mongo/grid/stream/write_spec.rb +1 -1
- data/spec/mongo/grid/stream_spec.rb +1 -1
- data/spec/mongo/id_spec.rb +2 -2
- data/spec/mongo/index/view_spec.rb +126 -1
- data/spec/mongo/lint_spec.rb +2 -2
- data/spec/mongo/logger_spec.rb +1 -1
- data/spec/mongo/monitoring/command_log_subscriber_spec.rb +1 -1
- data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +2 -2
- data/spec/mongo/monitoring/event/command_failed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/command_started_spec.rb +1 -1
- data/spec/mongo/monitoring/event/command_succeeded_spec.rb +1 -1
- data/spec/mongo/monitoring/event/secure_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
- data/spec/mongo/monitoring_spec.rb +1 -1
- data/spec/mongo/operation/aggregate/result_spec.rb +1 -1
- data/spec/mongo/operation/aggregate_spec.rb +1 -1
- data/spec/mongo/operation/collections_info_spec.rb +1 -1
- data/spec/mongo/operation/command_spec.rb +1 -1
- data/spec/mongo/operation/context_spec.rb +79 -0
- data/spec/mongo/operation/create/op_msg_spec.rb +240 -0
- data/spec/mongo/operation/create_index_spec.rb +1 -1
- data/spec/mongo/operation/create_user_spec.rb +1 -1
- data/spec/mongo/operation/delete/bulk_spec.rb +1 -1
- data/spec/mongo/operation/delete/op_msg_spec.rb +20 -10
- data/spec/mongo/operation/delete_spec.rb +1 -31
- data/spec/mongo/operation/drop_index_spec.rb +1 -1
- data/spec/mongo/operation/find/builder/flags_spec.rb +1 -1
- data/spec/mongo/operation/find/builder/modifiers_spec.rb +1 -1
- data/spec/mongo/operation/find/op_msg_spec.rb +66 -0
- data/spec/mongo/operation/get_more/op_msg_spec.rb +65 -0
- data/spec/mongo/operation/indexes_spec.rb +1 -1
- data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
- data/spec/mongo/operation/insert/op_msg_spec.rb +131 -126
- data/spec/mongo/operation/insert_spec.rb +2 -34
- data/spec/mongo/operation/limited_spec.rb +1 -1
- data/spec/mongo/operation/map_reduce_spec.rb +1 -1
- data/spec/mongo/operation/read_preference_legacy_spec.rb +1 -1
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
- data/spec/mongo/operation/remove_user_spec.rb +1 -1
- data/spec/mongo/operation/result_spec.rb +21 -1
- data/spec/mongo/operation/shared/csot/examples.rb +113 -0
- data/spec/mongo/operation/specifiable_spec.rb +1 -1
- 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 +1 -30
- data/spec/mongo/operation/update_user_spec.rb +1 -1
- data/spec/mongo/options/redacted_spec.rb +2 -2
- data/spec/mongo/protocol/caching_hash_spec.rb +37 -0
- data/spec/mongo/protocol/compressed_spec.rb +1 -1
- data/spec/mongo/protocol/get_more_spec.rb +1 -1
- data/spec/mongo/protocol/kill_cursors_spec.rb +1 -1
- data/spec/mongo/protocol/msg_spec.rb +45 -66
- data/spec/mongo/protocol/query_spec.rb +1 -1
- data/spec/mongo/protocol/registry_spec.rb +1 -1
- data/spec/mongo/protocol/reply_spec.rb +1 -1
- data/spec/mongo/query_cache_middleware_spec.rb +1 -1
- data/spec/mongo/query_cache_spec.rb +245 -226
- data/spec/mongo/retryable/write_worker_spec.rb +39 -0
- data/spec/mongo/retryable_spec.rb +38 -6
- data/spec/mongo/semaphore_spec.rb +7 -7
- data/spec/mongo/server/app_metadata/environment_spec.rb +344 -0
- data/spec/mongo/server/app_metadata/truncator_spec.rb +158 -0
- data/spec/mongo/server/app_metadata_spec.rb +53 -65
- data/spec/mongo/server/connection_auth_spec.rb +4 -2
- data/spec/mongo/server/connection_common_spec.rb +14 -2
- data/spec/mongo/server/connection_pool/populator_spec.rb +17 -3
- data/spec/mongo/server/connection_pool_spec.rb +567 -63
- data/spec/mongo/server/connection_spec.rb +93 -163
- data/spec/mongo/server/description/features_spec.rb +25 -1
- data/spec/mongo/server/description_query_methods_spec.rb +1 -1
- data/spec/mongo/server/description_spec.rb +1 -1
- data/spec/mongo/server/monitor/app_metadata_spec.rb +1 -1
- data/spec/mongo/server/monitor/connection_spec.rb +3 -3
- data/spec/mongo/server/monitor_spec.rb +6 -5
- data/spec/mongo/server/push_monitor_spec.rb +3 -9
- data/spec/mongo/server/round_trip_time_calculator_spec.rb +120 -0
- data/spec/mongo/server_selector/nearest_spec.rb +1 -1
- data/spec/mongo/server_selector/primary_preferred_spec.rb +1 -1
- data/spec/mongo/server_selector/primary_spec.rb +1 -1
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +1 -1
- data/spec/mongo/server_selector/secondary_spec.rb +1 -1
- data/spec/mongo/server_selector_spec.rb +1 -1
- data/spec/mongo/server_spec.rb +32 -5
- data/spec/mongo/session/server_session_spec.rb +1 -1
- data/spec/mongo/session/session_pool_spec.rb +2 -17
- data/spec/mongo/session_spec.rb +27 -7
- data/spec/mongo/session_transaction_spec.rb +19 -3
- data/spec/mongo/socket/ssl_spec.rb +21 -26
- data/spec/mongo/socket/tcp_spec.rb +1 -1
- data/spec/mongo/socket/unix_spec.rb +1 -1
- data/spec/mongo/socket_spec.rb +1 -1
- data/spec/mongo/srv/monitor_spec.rb +1 -1
- data/spec/mongo/srv/result_spec.rb +1 -1
- data/spec/mongo/timeout_spec.rb +1 -1
- data/spec/mongo/tls_context_hooks_spec.rb +1 -1
- data/spec/mongo/uri/options_mapper_spec.rb +1605 -0
- data/spec/mongo/uri/srv_protocol_spec.rb +263 -4
- data/spec/mongo/uri_option_parsing_spec.rb +1 -1
- data/spec/mongo/uri_spec.rb +168 -11
- data/spec/mongo/utils_spec.rb +1 -1
- data/spec/mongo/write_concern/acknowledged_spec.rb +1 -1
- data/spec/mongo/write_concern/unacknowledged_spec.rb +1 -1
- data/spec/mongo/write_concern_spec.rb +1 -1
- data/spec/runners/auth.rb +1 -1
- data/spec/runners/change_streams/outcome.rb +1 -1
- data/spec/runners/change_streams/spec.rb +1 -1
- data/spec/runners/change_streams/test.rb +3 -3
- data/spec/runners/cmap/verifier.rb +2 -2
- data/spec/runners/cmap.rb +188 -45
- data/spec/runners/command_monitoring.rb +1 -1
- data/spec/runners/connection_string.rb +9 -1
- data/spec/runners/crud/context.rb +1 -1
- data/spec/runners/crud/operation.rb +15 -6
- data/spec/runners/crud/outcome.rb +1 -1
- data/spec/runners/crud/requirement.rb +12 -7
- data/spec/runners/crud/spec.rb +6 -1
- data/spec/runners/crud/test.rb +2 -10
- data/spec/runners/crud/test_base.rb +2 -2
- data/spec/runners/crud/verifier.rb +12 -4
- data/spec/runners/crud.rb +2 -2
- data/spec/runners/gridfs.rb +1 -1
- data/spec/runners/read_write_concern_document.rb +1 -1
- data/spec/runners/sdam/verifier.rb +1 -1
- data/spec/runners/sdam.rb +1 -1
- data/spec/runners/server_selection.rb +1 -1
- data/spec/runners/server_selection_rtt.rb +1 -1
- data/spec/runners/transactions/operation.rb +19 -15
- data/spec/runners/transactions/spec.rb +3 -3
- data/spec/runners/transactions/test.rb +75 -22
- data/spec/runners/transactions.rb +12 -9
- data/spec/runners/unified/ambiguous_operations.rb +13 -0
- data/spec/runners/unified/assertions.rb +163 -50
- data/spec/runners/unified/change_stream_operations.rb +22 -9
- data/spec/runners/unified/client_side_encryption_operations.rb +83 -0
- data/spec/runners/unified/crud_operations.rb +129 -22
- data/spec/runners/unified/ddl_operations.rb +160 -8
- data/spec/runners/unified/entity_map.rb +1 -1
- data/spec/runners/unified/error.rb +3 -2
- data/spec/runners/unified/event_subscriber.rb +9 -3
- data/spec/runners/unified/exceptions.rb +1 -1
- data/spec/runners/unified/grid_fs_operations.rb +59 -3
- data/spec/runners/unified/search_index_operations.rb +63 -0
- data/spec/runners/unified/support_operations.rb +115 -11
- data/spec/runners/unified/test.rb +204 -36
- data/spec/runners/unified/test_group.rb +1 -1
- data/spec/runners/unified/thread_operations.rb +73 -0
- data/spec/runners/unified.rb +15 -5
- data/spec/solo/clean_exit_spec.rb +7 -7
- data/spec/spec_helper.rb +2 -3
- data/spec/spec_tests/auth_spec.rb +1 -1
- data/spec/spec_tests/change_streams_unified_spec.rb +2 -1
- data/spec/spec_tests/client_side_encryption_spec.rb +25 -2
- data/spec/spec_tests/client_side_encryption_unified_spec.rb +26 -0
- data/spec/spec_tests/client_side_operations_timeout_spec.rb +15 -0
- data/spec/spec_tests/cmap_spec.rb +29 -15
- data/spec/spec_tests/collection_management_spec.rb +1 -1
- data/spec/spec_tests/command_monitoring_unified_spec.rb +1 -1
- data/spec/spec_tests/connection_string_spec.rb +1 -1
- data/spec/spec_tests/crud_spec.rb +1 -11
- data/spec/spec_tests/crud_unified_spec.rb +1 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +43 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +105 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +122 -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 +1169 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1069 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +307 -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/awsTemporary.yml +57 -0
- data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
- data/spec/spec_tests/data/client_side_encryption/badQueries.yml +14 -3
- 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/bypassedCommand.yml +5 -4
- 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 +3 -10
- 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/fle2v2-BypassQueryAnalysis.yml +90 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +83 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection-OldServer.yml +61 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +938 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +67 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +101 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +80 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +103 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +59 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +201 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +97 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +90 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +44 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +45 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +211 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +170 -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 +3 -1
- 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/timeoutMS.yml +67 -0
- 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/client_side_operations_timeout/bulkWrite.yml +87 -0
- data/spec/spec_tests/data/client_side_operations_timeout/change-streams.yml +358 -0
- data/spec/spec_tests/data/client_side_operations_timeout/close-cursors.yml +129 -0
- data/spec/spec_tests/data/client_side_operations_timeout/command-execution.yml +250 -0
- data/spec/spec_tests/data/client_side_operations_timeout/convenient-transactions.yml +113 -0
- data/spec/spec_tests/data/client_side_operations_timeout/cursors.yml +70 -0
- data/spec/spec_tests/data/client_side_operations_timeout/deprecated-options.yml +3982 -0
- data/spec/spec_tests/data/client_side_operations_timeout/error-transformations.yml +96 -0
- data/spec/spec_tests/data/client_side_operations_timeout/global-timeoutMS.yml +3236 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-advanced.yml +207 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-delete.yml +152 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-download.yml +182 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-find.yml +100 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-upload.yml +249 -0
- data/spec/spec_tests/data/client_side_operations_timeout/legacy-timeouts.yml +204 -0
- data/spec/spec_tests/data/client_side_operations_timeout/non-tailable-cursors.yml +307 -0
- data/spec/spec_tests/data/client_side_operations_timeout/override-collection-timeoutMS.yml +1877 -0
- data/spec/spec_tests/data/client_side_operations_timeout/override-operation-timeoutMS.yml +1918 -0
- data/spec/spec_tests/data/client_side_operations_timeout/retryability-legacy-timeouts.yml +1676 -0
- data/spec/spec_tests/data/client_side_operations_timeout/retryability-timeoutMS.yml +2824 -0
- data/spec/spec_tests/data/client_side_operations_timeout/sessions-inherit-timeoutMS.yml +168 -0
- data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-operation-timeoutMS.yml +171 -0
- data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-timeoutMS.yml +168 -0
- data/spec/spec_tests/data/client_side_operations_timeout/tailable-awaitData.yml +247 -0
- data/spec/spec_tests/data/client_side_operations_timeout/tailable-non-awaitData.yml +181 -0
- data/spec/spec_tests/data/cmap/connection-must-have-id.yml +2 -0
- data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +3 -1
- data/spec/spec_tests/data/cmap/pool-checkin.yml +5 -0
- data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-checkout-custom-maxConnecting-is-enforced.yml +50 -0
- data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-is-enforced.yml +81 -0
- data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-timeout.yml +71 -0
- data/spec/spec_tests/data/cmap/pool-checkout-minPoolSize-connection-maxConnecting.yml +64 -0
- data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +6 -0
- data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +8 -0
- data/spec/spec_tests/data/cmap/pool-checkout-returned-connection-maxConnecting.yml +88 -0
- data/spec/spec_tests/data/cmap/pool-clear-interrupting-pending-connections.yml +43 -0
- data/spec/spec_tests/data/cmap/pool-clear-min-size.yml +41 -0
- data/spec/spec_tests/data/cmap/pool-clear-paused.yml +18 -0
- data/spec/spec_tests/data/cmap/pool-clear-ready.yml +39 -0
- data/spec/spec_tests/data/cmap/pool-clear-schedule-run-interruptInUseConnections-false.yml +48 -0
- data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-create-max-size.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-create-min-size-error.yml +43 -0
- data/spec/spec_tests/data/cmap/pool-create-min-size.yml +9 -0
- data/spec/spec_tests/data/cmap/pool-ready-ready.yml +22 -0
- data/spec/spec_tests/data/cmap/pool-ready.yml +30 -0
- data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +2 -0
- data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +6 -1
- 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-errorResponse.yml +59 -0
- data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
- data/spec/spec_tests/data/collection_management/timeseries-collection.yml +35 -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/redacted-commands.yml +8 -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/command_monitoring_unified/writeConcernError.yml +80 -0
- data/spec/spec_tests/data/connection_string/invalid-uris.yml +0 -10
- data/spec/spec_tests/data/connection_string/valid-options.yml +13 -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-errorResponse.yml +42 -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 +6 -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-errorResponse.yml +50 -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 +6 -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-errorResponse.yml +46 -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/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 +49 -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-test-all-options.yml +377 -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-errorResponse.yml +69 -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/insertOne-errorResponse.yml +46 -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-errorResponse.yml +47 -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/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/index_management/createSearchIndex.yml +64 -0
- data/spec/spec_tests/data/index_management/createSearchIndexes.yml +86 -0
- data/spec/spec_tests/data/index_management/dropSearchIndex.yml +43 -0
- data/spec/spec_tests/data/index_management/listSearchIndexes.yml +91 -0
- data/spec/spec_tests/data/index_management/updateSearchIndex.yml +46 -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/unified/handshakeError.yml +1342 -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 +93 -0
- data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +785 -0
- data/spec/spec_tests/data/retryable_writes/unified/insertOne-noWritesPerformedError.yml +54 -0
- data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +75 -0
- data/spec/spec_tests/data/run_command_unified/runCommand.yml +319 -0
- data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
- data/spec/spec_tests/data/sdam/rs/electionId_precedence_setVersion.yml +62 -0
- data/spec/spec_tests/data/sdam/rs/null_election_id-pre-6.0.yml +175 -0
- data/spec/spec_tests/data/sdam/rs/null_election_id.yml +20 -18
- data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0-pre-6.0.yml +87 -0
- data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +1 -1
- data/spec/spec_tests/data/sdam/rs/set_version_can_rollback.yml +101 -0
- data/spec/spec_tests/data/sdam/rs/setversion_equal_max_without_electionid.yml +78 -0
- data/spec/spec_tests/data/sdam/rs/setversion_greaterthan_max_without_electionid.yml +79 -0
- data/spec/spec_tests/data/sdam/rs/setversion_without_electionid-pre-6.0.yml +79 -0
- data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +9 -10
- data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid-pre-6.0.yml +117 -0
- data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +23 -21
- data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -1
- data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +38 -39
- data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +38 -39
- data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +1 -1
- data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +1 -1
- data/spec/spec_tests/data/sdam_monitoring/standalone.yml +1 -1
- data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
- data/spec/spec_tests/data/sdam_unified/auth-error.yml +130 -0
- data/spec/spec_tests/data/sdam_unified/auth-misc-command-error.yml +132 -0
- data/spec/spec_tests/data/sdam_unified/auth-network-error.yml +132 -0
- data/spec/spec_tests/data/sdam_unified/auth-network-timeout-error.yml +138 -0
- data/spec/spec_tests/data/sdam_unified/auth-shutdown-error.yml +133 -0
- data/spec/spec_tests/data/sdam_unified/cancel-server-check.yml +143 -0
- data/spec/spec_tests/data/sdam_unified/connectTimeoutMS.yml +130 -0
- data/spec/spec_tests/data/sdam_unified/find-network-error.yml +135 -0
- data/spec/spec_tests/data/sdam_unified/find-network-timeout-error.yml +119 -0
- data/spec/spec_tests/data/sdam_unified/find-shutdown-error.yml +163 -0
- data/spec/spec_tests/data/sdam_unified/hello-command-error.yml +233 -0
- data/spec/spec_tests/data/sdam_unified/hello-network-error.yml +228 -0
- data/spec/spec_tests/data/sdam_unified/hello-timeout.yml +318 -0
- data/spec/spec_tests/data/sdam_unified/insert-network-error.yml +137 -0
- data/spec/spec_tests/data/sdam_unified/insert-shutdown-error.yml +162 -0
- data/spec/spec_tests/data/sdam_unified/interruptInUse-pool-clear.yml +340 -0
- data/spec/spec_tests/data/sdam_unified/minPoolSize-error.yml +125 -0
- data/spec/spec_tests/data/sdam_unified/pool-cleared-error.yml +239 -0
- data/spec/spec_tests/data/sdam_unified/rediscover-quickly-after-step-down.yml +144 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +6 -5
- 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 +2 -2
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +5 -4
- 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 +11 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +11 -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-dirty-session-errors.yml +351 -0
- data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
- data/spec/spec_tests/data/sessions_unified/implicit-sessions-default-causal-consistency.yml +119 -0
- data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +9 -3
- data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +1 -1
- data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +1 -1
- 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/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
- data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +1 -1
- 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/valid-fail/entity-findCursor-malformed.yml +31 -0
- data/spec/spec_tests/data/unified/valid-fail/entity-findCursor.yml +31 -0
- data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError-malformed.yml +34 -0
- data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError.yml +35 -0
- data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
- data/spec/spec_tests/data/unified/valid-pass/assertNumberConnectionsCheckedOut.yml +17 -0
- data/spec/spec_tests/data/unified/valid-pass/collectionData-createOptions.yml +37 -0
- data/spec/spec_tests/data/unified/valid-pass/entity-client-cmap-events.yml +40 -0
- data/spec/spec_tests/data/unified/valid-pass/entity-client-storeEventsAsEntities.yml +37 -0
- data/spec/spec_tests/data/unified/valid-pass/expectedError-errorResponse.yml +39 -0
- data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-eventType.yml +66 -0
- data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
- data/spec/spec_tests/data/unified/valid-pass/ignoreResultAndError.yml +34 -0
- data/spec/spec_tests/data/unified/valid-pass/observeSensitiveCommands.yml +255 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +22 -1
- data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
- data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +19 -13
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +3 -3
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +9 -9
- data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +3 -4
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +1 -1
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +1 -1
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +6 -5
- 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/data/versioned_api/transaction-handling.yml +4 -4
- data/spec/spec_tests/gridfs_spec.rb +1 -1
- data/spec/spec_tests/gridfs_unified_spec.rb +13 -0
- data/spec/spec_tests/index_management_unified_spec.rb +13 -0
- data/spec/spec_tests/load_balancers_spec.rb +1 -1
- data/spec/spec_tests/max_staleness_spec.rb +1 -1
- data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
- data/spec/spec_tests/read_write_concern_document_spec.rb +1 -1
- data/spec/spec_tests/read_write_concern_operaton_spec.rb +1 -1
- data/spec/spec_tests/retryable_reads_spec.rb +7 -2
- 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/run_command_unified_spec.rb +13 -0
- data/spec/spec_tests/sdam_monitoring_spec.rb +1 -1
- data/spec/spec_tests/sdam_spec.rb +5 -1
- data/spec/spec_tests/sdam_unified_spec.rb +15 -0
- data/spec/spec_tests/seed_list_discovery_spec.rb +11 -2
- data/spec/spec_tests/server_selection_rtt_spec.rb +7 -7
- data/spec/spec_tests/server_selection_spec.rb +1 -1
- data/spec/spec_tests/sessions_unified_spec.rb +1 -1
- data/spec/spec_tests/transactions_api_spec.rb +1 -1
- data/spec/spec_tests/transactions_spec.rb +1 -1
- data/spec/spec_tests/transactions_unified_spec.rb +3 -2
- data/spec/spec_tests/unified_spec.rb +2 -2
- data/spec/spec_tests/uri_options_spec.rb +1 -1
- data/spec/spec_tests/versioned_api_spec.rb +1 -1
- data/spec/stress/cleanup_spec.rb +1 -1
- data/spec/stress/connection_pool_stress_spec.rb +1 -62
- data/spec/stress/connection_pool_timing_spec.rb +12 -36
- data/spec/stress/fork_reconnect_stress_spec.rb +10 -10
- data/spec/stress/push_monitor_close_spec.rb +1 -1
- data/spec/support/authorization.rb +2 -2
- data/spec/support/aws_utils/base.rb +1 -1
- data/spec/support/aws_utils/inspector.rb +1 -1
- data/spec/support/aws_utils/orchestrator.rb +20 -8
- data/spec/support/aws_utils/provisioner.rb +1 -1
- data/spec/support/aws_utils.rb +4 -3
- data/spec/support/background_thread_registry.rb +4 -14
- data/spec/support/certificates/atlas-ocsp-ca.crt +89 -79
- data/spec/support/certificates/atlas-ocsp.crt +117 -122
- data/spec/support/certificates/retrieve-atlas-cert +40 -0
- data/spec/support/client_registry.rb +6 -2
- data/spec/support/client_registry_macros.rb +1 -1
- data/spec/support/cluster_tools.rb +17 -12
- data/spec/support/common_shortcuts.rb +53 -6
- data/spec/support/constraints.rb +21 -1
- 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/encrypted_fields/encryptedFields.json +32 -0
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +30 -0
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +21 -0
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +29 -0
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +21 -0
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +30 -0
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +27 -0
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +27 -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 +269 -14
- data/spec/support/dns.rb +1 -1
- data/spec/support/json_ext_formatter.rb +1 -1
- data/spec/support/keyword_struct.rb +1 -1
- data/spec/support/local_resource_registry.rb +1 -1
- data/spec/support/macros.rb +29 -0
- data/spec/support/matchers.rb +5 -5
- data/spec/support/mongos_macros.rb +24 -0
- data/spec/support/monitoring_ext.rb +1 -1
- data/spec/support/ocsp +1 -1
- data/spec/support/primary_socket.rb +1 -1
- data/spec/support/recording_logger.rb +27 -0
- data/spec/support/sdam_formatter_integration.rb +1 -1
- data/spec/support/shared/app_metadata.rb +15 -3
- data/spec/support/shared/auth_context.rb +1 -0
- data/spec/support/shared/protocol.rb +1 -1
- data/spec/support/shared/scram_conversation.rb +3 -2
- data/spec/support/shared/server_selector.rb +1 -1
- data/spec/support/shared/session.rb +16 -10
- data/spec/support/spec_config.rb +133 -2
- data/spec/support/spec_setup.rb +3 -3
- data/spec/support/using_hash.rb +11 -2
- data/spec/support/utils.rb +280 -229
- metadata +1790 -1289
- checksums.yaml.gz.sig +0 -0
- data/lib/mongo/operation/aggregate/command.rb +0 -55
- data/lib/mongo/operation/collections_info/command.rb +0 -48
- data/lib/mongo/operation/count/command.rb +0 -47
- data/lib/mongo/operation/create/command.rb +0 -47
- data/lib/mongo/operation/create_index/command.rb +0 -61
- data/lib/mongo/operation/delete/command.rb +0 -52
- data/lib/mongo/operation/delete/legacy.rb +0 -64
- data/lib/mongo/operation/distinct/command.rb +0 -47
- data/lib/mongo/operation/explain/command.rb +0 -58
- data/lib/mongo/operation/explain/legacy.rb +0 -52
- data/lib/mongo/operation/find/builder/legacy.rb +0 -123
- data/lib/mongo/operation/find/command.rb +0 -51
- data/lib/mongo/operation/find/legacy/result.rb +0 -46
- data/lib/mongo/operation/find/legacy.rb +0 -52
- data/lib/mongo/operation/get_more/command.rb +0 -43
- data/lib/mongo/operation/indexes/command.rb +0 -42
- data/lib/mongo/operation/indexes/legacy.rb +0 -48
- data/lib/mongo/operation/insert/command.rb +0 -59
- data/lib/mongo/operation/insert/legacy.rb +0 -68
- data/lib/mongo/operation/kill_cursors/command.rb +0 -48
- data/lib/mongo/operation/list_collections/command.rb +0 -46
- data/lib/mongo/operation/map_reduce/command.rb +0 -51
- data/lib/mongo/operation/parallel_scan/command.rb +0 -57
- data/lib/mongo/operation/remove_user/command.rb +0 -46
- data/lib/mongo/operation/shared/op_msg_or_find_command.rb +0 -44
- data/lib/mongo/operation/update/command.rb +0 -53
- data/lib/mongo/operation/update/legacy/result.rb +0 -112
- data/lib/mongo/operation/update/legacy.rb +0 -76
- data/lib/mongo/operation/users_info/command.rb +0 -46
- data/lib/mongo/operation/write_command/command.rb +0 -51
- data/lib/mongo/protocol/delete.rb +0 -172
- data/lib/mongo/protocol/insert.rb +0 -181
- data/lib/mongo/protocol/update.rb +0 -214
- data/spec/mongo/dbref_spec.rb +0 -152
- data/spec/mongo/operation/delete/command_spec.rb +0 -115
- data/spec/mongo/operation/find/legacy_spec.rb +0 -131
- data/spec/mongo/operation/get_more_spec.rb +0 -63
- data/spec/mongo/operation/insert/command_spec.rb +0 -118
- data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
- data/spec/mongo/operation/update/command_spec.rb +0 -122
- data/spec/mongo/protocol/delete_spec.rb +0 -185
- data/spec/mongo/protocol/insert_spec.rb +0 -179
- data/spec/mongo/protocol/update_spec.rb +0 -204
- data/spec/mongo/server/round_trip_time_averager_spec.rb +0 -48
- data/spec/shared/LICENSE +0 -20
- data/spec/shared/bin/get-mongodb-download-url +0 -17
- data/spec/shared/bin/s3-copy +0 -45
- data/spec/shared/bin/s3-upload +0 -69
- data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
- data/spec/shared/lib/mrss/cluster_config.rb +0 -231
- data/spec/shared/lib/mrss/constraints.rb +0 -385
- data/spec/shared/lib/mrss/docker_runner.rb +0 -271
- data/spec/shared/lib/mrss/event_subscriber.rb +0 -200
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -191
- data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
- data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
- data/spec/shared/lib/mrss/utils.rb +0 -15
- data/spec/shared/share/Dockerfile.erb +0 -323
- data/spec/shared/share/haproxy-1.conf +0 -16
- data/spec/shared/share/haproxy-2.conf +0 -17
- data/spec/shared/shlib/distro.sh +0 -73
- data/spec/shared/shlib/server.sh +0 -367
- data/spec/shared/shlib/set_env.sh +0 -131
- 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/data/sdam_integration/cancel-server-check.yml +0 -96
- data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +0 -88
- data/spec/spec_tests/data/sdam_integration/find-network-error.yml +0 -85
- data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +0 -118
- data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +0 -160
- data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +0 -158
- data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +0 -225
- data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +0 -88
- data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +0 -117
- data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +0 -98
- data/spec/spec_tests/sdam_integration_spec.rb +0 -16
- data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
- data/spec/support/session_registry.rb +0 -55
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -0
- /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/{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_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
@@ -1,8 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
# encoding: utf-8
|
3
2
|
|
4
3
|
require 'spec_helper'
|
5
4
|
|
5
|
+
SINGLE_CLIENT = [ '127.0.0.1:27017' ].freeze
|
6
|
+
|
7
|
+
# let these existing styles stand, rather than going in for a deep refactoring
|
8
|
+
# of these specs.
|
9
|
+
#
|
10
|
+
# possible future work: re-enable these one at a time and do the hard work of
|
11
|
+
# making them right.
|
12
|
+
#
|
13
|
+
# rubocop:disable RSpec/ExpectInHook, RSpec/MessageSpies, RSpec/ExampleLength
|
14
|
+
# rubocop:disable RSpec/ContextWording, RSpec/RepeatedExampleGroupDescription
|
15
|
+
# rubocop:disable RSpec/ExampleWording, Style/BlockComments, RSpec/AnyInstance
|
16
|
+
# rubocop:disable RSpec/VerifiedDoubles
|
6
17
|
describe Mongo::Client do
|
7
18
|
clean_slate
|
8
19
|
|
@@ -10,13 +21,15 @@ describe Mongo::Client do
|
|
10
21
|
|
11
22
|
describe '.new' do
|
12
23
|
context 'with scan: false' do
|
24
|
+
fails_on_jruby
|
25
|
+
|
13
26
|
it 'does not perform i/o' do
|
14
27
|
allow_any_instance_of(Mongo::Server::Monitor).to receive(:run!)
|
15
28
|
expect_any_instance_of(Mongo::Server::Monitor).not_to receive(:scan!)
|
16
|
-
|
29
|
+
|
17
30
|
# return should be instant
|
18
31
|
c = Timeout.timeout(1) do
|
19
|
-
ClientRegistry.instance.new_local_client(['1.1.1.1'], scan: false)
|
32
|
+
ClientRegistry.instance.new_local_client([ '1.1.1.1' ], scan: false)
|
20
33
|
end
|
21
34
|
expect(c.cluster.servers).to be_empty
|
22
35
|
c.close
|
@@ -24,23 +37,21 @@ describe Mongo::Client do
|
|
24
37
|
end
|
25
38
|
|
26
39
|
context 'with default scan: true' do
|
27
|
-
|
28
40
|
shared_examples 'does not wait for server selection timeout' do
|
29
|
-
|
30
41
|
let(:logger) do
|
31
|
-
Logger.new(
|
42
|
+
Logger.new($stdout, level: Logger::DEBUG)
|
32
43
|
end
|
33
44
|
|
34
45
|
let(:subscriber) do
|
35
46
|
Mongo::Monitoring::UnifiedSdamLogSubscriber.new(
|
36
47
|
logger: logger,
|
37
|
-
log_prefix: 'CCS-SDAM'
|
48
|
+
log_prefix: 'CCS-SDAM'
|
38
49
|
)
|
39
50
|
end
|
40
51
|
|
41
52
|
let(:client) do
|
42
53
|
ClientRegistry.instance.new_local_client(
|
43
|
-
[address],
|
54
|
+
[ address ],
|
44
55
|
# Specify server selection timeout here because test suite sets
|
45
56
|
# one by default and it's fairly low
|
46
57
|
SpecConfig.instance.test_options.merge(
|
@@ -49,10 +60,9 @@ describe Mongo::Client do
|
|
49
60
|
server_selection_timeout: 8,
|
50
61
|
logger: logger,
|
51
62
|
log_prefix: 'CCS-CLIENT',
|
52
|
-
sdam_proc:
|
53
|
-
|
54
|
-
|
55
|
-
))
|
63
|
+
sdam_proc: ->(client) { subscriber.subscribe(client) }
|
64
|
+
)
|
65
|
+
)
|
56
66
|
end
|
57
67
|
|
58
68
|
it 'does not wait for server selection timeout' do
|
@@ -73,11 +83,11 @@ describe Mongo::Client do
|
|
73
83
|
|
74
84
|
actual_class = client.cluster.topology.class
|
75
85
|
expect([
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
86
|
+
Mongo::Cluster::Topology::ReplicaSetWithPrimary,
|
87
|
+
Mongo::Cluster::Topology::Single,
|
88
|
+
Mongo::Cluster::Topology::Sharded,
|
89
|
+
Mongo::Cluster::Topology::LoadBalanced,
|
90
|
+
]).to include(actual_class)
|
81
91
|
expect(time_taken).to be < 5
|
82
92
|
|
83
93
|
# run a command to ensure the client is a working one
|
@@ -88,17 +98,17 @@ describe Mongo::Client do
|
|
88
98
|
context 'when cluster is monitored' do
|
89
99
|
require_topology :single, :replica_set, :sharded
|
90
100
|
|
91
|
-
# TODO this test requires there being no outstanding background
|
101
|
+
# TODO: this test requires there being no outstanding background
|
92
102
|
# monitoring threads running, as otherwise the scan! expectation
|
93
103
|
# can be executed on a thread that belongs to one of the global
|
94
104
|
# clients for instance
|
95
105
|
it 'performs one round of sdam' do
|
96
106
|
# Does not work due to
|
97
107
|
# https://github.com/rspec/rspec-mocks/issues/1242.
|
98
|
-
#
|
108
|
+
#
|
109
|
+
# expect_any_instance_of(Mongo::Server::Monitor).to receive(:scan!).
|
99
110
|
# exactly(SpecConfig.instance.addresses.length).times.and_call_original
|
100
|
-
c = new_local_client(
|
101
|
-
SpecConfig.instance.addresses, SpecConfig.instance.test_options)
|
111
|
+
c = new_local_client(SpecConfig.instance.addresses, SpecConfig.instance.test_options)
|
102
112
|
expect(c.cluster.servers).not_to be_empty
|
103
113
|
end
|
104
114
|
|
@@ -126,7 +136,7 @@ describe Mongo::Client do
|
|
126
136
|
|
127
137
|
context 'with monitoring_io: false' do
|
128
138
|
let(:client) do
|
129
|
-
new_local_client(
|
139
|
+
new_local_client(SINGLE_CLIENT, monitoring_io: false)
|
130
140
|
end
|
131
141
|
|
132
142
|
it 'passes monitoring_io: false to cluster' do
|
@@ -178,7 +188,7 @@ describe Mongo::Client do
|
|
178
188
|
let(:mongocryptd_uri) { 'mongodb://localhost:27021' }
|
179
189
|
let(:mongocryptd_bypass_spawn) { true }
|
180
190
|
let(:mongocryptd_spawn_path) { '/spawn/path' }
|
181
|
-
let(:mongocryptd_spawn_args) { ['--idleShutdownTimeoutSecs=100'] }
|
191
|
+
let(:mongocryptd_spawn_args) { [ '--idleShutdownTimeoutSecs=100' ] }
|
182
192
|
|
183
193
|
shared_examples 'a functioning auto encryption client' do
|
184
194
|
let(:encryption_options) { client.encrypter.options }
|
@@ -203,7 +213,10 @@ describe Mongo::Client do
|
|
203
213
|
let(:key_vault_namespace) { 'not.good.formatting' }
|
204
214
|
|
205
215
|
it 'raises an exception' do
|
206
|
-
expect { client }.to raise_error(
|
216
|
+
expect { client }.to raise_error(
|
217
|
+
ArgumentError,
|
218
|
+
/key_vault_namespace option must be in the format database.collection/
|
219
|
+
)
|
207
220
|
end
|
208
221
|
end
|
209
222
|
|
@@ -211,7 +224,7 @@ describe Mongo::Client do
|
|
211
224
|
let(:kms_providers) { nil }
|
212
225
|
|
213
226
|
it 'raises an exception' do
|
214
|
-
expect { client }.to raise_error(ArgumentError, /
|
227
|
+
expect { client }.to raise_error(ArgumentError, /KMS providers options must not be nil/)
|
215
228
|
end
|
216
229
|
end
|
217
230
|
|
@@ -219,7 +232,10 @@ describe Mongo::Client do
|
|
219
232
|
let(:kms_providers) { { random_key: 'hello' } }
|
220
233
|
|
221
234
|
it 'raises an exception' do
|
222
|
-
expect { client }.to raise_error(
|
235
|
+
expect { client }.to raise_error(
|
236
|
+
ArgumentError,
|
237
|
+
/KMS providers options must have one of the following keys: :aws, :azure, :gcp, :kmip, :local/
|
238
|
+
)
|
223
239
|
end
|
224
240
|
end
|
225
241
|
|
@@ -227,15 +243,25 @@ describe Mongo::Client do
|
|
227
243
|
let(:kms_providers) { { local: { wrong_key: 'hello' } } }
|
228
244
|
|
229
245
|
it 'raises an exception' do
|
230
|
-
expect { client }.to raise_error(
|
246
|
+
expect { client }.to raise_error(
|
247
|
+
ArgumentError,
|
248
|
+
/Local KMS provider options must be in the format: { key: 'MASTER-KEY' }/
|
249
|
+
)
|
231
250
|
end
|
232
251
|
end
|
233
252
|
|
234
253
|
context 'when aws kms_provider is incorrectly formatted' do
|
235
254
|
let(:kms_providers) { { aws: { wrong_key: 'hello' } } }
|
236
255
|
|
256
|
+
let(:expected_options_format) do
|
257
|
+
"{ access_key_id: 'YOUR-ACCESS-KEY-ID', secret_access_key: 'SECRET-ACCESS-KEY' }"
|
258
|
+
end
|
259
|
+
|
237
260
|
it 'raises an exception' do
|
238
|
-
expect { client }.to raise_error(
|
261
|
+
expect { client }.to raise_error(
|
262
|
+
ArgumentError,
|
263
|
+
/ AWS KMS provider options must be in the format: #{expected_options_format}/
|
264
|
+
)
|
239
265
|
end
|
240
266
|
end
|
241
267
|
|
@@ -265,7 +291,7 @@ describe Mongo::Client do
|
|
265
291
|
expect(encryption_options[:key_vault_namespace]).to eq(key_vault_namespace)
|
266
292
|
# Don't explicitly expect kms_providers to avoid accidentally exposing
|
267
293
|
# sensitive data in evergreen logs
|
268
|
-
expect(encryption_options[:kms_providers]).to
|
294
|
+
expect(encryption_options[:kms_providers]).to be_a(Hash)
|
269
295
|
expect(encryption_options[:schema_map]).to eq(schema_map)
|
270
296
|
expect(encryption_options[:bypass_auto_encryption]).to eq(bypass_auto_encryption)
|
271
297
|
expect(encryption_options[:extra_options][:mongocryptd_uri]).to eq(mongocryptd_uri)
|
@@ -285,9 +311,9 @@ describe Mongo::Client do
|
|
285
311
|
}
|
286
312
|
end
|
287
313
|
|
288
|
-
it 'sets key_vault_client
|
314
|
+
it 'sets key_vault_client with no encryption options' do
|
289
315
|
key_vault_client = client.encrypter.key_vault_client
|
290
|
-
expect(key_vault_client).to
|
316
|
+
expect(key_vault_client.options['auto_encryption_options']).to be_nil
|
291
317
|
end
|
292
318
|
|
293
319
|
it 'sets bypass_auto_encryption to false' do
|
@@ -298,20 +324,22 @@ describe Mongo::Client do
|
|
298
324
|
expect(encryption_options[:extra_options][:mongocryptd_uri]).to eq('mongodb://localhost:27020')
|
299
325
|
expect(encryption_options[:extra_options][:mongocryptd_bypass_spawn]).to be false
|
300
326
|
expect(encryption_options[:extra_options][:mongocryptd_spawn_path]).to eq('mongocryptd')
|
301
|
-
expect(encryption_options[:extra_options][:mongocryptd_spawn_args])
|
327
|
+
expect(encryption_options[:extra_options][:mongocryptd_spawn_args])
|
328
|
+
.to eq([ '--idleShutdownTimeoutSecs=60' ])
|
302
329
|
end
|
303
330
|
end
|
304
331
|
|
305
332
|
context 'with mongocryptd_spawn_args that don\'t include idleShutdownTimeoutSecs' do
|
306
|
-
let(:mongocryptd_spawn_args) { ['--otherArgument=true'] }
|
333
|
+
let(:mongocryptd_spawn_args) { [ '--otherArgument=true' ] }
|
307
334
|
|
308
335
|
it 'adds a default value to mongocryptd_spawn_args' do
|
309
|
-
expect(encryption_options[:extra_options][:mongocryptd_spawn_args])
|
336
|
+
expect(encryption_options[:extra_options][:mongocryptd_spawn_args])
|
337
|
+
.to eq(mongocryptd_spawn_args + [ '--idleShutdownTimeoutSecs=60' ])
|
310
338
|
end
|
311
339
|
end
|
312
340
|
|
313
341
|
context 'with mongocryptd_spawn_args that has idleShutdownTimeoutSecs as two arguments' do
|
314
|
-
let(:mongocryptd_spawn_args) { ['--idleShutdownTimeoutSecs', 100] }
|
342
|
+
let(:mongocryptd_spawn_args) { [ '--idleShutdownTimeoutSecs', 100 ] }
|
315
343
|
|
316
344
|
it 'does not modify mongocryptd_spawn_args' do
|
317
345
|
expect(encryption_options[:extra_options][:mongocryptd_spawn_args]).to eq(mongocryptd_spawn_args)
|
@@ -324,7 +352,7 @@ describe Mongo::Client do
|
|
324
352
|
it 'creates a key_vault_client' do
|
325
353
|
key_vault_client = encryption_options[:key_vault_client]
|
326
354
|
|
327
|
-
expect(key_vault_client).to
|
355
|
+
expect(key_vault_client).to be_a(described_class)
|
328
356
|
end
|
329
357
|
end
|
330
358
|
end
|
@@ -345,54 +373,47 @@ describe Mongo::Client do
|
|
345
373
|
|
346
374
|
context 'timeout options' do
|
347
375
|
let(:client) do
|
348
|
-
new_local_client(
|
349
|
-
SpecConfig.instance.
|
376
|
+
new_local_client(
|
377
|
+
SpecConfig.instance.addresses,
|
378
|
+
SpecConfig.instance.authorized_test_options.merge(options)
|
379
|
+
)
|
350
380
|
end
|
351
381
|
|
352
382
|
context 'when network timeouts are zero' do
|
353
|
-
let(:options)
|
354
|
-
{ socket_timeout: 0, connect_timeout: 0 }
|
355
|
-
end
|
383
|
+
let(:options) { { socket_timeout: 0, connect_timeout: 0 } }
|
356
384
|
|
357
385
|
it 'sets options to zeros' do
|
358
|
-
client.options[:socket_timeout].
|
359
|
-
client.options[:connect_timeout].
|
386
|
+
expect(client.options[:socket_timeout]).to be == 0
|
387
|
+
expect(client.options[:connect_timeout]).to be == 0
|
360
388
|
end
|
361
389
|
|
362
390
|
it 'connects and performs operations successfully' do
|
363
|
-
|
364
|
-
|
365
|
-
end.should_not raise_error
|
391
|
+
expect { client.database.command(ping: 1) }
|
392
|
+
.not_to raise_error
|
366
393
|
end
|
367
394
|
end
|
368
395
|
|
369
|
-
%i
|
396
|
+
%i[ socket_timeout connect_timeout ].each do |option|
|
370
397
|
context "when #{option} is negative" do
|
371
|
-
let(:options)
|
372
|
-
{ option => -1 }
|
373
|
-
end
|
398
|
+
let(:options) { { option => -1 } }
|
374
399
|
|
375
400
|
it 'fails client creation' do
|
376
|
-
|
377
|
-
|
378
|
-
end.should raise_error(ArgumentError, /#{option} must be a non-negative number/)
|
401
|
+
expect { client }
|
402
|
+
.to raise_error(ArgumentError, /#{option} must be a non-negative number/)
|
379
403
|
end
|
380
404
|
end
|
381
405
|
|
382
406
|
context "when #{option} is of the wrong type" do
|
383
|
-
let(:options)
|
384
|
-
{ option => '42' }
|
385
|
-
end
|
407
|
+
let(:options) { { option => '42' } }
|
386
408
|
|
387
409
|
it 'fails client creation' do
|
388
|
-
|
389
|
-
|
390
|
-
end.should raise_error(ArgumentError, /#{option} must be a non-negative number/)
|
410
|
+
expect { client }
|
411
|
+
.to raise_error(ArgumentError, /#{option} must be a non-negative number/)
|
391
412
|
end
|
392
413
|
end
|
393
414
|
end
|
394
415
|
|
395
|
-
context
|
416
|
+
context 'when :connect_timeout is very small' do
|
396
417
|
# The driver reads first and checks the deadline second.
|
397
418
|
# This means the read (in a monitor) can technically take more than
|
398
419
|
# the connect timeout. Restrict to TLS configurations to make
|
@@ -404,18 +425,15 @@ describe Mongo::Client do
|
|
404
425
|
end
|
405
426
|
|
406
427
|
it 'allows client creation' do
|
407
|
-
|
408
|
-
client
|
409
|
-
end.should_not raise_error
|
428
|
+
expect { client }.not_to raise_error
|
410
429
|
end
|
411
430
|
|
412
431
|
context 'non-lb' do
|
413
432
|
require_topology :single, :replica_set, :sharded
|
414
433
|
|
415
434
|
it 'fails server selection due to very small timeout' do
|
416
|
-
|
417
|
-
|
418
|
-
end.should raise_error(Mongo::Error::NoServerAvailable)
|
435
|
+
expect { client.database.command(ping: 1) }
|
436
|
+
.to raise_error(Mongo::Error::NoServerAvailable)
|
419
437
|
end
|
420
438
|
end
|
421
439
|
|
@@ -423,14 +441,13 @@ describe Mongo::Client do
|
|
423
441
|
require_topology :load_balanced
|
424
442
|
|
425
443
|
it 'fails the operation after successful server selection' do
|
426
|
-
|
427
|
-
|
428
|
-
end.should raise_error(Mongo::Error::SocketTimeoutError, /socket took over.*to connect/)
|
444
|
+
expect { client.database.command(ping: 1) }
|
445
|
+
.to raise_error(Mongo::Error::SocketTimeoutError, /socket took over.*to connect/)
|
429
446
|
end
|
430
447
|
end
|
431
448
|
end
|
432
449
|
|
433
|
-
context
|
450
|
+
context 'when :socket_timeout is very small' do
|
434
451
|
# The driver reads first and checks the deadline second.
|
435
452
|
# This means the read (in a monitor) can technically take more than
|
436
453
|
# the connect timeout. Restrict to TLS configurations to make
|
@@ -442,15 +459,13 @@ describe Mongo::Client do
|
|
442
459
|
end
|
443
460
|
|
444
461
|
it 'allows client creation' do
|
445
|
-
|
446
|
-
client
|
447
|
-
end.should_not raise_error
|
462
|
+
expect { client }.not_to raise_error
|
448
463
|
end
|
449
464
|
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
465
|
+
retry_test
|
466
|
+
it 'fails operations due to very small timeout' do
|
467
|
+
expect { client.database.command(ping: 1) }
|
468
|
+
.to raise_error(Mongo::Error::SocketTimeoutError)
|
454
469
|
end
|
455
470
|
end
|
456
471
|
end
|
@@ -461,7 +476,6 @@ describe Mongo::Client do
|
|
461
476
|
end
|
462
477
|
|
463
478
|
context 'when retry_writes is true' do
|
464
|
-
|
465
479
|
let(:options) do
|
466
480
|
{ retry_writes: true }
|
467
481
|
end
|
@@ -472,7 +486,6 @@ describe Mongo::Client do
|
|
472
486
|
end
|
473
487
|
|
474
488
|
context 'when retry_writes is false' do
|
475
|
-
|
476
489
|
let(:options) do
|
477
490
|
{ retry_writes: false }
|
478
491
|
end
|
@@ -483,10 +496,7 @@ describe Mongo::Client do
|
|
483
496
|
end
|
484
497
|
|
485
498
|
context 'when retry_writes is not given' do
|
486
|
-
|
487
|
-
let(:options) do
|
488
|
-
{ }
|
489
|
-
end
|
499
|
+
let(:options) { {} }
|
490
500
|
|
491
501
|
it 'sets retry_writes to true' do
|
492
502
|
expect(client.options['retry_writes']).to be true
|
@@ -495,17 +505,18 @@ describe Mongo::Client do
|
|
495
505
|
end
|
496
506
|
|
497
507
|
context 'when compressors are provided' do
|
498
|
-
|
499
508
|
let(:client) do
|
500
|
-
new_local_client(
|
501
|
-
SpecConfig.instance.
|
509
|
+
new_local_client(
|
510
|
+
SpecConfig.instance.addresses,
|
511
|
+
SpecConfig.instance.all_test_options.merge(options)
|
512
|
+
)
|
502
513
|
end
|
503
514
|
|
504
515
|
context 'when the compressor is not supported by the driver' do
|
505
516
|
require_warning_clean
|
506
517
|
|
507
518
|
let(:options) do
|
508
|
-
{ compressors: [
|
519
|
+
{ compressors: %w[ snoopy ] }
|
509
520
|
end
|
510
521
|
|
511
522
|
it 'does not set the compressor and warns' do
|
@@ -522,16 +533,16 @@ describe Mongo::Client do
|
|
522
533
|
min_server_fcv '3.6'
|
523
534
|
|
524
535
|
let(:options) do
|
525
|
-
{ compressors: [
|
536
|
+
{ compressors: %w[ zlib snoopy ] }
|
526
537
|
end
|
527
538
|
|
528
539
|
it 'does not set the unsupported compressor and warns' do
|
529
540
|
expect(Mongo::Logger.logger).to receive(:warn).at_least(:once)
|
530
|
-
expect(client.options['compressors']).to eq([
|
541
|
+
expect(client.options['compressors']).to eq(%w[ zlib ])
|
531
542
|
end
|
532
543
|
|
533
544
|
it 'sets the compression key of the handshake document to the list of supported compressors' do
|
534
|
-
expect(client.cluster.app_metadata.send(:document)[:compression]).to eq([
|
545
|
+
expect(client.cluster.app_metadata.send(:document)[:compression]).to eq(%w[ zlib ])
|
535
546
|
end
|
536
547
|
end
|
537
548
|
end
|
@@ -540,7 +551,7 @@ describe Mongo::Client do
|
|
540
551
|
max_server_version '3.4'
|
541
552
|
|
542
553
|
let(:options) do
|
543
|
-
{ compressors: [
|
554
|
+
{ compressors: %w[ zlib ] }
|
544
555
|
end
|
545
556
|
|
546
557
|
it 'does not set the compressor and warns' do
|
@@ -553,7 +564,7 @@ describe Mongo::Client do
|
|
553
564
|
require_zlib_compression
|
554
565
|
|
555
566
|
let(:options) do
|
556
|
-
{ compressors: [
|
567
|
+
{ compressors: %w[ zlib ] }
|
557
568
|
end
|
558
569
|
|
559
570
|
it 'sets the compressor' do
|
@@ -575,9 +586,7 @@ describe Mongo::Client do
|
|
575
586
|
|
576
587
|
it 'does not use compression for authentication messages' do
|
577
588
|
expect(Mongo::Protocol::Compressed).not_to receive(:new)
|
578
|
-
client.cluster.next_primary.send(:with_connection)
|
579
|
-
conn.connect!
|
580
|
-
end
|
589
|
+
client.cluster.next_primary.send(:with_connection, &:connect!)
|
581
590
|
end
|
582
591
|
end
|
583
592
|
|
@@ -585,14 +594,14 @@ describe Mongo::Client do
|
|
585
594
|
min_server_version '3.6'
|
586
595
|
|
587
596
|
let(:options) do
|
588
|
-
{ compressors: [
|
597
|
+
{ compressors: %w[ snappy ] }
|
589
598
|
end
|
590
599
|
|
591
600
|
context 'when snappy gem is installed' do
|
592
601
|
require_snappy_compression
|
593
602
|
|
594
603
|
it 'creates the client' do
|
595
|
-
expect(client.options['compressors']).to eq([
|
604
|
+
expect(client.options['compressors']).to eq(%w[ snappy ])
|
596
605
|
end
|
597
606
|
end
|
598
607
|
|
@@ -611,14 +620,14 @@ describe Mongo::Client do
|
|
611
620
|
min_server_version '4.2'
|
612
621
|
|
613
622
|
let(:options) do
|
614
|
-
{ compressors: [
|
623
|
+
{ compressors: %w[ zstd ] }
|
615
624
|
end
|
616
625
|
|
617
626
|
context 'when zstd gem is installed' do
|
618
627
|
require_zstd_compression
|
619
628
|
|
620
629
|
it 'creates the client' do
|
621
|
-
expect(client.options['compressors']).to eq([
|
630
|
+
expect(client.options['compressors']).to eq(%w[ zstd ])
|
622
631
|
end
|
623
632
|
end
|
624
633
|
|
@@ -660,7 +669,10 @@ describe Mongo::Client do
|
|
660
669
|
min_server_fcv '3.6'
|
661
670
|
|
662
671
|
let(:client) do
|
663
|
-
new_local_client_nmio(
|
672
|
+
new_local_client_nmio(
|
673
|
+
SpecConfig.instance.addresses,
|
674
|
+
SpecConfig.instance.test_options.merge(zlib_compression_level: 1)
|
675
|
+
)
|
664
676
|
end
|
665
677
|
|
666
678
|
it 'sets the option on the client' do
|
@@ -669,26 +681,25 @@ describe Mongo::Client do
|
|
669
681
|
end
|
670
682
|
|
671
683
|
context 'when ssl options are provided' do
|
672
|
-
|
673
684
|
let(:options) do
|
674
685
|
{
|
675
|
-
:
|
676
|
-
:
|
677
|
-
:
|
678
|
-
:
|
679
|
-
:
|
680
|
-
:
|
681
|
-
:
|
682
|
-
:
|
683
|
-
:
|
684
|
-
:
|
685
|
-
:
|
686
|
-
:
|
686
|
+
ssl: true,
|
687
|
+
ssl_ca_cert: SpecConfig.instance.ca_cert_path,
|
688
|
+
ssl_ca_cert_string: 'ca cert string',
|
689
|
+
ssl_ca_cert_object: 'ca cert object',
|
690
|
+
ssl_cert: SpecConfig.instance.client_cert_path,
|
691
|
+
ssl_cert_string: 'cert string',
|
692
|
+
ssl_cert_object: 'cert object',
|
693
|
+
ssl_key: SpecConfig.instance.client_key_path,
|
694
|
+
ssl_key_string: 'key string',
|
695
|
+
ssl_key_object: 'key object',
|
696
|
+
ssl_key_pass_phrase: 'passphrase',
|
697
|
+
ssl_verify: true,
|
687
698
|
}
|
688
699
|
end
|
689
700
|
|
690
701
|
let(:client) do
|
691
|
-
new_local_client_nmio(
|
702
|
+
new_local_client_nmio(SINGLE_CLIENT, options)
|
692
703
|
end
|
693
704
|
|
694
705
|
it 'sets the ssl option' do
|
@@ -741,9 +752,8 @@ describe Mongo::Client do
|
|
741
752
|
end
|
742
753
|
|
743
754
|
context 'when no database is provided' do
|
744
|
-
|
745
755
|
let(:client) do
|
746
|
-
new_local_client_nmio(
|
756
|
+
new_local_client_nmio(SINGLE_CLIENT, read: { mode: :secondary })
|
747
757
|
end
|
748
758
|
|
749
759
|
it 'defaults the database to admin' do
|
@@ -752,9 +762,8 @@ describe Mongo::Client do
|
|
752
762
|
end
|
753
763
|
|
754
764
|
context 'when a database is provided' do
|
755
|
-
|
756
765
|
let(:client) do
|
757
|
-
new_local_client_nmio(
|
766
|
+
new_local_client_nmio(SINGLE_CLIENT, database: :testdb)
|
758
767
|
end
|
759
768
|
|
760
769
|
it 'sets the current database' do
|
@@ -763,9 +772,8 @@ describe Mongo::Client do
|
|
763
772
|
end
|
764
773
|
|
765
774
|
context 'when providing a custom logger' do
|
766
|
-
|
767
775
|
let(:logger) do
|
768
|
-
Logger.new(
|
776
|
+
Logger.new($stdout).tap do |l|
|
769
777
|
l.level = Logger::FATAL
|
770
778
|
end
|
771
779
|
end
|
@@ -775,14 +783,13 @@ describe Mongo::Client do
|
|
775
783
|
end
|
776
784
|
|
777
785
|
it 'does not use the global logger' do
|
778
|
-
expect(client.cluster.logger).
|
786
|
+
expect(client.cluster.logger).not_to eq(Mongo::Logger.logger)
|
779
787
|
end
|
780
788
|
end
|
781
789
|
|
782
790
|
context 'when providing a heartbeat_frequency' do
|
783
|
-
|
784
791
|
let(:client) do
|
785
|
-
new_local_client_nmio(
|
792
|
+
new_local_client_nmio(SINGLE_CLIENT, heartbeat_frequency: 2)
|
786
793
|
end
|
787
794
|
|
788
795
|
it 'sets the heartbeat frequency' do
|
@@ -790,38 +797,47 @@ describe Mongo::Client do
|
|
790
797
|
end
|
791
798
|
end
|
792
799
|
|
793
|
-
context 'when
|
794
|
-
|
800
|
+
context 'when max_connecting is provided' do
|
795
801
|
let(:client) do
|
796
|
-
new_local_client_nmio(
|
802
|
+
new_local_client_nmio(SINGLE_CLIENT, options)
|
797
803
|
end
|
798
804
|
|
799
|
-
context 'when
|
805
|
+
context 'when max_connecting is a positive integer' do
|
806
|
+
let(:options) do
|
807
|
+
{ max_connecting: 5 }
|
808
|
+
end
|
800
809
|
|
801
|
-
|
810
|
+
it 'sets the max connecting' do
|
811
|
+
expect(client.options[:max_connecting]).to eq(options[:max_connecting])
|
812
|
+
end
|
813
|
+
end
|
802
814
|
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
815
|
+
context 'when max_connecting is a negative integer' do
|
816
|
+
let(:options) do
|
817
|
+
{ max_connecting: -5 }
|
818
|
+
end
|
819
|
+
|
820
|
+
it 'raises an exception' do
|
821
|
+
expect { client }.to raise_error(Mongo::Error::InvalidMaxConnecting)
|
822
|
+
end
|
823
|
+
end
|
824
|
+
end
|
825
|
+
|
826
|
+
context 'when min_pool_size is provided' do
|
827
|
+
let(:client) { new_local_client_nmio(SINGLE_CLIENT, options) }
|
828
|
+
|
829
|
+
context 'when max_pool_size is provided' do
|
830
|
+
context 'when the min_pool_size is greater than the max_pool_size' do
|
831
|
+
let(:options) { { min_pool_size: 20, max_pool_size: 10 } }
|
809
832
|
|
810
833
|
it 'raises an Exception' do
|
811
|
-
expect {
|
812
|
-
|
813
|
-
}.to raise_exception(Mongo::Error::InvalidMinPoolSize)
|
834
|
+
expect { client }
|
835
|
+
.to raise_exception(Mongo::Error::InvalidMinPoolSize)
|
814
836
|
end
|
815
837
|
end
|
816
838
|
|
817
839
|
context 'when the min_pool_size is less than the max_pool_size' do
|
818
|
-
|
819
|
-
let(:options) do
|
820
|
-
{
|
821
|
-
:min_pool_size => 10,
|
822
|
-
:max_pool_size => 20
|
823
|
-
}
|
824
|
-
end
|
840
|
+
let(:options) { { min_pool_size: 10, max_pool_size: 20 } }
|
825
841
|
|
826
842
|
it 'sets the option' do
|
827
843
|
expect(client.options[:min_pool_size]).to eq(options[:min_pool_size])
|
@@ -830,13 +846,16 @@ describe Mongo::Client do
|
|
830
846
|
end
|
831
847
|
|
832
848
|
context 'when the min_pool_size is equal to the max_pool_size' do
|
849
|
+
let(:options) { { min_pool_size: 10, max_pool_size: 10 } }
|
833
850
|
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
:max_pool_size => 10
|
838
|
-
}
|
851
|
+
it 'sets the option' do
|
852
|
+
expect(client.options[:min_pool_size]).to eq(options[:min_pool_size])
|
853
|
+
expect(client.options[:max_pool_size]).to eq(options[:max_pool_size])
|
839
854
|
end
|
855
|
+
end
|
856
|
+
|
857
|
+
context 'when max_pool_size is zero (unlimited)' do
|
858
|
+
let(:options) { { min_pool_size: 10, max_pool_size: 0 } }
|
840
859
|
|
841
860
|
it 'sets the option' do
|
842
861
|
expect(client.options[:min_pool_size]).to eq(options[:min_pool_size])
|
@@ -846,29 +865,17 @@ describe Mongo::Client do
|
|
846
865
|
end
|
847
866
|
|
848
867
|
context 'when max_pool_size is not provided' do
|
849
|
-
|
850
868
|
context 'when the min_pool_size is greater than the default max_pool_size' do
|
851
|
-
|
852
|
-
let(:options) do
|
853
|
-
{
|
854
|
-
:min_pool_size => 10
|
855
|
-
}
|
856
|
-
end
|
869
|
+
let(:options) { { min_pool_size: 30 } }
|
857
870
|
|
858
871
|
it 'raises an Exception' do
|
859
|
-
expect {
|
860
|
-
|
861
|
-
}.to raise_exception(Mongo::Error::InvalidMinPoolSize)
|
872
|
+
expect { client }
|
873
|
+
.to raise_exception(Mongo::Error::InvalidMinPoolSize)
|
862
874
|
end
|
863
875
|
end
|
864
876
|
|
865
877
|
context 'when the min_pool_size is less than the default max_pool_size' do
|
866
|
-
|
867
|
-
let(:options) do
|
868
|
-
{
|
869
|
-
:min_pool_size => 3
|
870
|
-
}
|
871
|
-
end
|
878
|
+
let(:options) { { min_pool_size: 3 } }
|
872
879
|
|
873
880
|
it 'sets the option' do
|
874
881
|
expect(client.options[:min_pool_size]).to eq(options[:min_pool_size])
|
@@ -876,10 +883,9 @@ describe Mongo::Client do
|
|
876
883
|
end
|
877
884
|
|
878
885
|
context 'when the min_pool_size is equal to the max_pool_size' do
|
879
|
-
|
880
886
|
let(:options) do
|
881
887
|
{
|
882
|
-
:
|
888
|
+
min_pool_size: Mongo::Server::ConnectionPool::DEFAULT_MAX_SIZE
|
883
889
|
}
|
884
890
|
end
|
885
891
|
|
@@ -890,18 +896,18 @@ describe Mongo::Client do
|
|
890
896
|
end
|
891
897
|
end
|
892
898
|
|
893
|
-
context 'when max_pool_size
|
899
|
+
context 'when max_pool_size is 0 (unlimited)' do
|
900
|
+
let(:client) { new_local_client_nmio(SINGLE_CLIENT, options) }
|
901
|
+
let(:options) { { max_pool_size: 0 } }
|
894
902
|
|
895
|
-
|
896
|
-
|
903
|
+
it 'sets the option' do
|
904
|
+
expect(client.options[:max_pool_size]).to eq(options[:max_pool_size])
|
897
905
|
end
|
906
|
+
end
|
898
907
|
|
899
|
-
|
900
|
-
|
901
|
-
|
902
|
-
:max_pool_size => nil
|
903
|
-
}
|
904
|
-
end
|
908
|
+
context 'when max_pool_size and min_pool_size are both nil' do
|
909
|
+
let(:options) { { min_pool_size: nil, max_pool_size: nil } }
|
910
|
+
let(:client) { new_local_client_nmio(SINGLE_CLIENT, options) }
|
905
911
|
|
906
912
|
it 'does not set either option' do
|
907
913
|
expect(client.options[:max_pool_size]).to be_nil
|
@@ -910,28 +916,26 @@ describe Mongo::Client do
|
|
910
916
|
end
|
911
917
|
|
912
918
|
context 'when platform details are specified' do
|
913
|
-
|
914
919
|
let(:app_metadata) do
|
915
920
|
client.cluster.app_metadata
|
916
921
|
end
|
917
922
|
|
918
923
|
let(:client) do
|
919
|
-
new_local_client_nmio(
|
924
|
+
new_local_client_nmio(SINGLE_CLIENT, platform: 'mongoid-6.0.2')
|
920
925
|
end
|
921
926
|
|
922
927
|
it 'includes the platform info in the app metadata' do
|
923
|
-
expect(app_metadata.
|
928
|
+
expect(app_metadata.client_document[:platform]).to match(/mongoid-6\.0\.2/)
|
924
929
|
end
|
925
930
|
end
|
926
931
|
|
927
932
|
context 'when platform details are not specified' do
|
928
|
-
|
929
933
|
let(:app_metadata) do
|
930
934
|
client.cluster.app_metadata
|
931
935
|
end
|
932
936
|
|
933
937
|
let(:client) do
|
934
|
-
new_local_client_nmio(
|
938
|
+
new_local_client_nmio(SINGLE_CLIENT)
|
935
939
|
end
|
936
940
|
|
937
941
|
context 'mri' do
|
@@ -947,7 +951,7 @@ describe Mongo::Client do
|
|
947
951
|
end
|
948
952
|
|
949
953
|
it 'does not include the platform info in the app metadata' do
|
950
|
-
expect(app_metadata.
|
954
|
+
expect(app_metadata.client_document[:platform]).to eq(platform_string)
|
951
955
|
end
|
952
956
|
end
|
953
957
|
|
@@ -966,24 +970,18 @@ describe Mongo::Client do
|
|
966
970
|
end
|
967
971
|
|
968
972
|
it 'does not include the platform info in the app metadata' do
|
969
|
-
expect(app_metadata.
|
973
|
+
expect(app_metadata.client_document[:platform]).to eq(platform_string)
|
970
974
|
end
|
971
975
|
end
|
972
976
|
end
|
973
977
|
end
|
974
978
|
|
975
979
|
context 'when providing a connection string' do
|
976
|
-
|
977
980
|
context 'when the string uses the SRV Protocol' do
|
978
981
|
require_external_connectivity
|
979
982
|
|
980
|
-
let
|
981
|
-
|
982
|
-
end
|
983
|
-
|
984
|
-
let(:client) do
|
985
|
-
new_local_client_nmio(uri)
|
986
|
-
end
|
983
|
+
let(:uri) { 'mongodb+srv://test5.test.build.10gen.cc/testdb' }
|
984
|
+
let(:client) { new_local_client_nmio(uri) }
|
987
985
|
|
988
986
|
it 'sets the database' do
|
989
987
|
expect(client.options[:database]).to eq('testdb')
|
@@ -991,29 +989,17 @@ describe Mongo::Client do
|
|
991
989
|
end
|
992
990
|
|
993
991
|
context 'when a database is provided' do
|
994
|
-
|
995
|
-
let
|
996
|
-
'mongodb://127.0.0.1:27017/testdb'
|
997
|
-
end
|
998
|
-
|
999
|
-
let(:client) do
|
1000
|
-
new_local_client_nmio(uri)
|
1001
|
-
end
|
992
|
+
let(:uri) { 'mongodb://127.0.0.1:27017/testdb' }
|
993
|
+
let(:client) { new_local_client_nmio(uri) }
|
1002
994
|
|
1003
995
|
it 'sets the database' do
|
1004
|
-
expect { client[:users] }.
|
996
|
+
expect { client[:users] }.not_to raise_error
|
1005
997
|
end
|
1006
998
|
end
|
1007
999
|
|
1008
1000
|
context 'when a database is not provided' do
|
1009
|
-
|
1010
|
-
let
|
1011
|
-
'mongodb://127.0.0.1:27017'
|
1012
|
-
end
|
1013
|
-
|
1014
|
-
let(:client) do
|
1015
|
-
new_local_client_nmio(uri)
|
1016
|
-
end
|
1001
|
+
let(:uri) { 'mongodb://127.0.0.1:27017' }
|
1002
|
+
let(:client) { new_local_client_nmio(uri) }
|
1017
1003
|
|
1018
1004
|
it 'defaults the database to admin' do
|
1019
1005
|
expect(client.database.name).to eq('admin')
|
@@ -1021,44 +1007,59 @@ describe Mongo::Client do
|
|
1021
1007
|
end
|
1022
1008
|
|
1023
1009
|
context 'when URI options are provided' do
|
1024
|
-
|
1025
|
-
let
|
1026
|
-
'mongodb://127.0.0.1:27017/testdb?w=3'
|
1027
|
-
end
|
1028
|
-
|
1029
|
-
let(:client) do
|
1030
|
-
new_local_client_nmio(uri)
|
1031
|
-
end
|
1010
|
+
let(:uri) { 'mongodb://127.0.0.1:27017/testdb?w=3' }
|
1011
|
+
let(:client) { new_local_client_nmio(uri) }
|
1032
1012
|
|
1033
1013
|
let(:expected_options) do
|
1034
|
-
Mongo::Options::Redacted.new(
|
1035
|
-
|
1036
|
-
|
1014
|
+
Mongo::Options::Redacted.new(
|
1015
|
+
write_concern: { w: 3 },
|
1016
|
+
monitoring_io: false,
|
1017
|
+
database: 'testdb',
|
1018
|
+
retry_writes: true,
|
1019
|
+
retry_reads: true
|
1020
|
+
)
|
1037
1021
|
end
|
1038
1022
|
|
1039
1023
|
it 'sets the options' do
|
1040
1024
|
expect(client.options).to eq(expected_options)
|
1041
1025
|
end
|
1042
1026
|
|
1043
|
-
context 'when
|
1027
|
+
context 'when max_connecting is provided' do
|
1028
|
+
context 'when max_connecting is a positive integer' do
|
1029
|
+
let(:uri) do
|
1030
|
+
'mongodb://127.0.0.1:27017/?maxConnecting=10'
|
1031
|
+
end
|
1044
1032
|
|
1045
|
-
|
1033
|
+
it 'sets the max connecting' do
|
1034
|
+
expect(client.options[:max_connecting]).to eq(10)
|
1035
|
+
end
|
1036
|
+
end
|
1046
1037
|
|
1047
|
-
|
1038
|
+
context 'when max_connecting is a negative integer' do
|
1039
|
+
let(:uri) do
|
1040
|
+
'mongodb://127.0.0.1:27017/?maxConnecting=0'
|
1041
|
+
end
|
1042
|
+
|
1043
|
+
it 'raises an exception' do
|
1044
|
+
expect { client }.to raise_error(Mongo::Error::InvalidMaxConnecting)
|
1045
|
+
end
|
1046
|
+
end
|
1047
|
+
end
|
1048
1048
|
|
1049
|
+
context 'when min_pool_size is provided' do
|
1050
|
+
context 'when max_pool_size is provided' do
|
1051
|
+
context 'when the min_pool_size is greater than the max_pool_size' do
|
1049
1052
|
let(:uri) do
|
1050
1053
|
'mongodb://127.0.0.1:27017/?minPoolSize=20&maxPoolSize=10'
|
1051
1054
|
end
|
1052
1055
|
|
1053
1056
|
it 'raises an Exception' do
|
1054
|
-
expect {
|
1055
|
-
|
1056
|
-
}.to raise_exception(Mongo::Error::InvalidMinPoolSize)
|
1057
|
+
expect { client }
|
1058
|
+
.to raise_exception(Mongo::Error::InvalidMinPoolSize)
|
1057
1059
|
end
|
1058
1060
|
end
|
1059
1061
|
|
1060
1062
|
context 'when the min_pool_size is less than the max_pool_size' do
|
1061
|
-
|
1062
1063
|
let(:uri) do
|
1063
1064
|
'mongodb://127.0.0.1:27017/?minPoolSize=10&maxPoolSize=20'
|
1064
1065
|
end
|
@@ -1070,7 +1071,6 @@ describe Mongo::Client do
|
|
1070
1071
|
end
|
1071
1072
|
|
1072
1073
|
context 'when the min_pool_size is equal to the max_pool_size' do
|
1073
|
-
|
1074
1074
|
let(:uri) do
|
1075
1075
|
'mongodb://127.0.0.1:27017/?minPoolSize=10&maxPoolSize=10'
|
1076
1076
|
end
|
@@ -1080,28 +1080,31 @@ describe Mongo::Client do
|
|
1080
1080
|
expect(client.options[:max_pool_size]).to eq(10)
|
1081
1081
|
end
|
1082
1082
|
end
|
1083
|
+
|
1084
|
+
context 'when max_pool_size is 0 (unlimited)' do
|
1085
|
+
let(:uri) do
|
1086
|
+
'mongodb://127.0.0.1:27017/?minPoolSize=10&maxPoolSize=0'
|
1087
|
+
end
|
1088
|
+
|
1089
|
+
it 'sets the option' do
|
1090
|
+
expect(client.options[:min_pool_size]).to eq(10)
|
1091
|
+
expect(client.options[:max_pool_size]).to eq(0)
|
1092
|
+
end
|
1093
|
+
end
|
1083
1094
|
end
|
1084
1095
|
|
1085
1096
|
context 'when max_pool_size is not provided' do
|
1086
|
-
|
1087
1097
|
context 'when the min_pool_size is greater than the default max_pool_size' do
|
1088
|
-
|
1089
|
-
let(:uri) do
|
1090
|
-
'mongodb://127.0.0.1:27017/?minPoolSize=10'
|
1091
|
-
end
|
1098
|
+
let(:uri) { 'mongodb://127.0.0.1:27017/?minPoolSize=30' }
|
1092
1099
|
|
1093
1100
|
it 'raises an Exception' do
|
1094
|
-
expect {
|
1095
|
-
|
1096
|
-
}.to raise_exception(Mongo::Error::InvalidMinPoolSize)
|
1101
|
+
expect { client }
|
1102
|
+
.to raise_exception(Mongo::Error::InvalidMinPoolSize)
|
1097
1103
|
end
|
1098
1104
|
end
|
1099
1105
|
|
1100
1106
|
context 'when the min_pool_size is less than the default max_pool_size' do
|
1101
|
-
|
1102
|
-
let(:uri) do
|
1103
|
-
'mongodb://127.0.0.1:27017/?minPoolSize=3'
|
1104
|
-
end
|
1107
|
+
let(:uri) { 'mongodb://127.0.0.1:27017/?minPoolSize=3' }
|
1105
1108
|
|
1106
1109
|
it 'sets the option' do
|
1107
1110
|
expect(client.options[:min_pool_size]).to eq(3)
|
@@ -1109,10 +1112,7 @@ describe Mongo::Client do
|
|
1109
1112
|
end
|
1110
1113
|
|
1111
1114
|
context 'when the min_pool_size is equal to the max_pool_size' do
|
1112
|
-
|
1113
|
-
let(:uri) do
|
1114
|
-
'mongodb://127.0.0.1:27017/?minPoolSize=5'
|
1115
|
-
end
|
1115
|
+
let(:uri) { 'mongodb://127.0.0.1:27017/?minPoolSize=5' }
|
1116
1116
|
|
1117
1117
|
it 'sets the option' do
|
1118
1118
|
expect(client.options[:min_pool_size]).to eq(5)
|
@@ -1122,11 +1122,8 @@ describe Mongo::Client do
|
|
1122
1122
|
end
|
1123
1123
|
|
1124
1124
|
context 'when retryReads URI option is given' do
|
1125
|
-
|
1126
1125
|
context 'it is false' do
|
1127
|
-
let
|
1128
|
-
'mongodb://127.0.0.1:27017/testdb?retryReads=false'
|
1129
|
-
end
|
1126
|
+
let(:uri) { 'mongodb://127.0.0.1:27017/testdb?retryReads=false' }
|
1130
1127
|
|
1131
1128
|
it 'sets the option on the client' do
|
1132
1129
|
expect(client.options[:retry_reads]).to be false
|
@@ -1134,9 +1131,7 @@ describe Mongo::Client do
|
|
1134
1131
|
end
|
1135
1132
|
|
1136
1133
|
context 'it is true' do
|
1137
|
-
let
|
1138
|
-
'mongodb://127.0.0.1:27017/testdb?retryReads=true'
|
1139
|
-
end
|
1134
|
+
let(:uri) { 'mongodb://127.0.0.1:27017/testdb?retryReads=true' }
|
1140
1135
|
|
1141
1136
|
it 'sets the option on the client' do
|
1142
1137
|
expect(client.options[:retry_reads]).to be true
|
@@ -1145,11 +1140,8 @@ describe Mongo::Client do
|
|
1145
1140
|
end
|
1146
1141
|
|
1147
1142
|
context 'when retryWrites URI option is given' do
|
1148
|
-
|
1149
1143
|
context 'it is false' do
|
1150
|
-
let
|
1151
|
-
'mongodb://127.0.0.1:27017/testdb?retryWrites=false'
|
1152
|
-
end
|
1144
|
+
let(:uri) { 'mongodb://127.0.0.1:27017/testdb?retryWrites=false' }
|
1153
1145
|
|
1154
1146
|
it 'sets the option on the client' do
|
1155
1147
|
expect(client.options[:retry_writes]).to be false
|
@@ -1157,9 +1149,7 @@ describe Mongo::Client do
|
|
1157
1149
|
end
|
1158
1150
|
|
1159
1151
|
context 'it is true' do
|
1160
|
-
let
|
1161
|
-
'mongodb://127.0.0.1:27017/testdb?retryWrites=true'
|
1162
|
-
end
|
1152
|
+
let(:uri) { 'mongodb://127.0.0.1:27017/testdb?retryWrites=true' }
|
1163
1153
|
|
1164
1154
|
it 'sets the option on the client' do
|
1165
1155
|
expect(client.options[:retry_writes]).to be true
|
@@ -1169,19 +1159,20 @@ describe Mongo::Client do
|
|
1169
1159
|
end
|
1170
1160
|
|
1171
1161
|
context 'when options are provided not in the string' do
|
1172
|
-
|
1173
|
-
let!(:uri) do
|
1174
|
-
'mongodb://127.0.0.1:27017/testdb'
|
1175
|
-
end
|
1162
|
+
let(:uri) { 'mongodb://127.0.0.1:27017/testdb' }
|
1176
1163
|
|
1177
1164
|
let(:client) do
|
1178
|
-
new_local_client_nmio(uri, :
|
1165
|
+
new_local_client_nmio(uri, write: { w: 3 })
|
1179
1166
|
end
|
1180
1167
|
|
1181
1168
|
let(:expected_options) do
|
1182
|
-
Mongo::Options::Redacted.new(
|
1183
|
-
|
1184
|
-
|
1169
|
+
Mongo::Options::Redacted.new(
|
1170
|
+
write: { w: 3 },
|
1171
|
+
monitoring_io: false,
|
1172
|
+
database: 'testdb',
|
1173
|
+
retry_writes: true,
|
1174
|
+
retry_reads: true
|
1175
|
+
)
|
1185
1176
|
end
|
1186
1177
|
|
1187
1178
|
it 'sets the options' do
|
@@ -1190,19 +1181,20 @@ describe Mongo::Client do
|
|
1190
1181
|
end
|
1191
1182
|
|
1192
1183
|
context 'when options are provided in the URI and as Ruby options' do
|
1193
|
-
|
1194
|
-
let!(:uri) do
|
1195
|
-
'mongodb://127.0.0.1:27017/testdb?w=3'
|
1196
|
-
end
|
1184
|
+
let(:uri) { 'mongodb://127.0.0.1:27017/testdb?w=3' }
|
1197
1185
|
|
1198
1186
|
let(:client) do
|
1199
|
-
new_local_client_nmio(uri, option_name => { :
|
1187
|
+
new_local_client_nmio(uri, option_name => { w: 4 })
|
1200
1188
|
end
|
1201
1189
|
|
1202
1190
|
let(:expected_options) do
|
1203
|
-
Mongo::Options::Redacted.new(
|
1204
|
-
|
1205
|
-
|
1191
|
+
Mongo::Options::Redacted.new(
|
1192
|
+
option_name => { w: 4 },
|
1193
|
+
monitoring_io: false,
|
1194
|
+
database: 'testdb',
|
1195
|
+
retry_writes: true,
|
1196
|
+
retry_reads: true
|
1197
|
+
)
|
1206
1198
|
end
|
1207
1199
|
|
1208
1200
|
shared_examples_for 'allows explicit options to take preference' do
|
@@ -1225,14 +1217,8 @@ describe Mongo::Client do
|
|
1225
1217
|
end
|
1226
1218
|
|
1227
1219
|
context 'when a replica set name is provided' do
|
1228
|
-
|
1229
|
-
let
|
1230
|
-
'mongodb://127.0.0.1:27017/testdb?replicaSet=testing'
|
1231
|
-
end
|
1232
|
-
|
1233
|
-
let(:client) do
|
1234
|
-
new_local_client_nmio(uri)
|
1235
|
-
end
|
1220
|
+
let(:uri) { 'mongodb://127.0.0.1:27017/testdb?replicaSet=testing' }
|
1221
|
+
let(:client) { new_local_client_nmio(uri) }
|
1236
1222
|
|
1237
1223
|
it 'sets the correct cluster topology' do
|
1238
1224
|
expect(client.cluster.topology).to be_a(Mongo::Cluster::Topology::ReplicaSetNoPrimary)
|
@@ -1242,315 +1228,404 @@ describe Mongo::Client do
|
|
1242
1228
|
|
1243
1229
|
context 'when Ruby options are provided' do
|
1244
1230
|
let(:client) do
|
1245
|
-
new_local_client_nmio(
|
1231
|
+
new_local_client_nmio(SINGLE_CLIENT, options)
|
1246
1232
|
end
|
1247
1233
|
|
1248
1234
|
describe 'connection option conflicts' do
|
1249
1235
|
context 'direct_connection: true and multiple seeds' do
|
1250
1236
|
let(:client) do
|
1251
|
-
new_local_client_nmio(['127.0.0.1:27017', '127.0.0.2:27017'],
|
1252
|
-
direct_connection: true)
|
1237
|
+
new_local_client_nmio([ '127.0.0.1:27017', '127.0.0.2:27017' ], direct_connection: true)
|
1253
1238
|
end
|
1254
1239
|
|
1255
1240
|
it 'is rejected' do
|
1256
|
-
|
1257
|
-
|
1258
|
-
end.should raise_error(ArgumentError, /direct_connection=true cannot be used with multiple seeds/)
|
1241
|
+
expect { client }
|
1242
|
+
.to raise_error(ArgumentError, /direct_connection=true cannot be used with multiple seeds/)
|
1259
1243
|
end
|
1260
1244
|
end
|
1261
1245
|
|
1262
1246
|
context 'direct_connection: true and connect: :direct' do
|
1263
1247
|
let(:options) do
|
1264
|
-
{direct_connection: true, connect: :direct}
|
1248
|
+
{ direct_connection: true, connect: :direct }
|
1265
1249
|
end
|
1266
1250
|
|
1267
1251
|
it 'is accepted' do
|
1268
|
-
client.options[:direct_connection].
|
1269
|
-
client.options[:connect].
|
1252
|
+
expect(client.options[:direct_connection]).to be true
|
1253
|
+
expect(client.options[:connect]).to be :direct
|
1270
1254
|
end
|
1271
1255
|
end
|
1272
1256
|
|
1273
1257
|
context 'direct_connection: true and connect: :replica_set' do
|
1274
1258
|
let(:options) do
|
1275
|
-
{direct_connection: true, connect: :replica_set}
|
1259
|
+
{ direct_connection: true, connect: :replica_set }
|
1276
1260
|
end
|
1277
1261
|
|
1278
1262
|
it 'is rejected' do
|
1279
|
-
|
1280
|
-
|
1281
|
-
|
1263
|
+
expect { client }
|
1264
|
+
.to raise_error(
|
1265
|
+
ArgumentError,
|
1266
|
+
/Conflicting client options: direct_connection=true and connect=replica_set/
|
1267
|
+
)
|
1282
1268
|
end
|
1283
1269
|
end
|
1284
1270
|
|
1285
1271
|
context 'direct_connection: true and connect: :sharded' do
|
1286
1272
|
let(:options) do
|
1287
|
-
{direct_connection: true, connect: :sharded}
|
1273
|
+
{ direct_connection: true, connect: :sharded }
|
1288
1274
|
end
|
1289
1275
|
|
1290
1276
|
it 'is rejected' do
|
1291
|
-
|
1292
|
-
client
|
1293
|
-
end.should raise_error(ArgumentError, /Conflicting client options: direct_connection=true and connect=sharded/)
|
1277
|
+
expect { client }
|
1278
|
+
.to raise_error(ArgumentError, /Conflicting client options: direct_connection=true and connect=sharded/)
|
1294
1279
|
end
|
1295
1280
|
end
|
1296
1281
|
|
1297
1282
|
context 'direct_connection: false and connect: :direct' do
|
1298
1283
|
let(:options) do
|
1299
|
-
{direct_connection: false, connect: :direct}
|
1284
|
+
{ direct_connection: false, connect: :direct }
|
1300
1285
|
end
|
1301
1286
|
|
1302
1287
|
it 'is rejected' do
|
1303
|
-
|
1304
|
-
client
|
1305
|
-
end.should raise_error(ArgumentError, /Conflicting client options: direct_connection=false and connect=direct/)
|
1288
|
+
expect { client }
|
1289
|
+
.to raise_error(ArgumentError, /Conflicting client options: direct_connection=false and connect=direct/)
|
1306
1290
|
end
|
1307
1291
|
end
|
1308
1292
|
|
1309
1293
|
context 'direct_connection: false and connect: :replica_set' do
|
1310
1294
|
let(:options) do
|
1311
|
-
{direct_connection: false, connect: :replica_set, replica_set: 'foo'}
|
1295
|
+
{ direct_connection: false, connect: :replica_set, replica_set: 'foo' }
|
1312
1296
|
end
|
1313
1297
|
|
1314
1298
|
it 'is accepted' do
|
1315
|
-
client.options[:direct_connection].
|
1316
|
-
client.options[:connect].
|
1299
|
+
expect(client.options[:direct_connection]).to be false
|
1300
|
+
expect(client.options[:connect]).to be :replica_set
|
1317
1301
|
end
|
1318
1302
|
end
|
1319
1303
|
|
1320
1304
|
context 'direct_connection: false and connect: :sharded' do
|
1321
1305
|
let(:options) do
|
1322
|
-
{direct_connection: false, connect: :sharded}
|
1306
|
+
{ direct_connection: false, connect: :sharded }
|
1323
1307
|
end
|
1324
1308
|
|
1325
1309
|
it 'is accepted' do
|
1326
|
-
client.options[:direct_connection].
|
1327
|
-
client.options[:connect].
|
1310
|
+
expect(client.options[:direct_connection]).to be false
|
1311
|
+
expect(client.options[:connect]).to be :sharded
|
1328
1312
|
end
|
1329
1313
|
end
|
1330
1314
|
|
1331
1315
|
context 'load_balanced: true and multiple seeds' do
|
1332
1316
|
let(:client) do
|
1333
|
-
new_local_client_nmio(['127.0.0.1:27017', '127.0.0.2:27017'],
|
1334
|
-
load_balanced: true)
|
1317
|
+
new_local_client_nmio([ '127.0.0.1:27017', '127.0.0.2:27017' ], load_balanced: true)
|
1335
1318
|
end
|
1336
1319
|
|
1337
1320
|
it 'is rejected' do
|
1338
|
-
|
1339
|
-
|
1340
|
-
end.should raise_error(ArgumentError, /load_balanced=true cannot be used with multiple seeds/)
|
1321
|
+
expect { client }
|
1322
|
+
.to raise_error(ArgumentError, /load_balanced=true cannot be used with multiple seeds/)
|
1341
1323
|
end
|
1342
1324
|
end
|
1343
1325
|
|
1344
1326
|
context 'load_balanced: false and multiple seeds' do
|
1345
1327
|
let(:client) do
|
1346
|
-
new_local_client_nmio(['127.0.0.1:27017', '127.0.0.2:27017'],
|
1347
|
-
load_balanced: false)
|
1328
|
+
new_local_client_nmio([ '127.0.0.1:27017', '127.0.0.2:27017' ], load_balanced: false)
|
1348
1329
|
end
|
1349
1330
|
|
1350
1331
|
it 'is accepted' do
|
1351
|
-
|
1352
|
-
|
1353
|
-
end.should_not raise_error
|
1354
|
-
client.options[:load_balanced].should be false
|
1332
|
+
expect { client }.not_to raise_error
|
1333
|
+
expect(client.options[:load_balanced]).to be false
|
1355
1334
|
end
|
1356
1335
|
end
|
1357
1336
|
|
1358
1337
|
context 'load_balanced: true and direct_connection: true' do
|
1359
1338
|
let(:client) do
|
1360
|
-
new_local_client_nmio(
|
1361
|
-
load_balanced: true, direct_connection: true)
|
1339
|
+
new_local_client_nmio(SINGLE_CLIENT, load_balanced: true, direct_connection: true)
|
1362
1340
|
end
|
1363
1341
|
|
1364
1342
|
it 'is rejected' do
|
1365
|
-
|
1366
|
-
|
1367
|
-
end.should raise_error(ArgumentError, /direct_connection=true cannot be used with load_balanced=true/)
|
1343
|
+
expect { client }
|
1344
|
+
.to raise_error(ArgumentError, /direct_connection=true cannot be used with load_balanced=true/)
|
1368
1345
|
end
|
1369
1346
|
end
|
1370
1347
|
|
1371
1348
|
context 'load_balanced: true and direct_connection: false' do
|
1372
1349
|
let(:client) do
|
1373
|
-
new_local_client_nmio(
|
1374
|
-
load_balanced: true, direct_connection: false)
|
1350
|
+
new_local_client_nmio(SINGLE_CLIENT, load_balanced: true, direct_connection: false)
|
1375
1351
|
end
|
1376
1352
|
|
1377
1353
|
it 'is accepted' do
|
1378
|
-
|
1379
|
-
|
1380
|
-
|
1381
|
-
client.options[:load_balanced].should be true
|
1382
|
-
client.options[:direct_connection].should be false
|
1354
|
+
expect { client }.not_to raise_error
|
1355
|
+
expect(client.options[:load_balanced]).to be true
|
1356
|
+
expect(client.options[:direct_connection]).to be false
|
1383
1357
|
end
|
1384
1358
|
end
|
1385
1359
|
|
1386
1360
|
context 'load_balanced: false and direct_connection: true' do
|
1387
1361
|
let(:client) do
|
1388
|
-
new_local_client_nmio(
|
1389
|
-
load_balanced: false, direct_connection: true)
|
1362
|
+
new_local_client_nmio(SINGLE_CLIENT, load_balanced: false, direct_connection: true)
|
1390
1363
|
end
|
1391
1364
|
|
1392
1365
|
it 'is accepted' do
|
1393
|
-
|
1394
|
-
|
1395
|
-
|
1396
|
-
client.options[:load_balanced].should be false
|
1397
|
-
client.options[:direct_connection].should be true
|
1366
|
+
expect { client }.not_to raise_error
|
1367
|
+
expect(client.options[:load_balanced]).to be false
|
1368
|
+
expect(client.options[:direct_connection]).to be true
|
1398
1369
|
end
|
1399
1370
|
end
|
1400
1371
|
|
1401
|
-
[:direct, 'direct', :sharded, 'sharded'].each do |v|
|
1372
|
+
[ :direct, 'direct', :sharded, 'sharded' ].each do |v|
|
1402
1373
|
context "load_balanced: true and connect: #{v.inspect}" do
|
1403
1374
|
let(:client) do
|
1404
|
-
new_local_client_nmio(
|
1405
|
-
load_balanced: true, connect: v)
|
1375
|
+
new_local_client_nmio(SINGLE_CLIENT, load_balanced: true, connect: v)
|
1406
1376
|
end
|
1407
1377
|
|
1408
1378
|
it 'is rejected' do
|
1409
|
-
|
1410
|
-
|
1411
|
-
end.should raise_error(ArgumentError, /connect=#{v} cannot be used with load_balanced=true/)
|
1379
|
+
expect { client }
|
1380
|
+
.to raise_error(ArgumentError, /connect=#{v} cannot be used with load_balanced=true/)
|
1412
1381
|
end
|
1413
1382
|
end
|
1414
1383
|
end
|
1415
1384
|
|
1416
|
-
[nil].each do |v|
|
1385
|
+
[ nil ].each do |v|
|
1417
1386
|
context "load_balanced: true and connect: #{v.inspect}" do
|
1418
1387
|
let(:client) do
|
1419
|
-
new_local_client_nmio(
|
1420
|
-
load_balanced: true, connect: v)
|
1388
|
+
new_local_client_nmio(SINGLE_CLIENT, load_balanced: true, connect: v)
|
1421
1389
|
end
|
1422
1390
|
|
1423
1391
|
it 'is accepted' do
|
1424
|
-
|
1425
|
-
|
1426
|
-
|
1427
|
-
client.options[:load_balanced].should be true
|
1428
|
-
client.options[:connect].should eq v
|
1392
|
+
expect { client }.not_to raise_error
|
1393
|
+
expect(client.options[:load_balanced]).to be true
|
1394
|
+
expect(client.options[:connect]).to eq v
|
1429
1395
|
end
|
1430
1396
|
end
|
1431
1397
|
end
|
1432
1398
|
|
1433
|
-
[:load_balanced, 'load_balanced'].each do |v|
|
1399
|
+
[ :load_balanced, 'load_balanced' ].each do |v|
|
1434
1400
|
context "load_balanced: true and connect: #{v.inspect}" do
|
1435
1401
|
let(:client) do
|
1436
|
-
new_local_client_nmio(
|
1437
|
-
load_balanced: true, connect: v)
|
1402
|
+
new_local_client_nmio(SINGLE_CLIENT, load_balanced: true, connect: v)
|
1438
1403
|
end
|
1439
1404
|
|
1440
1405
|
it 'is accepted' do
|
1441
|
-
|
1442
|
-
|
1443
|
-
|
1444
|
-
client.options[:load_balanced].should be true
|
1445
|
-
client.options[:connect].should eq v
|
1406
|
+
expect { client }.not_to raise_error
|
1407
|
+
expect(client.options[:load_balanced]).to be true
|
1408
|
+
expect(client.options[:connect]).to eq v
|
1446
1409
|
end
|
1447
1410
|
end
|
1448
1411
|
|
1449
1412
|
context "replica_set and connect: #{v.inspect}" do
|
1450
1413
|
let(:client) do
|
1451
|
-
new_local_client_nmio(
|
1452
|
-
replica_set: 'foo', connect: v)
|
1414
|
+
new_local_client_nmio(SINGLE_CLIENT, replica_set: 'foo', connect: v)
|
1453
1415
|
end
|
1454
1416
|
|
1455
1417
|
it 'is rejected' do
|
1456
|
-
|
1457
|
-
|
1458
|
-
end.should raise_error(ArgumentError, /connect=load_balanced cannot be used with replica_set option/)
|
1418
|
+
expect { client }
|
1419
|
+
.to raise_error(ArgumentError, /connect=load_balanced cannot be used with replica_set option/)
|
1459
1420
|
end
|
1460
1421
|
end
|
1461
1422
|
|
1462
1423
|
context "direct_connection=true and connect: #{v.inspect}" do
|
1463
1424
|
let(:client) do
|
1464
|
-
new_local_client_nmio(
|
1465
|
-
direct_connection: true, connect: v)
|
1425
|
+
new_local_client_nmio(SINGLE_CLIENT, direct_connection: true, connect: v)
|
1466
1426
|
end
|
1467
1427
|
|
1468
1428
|
it 'is rejected' do
|
1469
|
-
|
1470
|
-
|
1471
|
-
|
1429
|
+
expect { client }
|
1430
|
+
.to raise_error(
|
1431
|
+
ArgumentError,
|
1432
|
+
/Conflicting client options: direct_connection=true and connect=load_balanced/
|
1433
|
+
)
|
1472
1434
|
end
|
1473
1435
|
end
|
1474
1436
|
|
1475
1437
|
context "multiple seed addresses and connect: #{v.inspect}" do
|
1476
1438
|
let(:client) do
|
1477
|
-
new_local_client_nmio(['127.0.0.1:27017', '127.0.0.1:1234'],
|
1478
|
-
connect: v)
|
1439
|
+
new_local_client_nmio([ '127.0.0.1:27017', '127.0.0.1:1234' ], connect: v)
|
1479
1440
|
end
|
1480
1441
|
|
1481
1442
|
it 'is rejected' do
|
1482
|
-
|
1483
|
-
|
1484
|
-
end.should raise_error(ArgumentError, /connect=load_balanced cannot be used with multiple seeds/)
|
1443
|
+
expect { client }
|
1444
|
+
.to raise_error(ArgumentError, /connect=load_balanced cannot be used with multiple seeds/)
|
1485
1445
|
end
|
1486
1446
|
end
|
1487
1447
|
end
|
1488
1448
|
|
1489
|
-
[:replica_set, 'replica_set'].each do |v|
|
1449
|
+
[ :replica_set, 'replica_set' ].each do |v|
|
1490
1450
|
context "load_balanced: true and connect: #{v.inspect}" do
|
1491
1451
|
let(:client) do
|
1492
|
-
new_local_client_nmio(
|
1493
|
-
load_balanced: true, connect: v, replica_set: 'x')
|
1452
|
+
new_local_client_nmio(SINGLE_CLIENT, load_balanced: true, connect: v, replica_set: 'x')
|
1494
1453
|
end
|
1495
1454
|
|
1496
1455
|
it 'is rejected' do
|
1497
|
-
|
1498
|
-
|
1499
|
-
end.should raise_error(ArgumentError, /connect=replica_set cannot be used with load_balanced=true/)
|
1456
|
+
expect { client }
|
1457
|
+
.to raise_error(ArgumentError, /connect=replica_set cannot be used with load_balanced=true/)
|
1500
1458
|
end
|
1501
1459
|
end
|
1502
1460
|
|
1503
1461
|
context "load_balanced: true and #{v.inspect} option" do
|
1504
1462
|
let(:client) do
|
1505
|
-
new_local_client_nmio(
|
1506
|
-
load_balanced: true, v => 'rs')
|
1463
|
+
new_local_client_nmio(SINGLE_CLIENT, load_balanced: true, v => 'rs')
|
1507
1464
|
end
|
1508
1465
|
|
1509
1466
|
it 'is rejected' do
|
1510
|
-
|
1511
|
-
|
1512
|
-
end.should raise_error(ArgumentError, /load_balanced=true cannot be used with replica_set option/)
|
1467
|
+
expect { client }
|
1468
|
+
.to raise_error(ArgumentError, /load_balanced=true cannot be used with replica_set option/)
|
1513
1469
|
end
|
1514
1470
|
end
|
1515
1471
|
end
|
1472
|
+
|
1473
|
+
context 'srv_max_hosts > 0 and load_balanced: true' do
|
1474
|
+
let(:client) do
|
1475
|
+
new_local_client_nmio(SINGLE_CLIENT, srv_max_hosts: 1, load_balanced: true)
|
1476
|
+
end
|
1477
|
+
|
1478
|
+
it 'it is rejected' do
|
1479
|
+
expect { client }
|
1480
|
+
.to raise_error(ArgumentError, /:srv_max_hosts > 0 cannot be used with :load_balanced=true/)
|
1481
|
+
end
|
1482
|
+
end
|
1483
|
+
|
1484
|
+
context 'srv_max_hosts > 0 and replica_set' do
|
1485
|
+
let(:client) do
|
1486
|
+
new_local_client_nmio(SINGLE_CLIENT, srv_max_hosts: 1, replica_set: 'rs')
|
1487
|
+
end
|
1488
|
+
|
1489
|
+
it 'it is rejected' do
|
1490
|
+
expect do
|
1491
|
+
client
|
1492
|
+
end.to raise_error(ArgumentError, /:srv_max_hosts > 0 cannot be used with :replica_set option/)
|
1493
|
+
end
|
1494
|
+
end
|
1495
|
+
|
1496
|
+
context 'srv_max_hosts < 0' do
|
1497
|
+
let(:client) do
|
1498
|
+
new_local_client_nmio(SINGLE_CLIENT, srv_max_hosts: -1)
|
1499
|
+
end
|
1500
|
+
|
1501
|
+
it 'is accepted and does not add the srv_max_hosts to uri_options' do
|
1502
|
+
expect { client }.not_to raise_error
|
1503
|
+
expect(client.options).not_to have_key(:srv_max_hosts)
|
1504
|
+
end
|
1505
|
+
end
|
1506
|
+
|
1507
|
+
context 'srv_max_hosts invalid type' do
|
1508
|
+
let(:client) do
|
1509
|
+
new_local_client_nmio(SINGLE_CLIENT, srv_max_hosts: 'foo')
|
1510
|
+
end
|
1511
|
+
|
1512
|
+
it 'is accepted and does not add the srv_max_hosts to uri_options' do
|
1513
|
+
expect { client }.not_to raise_error
|
1514
|
+
expect(client.options).not_to have_key(:srv_max_hosts)
|
1515
|
+
end
|
1516
|
+
end
|
1517
|
+
|
1518
|
+
context 'srv_max_hosts with non-SRV URI' do
|
1519
|
+
let(:client) do
|
1520
|
+
new_local_client_nmio(SINGLE_CLIENT, srv_max_hosts: 1)
|
1521
|
+
end
|
1522
|
+
|
1523
|
+
it 'is rejected' do
|
1524
|
+
expect { client }
|
1525
|
+
.to raise_error(ArgumentError, /:srv_max_hosts cannot be used on non-SRV URI/)
|
1526
|
+
end
|
1527
|
+
end
|
1528
|
+
|
1529
|
+
context 'srv_service_name with non-SRV URI' do
|
1530
|
+
let(:client) do
|
1531
|
+
new_local_client_nmio(SINGLE_CLIENT, srv_service_name: 'customname')
|
1532
|
+
end
|
1533
|
+
|
1534
|
+
it 'is rejected' do
|
1535
|
+
expect { client }
|
1536
|
+
.to raise_error(ArgumentError, /:srv_service_name cannot be used on non-SRV URI/)
|
1537
|
+
end
|
1538
|
+
end
|
1539
|
+
end
|
1540
|
+
|
1541
|
+
context 'with SRV lookups mocked at Resolver' do
|
1542
|
+
let(:srv_result) do
|
1543
|
+
double('srv result').tap do |result|
|
1544
|
+
allow(result).to receive(:empty?).and_return(false)
|
1545
|
+
allow(result).to receive(:address_strs).and_return(
|
1546
|
+
[ ClusterConfig.instance.primary_address_str ]
|
1547
|
+
)
|
1548
|
+
end
|
1549
|
+
end
|
1550
|
+
|
1551
|
+
let(:client) do
|
1552
|
+
allow_any_instance_of(Mongo::Srv::Resolver).to receive(:get_records).and_return(srv_result)
|
1553
|
+
allow_any_instance_of(Mongo::Srv::Resolver).to receive(:get_txt_options_string)
|
1554
|
+
|
1555
|
+
new_local_client_nmio('mongodb+srv://foo.a.b', options)
|
1556
|
+
end
|
1557
|
+
|
1558
|
+
context 'when setting srv_max_hosts' do
|
1559
|
+
let(:srv_max_hosts) { 1 }
|
1560
|
+
let(:options) { { srv_max_hosts: srv_max_hosts } }
|
1561
|
+
|
1562
|
+
it 'is accepted and sets srv_max_hosts' do
|
1563
|
+
expect { client }.not_to raise_error
|
1564
|
+
expect(client.options[:srv_max_hosts]).to eq(srv_max_hosts)
|
1565
|
+
end
|
1566
|
+
end
|
1567
|
+
|
1568
|
+
context 'when setting srv_max_hosts to 0' do
|
1569
|
+
let(:srv_max_hosts) { 0 }
|
1570
|
+
let(:options) { { srv_max_hosts: srv_max_hosts } }
|
1571
|
+
|
1572
|
+
it 'is accepted sets srv_max_hosts' do
|
1573
|
+
expect { client }.not_to raise_error
|
1574
|
+
expect(client.options[:srv_max_hosts]).to eq(srv_max_hosts)
|
1575
|
+
end
|
1576
|
+
end
|
1577
|
+
|
1578
|
+
context 'when setting srv_service_name' do
|
1579
|
+
let(:srv_service_name) { 'customname' }
|
1580
|
+
let(:options) { { srv_service_name: srv_service_name } }
|
1581
|
+
|
1582
|
+
it 'is accepted and sets srv_service_name' do
|
1583
|
+
expect { client }.not_to raise_error
|
1584
|
+
expect(client.options[:srv_service_name]).to eq(srv_service_name)
|
1585
|
+
end
|
1586
|
+
end
|
1516
1587
|
end
|
1517
1588
|
|
1518
1589
|
context ':bg_error_backtrace option' do
|
1519
|
-
[true, false, nil, 42].each do |valid_value|
|
1590
|
+
[ true, false, nil, 42 ].each do |valid_value|
|
1520
1591
|
context "valid value: #{valid_value.inspect}" do
|
1521
1592
|
let(:options) do
|
1522
|
-
{bg_error_backtrace: valid_value}
|
1593
|
+
{ bg_error_backtrace: valid_value }
|
1523
1594
|
end
|
1524
1595
|
|
1525
1596
|
it 'is accepted' do
|
1526
|
-
client.options[:bg_error_backtrace].
|
1597
|
+
expect(client.options[:bg_error_backtrace]).to be == valid_value
|
1527
1598
|
end
|
1528
1599
|
end
|
1529
1600
|
end
|
1530
1601
|
|
1531
1602
|
context 'invalid value type' do
|
1532
1603
|
let(:options) do
|
1533
|
-
{bg_error_backtrace: 'yes'}
|
1604
|
+
{ bg_error_backtrace: 'yes' }
|
1534
1605
|
end
|
1535
1606
|
|
1536
1607
|
it 'is rejected' do
|
1537
|
-
|
1538
|
-
|
1539
|
-
|
1608
|
+
expect { client }
|
1609
|
+
.to raise_error(
|
1610
|
+
ArgumentError,
|
1611
|
+
/:bg_error_backtrace option value must be true, false, nil or a positive integer/
|
1612
|
+
)
|
1540
1613
|
end
|
1541
1614
|
end
|
1542
1615
|
|
1543
1616
|
context 'invalid value' do
|
1544
|
-
[0, -1, 42.0].each do |invalid_value|
|
1617
|
+
[ 0, -1, 42.0 ].each do |invalid_value|
|
1545
1618
|
context "invalid value: #{invalid_value.inspect}" do
|
1546
1619
|
let(:options) do
|
1547
|
-
{bg_error_backtrace: invalid_value}
|
1620
|
+
{ bg_error_backtrace: invalid_value }
|
1548
1621
|
end
|
1549
1622
|
|
1550
1623
|
it 'is rejected' do
|
1551
|
-
|
1552
|
-
|
1553
|
-
|
1624
|
+
expect { client }
|
1625
|
+
.to raise_error(
|
1626
|
+
ArgumentError,
|
1627
|
+
/:bg_error_backtrace option value must be true, false, nil or a positive integer/
|
1628
|
+
)
|
1554
1629
|
end
|
1555
1630
|
end
|
1556
1631
|
end
|
@@ -1558,32 +1633,30 @@ describe Mongo::Client do
|
|
1558
1633
|
end
|
1559
1634
|
|
1560
1635
|
describe ':read option' do
|
1561
|
-
[
|
1562
|
-
|
1563
|
-
].each do |sym|
|
1564
|
-
describe "#{sym}" do
|
1636
|
+
%i[ primary primary_preferred secondary secondary_preferred nearest ].each do |sym|
|
1637
|
+
describe sym.to_s do
|
1565
1638
|
context 'when given as symbol' do
|
1566
1639
|
let(:options) do
|
1567
|
-
{read: {mode: sym}}
|
1640
|
+
{ read: { mode: sym } }
|
1568
1641
|
end
|
1569
1642
|
|
1570
|
-
it
|
1643
|
+
it 'is accepted' do
|
1571
1644
|
# the key got converted to a string here
|
1572
|
-
expect(client.read_preference).to eq({'mode' => sym})
|
1645
|
+
expect(client.read_preference).to eq({ 'mode' => sym })
|
1573
1646
|
end
|
1574
1647
|
end
|
1575
1648
|
|
1576
1649
|
context 'when given as string' do
|
1577
1650
|
let(:options) do
|
1578
|
-
{read: {mode: sym.to_s}}
|
1651
|
+
{ read: { mode: sym.to_s } }
|
1579
1652
|
end
|
1580
1653
|
|
1581
1654
|
# string keys are not documented as being allowed
|
1582
1655
|
# but the code accepts them
|
1583
|
-
it
|
1656
|
+
it 'is accepted' do
|
1584
1657
|
# the key got converted to a string here
|
1585
1658
|
# the value remains a string
|
1586
|
-
expect(client.read_preference).to eq({'mode' => sym.to_s})
|
1659
|
+
expect(client.read_preference).to eq({ 'mode' => sym.to_s })
|
1587
1660
|
end
|
1588
1661
|
end
|
1589
1662
|
end
|
@@ -1594,30 +1667,41 @@ describe Mongo::Client do
|
|
1594
1667
|
|
1595
1668
|
it 'rejects bogus read preference as symbol' do
|
1596
1669
|
expect do
|
1597
|
-
|
1598
|
-
|
1599
|
-
|
1670
|
+
new_local_client_nmio(SINGLE_CLIENT, read: { mode: :bogus })
|
1671
|
+
end.to raise_error(
|
1672
|
+
Mongo::Error::InvalidReadOption,
|
1673
|
+
'Invalid read preference value: {"mode"=>:bogus}: ' \
|
1674
|
+
'mode bogus is not one of recognized modes'
|
1675
|
+
)
|
1600
1676
|
end
|
1601
1677
|
|
1602
1678
|
it 'rejects bogus read preference as string' do
|
1603
1679
|
expect do
|
1604
|
-
|
1605
|
-
|
1606
|
-
|
1680
|
+
new_local_client_nmio(SINGLE_CLIENT, read: { mode: 'bogus' })
|
1681
|
+
end.to raise_error(
|
1682
|
+
Mongo::Error::InvalidReadOption,
|
1683
|
+
'Invalid read preference value: {"mode"=>"bogus"}: mode bogus is not one of recognized modes'
|
1684
|
+
)
|
1607
1685
|
end
|
1608
1686
|
|
1609
1687
|
it 'rejects read option specified as a string' do
|
1610
1688
|
expect do
|
1611
|
-
|
1612
|
-
|
1613
|
-
|
1689
|
+
new_local_client_nmio(SINGLE_CLIENT, read: 'primary')
|
1690
|
+
end.to raise_error(
|
1691
|
+
Mongo::Error::InvalidReadOption,
|
1692
|
+
'Invalid read preference value: "primary": ' \
|
1693
|
+
'the read preference must be specified as a hash: { mode: "primary" }'
|
1694
|
+
)
|
1614
1695
|
end
|
1615
1696
|
|
1616
1697
|
it 'rejects read option specified as a symbol' do
|
1617
1698
|
expect do
|
1618
|
-
|
1619
|
-
|
1620
|
-
|
1699
|
+
new_local_client_nmio(SINGLE_CLIENT, read: :primary)
|
1700
|
+
end.to raise_error(
|
1701
|
+
Mongo::Error::InvalidReadOption,
|
1702
|
+
'Invalid read preference value: :primary: ' \
|
1703
|
+
'the read preference must be specified as a hash: { mode: :primary }'
|
1704
|
+
)
|
1621
1705
|
end
|
1622
1706
|
end
|
1623
1707
|
end
|
@@ -1631,7 +1715,7 @@ describe Mongo::Client do
|
|
1631
1715
|
end
|
1632
1716
|
|
1633
1717
|
it 'does not warn' do
|
1634
|
-
expect(Mongo::Logger.logger).
|
1718
|
+
expect(Mongo::Logger.logger).not_to receive(:warn)
|
1635
1719
|
new_local_client_nmio(SpecConfig.instance.addresses, options)
|
1636
1720
|
end
|
1637
1721
|
end
|
@@ -1657,15 +1741,17 @@ describe Mongo::Client do
|
|
1657
1741
|
it 'raises an exception' do
|
1658
1742
|
expect do
|
1659
1743
|
new_local_client_nmio(SpecConfig.instance.addresses, options)
|
1660
|
-
end.to raise_error(
|
1744
|
+
end.to raise_error(
|
1745
|
+
Mongo::Error::InvalidReadConcern,
|
1746
|
+
'The after_cluster_time read_concern option cannot be specified by the user'
|
1747
|
+
)
|
1661
1748
|
end
|
1662
1749
|
end
|
1663
1750
|
end
|
1664
1751
|
|
1665
1752
|
context 'when an invalid option is provided' do
|
1666
|
-
|
1667
1753
|
let(:options) do
|
1668
|
-
{ssl: false, invalid: :test}
|
1754
|
+
{ ssl: false, invalid: :test }
|
1669
1755
|
end
|
1670
1756
|
|
1671
1757
|
it 'does not set the option' do
|
@@ -1684,9 +1770,8 @@ describe Mongo::Client do
|
|
1684
1770
|
|
1685
1771
|
=begin WriteConcern object support
|
1686
1772
|
context 'when write concern is provided via a WriteConcern object' do
|
1687
|
-
|
1688
1773
|
let(:options) do
|
1689
|
-
{write_concern: wc}
|
1774
|
+
{ write_concern: wc }
|
1690
1775
|
end
|
1691
1776
|
|
1692
1777
|
let(:wc) { Mongo::WriteConcern.get(w: 2) }
|
@@ -1704,52 +1789,52 @@ describe Mongo::Client do
|
|
1704
1789
|
|
1705
1790
|
context ':wrapping_libraries option' do
|
1706
1791
|
let(:options) do
|
1707
|
-
{wrapping_libraries: wrapping_libraries}
|
1792
|
+
{ wrapping_libraries: wrapping_libraries }
|
1708
1793
|
end
|
1709
1794
|
|
1710
1795
|
context 'valid input' do
|
1711
1796
|
context 'symbol keys' do
|
1712
1797
|
let(:wrapping_libraries) do
|
1713
|
-
[name: 'Mongoid', version: '7.1.2'].freeze
|
1798
|
+
[ { name: 'Mongoid', version: '7.1.2' } ].freeze
|
1714
1799
|
end
|
1715
1800
|
|
1716
1801
|
it 'works' do
|
1717
|
-
client.options[:wrapping_libraries].
|
1802
|
+
expect(client.options[:wrapping_libraries]).to be == [ { 'name' => 'Mongoid', 'version' => '7.1.2' } ]
|
1718
1803
|
end
|
1719
1804
|
end
|
1720
1805
|
|
1721
1806
|
context 'string keys' do
|
1722
1807
|
let(:wrapping_libraries) do
|
1723
|
-
['name' => 'Mongoid', 'version' => '7.1.2'].freeze
|
1808
|
+
[ { 'name' => 'Mongoid', 'version' => '7.1.2' } ].freeze
|
1724
1809
|
end
|
1725
1810
|
|
1726
1811
|
it 'works' do
|
1727
|
-
client.options[:wrapping_libraries].
|
1812
|
+
expect(client.options[:wrapping_libraries]).to be == [ { 'name' => 'Mongoid', 'version' => '7.1.2' } ]
|
1728
1813
|
end
|
1729
1814
|
end
|
1730
1815
|
|
1731
1816
|
context 'Redacted keys' do
|
1732
1817
|
let(:wrapping_libraries) do
|
1733
|
-
[Mongo::Options::Redacted.new(name: 'Mongoid', version: '7.1.2')].freeze
|
1818
|
+
[ Mongo::Options::Redacted.new(name: 'Mongoid', version: '7.1.2') ].freeze
|
1734
1819
|
end
|
1735
1820
|
|
1736
1821
|
it 'works' do
|
1737
|
-
client.options[:wrapping_libraries].
|
1822
|
+
expect(client.options[:wrapping_libraries]).to be == [ { 'name' => 'Mongoid', 'version' => '7.1.2' } ]
|
1738
1823
|
end
|
1739
1824
|
end
|
1740
1825
|
|
1741
1826
|
context 'two libraries' do
|
1742
1827
|
let(:wrapping_libraries) do
|
1743
1828
|
[
|
1744
|
-
{name: 'Mongoid', version: '7.1.2'},
|
1745
|
-
{name: 'Rails', version: '4.0', platform: 'Foobar'},
|
1829
|
+
{ name: 'Mongoid', version: '7.1.2' },
|
1830
|
+
{ name: 'Rails', version: '4.0', platform: 'Foobar' },
|
1746
1831
|
].freeze
|
1747
1832
|
end
|
1748
1833
|
|
1749
1834
|
it 'works' do
|
1750
|
-
client.options[:wrapping_libraries].
|
1751
|
-
{'name' => 'Mongoid', 'version' => '7.1.2'},
|
1752
|
-
{'name' => 'Rails', 'version' => '4.0', 'platform' => 'Foobar'},
|
1835
|
+
expect(client.options[:wrapping_libraries]).to be == [
|
1836
|
+
{ 'name' => 'Mongoid', 'version' => '7.1.2' },
|
1837
|
+
{ 'name' => 'Rails', 'version' => '4.0', 'platform' => 'Foobar' },
|
1753
1838
|
]
|
1754
1839
|
end
|
1755
1840
|
end
|
@@ -1760,7 +1845,7 @@ describe Mongo::Client do
|
|
1760
1845
|
end
|
1761
1846
|
|
1762
1847
|
it 'works' do
|
1763
|
-
client.options[:wrapping_libraries].
|
1848
|
+
expect(client.options[:wrapping_libraries]).to be == []
|
1764
1849
|
end
|
1765
1850
|
end
|
1766
1851
|
|
@@ -1770,7 +1855,7 @@ describe Mongo::Client do
|
|
1770
1855
|
end
|
1771
1856
|
|
1772
1857
|
it 'works' do
|
1773
|
-
client.options[:wrapping_libraries].
|
1858
|
+
expect(client.options[:wrapping_libraries]).to be_nil
|
1774
1859
|
end
|
1775
1860
|
end
|
1776
1861
|
end
|
@@ -1778,37 +1863,34 @@ describe Mongo::Client do
|
|
1778
1863
|
context 'valid input' do
|
1779
1864
|
context 'hash given instead of an array' do
|
1780
1865
|
let(:wrapping_libraries) do
|
1781
|
-
{name: 'Mongoid', version: '7.1.2'}.freeze
|
1866
|
+
{ name: 'Mongoid', version: '7.1.2' }.freeze
|
1782
1867
|
end
|
1783
1868
|
|
1784
1869
|
it 'is rejected' do
|
1785
|
-
|
1786
|
-
|
1787
|
-
end.should raise_error(ArgumentError, /:wrapping_libraries must be an array of hashes/)
|
1870
|
+
expect { client }
|
1871
|
+
.to raise_error(ArgumentError, /:wrapping_libraries must be an array of hashes/)
|
1788
1872
|
end
|
1789
1873
|
end
|
1790
1874
|
|
1791
1875
|
context 'invalid keys' do
|
1792
1876
|
let(:wrapping_libraries) do
|
1793
|
-
[name: 'Mongoid', invalid: '7.1.2'].freeze
|
1877
|
+
[ { name: 'Mongoid', invalid: '7.1.2' } ].freeze
|
1794
1878
|
end
|
1795
1879
|
|
1796
1880
|
it 'is rejected' do
|
1797
|
-
|
1798
|
-
|
1799
|
-
end.should raise_error(ArgumentError, /:wrapping_libraries element has invalid keys/)
|
1881
|
+
expect { client }
|
1882
|
+
.to raise_error(ArgumentError, /:wrapping_libraries element has invalid keys/)
|
1800
1883
|
end
|
1801
1884
|
end
|
1802
1885
|
|
1803
1886
|
context 'value includes |' do
|
1804
1887
|
let(:wrapping_libraries) do
|
1805
|
-
[name: 'Mongoid|on|Rails', version: '7.1.2'].freeze
|
1888
|
+
[ { name: 'Mongoid|on|Rails', version: '7.1.2' } ].freeze
|
1806
1889
|
end
|
1807
1890
|
|
1808
1891
|
it 'is rejected' do
|
1809
|
-
|
1810
|
-
|
1811
|
-
end.should raise_error(ArgumentError, /:wrapping_libraries element value cannot include '|'/)
|
1892
|
+
expect { client }
|
1893
|
+
.to raise_error(ArgumentError, /:wrapping_libraries element value cannot include '|'/)
|
1812
1894
|
end
|
1813
1895
|
end
|
1814
1896
|
end
|
@@ -1816,12 +1898,10 @@ describe Mongo::Client do
|
|
1816
1898
|
|
1817
1899
|
context ':auth_mech_properties option' do
|
1818
1900
|
context 'is nil' do
|
1819
|
-
let(:options)
|
1820
|
-
{auth_mech_properties: nil}
|
1821
|
-
end
|
1901
|
+
let(:options) { { auth_mech_properties: nil } }
|
1822
1902
|
|
1823
1903
|
it 'creates the client without the option' do
|
1824
|
-
client.options.
|
1904
|
+
expect(client.options).not_to have_key(:auth_mech_properties)
|
1825
1905
|
end
|
1826
1906
|
end
|
1827
1907
|
end
|
@@ -1830,15 +1910,17 @@ describe Mongo::Client do
|
|
1830
1910
|
context 'is a hash with symbol keys' do
|
1831
1911
|
context 'using known keys' do
|
1832
1912
|
let(:options) do
|
1833
|
-
{
|
1834
|
-
|
1835
|
-
|
1836
|
-
|
1837
|
-
|
1913
|
+
{
|
1914
|
+
server_api: {
|
1915
|
+
version: '1',
|
1916
|
+
strict: true,
|
1917
|
+
deprecation_errors: false,
|
1918
|
+
}
|
1919
|
+
}
|
1838
1920
|
end
|
1839
1921
|
|
1840
1922
|
it 'is accepted' do
|
1841
|
-
client.options[:server_api].
|
1923
|
+
expect(client.options[:server_api]).to be == {
|
1842
1924
|
'version' => '1',
|
1843
1925
|
'strict' => true,
|
1844
1926
|
'deprecation_errors' => false,
|
@@ -1848,41 +1930,34 @@ describe Mongo::Client do
|
|
1848
1930
|
|
1849
1931
|
context 'using an unknown version' do
|
1850
1932
|
let(:options) do
|
1851
|
-
{server_api: {
|
1852
|
-
version: '42',
|
1853
|
-
}}
|
1933
|
+
{ server_api: { version: '42' } }
|
1854
1934
|
end
|
1855
1935
|
|
1856
1936
|
it 'is rejected' do
|
1857
|
-
|
1858
|
-
|
1859
|
-
end.should raise_error(ArgumentError, 'Unknown server API version: 42')
|
1937
|
+
expect { client }
|
1938
|
+
.to raise_error(ArgumentError, 'Unknown server API version: 42')
|
1860
1939
|
end
|
1861
1940
|
end
|
1862
1941
|
|
1863
1942
|
context 'using an unknown option' do
|
1864
1943
|
let(:options) do
|
1865
|
-
{server_api: {
|
1866
|
-
vversion: '1',
|
1867
|
-
}}
|
1944
|
+
{ server_api: { vversion: '1' } }
|
1868
1945
|
end
|
1869
1946
|
|
1870
1947
|
it 'is rejected' do
|
1871
|
-
|
1872
|
-
|
1873
|
-
end.should raise_error(ArgumentError, 'Unknown keys under :server_api: "vversion"')
|
1948
|
+
expect { client }
|
1949
|
+
.to raise_error(ArgumentError, 'Unknown keys under :server_api: "vversion"')
|
1874
1950
|
end
|
1875
1951
|
end
|
1876
1952
|
|
1877
1953
|
context 'using a value which is not a hash' do
|
1878
1954
|
let(:options) do
|
1879
|
-
{server_api: 42}
|
1955
|
+
{ server_api: 42 }
|
1880
1956
|
end
|
1881
1957
|
|
1882
1958
|
it 'is rejected' do
|
1883
|
-
|
1884
|
-
|
1885
|
-
end.should raise_error(ArgumentError, ':server_api value must be a hash: 42')
|
1959
|
+
expect { client }
|
1960
|
+
.to raise_error(ArgumentError, ':server_api value must be a hash: 42')
|
1886
1961
|
end
|
1887
1962
|
end
|
1888
1963
|
end
|
@@ -1891,16 +1966,18 @@ describe Mongo::Client do
|
|
1891
1966
|
max_server_version '3.4'
|
1892
1967
|
|
1893
1968
|
let(:options) do
|
1894
|
-
{server_api: {version: 1}}
|
1969
|
+
{ server_api: { version: 1 } }
|
1895
1970
|
end
|
1896
1971
|
|
1897
1972
|
let(:client) do
|
1898
|
-
new_local_client(
|
1899
|
-
SpecConfig.instance.
|
1973
|
+
new_local_client(
|
1974
|
+
SpecConfig.instance.addresses,
|
1975
|
+
SpecConfig.instance.all_test_options.merge(options)
|
1976
|
+
)
|
1900
1977
|
end
|
1901
1978
|
|
1902
1979
|
it 'constructs the client' do
|
1903
|
-
client.
|
1980
|
+
expect(client).to be_a(described_class)
|
1904
1981
|
end
|
1905
1982
|
|
1906
1983
|
it 'does not discover servers' do
|
@@ -1910,9 +1987,8 @@ describe Mongo::Client do
|
|
1910
1987
|
end
|
1911
1988
|
|
1912
1989
|
it 'fails operations' do
|
1913
|
-
|
1914
|
-
|
1915
|
-
end.should raise_error(Mongo::Error::NoServerAvailable)
|
1990
|
+
expect { client.command(ping: 1) }
|
1991
|
+
.to raise_error(Mongo::Error::NoServerAvailable)
|
1916
1992
|
end
|
1917
1993
|
end
|
1918
1994
|
end
|
@@ -1922,9 +1998,9 @@ describe Mongo::Client do
|
|
1922
1998
|
context 'when the block doesn\'t raise an error' do
|
1923
1999
|
let(:block_client) do
|
1924
2000
|
c = nil
|
1925
|
-
|
2001
|
+
described_class.new(
|
1926
2002
|
SpecConfig.instance.addresses,
|
1927
|
-
SpecConfig.instance.test_options.merge(database: SpecConfig.instance.test_db)
|
2003
|
+
SpecConfig.instance.test_options.merge(database: SpecConfig.instance.test_db)
|
1928
2004
|
) do |client|
|
1929
2005
|
c = client
|
1930
2006
|
end
|
@@ -1932,55 +2008,112 @@ describe Mongo::Client do
|
|
1932
2008
|
end
|
1933
2009
|
|
1934
2010
|
it 'is closed after block' do
|
1935
|
-
expect(block_client.cluster.connected?).to
|
2011
|
+
expect(block_client.cluster.connected?).to be false
|
2012
|
+
end
|
2013
|
+
|
2014
|
+
context 'with auto encryption options' do
|
2015
|
+
require_libmongocrypt
|
2016
|
+
min_server_fcv '4.2'
|
2017
|
+
require_enterprise
|
2018
|
+
clean_slate
|
2019
|
+
|
2020
|
+
include_context 'define shared FLE helpers'
|
2021
|
+
include_context 'with local kms_providers'
|
2022
|
+
|
2023
|
+
let(:auto_encryption_options) do
|
2024
|
+
{
|
2025
|
+
key_vault_client: key_vault_client,
|
2026
|
+
key_vault_namespace: key_vault_namespace,
|
2027
|
+
kms_providers: kms_providers,
|
2028
|
+
schema_map: schema_map,
|
2029
|
+
extra_options: extra_options,
|
2030
|
+
}
|
2031
|
+
end
|
2032
|
+
|
2033
|
+
let(:key_vault_client) { new_local_client_nmio(SpecConfig.instance.addresses) }
|
2034
|
+
|
2035
|
+
let(:block_client) do
|
2036
|
+
c = nil
|
2037
|
+
described_class.new(
|
2038
|
+
SpecConfig.instance.addresses,
|
2039
|
+
SpecConfig.instance.test_options.merge(
|
2040
|
+
auto_encryption_options: auto_encryption_options,
|
2041
|
+
database: SpecConfig.instance.test_db
|
2042
|
+
)
|
2043
|
+
) do |client|
|
2044
|
+
c = client
|
2045
|
+
end
|
2046
|
+
c
|
2047
|
+
end
|
2048
|
+
|
2049
|
+
it 'closes all clients after block' do
|
2050
|
+
expect(block_client.cluster.connected?).to be false
|
2051
|
+
[
|
2052
|
+
block_client.encrypter.mongocryptd_client,
|
2053
|
+
block_client.encrypter.key_vault_client,
|
2054
|
+
block_client.encrypter.metadata_client
|
2055
|
+
].each do |crypt_client|
|
2056
|
+
expect(crypt_client.cluster.connected?).to be false
|
2057
|
+
end
|
2058
|
+
end
|
1936
2059
|
end
|
1937
2060
|
end
|
1938
2061
|
|
1939
2062
|
context 'when the block raises an error' do
|
1940
|
-
it '
|
2063
|
+
it 'is closed after the block' do
|
1941
2064
|
block_client_raise = nil
|
1942
2065
|
expect do
|
1943
|
-
|
2066
|
+
described_class.new(
|
1944
2067
|
SpecConfig.instance.addresses,
|
1945
|
-
SpecConfig.instance.test_options.merge(database: SpecConfig.instance.test_db)
|
2068
|
+
SpecConfig.instance.test_options.merge(database: SpecConfig.instance.test_db)
|
1946
2069
|
) do |client|
|
1947
2070
|
block_client_raise = client
|
1948
|
-
raise
|
2071
|
+
raise 'This is an error!'
|
1949
2072
|
end
|
1950
|
-
end.to raise_error(StandardError,
|
1951
|
-
expect(block_client_raise.cluster.connected?).to
|
2073
|
+
end.to raise_error(StandardError, 'This is an error!')
|
2074
|
+
expect(block_client_raise.cluster.connected?).to be false
|
1952
2075
|
end
|
1953
2076
|
end
|
1954
2077
|
|
1955
2078
|
context 'when the hosts given include the protocol' do
|
1956
2079
|
it 'raises an error on mongodb://' do
|
1957
2080
|
expect do
|
1958
|
-
|
1959
|
-
end.to raise_error(ArgumentError,
|
2081
|
+
described_class.new([ 'mongodb://127.0.0.1:27017/test' ])
|
2082
|
+
end.to raise_error(ArgumentError,
|
2083
|
+
"Host 'mongodb://127.0.0.1:27017/test' should not contain protocol. " \
|
2084
|
+
'Did you mean to not use an array?')
|
1960
2085
|
end
|
1961
2086
|
|
1962
2087
|
it 'raises an error on mongodb+srv://' do
|
1963
2088
|
expect do
|
1964
|
-
|
1965
|
-
end.to raise_error(ArgumentError,
|
2089
|
+
described_class.new([ 'mongodb+srv://127.0.0.1:27017/test' ])
|
2090
|
+
end.to raise_error(ArgumentError,
|
2091
|
+
"Host 'mongodb+srv://127.0.0.1:27017/test' should not contain protocol. " \
|
2092
|
+
'Did you mean to not use an array?')
|
1966
2093
|
end
|
1967
2094
|
|
1968
2095
|
it 'raises an error on multiple items' do
|
1969
2096
|
expect do
|
1970
|
-
|
1971
|
-
end.to raise_error(ArgumentError,
|
2097
|
+
described_class.new([ '127.0.0.1:27017', 'mongodb+srv://127.0.0.1:27017/test' ])
|
2098
|
+
end.to raise_error(ArgumentError,
|
2099
|
+
"Host 'mongodb+srv://127.0.0.1:27017/test' should not contain protocol. " \
|
2100
|
+
'Did you mean to not use an array?')
|
1972
2101
|
end
|
1973
2102
|
|
1974
2103
|
it 'raises an error only at beginning of string' do
|
1975
2104
|
expect do
|
1976
|
-
|
1977
|
-
|
2105
|
+
described_class
|
2106
|
+
.new([ 'somethingmongodb://127.0.0.1:27017/test', 'mongodb+srv://127.0.0.1:27017/test' ])
|
2107
|
+
end.to raise_error(ArgumentError,
|
2108
|
+
"Host 'mongodb+srv://127.0.0.1:27017/test' should not contain protocol. " \
|
2109
|
+
'Did you mean to not use an array?')
|
1978
2110
|
end
|
1979
2111
|
|
1980
2112
|
it 'raises an error with different case' do
|
1981
|
-
expect
|
1982
|
-
|
1983
|
-
|
2113
|
+
expect { described_class.new([ 'MongOdB://127.0.0.1:27017/test' ]) }
|
2114
|
+
.to raise_error(ArgumentError,
|
2115
|
+
"Host 'MongOdB://127.0.0.1:27017/test' should not contain protocol. " \
|
2116
|
+
'Did you mean to not use an array?')
|
1984
2117
|
end
|
1985
2118
|
end
|
1986
2119
|
end
|
@@ -2070,13 +2203,11 @@ describe Mongo::Client do
|
|
2070
2203
|
end
|
2071
2204
|
|
2072
2205
|
describe '#use' do
|
2073
|
-
|
2074
2206
|
let(:client) do
|
2075
|
-
new_local_client_nmio(
|
2207
|
+
new_local_client_nmio(SINGLE_CLIENT, database: SpecConfig.instance.test_db)
|
2076
2208
|
end
|
2077
2209
|
|
2078
2210
|
shared_examples_for 'a database switching object' do
|
2079
|
-
|
2080
2211
|
it 'returns the new client' do
|
2081
2212
|
expect(client.send(:database).name).to eq('ruby-driver')
|
2082
2213
|
end
|
@@ -2087,7 +2218,6 @@ describe Mongo::Client do
|
|
2087
2218
|
end
|
2088
2219
|
|
2089
2220
|
context 'when provided a string' do
|
2090
|
-
|
2091
2221
|
let(:database) do
|
2092
2222
|
client.use('testdb')
|
2093
2223
|
end
|
@@ -2096,7 +2226,6 @@ describe Mongo::Client do
|
|
2096
2226
|
end
|
2097
2227
|
|
2098
2228
|
context 'when provided a symbol' do
|
2099
|
-
|
2100
2229
|
let(:database) do
|
2101
2230
|
client.use(:testdb)
|
2102
2231
|
end
|
@@ -2105,45 +2234,29 @@ describe Mongo::Client do
|
|
2105
2234
|
end
|
2106
2235
|
|
2107
2236
|
context 'when providing nil' do
|
2108
|
-
|
2109
2237
|
it 'raises an exception' do
|
2110
|
-
expect {
|
2111
|
-
|
2112
|
-
}.to raise_error(Mongo::Error::InvalidDatabaseName)
|
2238
|
+
expect { client.use(nil) }
|
2239
|
+
.to raise_error(Mongo::Error::InvalidDatabaseName)
|
2113
2240
|
end
|
2114
2241
|
end
|
2115
2242
|
end
|
2116
2243
|
|
2117
2244
|
describe '#with' do
|
2118
|
-
|
2119
2245
|
let(:client) do
|
2120
|
-
new_local_client_nmio(
|
2246
|
+
new_local_client_nmio(SINGLE_CLIENT, database: SpecConfig.instance.test_db)
|
2121
2247
|
end
|
2122
2248
|
|
2123
2249
|
context 'when providing nil' do
|
2124
|
-
|
2125
2250
|
it 'returns the cloned client' do
|
2126
2251
|
expect(client.with(nil)).to eq(client)
|
2127
2252
|
end
|
2128
2253
|
end
|
2129
2254
|
|
2130
2255
|
context 'when the app_name is changed' do
|
2131
|
-
|
2132
|
-
let(:
|
2133
|
-
|
2134
|
-
|
2135
|
-
|
2136
|
-
let!(:original_options) do
|
2137
|
-
client.options
|
2138
|
-
end
|
2139
|
-
|
2140
|
-
let(:new_options) do
|
2141
|
-
{ app_name: 'client_test' }
|
2142
|
-
end
|
2143
|
-
|
2144
|
-
let!(:new_client) do
|
2145
|
-
authorized_client.with(new_options)
|
2146
|
-
end
|
2256
|
+
let(:client) { authorized_client }
|
2257
|
+
let(:original_options) { client.options }
|
2258
|
+
let(:new_options) { { app_name: 'client_test' } }
|
2259
|
+
let(:new_client) { authorized_client.with(new_options) }
|
2147
2260
|
|
2148
2261
|
it 'returns a new client' do
|
2149
2262
|
expect(new_client).not_to equal(client)
|
@@ -2169,27 +2282,25 @@ describe Mongo::Client do
|
|
2169
2282
|
new_local_client(SpecConfig.instance.addresses, options)
|
2170
2283
|
end
|
2171
2284
|
|
2172
|
-
before do
|
2173
|
-
client.options[:direct_connection].should be nil
|
2174
|
-
end
|
2175
|
-
|
2176
2285
|
let(:new_client) do
|
2177
2286
|
client.with(new_options)
|
2178
2287
|
end
|
2179
2288
|
|
2180
|
-
|
2289
|
+
before do
|
2290
|
+
expect(client.options[:direct_connection]).to be_nil
|
2291
|
+
end
|
2181
2292
|
|
2293
|
+
context 'direct_connection set to false' do
|
2182
2294
|
let(:new_options) do
|
2183
2295
|
{ direct_connection: false }
|
2184
2296
|
end
|
2185
2297
|
|
2186
2298
|
it 'is accepted' do
|
2187
|
-
new_client.options[:direct_connection].
|
2299
|
+
expect(new_client.options[:direct_connection]).to be false
|
2188
2300
|
end
|
2189
2301
|
end
|
2190
2302
|
|
2191
2303
|
context 'direct_connection set to true' do
|
2192
|
-
|
2193
2304
|
let(:new_options) do
|
2194
2305
|
{ direct_connection: true }
|
2195
2306
|
end
|
@@ -2197,10 +2308,9 @@ describe Mongo::Client do
|
|
2197
2308
|
context 'in single topology' do
|
2198
2309
|
require_topology :single
|
2199
2310
|
|
2200
|
-
|
2201
2311
|
it 'is accepted' do
|
2202
|
-
new_client.options[:direct_connection].
|
2203
|
-
new_client.cluster.topology.
|
2312
|
+
expect(new_client.options[:direct_connection]).to be true
|
2313
|
+
expect(new_client.cluster.topology).to be_a(Mongo::Cluster::Topology::Single)
|
2204
2314
|
end
|
2205
2315
|
end
|
2206
2316
|
|
@@ -2208,21 +2318,19 @@ describe Mongo::Client do
|
|
2208
2318
|
require_topology :replica_set, :sharded
|
2209
2319
|
|
2210
2320
|
it 'is rejected' do
|
2211
|
-
|
2212
|
-
|
2213
|
-
end.should raise_error(ArgumentError, /direct_connection=true cannot be used with topologies other than Single/)
|
2321
|
+
expect { new_client }
|
2322
|
+
.to raise_error(ArgumentError, /direct_connection=true cannot be used with topologies other than Single/)
|
2214
2323
|
end
|
2215
2324
|
|
2216
2325
|
context 'when a new cluster is created' do
|
2217
|
-
|
2218
2326
|
let(:new_options) do
|
2219
2327
|
{ direct_connection: true, app_name: 'new-client' }
|
2220
2328
|
end
|
2221
2329
|
|
2222
2330
|
it 'is rejected' do
|
2223
|
-
|
2224
|
-
|
2225
|
-
|
2331
|
+
expect { new_client }
|
2332
|
+
.to raise_error(ArgumentError,
|
2333
|
+
/direct_connection=true cannot be used with topologies other than Single/)
|
2226
2334
|
end
|
2227
2335
|
end
|
2228
2336
|
end
|
@@ -2230,28 +2338,37 @@ describe Mongo::Client do
|
|
2230
2338
|
end
|
2231
2339
|
|
2232
2340
|
context 'when the write concern is not changed' do
|
2233
|
-
|
2234
2341
|
let(:client) do
|
2235
2342
|
new_local_client_nmio(
|
2236
|
-
|
2237
|
-
:
|
2343
|
+
SINGLE_CLIENT,
|
2344
|
+
read: { mode: :secondary },
|
2345
|
+
write: { w: 1 },
|
2346
|
+
database: SpecConfig.instance.test_db
|
2238
2347
|
)
|
2239
2348
|
end
|
2240
2349
|
|
2241
|
-
let
|
2242
|
-
client.with(:read => { :mode => :primary })
|
2243
|
-
end
|
2350
|
+
let(:new_client) { client.with(read: { mode: :primary }) }
|
2244
2351
|
|
2245
2352
|
let(:new_options) do
|
2246
|
-
Mongo::Options::Redacted.new(
|
2247
|
-
:
|
2248
|
-
:
|
2353
|
+
Mongo::Options::Redacted.new(
|
2354
|
+
read: { mode: :primary },
|
2355
|
+
write: { w: 1 },
|
2356
|
+
monitoring_io: false,
|
2357
|
+
database: SpecConfig.instance.test_db,
|
2358
|
+
retry_writes: true,
|
2359
|
+
retry_reads: true
|
2360
|
+
)
|
2249
2361
|
end
|
2250
2362
|
|
2251
2363
|
let(:original_options) do
|
2252
|
-
Mongo::Options::Redacted.new(
|
2253
|
-
:
|
2254
|
-
:
|
2364
|
+
Mongo::Options::Redacted.new(
|
2365
|
+
read: { mode: :secondary },
|
2366
|
+
write: { w: 1 },
|
2367
|
+
monitoring_io: false,
|
2368
|
+
database: SpecConfig.instance.test_db,
|
2369
|
+
retry_writes: true,
|
2370
|
+
retry_reads: true
|
2371
|
+
)
|
2255
2372
|
end
|
2256
2373
|
|
2257
2374
|
it 'returns a new client' do
|
@@ -2272,21 +2389,19 @@ describe Mongo::Client do
|
|
2272
2389
|
end
|
2273
2390
|
|
2274
2391
|
context 'when the write concern is changed' do
|
2275
|
-
|
2276
2392
|
let(:client) do
|
2277
|
-
new_local_client(
|
2278
|
-
|
2393
|
+
new_local_client(
|
2394
|
+
SINGLE_CLIENT,
|
2395
|
+
{ monitoring_io: false }.merge(client_options)
|
2396
|
+
)
|
2279
2397
|
end
|
2280
2398
|
|
2281
2399
|
let(:client_options) do
|
2282
|
-
{ :
|
2400
|
+
{ write: { w: 1 } }
|
2283
2401
|
end
|
2284
2402
|
|
2285
2403
|
context 'when the write concern has not been accessed' do
|
2286
|
-
|
2287
|
-
let!(:new_client) do
|
2288
|
-
client.with(:write => { :w => 0 })
|
2289
|
-
end
|
2404
|
+
let(:new_client) { client.with(write: { w: 0 }) }
|
2290
2405
|
|
2291
2406
|
let(:get_last_error) do
|
2292
2407
|
new_client.write_concern.get_last_error
|
@@ -2298,10 +2413,9 @@ describe Mongo::Client do
|
|
2298
2413
|
end
|
2299
2414
|
|
2300
2415
|
context 'when the write concern has been accessed' do
|
2301
|
-
|
2302
|
-
let!(:new_client) do
|
2416
|
+
let(:new_client) do
|
2303
2417
|
client.write_concern
|
2304
|
-
client.with(:
|
2418
|
+
client.with(write: { w: 0 })
|
2305
2419
|
end
|
2306
2420
|
|
2307
2421
|
let(:get_last_error) do
|
@@ -2314,9 +2428,8 @@ describe Mongo::Client do
|
|
2314
2428
|
end
|
2315
2429
|
|
2316
2430
|
context 'when write concern is given as :write' do
|
2317
|
-
|
2318
2431
|
let(:client_options) do
|
2319
|
-
{ :
|
2432
|
+
{ write: { w: 1 } }
|
2320
2433
|
end
|
2321
2434
|
|
2322
2435
|
it 'sets :write option' do
|
@@ -2324,7 +2437,7 @@ describe Mongo::Client do
|
|
2324
2437
|
end
|
2325
2438
|
|
2326
2439
|
it 'does not set :write_concern option' do
|
2327
|
-
expect(client.options[:write_concern]).to
|
2440
|
+
expect(client.options[:write_concern]).to be_nil
|
2328
2441
|
end
|
2329
2442
|
|
2330
2443
|
it 'returns correct write concern' do
|
@@ -2334,9 +2447,8 @@ describe Mongo::Client do
|
|
2334
2447
|
end
|
2335
2448
|
|
2336
2449
|
context 'when write concern is given as :write_concern' do
|
2337
|
-
|
2338
2450
|
let(:client_options) do
|
2339
|
-
{ :
|
2451
|
+
{ write_concern: { w: 1 } }
|
2340
2452
|
end
|
2341
2453
|
|
2342
2454
|
it 'sets :write_concern option' do
|
@@ -2344,20 +2456,19 @@ describe Mongo::Client do
|
|
2344
2456
|
end
|
2345
2457
|
|
2346
2458
|
it 'does not set :write option' do
|
2347
|
-
expect(client.options[:write]).to
|
2459
|
+
expect(client.options[:write]).to be_nil
|
2348
2460
|
end
|
2349
2461
|
|
2350
2462
|
it 'returns correct write concern' do
|
2351
|
-
|
2352
|
-
|
2463
|
+
expect(client.write_concern).to be_a(Mongo::WriteConcern::Acknowledged)
|
2464
|
+
expect(client.write_concern.options).to eq(w: 1)
|
2353
2465
|
end
|
2354
2466
|
end
|
2355
2467
|
|
2356
2468
|
context 'when write concern is given as both :write and :write_concern' do
|
2357
2469
|
context 'with identical values' do
|
2358
|
-
|
2359
2470
|
let(:client_options) do
|
2360
|
-
{ write: {w: 1}, write_concern: { w: 1 } }
|
2471
|
+
{ write: { w: 1 }, write_concern: { w: 1 } }
|
2361
2472
|
end
|
2362
2473
|
|
2363
2474
|
it 'sets :write_concern option' do
|
@@ -2375,9 +2486,8 @@ describe Mongo::Client do
|
|
2375
2486
|
end
|
2376
2487
|
|
2377
2488
|
context 'with different values' do
|
2378
|
-
|
2379
2489
|
let(:client_options) do
|
2380
|
-
{ write: {w: 1}, write_concern: { w: 2 } }
|
2490
|
+
{ write: { w: 1 }, write_concern: { w: 2 } }
|
2381
2491
|
end
|
2382
2492
|
|
2383
2493
|
it 'raises an exception' do
|
@@ -2389,43 +2499,35 @@ describe Mongo::Client do
|
|
2389
2499
|
end
|
2390
2500
|
|
2391
2501
|
context 'when #with uses a different write concern option name' do
|
2392
|
-
|
2393
2502
|
context 'from :write_concern to :write' do
|
2394
|
-
|
2395
2503
|
let(:client_options) do
|
2396
|
-
{ :
|
2504
|
+
{ write_concern: { w: 1 } }
|
2397
2505
|
end
|
2398
2506
|
|
2399
|
-
let
|
2400
|
-
client.with(:write => { :w => 2 })
|
2401
|
-
end
|
2507
|
+
let(:new_client) { client.with(write: { w: 2 }) }
|
2402
2508
|
|
2403
2509
|
it 'uses the new option' do
|
2404
2510
|
expect(new_client.options[:write]).to eq(Mongo::Options::Redacted.new(w: 2))
|
2405
|
-
expect(new_client.options[:write_concern]).to
|
2511
|
+
expect(new_client.options[:write_concern]).to be_nil
|
2406
2512
|
end
|
2407
2513
|
end
|
2408
2514
|
|
2409
2515
|
context 'from :write to :write_concern' do
|
2410
|
-
|
2411
2516
|
let(:client_options) do
|
2412
|
-
{ :
|
2517
|
+
{ write: { w: 1 } }
|
2413
2518
|
end
|
2414
2519
|
|
2415
|
-
let
|
2416
|
-
client.with(:write_concern => { :w => 2 })
|
2417
|
-
end
|
2520
|
+
let(:new_client) { client.with(write_concern: { w: 2 }) }
|
2418
2521
|
|
2419
2522
|
it 'uses the new option' do
|
2420
2523
|
expect(new_client.options[:write_concern]).to eq(Mongo::Options::Redacted.new(w: 2))
|
2421
|
-
expect(new_client.options[:write]).to
|
2524
|
+
expect(new_client.options[:write]).to be_nil
|
2422
2525
|
end
|
2423
2526
|
end
|
2424
2527
|
end
|
2425
2528
|
end
|
2426
2529
|
|
2427
2530
|
context 'when an invalid option is provided' do
|
2428
|
-
|
2429
2531
|
let(:new_client) do
|
2430
2532
|
client.with(invalid: :option, ssl: false)
|
2431
2533
|
end
|
@@ -2446,24 +2548,18 @@ describe Mongo::Client do
|
|
2446
2548
|
|
2447
2549
|
context 'when client is created with ipv6 address' do
|
2448
2550
|
let(:client) do
|
2449
|
-
new_local_client_nmio(['[::1]:27017'], :
|
2551
|
+
new_local_client_nmio([ '[::1]:27017' ], database: SpecConfig.instance.test_db)
|
2450
2552
|
end
|
2451
2553
|
|
2452
2554
|
context 'when providing nil' do
|
2453
|
-
|
2454
2555
|
it 'returns the cloned client' do
|
2455
2556
|
expect(client.with(nil)).to eq(client)
|
2456
2557
|
end
|
2457
2558
|
end
|
2458
2559
|
|
2459
2560
|
context 'when changing options' do
|
2460
|
-
let(:new_options)
|
2461
|
-
|
2462
|
-
end
|
2463
|
-
|
2464
|
-
let!(:new_client) do
|
2465
|
-
client.with(new_options)
|
2466
|
-
end
|
2561
|
+
let(:new_options) { { app_name: 'client_test' } }
|
2562
|
+
let(:new_client) { client.with(new_options) }
|
2467
2563
|
|
2468
2564
|
it 'returns a new client' do
|
2469
2565
|
expect(new_client).not_to equal(client)
|
@@ -2473,11 +2569,14 @@ describe Mongo::Client do
|
|
2473
2569
|
|
2474
2570
|
context 'when new client has a new cluster' do
|
2475
2571
|
let(:client) do
|
2476
|
-
new_local_client(
|
2572
|
+
new_local_client(
|
2573
|
+
SINGLE_CLIENT,
|
2477
2574
|
database: SpecConfig.instance.test_db,
|
2478
2575
|
server_selection_timeout: 0.5,
|
2479
|
-
socket_timeout: 0.1, connect_timeout: 0.1
|
2576
|
+
socket_timeout: 0.1, connect_timeout: 0.1, populator_io: false
|
2577
|
+
)
|
2480
2578
|
end
|
2579
|
+
|
2481
2580
|
let(:new_client) do
|
2482
2581
|
client.with(app_name: 'client_construction_spec').tap do |new_client|
|
2483
2582
|
expect(new_client.cluster).not_to eql(client.cluster)
|
@@ -2501,26 +2600,28 @@ describe Mongo::Client do
|
|
2501
2600
|
# in #with, the consistent behavior is to never transfer sdam_proc to
|
2502
2601
|
# the new client.
|
2503
2602
|
context 'when sdam_proc is given on original client' do
|
2504
|
-
|
2505
2603
|
let(:sdam_proc) do
|
2506
|
-
|
2604
|
+
proc do |client|
|
2507
2605
|
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
|
2508
2606
|
end
|
2509
2607
|
end
|
2510
2608
|
|
2511
2609
|
let(:client) do
|
2512
|
-
new_local_client(
|
2610
|
+
new_local_client(
|
2611
|
+
SpecConfig.instance.addresses,
|
2513
2612
|
SpecConfig.instance.test_options.merge(
|
2514
2613
|
sdam_proc: sdam_proc,
|
2515
2614
|
connect_timeout: 3.08, socket_timeout: 3.09,
|
2516
2615
|
server_selection_timeout: 2.92,
|
2517
2616
|
heartbeat_frequency: 100,
|
2518
|
-
database: SpecConfig.instance.test_db
|
2617
|
+
database: SpecConfig.instance.test_db
|
2618
|
+
)
|
2619
|
+
)
|
2519
2620
|
end
|
2520
2621
|
|
2521
2622
|
let(:new_client) do
|
2522
2623
|
client.with(app_name: 'foo').tap do |new_client|
|
2523
|
-
new_client.cluster.
|
2624
|
+
expect(new_client.cluster).not_to be == client.cluster
|
2524
2625
|
end
|
2525
2626
|
end
|
2526
2627
|
|
@@ -2529,14 +2630,14 @@ describe Mongo::Client do
|
|
2529
2630
|
events = subscriber.select_started_events(Mongo::Monitoring::Event::ServerHeartbeatStarted)
|
2530
2631
|
if ClusterConfig.instance.topology == :load_balanced
|
2531
2632
|
# No server monitoring in LB topology
|
2532
|
-
events.length.
|
2633
|
+
expect(events.length).to be == 0
|
2533
2634
|
else
|
2534
|
-
events.length.
|
2635
|
+
expect(events.length).to be > 0
|
2535
2636
|
end
|
2536
2637
|
end
|
2537
2638
|
|
2538
2639
|
it 'does not copy sdam_proc option to new client' do
|
2539
|
-
expect(new_client.options[:sdam_proc]).to
|
2640
|
+
expect(new_client.options[:sdam_proc]).to be_nil
|
2540
2641
|
end
|
2541
2642
|
|
2542
2643
|
it 'does not notify subscribers set up by sdam_proc' do
|
@@ -2558,34 +2659,34 @@ describe Mongo::Client do
|
|
2558
2659
|
new_client.cluster.next_primary
|
2559
2660
|
|
2560
2661
|
# Diagnostics
|
2662
|
+
# rubocop:disable Style/IfUnlessModifier, Lint/Debugger
|
2561
2663
|
unless subscriber.started_events.empty?
|
2562
2664
|
p subscriber.started_events
|
2563
2665
|
end
|
2666
|
+
# rubocop:enable Style/IfUnlessModifier, Lint/Debugger
|
2564
2667
|
|
2565
2668
|
expect(subscriber.started_events.length).to eq 0
|
2566
|
-
new_client.cluster.topology.class.
|
2669
|
+
expect(new_client.cluster.topology.class).not_to be Mongo::Cluster::Topology::Unknown
|
2567
2670
|
end
|
2568
2671
|
end
|
2569
2672
|
|
2570
2673
|
context 'when :server_api is changed' do
|
2571
|
-
|
2572
2674
|
let(:client) do
|
2573
|
-
new_local_client_nmio(
|
2675
|
+
new_local_client_nmio(SINGLE_CLIENT)
|
2574
2676
|
end
|
2575
2677
|
|
2576
2678
|
let(:new_client) do
|
2577
|
-
client.with(server_api: {version: '1'})
|
2679
|
+
client.with(server_api: { version: '1' })
|
2578
2680
|
end
|
2579
2681
|
|
2580
2682
|
it 'changes :server_api' do
|
2581
|
-
new_client.options[:server_api].
|
2683
|
+
expect(new_client.options[:server_api]).to be == { 'version' => '1' }
|
2582
2684
|
end
|
2583
2685
|
end
|
2584
2686
|
|
2585
2687
|
context 'when :server_api is cleared' do
|
2586
|
-
|
2587
2688
|
let(:client) do
|
2588
|
-
new_local_client_nmio(
|
2689
|
+
new_local_client_nmio(SINGLE_CLIENT, server_api: { version: '1' })
|
2589
2690
|
end
|
2590
2691
|
|
2591
2692
|
let(:new_client) do
|
@@ -2593,19 +2694,17 @@ describe Mongo::Client do
|
|
2593
2694
|
end
|
2594
2695
|
|
2595
2696
|
it 'clears :server_api' do
|
2596
|
-
new_client.options[:server_api].
|
2697
|
+
expect(new_client.options[:server_api]).to be_nil
|
2597
2698
|
end
|
2598
2699
|
end
|
2599
|
-
|
2600
2700
|
end
|
2601
2701
|
|
2602
2702
|
describe '#dup' do
|
2603
|
-
|
2604
2703
|
let(:client) do
|
2605
2704
|
new_local_client_nmio(
|
2606
|
-
|
2607
|
-
|
2608
|
-
|
2705
|
+
SINGLE_CLIENT,
|
2706
|
+
read: { mode: :primary },
|
2707
|
+
database: SpecConfig.instance.test_db
|
2609
2708
|
)
|
2610
2709
|
end
|
2611
2710
|
|
@@ -2618,3 +2717,7 @@ describe Mongo::Client do
|
|
2618
2717
|
it_behaves_like 'duplicated client with reused monitoring'
|
2619
2718
|
end
|
2620
2719
|
end
|
2720
|
+
# rubocop:enable RSpec/ExpectInHook, RSpec/MessageSpies, RSpec/ExampleLength
|
2721
|
+
# rubocop:enable RSpec/ContextWording, RSpec/RepeatedExampleGroupDescription
|
2722
|
+
# rubocop:enable RSpec/ExampleWording, Style/BlockComments, RSpec/AnyInstance
|
2723
|
+
# rubocop:enable RSpec/VerifiedDoubles
|