mongo 2.12.4 → 2.13.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CONTRIBUTING.md +8 -36
- data/LICENSE +1 -1
- data/README.md +54 -54
- data/Rakefile +1 -1
- data/lib/mongo.rb +4 -1
- data/lib/mongo/active_support.rb +1 -1
- data/lib/mongo/address.rb +40 -13
- data/lib/mongo/address/ipv4.rb +32 -5
- data/lib/mongo/address/ipv6.rb +32 -5
- data/lib/mongo/address/unix.rb +3 -3
- data/lib/mongo/address/validator.rb +1 -1
- data/lib/mongo/auth.rb +36 -13
- data/lib/mongo/auth/aws.rb +37 -0
- data/lib/mongo/auth/aws/conversation.rb +128 -0
- data/lib/mongo/auth/aws/credentials_retriever.rb +219 -0
- data/lib/mongo/auth/aws/request.rb +257 -0
- data/lib/mongo/auth/base.rb +129 -0
- data/lib/mongo/auth/conversation_base.rb +52 -0
- data/lib/mongo/auth/cr.rb +9 -36
- data/lib/mongo/auth/cr/conversation.rb +24 -69
- data/lib/mongo/auth/credential_cache.rb +1 -1
- data/lib/mongo/auth/gssapi.rb +38 -0
- data/lib/mongo/auth/gssapi/conversation.rb +108 -0
- data/lib/mongo/auth/ldap.rb +9 -34
- data/lib/mongo/auth/ldap/conversation.rb +3 -43
- data/lib/mongo/auth/roles.rb +1 -1
- data/lib/mongo/auth/sasl_conversation_base.rb +111 -0
- data/lib/mongo/auth/scram.rb +39 -51
- data/lib/mongo/auth/scram/conversation.rb +12 -506
- data/lib/mongo/auth/scram256.rb +31 -0
- data/lib/mongo/auth/scram256/conversation.rb +63 -0
- data/lib/mongo/auth/scram_conversation_base.rb +402 -0
- data/lib/mongo/auth/stringprep.rb +5 -4
- data/lib/mongo/auth/stringprep/profiles/sasl.rb +2 -1
- data/lib/mongo/auth/stringprep/tables.rb +2 -1
- data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +1 -0
- data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1 -0
- data/lib/mongo/auth/user.rb +2 -2
- data/lib/mongo/auth/user/view.rb +1 -1
- data/lib/mongo/auth/x509.rb +14 -32
- data/lib/mongo/auth/x509/conversation.rb +15 -42
- data/lib/mongo/background_thread.rb +11 -2
- data/lib/mongo/bson.rb +1 -1
- data/lib/mongo/bulk_write.rb +61 -26
- data/lib/mongo/bulk_write/combineable.rb +20 -8
- data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
- data/lib/mongo/bulk_write/result.rb +1 -1
- data/lib/mongo/bulk_write/result_combiner.rb +1 -1
- data/lib/mongo/bulk_write/transformable.rb +9 -10
- data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
- data/lib/mongo/bulk_write/validatable.rb +5 -1
- data/lib/mongo/client.rb +38 -23
- data/lib/mongo/client_encryption.rb +1 -1
- data/lib/mongo/cluster.rb +126 -54
- data/lib/mongo/cluster/periodic_executor.rb +1 -1
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +1 -1
- data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -1
- data/lib/mongo/cluster/sdam_flow.rb +23 -7
- data/lib/mongo/cluster/topology.rb +19 -2
- data/lib/mongo/cluster/topology/base.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_time.rb +1 -1
- data/lib/mongo/collection.rb +24 -8
- data/lib/mongo/collection/view.rb +6 -2
- data/lib/mongo/collection/view/aggregation.rb +6 -3
- data/lib/mongo/collection/view/builder.rb +1 -1
- data/lib/mongo/collection/view/builder/aggregation.rb +1 -1
- data/lib/mongo/collection/view/builder/find_command.rb +9 -1
- data/lib/mongo/collection/view/builder/flags.rb +1 -1
- data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
- data/lib/mongo/collection/view/builder/modifiers.rb +1 -1
- data/lib/mongo/collection/view/builder/op_query.rb +1 -1
- data/lib/mongo/collection/view/change_stream.rb +3 -6
- data/lib/mongo/collection/view/change_stream/retryable.rb +1 -1
- data/lib/mongo/collection/view/explainable.rb +1 -1
- data/lib/mongo/collection/view/immutable.rb +1 -1
- data/lib/mongo/collection/view/iterable.rb +8 -2
- data/lib/mongo/collection/view/map_reduce.rb +7 -4
- data/lib/mongo/collection/view/readable.rb +11 -5
- data/lib/mongo/collection/view/writable.rb +52 -8
- data/lib/mongo/crypt.rb +1 -1
- data/lib/mongo/crypt/auto_decryption_context.rb +1 -1
- data/lib/mongo/crypt/auto_encrypter.rb +1 -1
- data/lib/mongo/crypt/auto_encryption_context.rb +1 -1
- data/lib/mongo/crypt/binary.rb +1 -1
- data/lib/mongo/crypt/binding.rb +1 -1
- data/lib/mongo/crypt/context.rb +1 -1
- data/lib/mongo/crypt/data_key_context.rb +1 -1
- data/lib/mongo/crypt/encryption_io.rb +41 -24
- data/lib/mongo/crypt/explicit_decryption_context.rb +1 -1
- data/lib/mongo/crypt/explicit_encrypter.rb +1 -1
- data/lib/mongo/crypt/explicit_encryption_context.rb +1 -1
- data/lib/mongo/crypt/handle.rb +1 -1
- data/lib/mongo/crypt/hooks.rb +1 -1
- data/lib/mongo/crypt/kms_context.rb +1 -1
- data/lib/mongo/crypt/status.rb +1 -1
- data/lib/mongo/cursor.rb +3 -3
- data/lib/mongo/cursor/builder.rb +1 -1
- data/lib/mongo/cursor/builder/get_more_command.rb +1 -1
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +1 -1
- data/lib/mongo/cursor/builder/op_get_more.rb +1 -1
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +1 -1
- data/lib/mongo/database.rb +4 -1
- data/lib/mongo/database/view.rb +2 -2
- data/lib/mongo/dbref.rb +1 -1
- data/lib/mongo/error.rb +25 -2
- data/lib/mongo/error/auth_error.rb +1 -1
- data/lib/mongo/error/bulk_write_error.rb +1 -1
- data/lib/mongo/error/change_stream_resumable.rb +1 -1
- 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 +23 -0
- data/lib/mongo/error/credential_check_error.rb +26 -0
- data/lib/mongo/error/extra_file_chunk.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/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_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/error/invalid_min_pool_size.rb +1 -1
- data/lib/mongo/error/invalid_nonce.rb +2 -2
- data/lib/mongo/error/invalid_read_option.rb +1 -1
- data/lib/mongo/error/invalid_replacement_document.rb +1 -1
- data/lib/mongo/error/invalid_server_auth_response.rb +23 -0
- data/lib/mongo/error/invalid_server_preference.rb +6 -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 +1 -1
- data/lib/mongo/error/invalid_uri.rb +1 -1
- data/lib/mongo/error/invalid_write_concern.rb +1 -1
- 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_file_chunk.rb +1 -1
- 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 +27 -0
- 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_srv_records.rb +1 -1
- data/lib/mongo/error/notable.rb +18 -3
- data/lib/mongo/error/operation_failure.rb +62 -49
- data/lib/mongo/error/parser.rb +16 -5
- data/lib/mongo/error/pool_closed_error.rb +1 -1
- data/lib/mongo/error/raise_original_error.rb +29 -0
- data/lib/mongo/error/session_ended.rb +1 -1
- data/lib/mongo/error/socket_error.rb +1 -1
- data/lib/mongo/error/socket_timeout_error.rb +1 -1
- 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/unsupported_array_filters.rb +7 -2
- data/lib/mongo/error/unsupported_collation.rb +7 -2
- 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 +99 -0
- data/lib/mongo/error/write_retryable.rb +1 -1
- data/lib/mongo/event.rb +1 -1
- 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/grid.rb +1 -1
- data/lib/mongo/grid/file.rb +1 -6
- data/lib/mongo/grid/file/chunk.rb +1 -3
- data/lib/mongo/grid/file/info.rb +1 -1
- data/lib/mongo/grid/fs_bucket.rb +20 -17
- data/lib/mongo/grid/stream.rb +1 -1
- data/lib/mongo/grid/stream/read.rb +1 -1
- data/lib/mongo/grid/stream/write.rb +4 -10
- data/lib/mongo/id.rb +1 -1
- data/lib/mongo/index.rb +2 -1
- data/lib/mongo/index/view.rb +58 -11
- data/lib/mongo/lint.rb +10 -0
- data/lib/mongo/loggable.rb +1 -1
- data/lib/mongo/logger.rb +1 -1
- data/lib/mongo/monitoring.rb +1 -1
- data/lib/mongo/monitoring/cmap_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/command_log_subscriber.rb +12 -5
- data/lib/mongo/monitoring/event.rb +1 -1
- data/lib/mongo/monitoring/event/cmap.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 +1 -1
- 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/command_failed.rb +1 -1
- data/lib/mongo/monitoring/event/command_started.rb +9 -3
- data/lib/mongo/monitoring/event/command_succeeded.rb +1 -1
- data/lib/mongo/monitoring/event/secure.rb +8 -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/publishable.rb +5 -8
- 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/operation.rb +1 -0
- data/lib/mongo/operation/aggregate.rb +1 -1
- data/lib/mongo/operation/aggregate/command.rb +5 -5
- data/lib/mongo/operation/aggregate/op_msg.rb +1 -1
- data/lib/mongo/operation/aggregate/result.rb +1 -1
- data/lib/mongo/operation/collections_info.rb +3 -36
- data/lib/mongo/operation/collections_info/command.rb +40 -0
- data/lib/mongo/operation/collections_info/result.rb +1 -1
- data/lib/mongo/operation/command.rb +1 -1
- data/lib/mongo/operation/command/command.rb +3 -3
- data/lib/mongo/operation/command/op_msg.rb +1 -1
- data/lib/mongo/operation/count.rb +1 -1
- data/lib/mongo/operation/count/command.rb +3 -3
- data/lib/mongo/operation/count/op_msg.rb +1 -1
- data/lib/mongo/operation/create.rb +1 -1
- data/lib/mongo/operation/create/command.rb +3 -3
- data/lib/mongo/operation/create/op_msg.rb +1 -1
- data/lib/mongo/operation/create_index.rb +1 -1
- data/lib/mongo/operation/create_index/command.rb +4 -4
- data/lib/mongo/operation/create_index/op_msg.rb +6 -3
- data/lib/mongo/operation/create_user.rb +1 -1
- data/lib/mongo/operation/create_user/command.rb +4 -4
- data/lib/mongo/operation/create_user/op_msg.rb +2 -2
- data/lib/mongo/operation/delete.rb +1 -1
- data/lib/mongo/operation/delete/bulk_result.rb +1 -1
- data/lib/mongo/operation/delete/command.rb +4 -4
- data/lib/mongo/operation/delete/legacy.rb +2 -2
- data/lib/mongo/operation/delete/op_msg.rb +4 -4
- data/lib/mongo/operation/delete/result.rb +2 -2
- data/lib/mongo/operation/distinct.rb +1 -1
- data/lib/mongo/operation/distinct/command.rb +3 -3
- data/lib/mongo/operation/distinct/op_msg.rb +1 -1
- data/lib/mongo/operation/drop.rb +1 -1
- data/lib/mongo/operation/drop/command.rb +3 -3
- data/lib/mongo/operation/drop/op_msg.rb +1 -1
- data/lib/mongo/operation/drop_database.rb +1 -1
- data/lib/mongo/operation/drop_database/command.rb +3 -3
- data/lib/mongo/operation/drop_database/op_msg.rb +1 -1
- data/lib/mongo/operation/drop_index.rb +1 -1
- data/lib/mongo/operation/drop_index/command.rb +4 -4
- data/lib/mongo/operation/drop_index/op_msg.rb +2 -2
- data/lib/mongo/operation/explain.rb +1 -1
- data/lib/mongo/operation/explain/command.rb +3 -3
- data/lib/mongo/operation/explain/legacy.rb +3 -3
- data/lib/mongo/operation/explain/op_msg.rb +1 -1
- data/lib/mongo/operation/explain/result.rb +1 -1
- data/lib/mongo/operation/find.rb +1 -1
- data/lib/mongo/operation/find/command.rb +3 -3
- data/lib/mongo/operation/find/legacy.rb +3 -3
- data/lib/mongo/operation/find/legacy/result.rb +1 -1
- data/lib/mongo/operation/find/op_msg.rb +2 -12
- data/lib/mongo/operation/find/result.rb +1 -1
- data/lib/mongo/operation/get_more.rb +1 -1
- data/lib/mongo/operation/get_more/command.rb +3 -3
- data/lib/mongo/operation/get_more/legacy.rb +2 -2
- data/lib/mongo/operation/get_more/op_msg.rb +2 -12
- data/lib/mongo/operation/get_more/result.rb +1 -1
- data/lib/mongo/operation/indexes.rb +1 -1
- data/lib/mongo/operation/indexes/command.rb +3 -3
- data/lib/mongo/operation/indexes/legacy.rb +4 -4
- data/lib/mongo/operation/indexes/op_msg.rb +1 -1
- data/lib/mongo/operation/indexes/result.rb +1 -1
- data/lib/mongo/operation/insert.rb +3 -2
- data/lib/mongo/operation/insert/bulk_result.rb +6 -2
- data/lib/mongo/operation/insert/command.rb +7 -7
- data/lib/mongo/operation/insert/legacy.rb +9 -5
- data/lib/mongo/operation/insert/op_msg.rb +6 -6
- data/lib/mongo/operation/insert/result.rb +7 -4
- data/lib/mongo/operation/kill_cursors.rb +1 -1
- data/lib/mongo/operation/kill_cursors/command.rb +3 -3
- data/lib/mongo/operation/kill_cursors/legacy.rb +2 -2
- data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -1
- data/lib/mongo/operation/list_collections.rb +1 -1
- data/lib/mongo/operation/list_collections/command.rb +4 -4
- data/lib/mongo/operation/list_collections/op_msg.rb +2 -2
- data/lib/mongo/operation/list_collections/result.rb +1 -1
- data/lib/mongo/operation/map_reduce.rb +1 -1
- data/lib/mongo/operation/map_reduce/command.rb +3 -3
- data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
- data/lib/mongo/operation/map_reduce/result.rb +1 -1
- data/lib/mongo/operation/op_msg_base.rb +3 -3
- data/lib/mongo/operation/parallel_scan.rb +1 -1
- data/lib/mongo/operation/parallel_scan/command.rb +5 -5
- data/lib/mongo/operation/parallel_scan/op_msg.rb +2 -2
- data/lib/mongo/operation/parallel_scan/result.rb +1 -1
- data/lib/mongo/operation/remove_user.rb +1 -1
- data/lib/mongo/operation/remove_user/command.rb +4 -4
- data/lib/mongo/operation/remove_user/op_msg.rb +2 -2
- data/lib/mongo/operation/result.rb +28 -4
- data/lib/mongo/operation/shared/bypass_document_validation.rb +10 -4
- data/lib/mongo/operation/shared/causal_consistency_supported.rb +3 -3
- data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +56 -0
- data/lib/mongo/operation/shared/executable.rb +46 -28
- data/lib/mongo/operation/shared/executable_no_validate.rb +3 -3
- 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 +10 -2
- data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
- data/lib/mongo/operation/shared/op_msg_or_command.rb +7 -5
- data/lib/mongo/operation/shared/op_msg_or_find_command.rb +8 -6
- data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +8 -6
- 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 +19 -16
- data/lib/mongo/operation/shared/response_handling.rb +83 -8
- 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 +50 -27
- data/lib/mongo/operation/shared/specifiable.rb +32 -20
- data/lib/mongo/operation/shared/write.rb +25 -19
- data/lib/mongo/operation/shared/write_concern_supported.rb +6 -6
- data/lib/mongo/operation/update.rb +1 -1
- data/lib/mongo/operation/update/bulk_result.rb +1 -1
- data/lib/mongo/operation/update/command.rb +4 -4
- data/lib/mongo/operation/update/legacy.rb +2 -2
- data/lib/mongo/operation/update/legacy/result.rb +1 -1
- data/lib/mongo/operation/update/op_msg.rb +4 -4
- data/lib/mongo/operation/update/result.rb +2 -2
- data/lib/mongo/operation/update_user.rb +1 -1
- data/lib/mongo/operation/update_user/command.rb +4 -4
- data/lib/mongo/operation/update_user/op_msg.rb +2 -2
- data/lib/mongo/operation/users_info.rb +1 -1
- data/lib/mongo/operation/users_info/command.rb +4 -4
- data/lib/mongo/operation/users_info/op_msg.rb +2 -2
- data/lib/mongo/operation/users_info/result.rb +1 -1
- data/lib/mongo/options.rb +1 -1
- data/lib/mongo/options/mapper.rb +1 -1
- data/lib/mongo/options/redacted.rb +1 -1
- data/lib/mongo/protocol/bit_vector.rb +1 -1
- data/lib/mongo/protocol/compressed.rb +1 -1
- data/lib/mongo/protocol/delete.rb +1 -1
- data/lib/mongo/protocol/get_more.rb +1 -1
- data/lib/mongo/protocol/insert.rb +1 -1
- data/lib/mongo/protocol/kill_cursors.rb +1 -1
- data/lib/mongo/protocol/message.rb +5 -14
- data/lib/mongo/protocol/msg.rb +5 -24
- data/lib/mongo/protocol/query.rb +1 -37
- data/lib/mongo/protocol/registry.rb +1 -1
- data/lib/mongo/protocol/reply.rb +1 -1
- data/lib/mongo/protocol/serializers.rb +3 -6
- data/lib/mongo/protocol/update.rb +1 -1
- data/lib/mongo/retryable.rb +23 -10
- data/lib/mongo/semaphore.rb +1 -1
- data/lib/mongo/server.rb +32 -7
- data/lib/mongo/server/app_metadata.rb +17 -4
- data/lib/mongo/server/connection.rb +35 -131
- data/lib/mongo/server/connection_base.rb +31 -42
- data/lib/mongo/server/connection_common.rb +75 -1
- data/lib/mongo/server/connection_pool.rb +20 -1
- data/lib/mongo/server/connection_pool/populator.rb +1 -1
- data/lib/mongo/server/context.rb +1 -1
- data/lib/mongo/server/description.rb +44 -2
- data/lib/mongo/server/description/features.rb +12 -3
- data/lib/mongo/server/monitor.rb +116 -72
- data/lib/mongo/server/monitor/app_metadata.rb +1 -1
- data/lib/mongo/server/monitor/connection.rb +62 -80
- data/lib/mongo/server/pending_connection.rb +205 -3
- data/lib/mongo/server/round_trip_time_averager.rb +12 -3
- data/lib/mongo/server_selector.rb +2 -1
- data/lib/mongo/server_selector/base.rb +40 -0
- data/lib/mongo/server_selector/nearest.rb +25 -15
- data/lib/mongo/server_selector/primary.rb +23 -22
- data/lib/mongo/server_selector/primary_preferred.rb +25 -15
- data/lib/mongo/server_selector/secondary.rb +25 -15
- data/lib/mongo/server_selector/secondary_preferred.rb +28 -27
- data/lib/mongo/server_selector/selectable.rb +30 -15
- data/lib/mongo/session.rb +12 -1
- data/lib/mongo/session/server_session.rb +1 -1
- data/lib/mongo/session/session_pool.rb +1 -1
- data/lib/mongo/socket.rb +103 -35
- data/lib/mongo/socket/ssl.rb +97 -34
- data/lib/mongo/socket/tcp.rb +39 -31
- data/lib/mongo/socket/unix.rb +14 -6
- data/lib/mongo/srv.rb +1 -1
- data/lib/mongo/srv/monitor.rb +1 -1
- data/lib/mongo/srv/resolver.rb +1 -1
- data/lib/mongo/srv/result.rb +1 -1
- data/lib/mongo/timeout.rb +9 -9
- data/lib/mongo/topology_version.rb +80 -0
- data/lib/mongo/uri.rb +61 -47
- data/lib/mongo/uri/srv_protocol.rb +9 -1
- data/lib/mongo/version.rb +2 -2
- data/lib/mongo/write_concern.rb +1 -1
- 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/mongo.gemspec +1 -1
- data/spec/NOTES.aws-auth.md +291 -0
- data/spec/README.aws-auth.md +318 -0
- data/spec/README.md +64 -17
- data/spec/integration/auth_spec.rb +29 -9
- data/spec/integration/aws_auth_request_spec.rb +74 -0
- data/spec/integration/aws_credentials_retriever_spec.rb +103 -0
- data/spec/integration/change_stream_spec.rb +123 -51
- data/spec/integration/client_authentication_options_spec.rb +0 -37
- data/spec/integration/client_construction_aws_auth_spec.rb +191 -0
- data/spec/integration/client_construction_spec.rb +1 -1
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +5 -9
- data/spec/integration/collection_indexes_prose_spec.rb +55 -0
- data/spec/integration/command_monitoring_spec.rb +30 -6
- data/spec/integration/command_spec.rb +11 -9
- data/spec/integration/connect_single_rs_name_spec.rb +5 -3
- data/spec/integration/connection_spec.rb +1 -0
- data/spec/integration/crud_spec.rb +28 -0
- data/spec/integration/cursor_reaping_spec.rb +14 -10
- data/spec/integration/fork_reconnect_spec.rb +143 -0
- data/spec/integration/get_more_spec.rb +10 -3
- data/spec/integration/heartbeat_events_spec.rb +1 -1
- data/spec/integration/read_preference_spec.rb +41 -11
- data/spec/integration/reconnect_spec.rb +2 -3
- data/spec/integration/retryable_errors_spec.rb +33 -14
- data/spec/integration/{retryable_writes_spec.rb → retryable_writes/retryable_writes_36_and_older_spec.rb} +55 -51
- data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +401 -0
- data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +15 -0
- data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +24 -0
- data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +25 -0
- data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +215 -0
- data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +232 -0
- data/spec/integration/retryable_writes/shared/performs_no_retries.rb +110 -0
- data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +19 -0
- data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +25 -0
- data/spec/integration/retryable_writes/shared/supports_retries.rb +16 -0
- data/spec/integration/sdam_error_handling_spec.rb +116 -18
- data/spec/integration/sdam_events_spec.rb +1 -0
- data/spec/integration/server_spec.rb +42 -26
- data/spec/integration/size_limit_spec.rb +2 -20
- data/spec/integration/step_down_spec.rb +15 -15
- data/spec/integration/transactions_api_examples_spec.rb +59 -0
- data/spec/integration/transactions_examples_spec.rb +5 -2
- data/spec/integration/x509_auth_spec.rb +109 -0
- data/spec/kerberos/kerberos_spec.rb +10 -6
- data/spec/lite_spec_helper.rb +21 -19
- data/spec/mongo/address/ipv4_spec.rb +1 -1
- data/spec/mongo/address_spec.rb +2 -2
- data/spec/mongo/auth/cr_spec.rb +7 -7
- data/spec/mongo/auth/gssapi/conversation_spec.rb +121 -0
- 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 +3 -3
- data/spec/mongo/auth/scram/conversation_spec.rb +119 -334
- data/spec/mongo/auth/scram256/conversation_spec.rb +171 -0
- data/spec/mongo/auth/{scram/negotiation_spec.rb → scram_negotiation_spec.rb} +13 -8
- data/spec/mongo/auth/scram_spec.rb +28 -68
- 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 +8 -8
- data/spec/mongo/auth_spec.rb +4 -4
- data/spec/mongo/bulk_write_spec.rb +206 -2
- data/spec/mongo/client_construction_spec.rb +290 -86
- data/spec/mongo/client_spec.rb +21 -2
- data/spec/mongo/cluster_spec.rb +4 -2
- data/spec/mongo/collection/view/aggregation_spec.rb +6 -2
- data/spec/mongo/collection/view/builder/find_command_spec.rb +17 -6
- data/spec/mongo/collection/view/change_stream_resume_spec.rb +392 -0
- data/spec/mongo/collection/view/change_stream_spec.rb +0 -318
- data/spec/mongo/collection/view/iterable_spec.rb +38 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +6 -2
- data/spec/mongo/collection/view/readable_spec.rb +15 -1
- data/spec/mongo/collection/view/writable_spec.rb +208 -1
- data/spec/mongo/collection_spec.rb +31 -67
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +6 -1
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +6 -1
- data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +6 -1
- data/spec/mongo/cursor_spec.rb +9 -1
- data/spec/mongo/database_spec.rb +6 -2
- data/spec/mongo/error/operation_failure_heavy_spec.rb +58 -0
- data/spec/mongo/error/operation_failure_spec.rb +130 -72
- data/spec/mongo/error/unsupported_option_spec.rb +54 -0
- data/spec/mongo/grid/fs_bucket_spec.rb +18 -0
- data/spec/mongo/grid/stream/write_spec.rb +32 -0
- data/spec/mongo/index/view_spec.rb +166 -0
- data/spec/mongo/operation/aggregate/result_spec.rb +6 -1
- data/spec/mongo/operation/delete/bulk_spec.rb +18 -6
- data/spec/mongo/operation/delete/op_msg_spec.rb +22 -14
- data/spec/mongo/operation/find/legacy_spec.rb +27 -7
- data/spec/mongo/operation/get_more_spec.rb +6 -1
- data/spec/mongo/operation/insert/bulk_spec.rb +21 -7
- data/spec/mongo/operation/insert/command_spec.rb +4 -0
- data/spec/mongo/operation/insert/op_msg_spec.rb +22 -14
- data/spec/mongo/operation/limited_spec.rb +5 -3
- data/spec/mongo/operation/read_preference_legacy_spec.rb +16 -4
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +115 -5
- data/spec/mongo/operation/result_spec.rb +6 -1
- data/spec/mongo/operation/update/bulk_spec.rb +18 -6
- data/spec/mongo/operation/update/command_spec.rb +4 -0
- data/spec/mongo/operation/update/op_msg_spec.rb +22 -14
- data/spec/mongo/retryable_spec.rb +71 -70
- data/spec/mongo/server/app_metadata_shared.rb +56 -0
- data/spec/mongo/server/app_metadata_spec.rb +8 -1
- data/spec/mongo/server/connection_auth_spec.rb +31 -12
- data/spec/mongo/server/connection_pool_spec.rb +0 -31
- data/spec/mongo/server/connection_spec.rb +118 -71
- data/spec/mongo/server/monitor/app_metadata_spec.rb +8 -1
- data/spec/mongo/server/monitor/connection_spec.rb +1 -82
- data/spec/mongo/server/monitor_spec.rb +76 -17
- data/spec/mongo/server/round_trip_time_averager_spec.rb +5 -3
- data/spec/mongo/server_selector/nearest_spec.rb +1 -0
- data/spec/mongo/server_selector/primary_preferred_spec.rb +1 -0
- data/spec/mongo/server_selector/primary_spec.rb +18 -0
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +18 -1
- data/spec/mongo/server_selector/secondary_spec.rb +1 -0
- data/spec/mongo/server_selector_spec.rb +0 -1
- data/spec/mongo/session/session_pool_spec.rb +7 -3
- data/spec/mongo/socket/ssl_spec.rb +2 -2
- data/spec/mongo/socket/tcp_spec.rb +2 -2
- data/spec/mongo/socket/unix_spec.rb +2 -2
- data/spec/mongo/socket_spec.rb +9 -9
- data/spec/mongo/timeout_spec.rb +22 -68
- data/spec/mongo/uri_spec.rb +21 -6
- data/spec/runners/auth.rb +5 -6
- data/spec/runners/change_streams/outcome.rb +42 -0
- data/spec/runners/change_streams/spec.rb +57 -0
- data/spec/runners/change_streams/test.rb +229 -0
- data/spec/runners/cmap/verifier.rb +1 -1
- data/spec/runners/command_monitoring.rb +1 -1
- data/spec/runners/connection_string.rb +3 -2
- data/spec/runners/crud.rb +2 -2
- data/spec/runners/crud/context.rb +1 -1
- data/spec/runners/crud/operation.rb +120 -30
- data/spec/runners/crud/outcome.rb +1 -1
- data/spec/runners/crud/spec.rb +1 -0
- data/spec/runners/crud/test.rb +8 -26
- data/spec/runners/crud/test_base.rb +47 -0
- data/spec/runners/crud/verifier.rb +21 -3
- data/spec/runners/gridfs.rb +1 -1
- data/spec/runners/{server_discovery_and_monitoring.rb → sdam.rb} +41 -22
- data/spec/runners/sdam/verifier.rb +26 -8
- data/spec/runners/sdam_monitoring.rb +1 -1
- data/spec/runners/transactions.rb +1 -2
- data/spec/runners/transactions/context.rb +1 -1
- data/spec/runners/transactions/operation.rb +5 -1
- data/spec/runners/transactions/spec.rb +1 -1
- data/spec/runners/transactions/test.rb +48 -54
- data/spec/spec_tests/auth_spec.rb +2 -0
- data/spec/spec_tests/change_streams_spec.rb +39 -4
- data/spec/spec_tests/client_side_encryption_spec.rb +3 -0
- data/spec/spec_tests/cmap_spec.rb +5 -0
- data/spec/spec_tests/command_monitoring_spec.rb +3 -0
- data/spec/spec_tests/connection_string_spec.rb +2 -0
- data/spec/spec_tests/crud_spec.rb +2 -0
- data/spec/spec_tests/data/auth/connection-string.yml +57 -1
- data/spec/spec_tests/data/change_streams/change-streams-errors.yml +30 -0
- data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +1105 -0
- data/spec/spec_tests/data/change_streams/change-streams-resume-whitelist.yml +1107 -0
- data/spec/spec_tests/data/change_streams/change-streams.yml +5 -4
- data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +1 -1
- data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +33 -11
- data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +63 -0
- data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +92 -0
- data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +103 -0
- data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +90 -0
- data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +147 -0
- data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +164 -0
- data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +43 -0
- data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +62 -0
- data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +58 -0
- data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +41 -0
- data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +60 -0
- data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +57 -0
- data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +28 -0
- data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +44 -0
- data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +50 -0
- data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +45 -0
- data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +60 -0
- data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +56 -0
- data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +40 -0
- data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +59 -0
- data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +55 -0
- data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +40 -0
- data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +58 -0
- data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +55 -0
- data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +61 -0
- data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +60 -0
- data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +88 -0
- data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +40 -0
- data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +38 -0
- data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +42 -0
- data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +40 -0
- data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +40 -0
- data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +40 -0
- data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +43 -0
- data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +40 -0
- data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +45 -0
- data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +66 -0
- data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +65 -0
- data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +43 -0
- data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +62 -0
- data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +61 -0
- data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +65 -0
- data/spec/spec_tests/data/dns_seedlist_discovery/direct-connection-false.yml +10 -0
- data/spec/spec_tests/data/dns_seedlist_discovery/direct-connection-true.yml +5 -0
- data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-2.6.yml +215 -0
- data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.2.yml +58 -0
- data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.4.yml +95 -0
- data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-4.2.yml +36 -0
- data/spec/spec_tests/data/retryable_writes/bulkWrite-errorLabels.yml +77 -0
- data/spec/spec_tests/data/retryable_writes/bulkWrite-serverErrors.yml +37 -0
- data/spec/spec_tests/data/retryable_writes/deleteOne-errorLabels.yml +48 -0
- data/spec/spec_tests/data/retryable_writes/deleteOne-serverErrors.yml +22 -0
- data/spec/spec_tests/data/retryable_writes/findOneAndDelete-errorLabels.yml +49 -0
- data/spec/spec_tests/data/retryable_writes/findOneAndDelete-serverErrors.yml +23 -0
- data/spec/spec_tests/data/retryable_writes/findOneAndReplace-errorLabels.yml +52 -0
- data/spec/spec_tests/data/retryable_writes/findOneAndReplace-serverErrors.yml +25 -0
- data/spec/spec_tests/data/retryable_writes/findOneAndUpdate-errorLabels.yml +52 -0
- data/spec/spec_tests/data/retryable_writes/findOneAndUpdate-serverErrors.yml +24 -0
- data/spec/spec_tests/data/retryable_writes/insertMany-errorLabels.yml +54 -0
- data/spec/spec_tests/data/retryable_writes/insertMany-serverErrors.yml +24 -0
- data/spec/spec_tests/data/retryable_writes/insertOne-errorLabels.yml +44 -0
- data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +69 -0
- data/spec/spec_tests/data/retryable_writes/replaceOne-errorLabels.yml +53 -0
- data/spec/spec_tests/data/retryable_writes/replaceOne-serverErrors.yml +23 -0
- data/spec/spec_tests/data/retryable_writes/updateOne-errorLabels.yml +53 -0
- data/spec/spec_tests/data/retryable_writes/updateOne-serverErrors.yml +23 -0
- data/spec/spec_tests/data/sdam/errors/error_handling_handshake.yml +54 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-network-error.yml +46 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-network-timeout-error.yml +37 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.yml +60 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.yml +60 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMaster.yml +60 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMasterNoSlaveOk.yml +60 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMasterOrSecondary.yml +60 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.yml +60 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-ShutdownInProgress.yml +60 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.yml +51 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.yml +51 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMaster.yml +51 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMasterNoSlaveOk.yml +51 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMasterOrSecondary.yml +51 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.yml +51 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-ShutdownInProgress.yml +51 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.yml +60 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.yml +60 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMaster.yml +60 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMasterNoSlaveOk.yml +60 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMasterOrSecondary.yml +60 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.yml +60 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.yml +60 -0
- data/spec/spec_tests/data/sdam/errors/post-42-InterruptedAtShutdown.yml +46 -0
- data/spec/spec_tests/data/sdam/errors/post-42-InterruptedDueToReplStateChange.yml +46 -0
- data/spec/spec_tests/data/sdam/errors/post-42-NotMaster.yml +46 -0
- data/spec/spec_tests/data/sdam/errors/post-42-NotMasterNoSlaveOk.yml +46 -0
- data/spec/spec_tests/data/sdam/errors/post-42-NotMasterOrSecondary.yml +46 -0
- data/spec/spec_tests/data/sdam/errors/post-42-PrimarySteppedDown.yml +46 -0
- data/spec/spec_tests/data/sdam/errors/post-42-ShutdownInProgress.yml +46 -0
- data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedAtShutdown.yml +46 -0
- data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedDueToReplStateChange.yml +46 -0
- data/spec/spec_tests/data/sdam/errors/pre-42-NotMaster.yml +46 -0
- data/spec/spec_tests/data/sdam/errors/pre-42-NotMasterNoSlaveOk.yml +46 -0
- data/spec/spec_tests/data/sdam/errors/pre-42-NotMasterOrSecondary.yml +46 -0
- data/spec/spec_tests/data/sdam/errors/pre-42-PrimarySteppedDown.yml +46 -0
- data/spec/spec_tests/data/sdam/errors/pre-42-ShutdownInProgress.yml +46 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedAtShutdown.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedDueToReplStateChange.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-NotMaster.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-NotMasterNoSlaveOk.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-NotMasterOrSecondary.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-PrimarySteppedDown.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-ShutdownInProgress.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMaster.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMasterNoSlaveOk.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMasterOrSecondary.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-network.yml +80 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-timeout.yml +80 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMaster.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMasterNoSlaveOk.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMasterOrSecondary.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.yml +89 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-network.yml +80 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-timeout.yml +80 -0
- data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedAtShutdown.yml +64 -0
- data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedDueToReplStateChange.yml +64 -0
- data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMaster.yml +64 -0
- data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMasterNoSlaveOk.yml +64 -0
- data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMasterOrSecondary.yml +64 -0
- data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-PrimarySteppedDown.yml +64 -0
- data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-ShutdownInProgress.yml +64 -0
- data/spec/spec_tests/data/sdam/rs/compatible.yml +2 -0
- data/spec/spec_tests/data/sdam/rs/compatible_unknown.yml +2 -0
- data/spec/spec_tests/data/sdam/rs/discover_arbiters.yml +2 -2
- data/spec/spec_tests/data/sdam/rs/discover_arbiters_replicaset.yml +43 -0
- data/spec/spec_tests/data/sdam/rs/discover_ghost.yml +35 -0
- data/spec/spec_tests/data/sdam/rs/{ghost_discovered.yml → discover_ghost_replicaset.yml} +1 -1
- data/spec/spec_tests/data/sdam/rs/discover_hidden.yml +50 -0
- data/spec/spec_tests/data/sdam/rs/discover_hidden_replicaset.yml +50 -0
- data/spec/spec_tests/data/sdam/rs/discover_passives.yml +2 -2
- data/spec/spec_tests/data/sdam/rs/discover_passives_replicaset.yml +81 -0
- data/spec/spec_tests/data/sdam/rs/discover_primary.yml +2 -2
- data/spec/spec_tests/data/sdam/rs/discover_primary_replicaset.yml +42 -0
- data/spec/spec_tests/data/sdam/rs/discover_rsother.yml +49 -0
- data/spec/spec_tests/data/sdam/rs/{rsother_discovered.yml → discover_rsother_replicaset.yml} +1 -1
- data/spec/spec_tests/data/sdam/rs/discover_secondary.yml +2 -2
- data/spec/spec_tests/data/sdam/rs/discover_secondary_replicaset.yml +43 -0
- data/spec/spec_tests/data/sdam/rs/incompatible_arbiter.yml +2 -0
- data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +2 -0
- data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +2 -0
- data/spec/spec_tests/data/sdam/rs/primary_mismatched_me.yml +23 -27
- data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +79 -55
- data/spec/spec_tests/data/sdam/rs/replicaset_rsnp.yml +20 -0
- data/spec/spec_tests/data/sdam/rs/secondary_mismatched_me.yml +3 -2
- data/spec/spec_tests/data/sdam/rs/too_new.yml +2 -0
- data/spec/spec_tests/data/sdam/rs/topology_version_equal.yml +66 -0
- data/spec/spec_tests/data/sdam/rs/topology_version_greater.yml +189 -0
- data/spec/spec_tests/data/sdam/rs/topology_version_less.yml +62 -0
- data/spec/spec_tests/data/sdam/sharded/discover_single_mongos.yml +23 -0
- data/spec/spec_tests/data/sdam/single/direct_connection_external_ip.yml +1 -1
- data/spec/spec_tests/data/sdam/single/direct_connection_mongos.yml +2 -2
- data/spec/spec_tests/data/sdam/single/direct_connection_replicaset.yml +22 -0
- data/spec/spec_tests/data/sdam/single/direct_connection_rsarbiter.yml +2 -2
- data/spec/spec_tests/data/sdam/single/direct_connection_rsprimary.yml +2 -2
- data/spec/spec_tests/data/sdam/single/direct_connection_rssecondary.yml +2 -2
- data/spec/spec_tests/data/sdam/single/direct_connection_slave.yml +1 -1
- data/spec/spec_tests/data/sdam/single/direct_connection_standalone.yml +2 -2
- data/spec/spec_tests/data/sdam/single/{unavailable_seed.yml → direct_connection_unavailable_seed.yml} +2 -2
- data/spec/spec_tests/data/sdam/single/direct_connection_wrong_set_name.yml +38 -0
- data/spec/spec_tests/data/sdam/single/discover_standalone.yml +34 -0
- data/spec/spec_tests/data/sdam/single/discover_unavailable_seed.yml +28 -0
- data/spec/spec_tests/data/sdam/single/too_old_then_upgraded.yml +46 -0
- data/spec/spec_tests/data/transactions/create-collection.yml +131 -0
- data/spec/spec_tests/data/transactions/create-index.yml +152 -0
- data/spec/spec_tests/data/transactions/error-labels.yml +87 -21
- data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -0
- data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +124 -0
- data/spec/spec_tests/data/transactions/retryable-abort.yml +17 -2
- data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +132 -0
- data/spec/spec_tests/data/transactions/retryable-commit.yml +24 -9
- data/spec/spec_tests/data/uri_options/connection-options.yml +43 -0
- data/spec/spec_tests/data/uri_options/ruby-auth-options.yml +12 -0
- data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +57 -0
- data/spec/spec_tests/dns_seedlist_discovery_spec.rb +3 -1
- data/spec/spec_tests/gridfs_spec.rb +2 -0
- data/spec/spec_tests/max_staleness_spec.rb +3 -1
- data/spec/spec_tests/read_write_concern_connection_string_spec.rb +2 -0
- data/spec/spec_tests/read_write_concern_operaton_spec.rb +10 -0
- data/spec/spec_tests/retryable_reads_spec.rb +2 -0
- data/spec/spec_tests/retryable_writes_spec.rb +8 -1
- data/spec/spec_tests/sdam_monitoring_spec.rb +3 -1
- data/spec/spec_tests/sdam_spec.rb +70 -1
- data/spec/spec_tests/server_selection_rtt_spec.rb +2 -0
- data/spec/spec_tests/server_selection_spec.rb +2 -0
- data/spec/spec_tests/transactions_api_spec.rb +5 -0
- data/spec/spec_tests/transactions_spec.rb +5 -0
- data/spec/spec_tests/uri_options_spec.rb +2 -0
- data/spec/stress/cleanup_spec.rb +43 -0
- data/spec/stress/connection_pool_stress_spec.rb +1 -5
- data/spec/stress/connection_pool_timing_spec.rb +3 -6
- data/spec/stress/fork_reconnect_stress_spec.rb +109 -0
- data/spec/support/authorization.rb +1 -11
- data/spec/support/aws_utils.rb +62 -0
- data/spec/support/aws_utils/base.rb +134 -0
- data/spec/support/aws_utils/inspector.rb +224 -0
- data/spec/support/aws_utils/orchestrator.rb +370 -0
- data/spec/support/aws_utils/provisioner.rb +360 -0
- data/spec/support/background_thread_registry.rb +6 -2
- data/spec/support/client_registry.rb +5 -24
- data/spec/support/cluster_config.rb +1 -0
- data/spec/support/common_shortcuts.rb +43 -0
- data/spec/support/constraints.rb +27 -7
- data/spec/support/crypt.rb +1 -1
- data/spec/support/event_subscriber.rb +94 -84
- data/spec/support/lite_constraints.rb +47 -0
- data/spec/support/shared/scram_conversation.rb +100 -0
- data/spec/support/shared/server_selector.rb +81 -1
- data/spec/support/shared/session.rb +29 -21
- data/spec/support/spec_config.rb +39 -9
- data/spec/support/spec_setup.rb +8 -4
- data/spec/support/utils.rb +115 -24
- metadata +1134 -744
- metadata.gz.sig +0 -0
- data/lib/mongo/server/connectable.rb +0 -107
- data/spec/integration/bulk_write_spec.rb +0 -19
- data/spec/integration/grid_fs_bucket_spec.rb +0 -48
- data/spec/integration/zlib_compression_spec.rb +0 -25
- data/spec/runners/change_streams.rb +0 -262
- data/spec/runners/change_streams/operation.rb +0 -89
- data/spec/spec_tests/data/sdam/sharded/ruby_discovered_single_mongos.yml +0 -27
data/spec/mongo/auth_spec.rb
CHANGED
@@ -11,7 +11,7 @@ describe Mongo::Auth do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
let(:cr) do
|
14
|
-
described_class.get(user)
|
14
|
+
described_class.get(user, double('connection'))
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'returns CR' do
|
@@ -26,7 +26,7 @@ describe Mongo::Auth do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
let(:x509) do
|
29
|
-
described_class.get(user)
|
29
|
+
described_class.get(user, double('connection'))
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'returns X509' do
|
@@ -41,7 +41,7 @@ describe Mongo::Auth do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
let(:ldap) do
|
44
|
-
described_class.get(user)
|
44
|
+
described_class.get(user, double('connection'))
|
45
45
|
end
|
46
46
|
|
47
47
|
it 'returns LDAP' do
|
@@ -57,7 +57,7 @@ describe Mongo::Auth do
|
|
57
57
|
|
58
58
|
it 'raises an error' do
|
59
59
|
expect {
|
60
|
-
described_class.get(user)
|
60
|
+
described_class.get(user, double('connection'))
|
61
61
|
}.to raise_error(Mongo::Auth::InvalidMechanism)
|
62
62
|
end
|
63
63
|
end
|
@@ -235,6 +235,44 @@ describe Mongo::BulkWrite do
|
|
235
235
|
expect(authorized_collection.find(_id: 0).count).to eq(0)
|
236
236
|
end
|
237
237
|
|
238
|
+
context 'when the write has specified a hint option' do
|
239
|
+
let(:requests) do
|
240
|
+
[{
|
241
|
+
delete_one: {
|
242
|
+
filter: { _id: 1 },
|
243
|
+
hint: '_id_',
|
244
|
+
}
|
245
|
+
}]
|
246
|
+
end
|
247
|
+
|
248
|
+
context 'with unacknowledged write concern' do
|
249
|
+
let(:bulk_write) do
|
250
|
+
described_class.new(
|
251
|
+
collection,
|
252
|
+
requests,
|
253
|
+
options.merge(write_concern: { w: 0 })
|
254
|
+
)
|
255
|
+
end
|
256
|
+
|
257
|
+
it 'raises a client-side error' do
|
258
|
+
expect do
|
259
|
+
bulk_write.execute
|
260
|
+
end.to raise_error(Mongo::Error::UnsupportedOption, /The hint option cannot be specified on an unacknowledged write operation/)
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
264
|
+
# Functionality on more recent servers is sufficiently covered by spec tests.
|
265
|
+
context 'on server versions < 3.4' do
|
266
|
+
max_server_fcv '3.2'
|
267
|
+
|
268
|
+
it 'raises a client-side error' do
|
269
|
+
expect do
|
270
|
+
bulk_write.execute
|
271
|
+
end.to raise_error(Mongo::Error::UnsupportedOption, /The MongoDB server handling this request does not support the hint option on this command./)
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
238
276
|
context 'when a session is provided' do
|
239
277
|
|
240
278
|
let(:operation) do
|
@@ -348,6 +386,44 @@ describe Mongo::BulkWrite do
|
|
348
386
|
end
|
349
387
|
|
350
388
|
context 'when bulk executing update_one' do
|
389
|
+
context 'when the write has specified a hint option' do
|
390
|
+
let(:requests) do
|
391
|
+
[{
|
392
|
+
update_one: {
|
393
|
+
filter: { _id: 1 },
|
394
|
+
update: { '$set' => { 'x.$[i].y' => 5 } },
|
395
|
+
hint: '_id_',
|
396
|
+
}
|
397
|
+
}]
|
398
|
+
end
|
399
|
+
|
400
|
+
# Functionality on more recent servers is sufficiently covered by spec tests.
|
401
|
+
context 'on server versions < 3.4' do
|
402
|
+
max_server_fcv '3.2'
|
403
|
+
|
404
|
+
it 'raises a client-side error' do
|
405
|
+
expect do
|
406
|
+
bulk_write.execute
|
407
|
+
end.to raise_error(Mongo::Error::UnsupportedOption, /The MongoDB server handling this request does not support the hint option on this command./)
|
408
|
+
end
|
409
|
+
end
|
410
|
+
|
411
|
+
context 'with unacknowledged write concern' do
|
412
|
+
let(:bulk_write) do
|
413
|
+
described_class.new(
|
414
|
+
collection,
|
415
|
+
requests,
|
416
|
+
options.merge(write_concern: { w: 0 })
|
417
|
+
)
|
418
|
+
end
|
419
|
+
|
420
|
+
it 'raises a client-side error' do
|
421
|
+
expect do
|
422
|
+
bulk_write.execute
|
423
|
+
end.to raise_error(Mongo::Error::UnsupportedOption, /The hint option cannot be specified on an unacknowledged write operation/)
|
424
|
+
end
|
425
|
+
end
|
426
|
+
end
|
351
427
|
|
352
428
|
context 'when the write has specified arrayFilters' do
|
353
429
|
|
@@ -392,6 +468,45 @@ describe Mongo::BulkWrite do
|
|
392
468
|
end
|
393
469
|
|
394
470
|
context 'when bulk executing update_many' do
|
471
|
+
context 'when the write has specified a hint option' do
|
472
|
+
let(:requests) do
|
473
|
+
[{
|
474
|
+
update_many: {
|
475
|
+
filter: { '$or' => [{ _id: 1 }, { _id: 2 }]},
|
476
|
+
update: { '$set' => { 'x.$[i].y' => 5 } },
|
477
|
+
hint: '_id_',
|
478
|
+
}
|
479
|
+
}]
|
480
|
+
end
|
481
|
+
|
482
|
+
# Functionality on more recent servers is sufficiently covered by spec tests.
|
483
|
+
context 'on server versions < 3.4' do
|
484
|
+
max_server_fcv '3.2'
|
485
|
+
|
486
|
+
it 'raises a client-side error' do
|
487
|
+
expect do
|
488
|
+
bulk_write.execute
|
489
|
+
end.to raise_error(Mongo::Error::UnsupportedOption, /The MongoDB server handling this request does not support the hint option on this command./)
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
493
|
+
context 'with unacknowledged write concern' do
|
494
|
+
let(:bulk_write) do
|
495
|
+
described_class.new(
|
496
|
+
collection,
|
497
|
+
requests,
|
498
|
+
options.merge(write_concern: { w: 0 })
|
499
|
+
)
|
500
|
+
end
|
501
|
+
|
502
|
+
it 'raises a client-side error' do
|
503
|
+
expect do
|
504
|
+
bulk_write.execute
|
505
|
+
end.to raise_error(Mongo::Error::UnsupportedOption, /The hint option cannot be specified on an unacknowledged write operation/)
|
506
|
+
end
|
507
|
+
end
|
508
|
+
end
|
509
|
+
|
395
510
|
|
396
511
|
context 'when the write has specified arrayFilters' do
|
397
512
|
|
@@ -639,6 +754,44 @@ describe Mongo::BulkWrite do
|
|
639
754
|
expect(authorized_collection.find(_id: 0).count).to eq(0)
|
640
755
|
end
|
641
756
|
|
757
|
+
context 'when the write has specified a hint option' do
|
758
|
+
let(:requests) do
|
759
|
+
[{
|
760
|
+
delete_many: {
|
761
|
+
filter: { _id: 1 },
|
762
|
+
hint: '_id_',
|
763
|
+
}
|
764
|
+
}]
|
765
|
+
end
|
766
|
+
|
767
|
+
# Functionality on more recent servers is sufficiently covered by spec tests.
|
768
|
+
context 'on server versions < 3.4' do
|
769
|
+
max_server_fcv '3.2'
|
770
|
+
|
771
|
+
it 'raises a client-side error' do
|
772
|
+
expect do
|
773
|
+
bulk_write.execute
|
774
|
+
end.to raise_error(Mongo::Error::UnsupportedOption, /The MongoDB server handling this request does not support the hint option on this command./)
|
775
|
+
end
|
776
|
+
end
|
777
|
+
|
778
|
+
context 'with unacknowledged write concern' do
|
779
|
+
let(:bulk_write) do
|
780
|
+
described_class.new(
|
781
|
+
collection,
|
782
|
+
requests,
|
783
|
+
options.merge(write_concern: { w: 0 })
|
784
|
+
)
|
785
|
+
end
|
786
|
+
|
787
|
+
it 'raises a client-side error' do
|
788
|
+
expect do
|
789
|
+
bulk_write.execute
|
790
|
+
end.to raise_error(Mongo::Error::UnsupportedOption, /The hint option cannot be specified on an unacknowledged write operation/)
|
791
|
+
end
|
792
|
+
end
|
793
|
+
end
|
794
|
+
|
642
795
|
context 'when a session is provided' do
|
643
796
|
|
644
797
|
let(:operation) do
|
@@ -918,6 +1071,45 @@ describe Mongo::BulkWrite do
|
|
918
1071
|
expect(authorized_collection.find(_id: 0).first[:name]).to eq('test')
|
919
1072
|
end
|
920
1073
|
|
1074
|
+
context 'when a hint option is provided' do
|
1075
|
+
let(:requests) do
|
1076
|
+
[{
|
1077
|
+
replace_one: {
|
1078
|
+
filter: { _id: 0 },
|
1079
|
+
replacements: { name: 'test' },
|
1080
|
+
hint: '_id_'
|
1081
|
+
}
|
1082
|
+
}]
|
1083
|
+
end
|
1084
|
+
|
1085
|
+
# Functionality on more recent servers is sufficiently covered by spec tests.
|
1086
|
+
context 'on server versions < 3.4' do
|
1087
|
+
max_server_fcv '3.2'
|
1088
|
+
|
1089
|
+
it 'raises a client-side error' do
|
1090
|
+
expect do
|
1091
|
+
bulk_write.execute
|
1092
|
+
end.to raise_error(Mongo::Error::UnsupportedOption, /The MongoDB server handling this request does not support the hint option on this command./)
|
1093
|
+
end
|
1094
|
+
end
|
1095
|
+
|
1096
|
+
context 'with unacknowledged write concern' do
|
1097
|
+
let(:bulk_write) do
|
1098
|
+
described_class.new(
|
1099
|
+
collection,
|
1100
|
+
requests,
|
1101
|
+
options.merge(write_concern: { w: 0 })
|
1102
|
+
)
|
1103
|
+
end
|
1104
|
+
|
1105
|
+
it 'raises a client-side error' do
|
1106
|
+
expect do
|
1107
|
+
bulk_write.execute
|
1108
|
+
end.to raise_error(Mongo::Error::UnsupportedOption, /The hint option cannot be specified on an unacknowledged write operation/)
|
1109
|
+
end
|
1110
|
+
end
|
1111
|
+
end
|
1112
|
+
|
921
1113
|
context 'when a session is provided' do
|
922
1114
|
|
923
1115
|
let(:operation) do
|
@@ -1141,13 +1333,17 @@ describe Mongo::BulkWrite do
|
|
1141
1333
|
end
|
1142
1334
|
|
1143
1335
|
context 'when the number of updates exceeds the max batch size' do
|
1336
|
+
# Test uses doubles for server descriptions, doubles are
|
1337
|
+
# incompatible with freezing which linting does for descriptions
|
1338
|
+
skip_if_linting
|
1144
1339
|
|
1145
1340
|
let(:batch_size) do
|
1146
1341
|
11
|
1147
1342
|
end
|
1148
1343
|
|
1149
1344
|
before do
|
1150
|
-
|
1345
|
+
allow_any_instance_of(Mongo::Server::Description).to \
|
1346
|
+
receive(:max_write_batch_size).and_return(batch_size - 1)
|
1151
1347
|
end
|
1152
1348
|
|
1153
1349
|
let(:requests) do
|
@@ -1814,13 +2010,21 @@ describe Mongo::BulkWrite do
|
|
1814
2010
|
end
|
1815
2011
|
|
1816
2012
|
context 'when the operations need to be split' do
|
2013
|
+
# Test uses doubles for server descriptions, doubles are
|
2014
|
+
# incompatible with freezing which linting does for descriptions
|
2015
|
+
skip_if_linting
|
1817
2016
|
|
1818
2017
|
let(:batch_size) do
|
1819
2018
|
11
|
1820
2019
|
end
|
1821
2020
|
|
2021
|
+
let(:connection) do
|
2022
|
+
server = client.cluster.next_primary
|
2023
|
+
end
|
2024
|
+
|
1822
2025
|
before do
|
1823
|
-
|
2026
|
+
allow_any_instance_of(Mongo::Server::Description).to \
|
2027
|
+
receive(:max_write_batch_size).and_return(batch_size - 1)
|
1824
2028
|
end
|
1825
2029
|
|
1826
2030
|
context 'when a write error occurs' do
|
@@ -3,64 +3,9 @@ require 'spec_helper'
|
|
3
3
|
describe Mongo::Client do
|
4
4
|
clean_slate
|
5
5
|
|
6
|
-
|
7
|
-
describe 'options' do
|
8
|
-
describe 'read' do
|
9
|
-
[
|
10
|
-
:primary, :primary_preferred, :secondary, :secondary_preferred, :nearest
|
11
|
-
].each do |sym|
|
12
|
-
it "accepts #{sym} as symbol" do
|
13
|
-
client = new_local_client_nmio(['127.0.0.1:27017'],
|
14
|
-
:read => {:mode => sym})
|
15
|
-
# the key got converted to a string here
|
16
|
-
expect(client.read_preference).to eq({'mode' => sym})
|
17
|
-
end
|
18
|
-
|
19
|
-
# string keys are not documented as being allowed
|
20
|
-
# but the code accepts them
|
21
|
-
it "accepts #{sym} as string" do
|
22
|
-
client = new_local_client_nmio(['127.0.0.1:27017'],
|
23
|
-
:read => {:mode => sym.to_s})
|
24
|
-
# the key got converted to a string here
|
25
|
-
# the value remains a string
|
26
|
-
expect(client.read_preference).to eq({'mode' => sym.to_s})
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context 'when not linting' do
|
31
|
-
skip_if_linting
|
32
|
-
|
33
|
-
it 'rejects bogus read preference as symbol' do
|
34
|
-
expect do
|
35
|
-
client = new_local_client_nmio(['127.0.0.1:27017'],
|
36
|
-
:read => {:mode => :bogus})
|
37
|
-
end.to raise_error(Mongo::Error::InvalidReadOption, 'Invalid read option: {"mode"=>:bogus}: mode bogus is not one of recognized modes')
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'rejects bogus read preference as string' do
|
41
|
-
expect do
|
42
|
-
client = new_local_client_nmio(['127.0.0.1:27017'],
|
43
|
-
:read => {:mode => 'bogus'})
|
44
|
-
end.to raise_error(Mongo::Error::InvalidReadOption, 'Invalid read option: {"mode"=>"bogus"}: mode bogus is not one of recognized modes')
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'rejects read option specified as a string' do
|
48
|
-
expect do
|
49
|
-
client = new_local_client_nmio(['127.0.0.1:27017'],
|
50
|
-
:read => 'primary')
|
51
|
-
end.to raise_error(Mongo::Error::InvalidReadOption, 'Invalid read option: primary: must be a hash')
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'rejects read option specified as a symbol' do
|
55
|
-
expect do
|
56
|
-
client = new_local_client_nmio(['127.0.0.1:27017'],
|
57
|
-
:read => :primary)
|
58
|
-
end.to raise_error(Mongo::Error::InvalidReadOption, 'Invalid read option: primary: must be a hash')
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
6
|
+
let(:subscriber) { EventSubscriber.new }
|
63
7
|
|
8
|
+
describe '.new' do
|
64
9
|
context 'with scan: false' do
|
65
10
|
it 'does not perform i/o' do
|
66
11
|
allow_any_instance_of(Mongo::Server::Monitor).to receive(:run!)
|
@@ -447,7 +392,7 @@ describe Mongo::Client do
|
|
447
392
|
it 'does not use compression for authentication messages' do
|
448
393
|
expect(Mongo::Protocol::Compressed).not_to receive(:new)
|
449
394
|
client.cluster.next_primary.send(:with_connection) do |conn|
|
450
|
-
conn.
|
395
|
+
conn.connect!
|
451
396
|
end
|
452
397
|
end
|
453
398
|
end
|
@@ -800,16 +745,38 @@ describe Mongo::Client do
|
|
800
745
|
new_local_client_nmio(['127.0.0.1:27017'])
|
801
746
|
end
|
802
747
|
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
748
|
+
context 'mri' do
|
749
|
+
only_mri
|
750
|
+
|
751
|
+
let(:platform_string) do
|
752
|
+
[
|
753
|
+
"Ruby #{RUBY_VERSION}",
|
754
|
+
RUBY_PLATFORM,
|
755
|
+
RbConfig::CONFIG['build']
|
756
|
+
].join(', ')
|
757
|
+
end
|
758
|
+
|
759
|
+
it 'does not include the platform info in the app metadata' do
|
760
|
+
expect(app_metadata.send(:full_client_document)[:platform]).to eq(platform_string)
|
761
|
+
end
|
809
762
|
end
|
810
763
|
|
811
|
-
|
812
|
-
|
764
|
+
context 'jruby' do
|
765
|
+
require_jruby
|
766
|
+
|
767
|
+
let(:platform_string) do
|
768
|
+
[
|
769
|
+
"JRuby #{JRUBY_VERSION}",
|
770
|
+
"like Ruby #{RUBY_VERSION}",
|
771
|
+
RUBY_PLATFORM,
|
772
|
+
"JVM #{java.lang.System.get_property('java.version')}",
|
773
|
+
RbConfig::CONFIG['build']
|
774
|
+
].join(', ')
|
775
|
+
end
|
776
|
+
|
777
|
+
it 'does not include the platform info in the app metadata' do
|
778
|
+
expect(app_metadata.send(:full_client_document)[:platform]).to eq(platform_string)
|
779
|
+
end
|
813
780
|
end
|
814
781
|
end
|
815
782
|
end
|
@@ -862,7 +829,7 @@ describe Mongo::Client do
|
|
862
829
|
end
|
863
830
|
end
|
864
831
|
|
865
|
-
context 'when options are provided' do
|
832
|
+
context 'when URI options are provided' do
|
866
833
|
|
867
834
|
let!(:uri) do
|
868
835
|
'mongodb://127.0.0.1:27017/testdb?w=3'
|
@@ -1080,11 +1047,166 @@ describe Mongo::Client do
|
|
1080
1047
|
expect(client.cluster.topology).to be_a(Mongo::Cluster::Topology::ReplicaSetNoPrimary)
|
1081
1048
|
end
|
1082
1049
|
end
|
1050
|
+
end
|
1051
|
+
|
1052
|
+
context 'when Ruby options are provided' do
|
1053
|
+
let(:client) do
|
1054
|
+
new_local_client_nmio(['127.0.0.1:27017'], options)
|
1055
|
+
end
|
1056
|
+
|
1057
|
+
describe 'connection option conflicts' do
|
1058
|
+
context 'direct_connection: true and multiple seeds' do
|
1059
|
+
let(:client) do
|
1060
|
+
new_local_client_nmio(['127.0.0.1:27017', '127.0.0.2:27017'],
|
1061
|
+
direct_connection: true)
|
1062
|
+
end
|
1063
|
+
|
1064
|
+
it 'is rejected' do
|
1065
|
+
lambda do
|
1066
|
+
client
|
1067
|
+
end.should raise_error(ArgumentError, /direct_connection=true cannot be used with multiple seeds/)
|
1068
|
+
end
|
1069
|
+
end
|
1070
|
+
|
1071
|
+
context 'direct_connection: true and connect: :direct' do
|
1072
|
+
let(:options) do
|
1073
|
+
{direct_connection: true, connect: :direct}
|
1074
|
+
end
|
1075
|
+
|
1076
|
+
it 'is accepted' do
|
1077
|
+
client.options[:direct_connection].should be true
|
1078
|
+
client.options[:connect].should be :direct
|
1079
|
+
end
|
1080
|
+
end
|
1081
|
+
|
1082
|
+
context 'direct_connection: true and connect: :replica_set' do
|
1083
|
+
let(:options) do
|
1084
|
+
{direct_connection: true, connect: :replica_set}
|
1085
|
+
end
|
1086
|
+
|
1087
|
+
it 'is rejected' do
|
1088
|
+
lambda do
|
1089
|
+
client
|
1090
|
+
end.should raise_error(ArgumentError, /Conflicting client options: direct_connection=true and connect=replica_set/)
|
1091
|
+
end
|
1092
|
+
end
|
1093
|
+
|
1094
|
+
context 'direct_connection: true and connect: :sharded' do
|
1095
|
+
let(:options) do
|
1096
|
+
{direct_connection: true, connect: :sharded}
|
1097
|
+
end
|
1098
|
+
|
1099
|
+
it 'is rejected' do
|
1100
|
+
lambda do
|
1101
|
+
client
|
1102
|
+
end.should raise_error(ArgumentError, /Conflicting client options: direct_connection=true and connect=sharded/)
|
1103
|
+
end
|
1104
|
+
end
|
1105
|
+
|
1106
|
+
context 'direct_connection: false and connect: :direct' do
|
1107
|
+
let(:options) do
|
1108
|
+
{direct_connection: false, connect: :direct}
|
1109
|
+
end
|
1110
|
+
|
1111
|
+
it 'is rejected' do
|
1112
|
+
lambda do
|
1113
|
+
client
|
1114
|
+
end.should raise_error(ArgumentError, /Conflicting client options: direct_connection=false and connect=direct/)
|
1115
|
+
end
|
1116
|
+
end
|
1117
|
+
|
1118
|
+
context 'direct_connection: false and connect: :replica_set' do
|
1119
|
+
let(:options) do
|
1120
|
+
{direct_connection: false, connect: :replica_set, replica_set: 'foo'}
|
1121
|
+
end
|
1122
|
+
|
1123
|
+
it 'is accepted' do
|
1124
|
+
client.options[:direct_connection].should be false
|
1125
|
+
client.options[:connect].should be :replica_set
|
1126
|
+
end
|
1127
|
+
end
|
1128
|
+
|
1129
|
+
context 'direct_connection: false and connect: :sharded' do
|
1130
|
+
let(:options) do
|
1131
|
+
{direct_connection: false, connect: :sharded}
|
1132
|
+
end
|
1133
|
+
|
1134
|
+
it 'is accepted' do
|
1135
|
+
client.options[:direct_connection].should be false
|
1136
|
+
client.options[:connect].should be :sharded
|
1137
|
+
end
|
1138
|
+
end
|
1139
|
+
end
|
1140
|
+
|
1141
|
+
describe ':read option' do
|
1142
|
+
[
|
1143
|
+
:primary, :primary_preferred, :secondary, :secondary_preferred, :nearest
|
1144
|
+
].each do |sym|
|
1145
|
+
describe "#{sym}" do
|
1146
|
+
context 'when given as symbol' do
|
1147
|
+
let(:options) do
|
1148
|
+
{read: {mode: sym}}
|
1149
|
+
end
|
1150
|
+
|
1151
|
+
it "is accepted" do
|
1152
|
+
# the key got converted to a string here
|
1153
|
+
expect(client.read_preference).to eq({'mode' => sym})
|
1154
|
+
end
|
1155
|
+
end
|
1156
|
+
|
1157
|
+
context 'when given as string' do
|
1158
|
+
let(:options) do
|
1159
|
+
{read: {mode: sym.to_s}}
|
1160
|
+
end
|
1161
|
+
|
1162
|
+
# string keys are not documented as being allowed
|
1163
|
+
# but the code accepts them
|
1164
|
+
it "is accepted" do
|
1165
|
+
# the key got converted to a string here
|
1166
|
+
# the value remains a string
|
1167
|
+
expect(client.read_preference).to eq({'mode' => sym.to_s})
|
1168
|
+
end
|
1169
|
+
end
|
1170
|
+
end
|
1171
|
+
end
|
1172
|
+
|
1173
|
+
context 'when not linting' do
|
1174
|
+
skip_if_linting
|
1175
|
+
|
1176
|
+
it 'rejects bogus read preference as symbol' do
|
1177
|
+
expect do
|
1178
|
+
client = new_local_client_nmio(['127.0.0.1:27017'],
|
1179
|
+
:read => {:mode => :bogus})
|
1180
|
+
end.to raise_error(Mongo::Error::InvalidReadOption, 'Invalid read option: {"mode"=>:bogus}: mode bogus is not one of recognized modes')
|
1181
|
+
end
|
1182
|
+
|
1183
|
+
it 'rejects bogus read preference as string' do
|
1184
|
+
expect do
|
1185
|
+
client = new_local_client_nmio(['127.0.0.1:27017'],
|
1186
|
+
:read => {:mode => 'bogus'})
|
1187
|
+
end.to raise_error(Mongo::Error::InvalidReadOption, 'Invalid read option: {"mode"=>"bogus"}: mode bogus is not one of recognized modes')
|
1188
|
+
end
|
1189
|
+
|
1190
|
+
it 'rejects read option specified as a string' do
|
1191
|
+
expect do
|
1192
|
+
client = new_local_client_nmio(['127.0.0.1:27017'],
|
1193
|
+
:read => 'primary')
|
1194
|
+
end.to raise_error(Mongo::Error::InvalidReadOption, 'Invalid read option: primary: must be a hash')
|
1195
|
+
end
|
1196
|
+
|
1197
|
+
it 'rejects read option specified as a symbol' do
|
1198
|
+
expect do
|
1199
|
+
client = new_local_client_nmio(['127.0.0.1:27017'],
|
1200
|
+
:read => :primary)
|
1201
|
+
end.to raise_error(Mongo::Error::InvalidReadOption, 'Invalid read option: primary: must be a hash')
|
1202
|
+
end
|
1203
|
+
end
|
1204
|
+
end
|
1083
1205
|
|
1084
1206
|
context 'when an invalid option is provided' do
|
1085
1207
|
|
1086
|
-
let(:
|
1087
|
-
|
1208
|
+
let(:options) do
|
1209
|
+
{ssl: false, invalid: :test}
|
1088
1210
|
end
|
1089
1211
|
|
1090
1212
|
it 'does not set the option' do
|
@@ -1104,8 +1226,8 @@ describe Mongo::Client do
|
|
1104
1226
|
=begin WriteConcern object support
|
1105
1227
|
context 'when write concern is provided via a WriteConcern object' do
|
1106
1228
|
|
1107
|
-
let(:
|
1108
|
-
|
1229
|
+
let(:options) do
|
1230
|
+
{write_concern: wc}
|
1109
1231
|
end
|
1110
1232
|
|
1111
1233
|
let(:wc) { Mongo::WriteConcern.get(w: 2) }
|
@@ -1133,7 +1255,7 @@ describe Mongo::Client do
|
|
1133
1255
|
|
1134
1256
|
it 'copies monitoring subscribers' do
|
1135
1257
|
monitoring.subscribers.clear
|
1136
|
-
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT,
|
1258
|
+
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
|
1137
1259
|
expect(monitoring.present_subscribers.length).to eq(1)
|
1138
1260
|
expect(monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(1)
|
1139
1261
|
|
@@ -1144,12 +1266,12 @@ describe Mongo::Client do
|
|
1144
1266
|
|
1145
1267
|
it 'does not change subscribers on original client' do
|
1146
1268
|
monitoring.subscribers.clear
|
1147
|
-
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT,
|
1269
|
+
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
|
1148
1270
|
expect(monitoring.present_subscribers.length).to eq(1)
|
1149
1271
|
expect(monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(1)
|
1150
1272
|
|
1151
|
-
new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT,
|
1152
|
-
new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT,
|
1273
|
+
new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
|
1274
|
+
new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
|
1153
1275
|
expect(new_monitoring.present_subscribers.length).to eq(1)
|
1154
1276
|
expect(new_monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(3)
|
1155
1277
|
# original client should not have gotten any of the new subscribers
|
@@ -1177,7 +1299,7 @@ describe Mongo::Client do
|
|
1177
1299
|
|
1178
1300
|
it 'resets monitoring subscribers' do
|
1179
1301
|
monitoring.subscribers.clear
|
1180
|
-
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT,
|
1302
|
+
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
|
1181
1303
|
expect(monitoring.present_subscribers.length).to eq(1)
|
1182
1304
|
expect(monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(1)
|
1183
1305
|
|
@@ -1190,12 +1312,12 @@ describe Mongo::Client do
|
|
1190
1312
|
|
1191
1313
|
it 'does not change subscribers on original client' do
|
1192
1314
|
monitoring.subscribers.clear
|
1193
|
-
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT,
|
1315
|
+
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
|
1194
1316
|
expect(monitoring.present_subscribers.length).to eq(1)
|
1195
1317
|
expect(monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(1)
|
1196
1318
|
|
1197
|
-
new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT,
|
1198
|
-
new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT,
|
1319
|
+
new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
|
1320
|
+
new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
|
1199
1321
|
# 7 default subscribers + heartbeat
|
1200
1322
|
expect(new_monitoring.present_subscribers.length).to eq(8)
|
1201
1323
|
# the heartbeat subscriber on the original client is not inherited
|
@@ -1299,6 +1421,73 @@ describe Mongo::Client do
|
|
1299
1421
|
end
|
1300
1422
|
end
|
1301
1423
|
|
1424
|
+
context 'when direct_connection option is given' do
|
1425
|
+
let(:client) do
|
1426
|
+
options = SpecConfig.instance.test_options
|
1427
|
+
options.delete(:connect)
|
1428
|
+
new_local_client(SpecConfig.instance.addresses, options)
|
1429
|
+
end
|
1430
|
+
|
1431
|
+
before do
|
1432
|
+
client.options[:direct_connection].should be nil
|
1433
|
+
end
|
1434
|
+
|
1435
|
+
let(:new_client) do
|
1436
|
+
client.with(new_options)
|
1437
|
+
end
|
1438
|
+
|
1439
|
+
context 'direct_connection set to false' do
|
1440
|
+
|
1441
|
+
let(:new_options) do
|
1442
|
+
{ direct_connection: false }
|
1443
|
+
end
|
1444
|
+
|
1445
|
+
it 'is accepted' do
|
1446
|
+
new_client.options[:direct_connection].should be false
|
1447
|
+
end
|
1448
|
+
end
|
1449
|
+
|
1450
|
+
context 'direct_connection set to true' do
|
1451
|
+
|
1452
|
+
let(:new_options) do
|
1453
|
+
{ direct_connection: true }
|
1454
|
+
end
|
1455
|
+
|
1456
|
+
context 'in single topology' do
|
1457
|
+
require_topology :single
|
1458
|
+
|
1459
|
+
|
1460
|
+
it 'is accepted' do
|
1461
|
+
new_client.options[:direct_connection].should be true
|
1462
|
+
new_client.cluster.topology.should be_a(Mongo::Cluster::Topology::Single)
|
1463
|
+
end
|
1464
|
+
end
|
1465
|
+
|
1466
|
+
context 'in replica set or sharded cluster topology' do
|
1467
|
+
require_topology :replica_set, :sharded
|
1468
|
+
|
1469
|
+
it 'is rejected' do
|
1470
|
+
lambda do
|
1471
|
+
new_client
|
1472
|
+
end.should raise_error(ArgumentError, /direct_connection=true cannot be used with topologies other than Single/)
|
1473
|
+
end
|
1474
|
+
|
1475
|
+
context 'when a new cluster is created' do
|
1476
|
+
|
1477
|
+
let(:new_options) do
|
1478
|
+
{ direct_connection: true, app_name: 'new-client' }
|
1479
|
+
end
|
1480
|
+
|
1481
|
+
it 'is rejected' do
|
1482
|
+
lambda do
|
1483
|
+
new_client
|
1484
|
+
end.should raise_error(ArgumentError, /direct_connection=true cannot be used with topologies other than Single/)
|
1485
|
+
end
|
1486
|
+
end
|
1487
|
+
end
|
1488
|
+
end
|
1489
|
+
end
|
1490
|
+
|
1302
1491
|
context 'when the write concern is not changed' do
|
1303
1492
|
|
1304
1493
|
let(:client) do
|
@@ -1571,7 +1760,6 @@ describe Mongo::Client do
|
|
1571
1760
|
# in #with, the consistent behavior is to never transfer sdam_proc to
|
1572
1761
|
# the new client.
|
1573
1762
|
context 'when sdam_proc is given on original client' do
|
1574
|
-
let(:subscriber) { EventSubscriber.new }
|
1575
1763
|
|
1576
1764
|
let(:sdam_proc) do
|
1577
1765
|
Proc.new do |client|
|
@@ -1579,25 +1767,41 @@ describe Mongo::Client do
|
|
1579
1767
|
end
|
1580
1768
|
end
|
1581
1769
|
|
1582
|
-
let(:
|
1770
|
+
let(:client) do
|
1771
|
+
new_local_client(SpecConfig.instance.addresses,
|
1772
|
+
SpecConfig.instance.test_options.merge(
|
1773
|
+
sdam_proc: sdam_proc,
|
1774
|
+
connect_timeout: 3.08, socket_timeout: 3.09,
|
1775
|
+
server_selection_timeout: 2.92,
|
1776
|
+
database: SpecConfig.instance.test_db))
|
1777
|
+
end
|
1778
|
+
|
1779
|
+
let(:new_client) do
|
1780
|
+
client.with(app_name: 'foo').tap do |new_client|
|
1781
|
+
new_client.cluster.should_not == client.cluster
|
1782
|
+
end
|
1783
|
+
end
|
1784
|
+
|
1785
|
+
before do
|
1786
|
+
client.cluster.next_primary
|
1787
|
+
events = subscriber.select_started_events(Mongo::Monitoring::Event::ServerHeartbeatStarted)
|
1788
|
+
events.length.should > 0
|
1789
|
+
end
|
1583
1790
|
|
1584
1791
|
it 'does not copy sdam_proc option to new client' do
|
1585
|
-
client = new_local_client_nmio(['a'], sdam_proc: sdam_proc)
|
1586
1792
|
expect(new_client.options[:sdam_proc]).to be nil
|
1587
1793
|
end
|
1588
1794
|
|
1589
1795
|
it 'does not notify subscribers set up by sdam_proc' do
|
1590
|
-
client = new_local_client(['a'], sdam_proc: sdam_proc,
|
1591
|
-
connect_timeout: 0.1, socket_timeout: 0.1,
|
1592
|
-
server_selection_timeout: 0.1)
|
1593
1796
|
expect(subscriber.started_events.length).to be > 0
|
1594
1797
|
subscriber.started_events.clear
|
1595
1798
|
|
1596
1799
|
# If this test takes longer than heartbeat interval,
|
1597
1800
|
# subscriber may receive events from the original client.
|
1598
1801
|
|
1599
|
-
new_client
|
1802
|
+
new_client.cluster.next_primary
|
1600
1803
|
expect(subscriber.started_events.length).to eq 0
|
1804
|
+
new_client.cluster.topology.class.should_not be Mongo::Cluster::Topology::Unknown
|
1601
1805
|
end
|
1602
1806
|
end
|
1603
1807
|
end
|