mongo 2.15.0 → 2.16.0.alpha1
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 +1 -1
- data/README.md +1 -1
- data/lib/mongo/bulk_write.rb +2 -2
- data/lib/mongo/client.rb +45 -5
- data/lib/mongo/cluster/periodic_executor.rb +4 -3
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +76 -43
- data/lib/mongo/cluster/sdam_flow.rb +9 -3
- data/lib/mongo/cluster/topology/base.rb +13 -9
- data/lib/mongo/cluster/topology/load_balanced.rb +102 -0
- data/lib/mongo/cluster/topology.rb +28 -8
- data/lib/mongo/cluster.rb +136 -51
- data/lib/mongo/collection/view/aggregation.rb +5 -10
- data/lib/mongo/collection/view/builder/aggregation.rb +6 -5
- data/lib/mongo/collection/view/builder/map_reduce.rb +12 -49
- data/lib/mongo/collection/view/builder.rb +0 -4
- data/lib/mongo/collection/view/iterable.rb +58 -24
- data/lib/mongo/collection/view/map_reduce.rb +39 -15
- data/lib/mongo/collection/view/readable.rb +60 -51
- data/lib/mongo/collection/view/writable.rb +178 -175
- data/lib/mongo/collection/view.rb +15 -21
- data/lib/mongo/collection.rb +13 -13
- data/lib/mongo/cursor/kill_spec.rb +38 -0
- data/lib/mongo/cursor.rb +72 -31
- data/lib/mongo/database/view.rb +1 -1
- data/lib/mongo/error/bad_load_balancer_target.rb +26 -0
- data/lib/mongo/error/missing_service_id.rb +26 -0
- data/lib/mongo/error/no_service_connection_available.rb +49 -0
- data/lib/mongo/error/notable.rb +7 -0
- data/lib/mongo/error.rb +3 -0
- data/lib/mongo/grid/fs_bucket.rb +21 -2
- data/lib/mongo/id.rb +7 -5
- data/lib/mongo/index/view.rb +22 -41
- data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +7 -4
- data/lib/mongo/monitoring/event/command_failed.rb +1 -1
- data/lib/mongo/monitoring/event/command_started.rb +2 -0
- data/lib/mongo/monitoring/publishable.rb +2 -2
- data/lib/mongo/operation/aggregate/command.rb +8 -0
- data/lib/mongo/operation/context.rb +19 -1
- data/lib/mongo/operation/count/command.rb +6 -0
- data/lib/mongo/operation/count/op_msg.rb +6 -0
- data/lib/mongo/operation/create/command.rb +7 -1
- data/lib/mongo/operation/create/op_msg.rb +7 -0
- data/lib/mongo/operation/create_index/command.rb +17 -1
- data/lib/mongo/operation/create_index/op_msg.rb +17 -4
- data/lib/mongo/operation/delete/command.rb +6 -3
- data/lib/mongo/operation/delete/legacy.rb +9 -2
- data/lib/mongo/operation/delete/op_msg.rb +8 -1
- data/lib/mongo/operation/distinct/command.rb +6 -0
- data/lib/mongo/operation/distinct/op_msg.rb +7 -0
- data/lib/mongo/operation/explain/command.rb +13 -1
- data/lib/mongo/operation/explain/legacy.rb +12 -5
- data/lib/mongo/operation/explain/op_msg.rb +9 -1
- data/lib/mongo/operation/find/builder/command.rb +110 -0
- data/lib/mongo/{collection/view → operation/find}/builder/flags.rb +10 -14
- data/lib/mongo/operation/find/builder/legacy.rb +123 -0
- data/lib/mongo/{collection/view → operation/find}/builder/modifiers.rb +31 -25
- data/lib/mongo/{cursor → operation/find}/builder.rb +4 -4
- data/lib/mongo/operation/find/command.rb +9 -0
- data/lib/mongo/operation/find/legacy.rb +10 -1
- data/lib/mongo/operation/find/op_msg.rb +12 -0
- data/lib/mongo/operation/find.rb +1 -0
- data/lib/mongo/operation/get_more/command.rb +1 -0
- data/lib/mongo/operation/get_more/command_builder.rb +38 -0
- data/lib/mongo/operation/get_more/op_msg.rb +1 -0
- data/lib/mongo/operation/get_more.rb +1 -0
- data/lib/mongo/operation/kill_cursors/command.rb +8 -0
- data/lib/mongo/operation/kill_cursors/command_builder.rb +35 -0
- data/lib/mongo/operation/kill_cursors/legacy.rb +2 -1
- data/lib/mongo/operation/kill_cursors/op_msg.rb +10 -0
- data/lib/mongo/operation/kill_cursors.rb +1 -0
- data/lib/mongo/operation/map_reduce/command.rb +8 -0
- data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
- data/lib/mongo/operation/shared/executable.rb +15 -1
- data/lib/mongo/operation/shared/polymorphic_operation.rb +1 -1
- data/lib/mongo/operation/shared/read_preference_supported.rb +3 -1
- data/lib/mongo/operation/shared/response_handling.rb +1 -0
- data/lib/mongo/operation/shared/sessions_supported.rb +12 -12
- data/lib/mongo/operation/shared/specifiable.rb +11 -29
- data/lib/mongo/operation/shared/validatable.rb +87 -0
- data/lib/mongo/operation/shared/write.rb +1 -1
- data/lib/mongo/operation/update/command.rb +6 -3
- data/lib/mongo/operation/update/legacy.rb +19 -11
- data/lib/mongo/operation/update/op_msg.rb +7 -4
- data/lib/mongo/operation/write_command/command.rb +51 -0
- data/lib/mongo/operation/write_command/op_msg.rb +43 -0
- data/lib/mongo/operation/write_command.rb +32 -0
- data/lib/mongo/operation.rb +10 -0
- data/lib/mongo/protocol/query.rb +35 -18
- data/lib/mongo/server/connection.rb +25 -3
- data/lib/mongo/server/connection_base.rb +12 -1
- data/lib/mongo/server/connection_common.rb +38 -1
- data/lib/mongo/server/connection_pool/generation_manager.rb +71 -0
- data/lib/mongo/server/connection_pool.rb +100 -27
- data/lib/mongo/server/description/features.rb +17 -16
- data/lib/mongo/server/description/load_balancer.rb +33 -0
- data/lib/mongo/server/description.rb +85 -6
- data/lib/mongo/server/monitor/connection.rb +5 -6
- data/lib/mongo/server/monitor.rb +2 -1
- data/lib/mongo/server/pending_connection.rb +47 -31
- data/lib/mongo/server/push_monitor.rb +6 -0
- data/lib/mongo/server.rb +73 -26
- data/lib/mongo/server_selector/base.rb +5 -1
- data/lib/mongo/session/session_pool.rb +11 -0
- data/lib/mongo/session.rb +21 -1
- data/lib/mongo/socket/ocsp_verifier.rb +6 -37
- data/lib/mongo/uri/options_mapper.rb +1 -0
- data/lib/mongo/uri/srv_protocol.rb +6 -8
- data/lib/mongo/uri.rb +18 -0
- data/lib/mongo/utils.rb +0 -7
- data/lib/mongo/version.rb +1 -1
- data/mongo.gemspec +1 -1
- data/spec/integration/auth_spec.rb +31 -1
- data/spec/integration/awaited_ismaster_spec.rb +1 -1
- data/spec/integration/bulk_write_spec.rb +1 -1
- data/spec/integration/change_stream_spec.rb +3 -3
- data/spec/integration/client_construction_spec.rb +54 -0
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +1 -1
- data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +1 -1
- data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +1 -1
- data/spec/integration/client_side_encryption/data_key_spec.rb +1 -1
- data/spec/integration/client_spec.rb +2 -0
- data/spec/integration/command_monitoring_spec.rb +1 -1
- data/spec/integration/command_spec.rb +1 -1
- data/spec/integration/connection_spec.rb +52 -35
- data/spec/integration/crud_spec.rb +174 -1
- data/spec/integration/cursor_pinning_spec.rb +121 -0
- data/spec/integration/cursor_reaping_spec.rb +8 -4
- data/spec/integration/fork_reconnect_spec.rb +1 -5
- data/spec/integration/get_more_spec.rb +1 -1
- data/spec/integration/heartbeat_events_spec.rb +1 -1
- data/spec/integration/map_reduce_spec.rb +77 -0
- data/spec/integration/query_cache_spec.rb +47 -2
- 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 +30 -12
- data/spec/integration/retryable_errors_spec.rb +1 -1
- data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
- data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
- data/spec/integration/sdam_error_handling_spec.rb +5 -3
- data/spec/integration/sdam_events_spec.rb +35 -19
- data/spec/integration/sdam_prose_spec.rb +1 -1
- data/spec/integration/server_monitor_spec.rb +1 -0
- data/spec/integration/server_selector_spec.rb +22 -5
- data/spec/integration/server_spec.rb +2 -0
- data/spec/integration/srv_monitoring_spec.rb +1 -1
- data/spec/integration/step_down_spec.rb +1 -1
- data/spec/integration/transaction_pinning_spec.rb +120 -0
- data/spec/integration/versioned_api_examples_spec.rb +45 -0
- data/spec/integration/x509_auth_spec.rb +1 -1
- data/spec/lite_spec_helper.rb +1 -2
- data/spec/mongo/address/unix_spec.rb +1 -0
- data/spec/mongo/auth/cr_spec.rb +2 -3
- data/spec/mongo/auth/ldap_spec.rb +2 -3
- data/spec/mongo/auth/scram_spec.rb +2 -3
- data/spec/mongo/auth/user/view_spec.rb +1 -1
- data/spec/mongo/auth/x509_spec.rb +2 -3
- data/spec/mongo/bulk_write_spec.rb +3 -3
- data/spec/mongo/client_construction_spec.rb +259 -28
- data/spec/mongo/client_spec.rb +6 -4
- data/spec/mongo/cluster/cursor_reaper_spec.rb +36 -21
- data/spec/mongo/cluster/periodic_executor_spec.rb +3 -1
- data/spec/mongo/cluster_spec.rb +44 -3
- data/spec/mongo/collection/view/aggregation_spec.rb +1 -1
- data/spec/mongo/collection/view/builder/find_command_spec.rb +4 -0
- data/spec/mongo/collection/view/builder/op_query_spec.rb +4 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +1 -1
- data/spec/mongo/collection_crud_spec.rb +7 -2
- data/spec/mongo/collection_ddl_spec.rb +1 -1
- data/spec/mongo/collection_spec.rb +1 -1
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +4 -0
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +4 -0
- data/spec/mongo/cursor_spec.rb +15 -5
- data/spec/mongo/database_spec.rb +15 -15
- data/spec/mongo/error/operation_failure_heavy_spec.rb +1 -1
- data/spec/mongo/grid/fs_bucket_spec.rb +18 -12
- data/spec/mongo/grid/stream/write_spec.rb +3 -9
- data/spec/mongo/grid/stream_spec.rb +1 -1
- data/spec/mongo/index/view_spec.rb +2 -2
- data/spec/mongo/operation/delete/op_msg_spec.rb +1 -1
- data/spec/mongo/{collection/view → operation/find}/builder/flags_spec.rb +2 -2
- data/spec/mongo/{collection/view → operation/find}/builder/modifiers_spec.rb +2 -2
- data/spec/mongo/operation/find/legacy_spec.rb +1 -0
- data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
- data/spec/mongo/operation/insert/op_msg_spec.rb +1 -1
- data/spec/mongo/operation/kill_cursors_spec.rb +4 -1
- data/spec/mongo/operation/read_preference_legacy_spec.rb +4 -0
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +2 -0
- data/spec/mongo/operation/update/bulk_spec.rb +1 -1
- data/spec/mongo/operation/update/op_msg_spec.rb +1 -1
- data/spec/mongo/query_cache_spec.rb +6 -2
- data/spec/mongo/server/connection_common_spec.rb +62 -11
- data/spec/mongo/server/connection_pool_spec.rb +73 -7
- data/spec/mongo/server/connection_spec.rb +138 -43
- data/spec/mongo/server/description_spec.rb +1 -1
- data/spec/mongo/server/monitor_spec.rb +4 -3
- data/spec/mongo/session/session_pool_spec.rb +42 -10
- data/spec/mongo/session_transaction_spec.rb +15 -30
- data/spec/mongo/socket/unix_spec.rb +1 -0
- data/spec/mongo/uri_option_parsing_spec.rb +38 -5
- data/spec/runners/change_streams/test.rb +1 -1
- data/spec/runners/cmap.rb +1 -1
- data/spec/runners/connection_string.rb +7 -3
- data/spec/runners/crud/operation.rb +5 -3
- data/spec/runners/crud/requirement.rb +1 -0
- data/spec/runners/crud.rb +1 -1
- data/spec/runners/sdam.rb +2 -1
- data/spec/runners/transactions/test.rb +2 -2
- data/spec/runners/unified/assertions.rb +2 -3
- data/spec/runners/unified/event_subscriber.rb +2 -2
- data/spec/runners/unified/test.rb +3 -0
- data/spec/runners/unified.rb +1 -1
- data/spec/shared/lib/mrss/constraints.rb +11 -5
- data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +17 -12
- data/spec/shared/share/Dockerfile.erb +2 -1
- data/spec/shared/shlib/server.sh +70 -20
- data/spec/spec_tests/change_streams_spec.rb +1 -1
- data/spec/spec_tests/cmap_spec.rb +4 -1
- data/spec/spec_tests/command_monitoring_spec.rb +2 -2
- data/spec/spec_tests/data/command_monitoring/find.yml +9 -9
- data/spec/spec_tests/data/crud/read/aggregate-collation.yml +2 -1
- data/spec/spec_tests/data/crud/read/aggregate-out.yml +1 -0
- data/spec/spec_tests/data/crud/read/count-collation.yml +2 -1
- data/spec/spec_tests/data/crud/read/distinct-collation.yml +2 -1
- data/spec/spec_tests/data/crud/read/find-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +3 -2
- data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +3 -2
- data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +3 -2
- data/spec/spec_tests/data/crud/write/updateMany-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/updateOne-collation.yml +2 -1
- data/spec/spec_tests/data/load_balancers/event-monitoring.yml +99 -0
- data/spec/spec_tests/data/load_balancers/lb-connection-establishment.yml +36 -0
- data/spec/spec_tests/data/load_balancers/non-lb-connection-establishment.yml +56 -0
- data/spec/spec_tests/data/load_balancers/server-selection.yml +50 -0
- data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/mapReduce.yml +3 -1
- data/spec/spec_tests/data/sdam/load-balanced/discover_load_balancer.yml +25 -0
- data/spec/spec_tests/data/sdam_integration/find-network-error.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +3 -1
- data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +3 -1
- data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +2 -0
- data/spec/spec_tests/data/sdam_monitoring/load_balancer.yml +65 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +13 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +6 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-multiple-hosts.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +10 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-false.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-true.yml +0 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/encoded-userinfo-and-db.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/loadBalanced-false-txt.yml +10 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/longer-parent-in-return.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/misformatted-option.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/no-results.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/not-enough-parts.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-result-default-port.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record-multiple-strings.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch1.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch2.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch3.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch4.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch5.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-too-short.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-wrong.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-default-port.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-nonstandard-port.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-txt-records.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-not-allowed-option.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-ssl-option.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-uri-option.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-unallowed-option.yml +0 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-admin-database.yml +13 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-auth.yml +12 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-port.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-two-hosts.yml +0 -0
- data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +2 -0
- data/spec/spec_tests/data/transactions/retryable-abort.yml +2 -0
- data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +2 -0
- data/spec/spec_tests/data/transactions/retryable-commit.yml +2 -0
- data/spec/spec_tests/data/transactions/retryable-writes.yml +2 -0
- data/spec/spec_tests/data/uri_options/connection-options.yml +60 -0
- data/spec/spec_tests/load_balancers_spec.rb +15 -0
- data/spec/spec_tests/retryable_reads_spec.rb +2 -2
- data/spec/spec_tests/retryable_writes_spec.rb +1 -1
- data/spec/spec_tests/sdam_integration_spec.rb +1 -1
- data/spec/spec_tests/sdam_monitoring_spec.rb +10 -5
- data/spec/spec_tests/sdam_spec.rb +1 -1
- data/spec/spec_tests/seed_list_discovery_spec.rb +118 -0
- data/spec/spec_tests/uri_options_spec.rb +4 -4
- data/spec/stress/fork_reconnect_stress_spec.rb +1 -5
- data/spec/stress/push_monitor_close_spec.rb +44 -0
- data/spec/support/certificates/atlas-ocsp-ca.crt +82 -90
- data/spec/support/certificates/atlas-ocsp.crt +127 -122
- data/spec/support/common_shortcuts.rb +2 -3
- data/spec/support/matchers.rb +13 -0
- data/spec/support/shared/auth_context.rb +16 -0
- data/spec/support/shared/session.rb +2 -2
- data/spec/support/spec_config.rb +9 -10
- data/spec/support/using_hash.rb +31 -0
- data/spec/support/utils.rb +1 -1
- data.tar.gz.sig +2 -4
- metadata +1050 -1004
- metadata.gz.sig +0 -0
- data/lib/mongo/collection/view/builder/find_command.rb +0 -173
- data/lib/mongo/collection/view/builder/op_query.rb +0 -94
- data/lib/mongo/cursor/builder/get_more_command.rb +0 -80
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +0 -111
- data/lib/mongo/cursor/builder/op_get_more.rb +0 -64
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +0 -106
- data/lib/mongo/server/context.rb +0 -72
- data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +0 -66
- data/spec/runners/unified/using_hash.rb +0 -34
- data/spec/spec_tests/dns_seedlist_discovery_spec.rb +0 -79
- data/spec/support/event_subscriber.rb +0 -221
@@ -32,7 +32,7 @@ describe 'Step down behavior' do
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
let(:subscriber) { EventSubscriber.new }
|
35
|
+
let(:subscriber) { Mrss::EventSubscriber.new }
|
36
36
|
|
37
37
|
let(:test_client) do
|
38
38
|
authorized_client_without_any_retries.with(server_selection_timeout: 20).tap do |client|
|
@@ -0,0 +1,120 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require 'spec_helper'
|
5
|
+
|
6
|
+
describe 'Transaction pinning' do
|
7
|
+
let(:client) { authorized_client.with(max_pool_size: 4) }
|
8
|
+
let(:collection_name) { 'tx_pinning' }
|
9
|
+
let(:collection) { client[collection_name] }
|
10
|
+
|
11
|
+
before do
|
12
|
+
authorized_client[collection_name].insert_many([{test: 1}] * 200)
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:server) { client.cluster.next_primary }
|
16
|
+
|
17
|
+
clean_slate
|
18
|
+
|
19
|
+
context 'non-lb' do
|
20
|
+
require_topology :sharded
|
21
|
+
min_server_fcv '4.2'
|
22
|
+
|
23
|
+
# Start several transactions, then complete each of them.
|
24
|
+
# Force each transaction to be on its own connection.
|
25
|
+
|
26
|
+
before do
|
27
|
+
4.times do |i|
|
28
|
+
# Collections cannot be created inside transactions.
|
29
|
+
client["tx_pin_t#{i}"].drop
|
30
|
+
client["tx_pin_t#{i}"].create
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'works' do
|
35
|
+
sessions = []
|
36
|
+
connections = []
|
37
|
+
|
38
|
+
4.times do |i|
|
39
|
+
session = client.start_session
|
40
|
+
session.start_transaction
|
41
|
+
client["tx_pin_t#{i}"].insert_one({test: 1}, session: session)
|
42
|
+
session.pinned_server.should be_a(Mongo::Server)
|
43
|
+
sessions << session
|
44
|
+
connections << server.pool.check_out
|
45
|
+
end
|
46
|
+
|
47
|
+
server.pool.size.should == 4
|
48
|
+
|
49
|
+
connections.each do |c|
|
50
|
+
server.pool.check_in(c)
|
51
|
+
end
|
52
|
+
|
53
|
+
sessions.each_with_index do |session, i|
|
54
|
+
client["tx_pin_t#{i}"].insert_one({test: 2}, session: session)
|
55
|
+
session.commit_transaction
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'lb' do
|
61
|
+
require_topology :load_balanced
|
62
|
+
min_server_fcv '4.2'
|
63
|
+
|
64
|
+
# In load-balanced topology, we cannot create new connections to a
|
65
|
+
# particular service.
|
66
|
+
|
67
|
+
context 'when no connection is available' do
|
68
|
+
|
69
|
+
before do
|
70
|
+
client["tx_pin"].drop
|
71
|
+
client["tx_pin"].create
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'raises ConnectionCheckOutTimeout' do
|
75
|
+
session = client.start_session
|
76
|
+
session.start_transaction
|
77
|
+
client["tx_pin"].insert_one({test: 1}, session: session)
|
78
|
+
session.pinned_server.should be nil
|
79
|
+
session.pinned_service_id.should_not be nil
|
80
|
+
|
81
|
+
server.pool.size.should == 1
|
82
|
+
server.pool.clear
|
83
|
+
server.pool.size.should == 0
|
84
|
+
|
85
|
+
lambda do
|
86
|
+
client["tx_pin"].insert_one({test: 2}, session: session)
|
87
|
+
end.should raise_error(Mongo::Error::ConnectionCheckOutTimeout)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
context 'when connection is available' do
|
92
|
+
|
93
|
+
it 'uses the available connection' do
|
94
|
+
sessions = []
|
95
|
+
connections = []
|
96
|
+
|
97
|
+
4.times do |i|
|
98
|
+
session = client.start_session
|
99
|
+
session.start_transaction
|
100
|
+
client["tx_pin_t#{i}"].insert_one({test: 1}, session: session)
|
101
|
+
session.pinned_server.should be nil
|
102
|
+
session.pinned_service_id.should_not be nil
|
103
|
+
sessions << session
|
104
|
+
connections << server.pool.check_out
|
105
|
+
end
|
106
|
+
|
107
|
+
server.pool.size.should == 4
|
108
|
+
|
109
|
+
connections.each do |c|
|
110
|
+
server.pool.check_in(c)
|
111
|
+
end
|
112
|
+
|
113
|
+
sessions.each_with_index do |session, i|
|
114
|
+
client["tx_pin_t#{i}"].insert_one({test: 2}, session: session)
|
115
|
+
session.commit_transaction
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -66,4 +66,49 @@ describe 'Versioned API examples' do
|
|
66
66
|
# Do not leak clients.
|
67
67
|
client.close
|
68
68
|
end
|
69
|
+
|
70
|
+
it "Versioned API Strict Migration Example" do
|
71
|
+
client = Mongo::Client.new(uri_string, server_api: {version: "1", strict: true})
|
72
|
+
client[:sales].drop
|
73
|
+
|
74
|
+
# Start Versioned API Example 5
|
75
|
+
|
76
|
+
client[:sales].insert_many([
|
77
|
+
{ _id: 1, item: "abc", price: 10, quantity: 2, date: DateTime.parse("2021-01-01T08:00:00Z") },
|
78
|
+
{ _id: 2, item: "jkl", price: 20, quantity: 1, date: DateTime.parse("2021-02-03T09:00:00Z") },
|
79
|
+
{ _id: 3, item: "xyz", price: 5, quantity: 5, date: DateTime.parse("2021-02-03T09:05:00Z") },
|
80
|
+
{ _id: 4, item: "abc", price: 10, quantity: 10, date: DateTime.parse("2021-02-15T08:00:00Z") },
|
81
|
+
{ _id: 5, item: "xyz", price: 5, quantity: 10, date: DateTime.parse("2021-02-15T09:05:00Z") },
|
82
|
+
{ _id: 6, item: "xyz", price: 5, quantity: 5, date: DateTime.parse("2021-02-15T12:05:10Z") },
|
83
|
+
{ _id: 7, item: "xyz", price: 5, quantity: 10, date: DateTime.parse("2021-02-15T14:12:12Z") },
|
84
|
+
{ _id: 8, item: "abc", price: 10, quantity: 5, date: DateTime.parse("2021-03-16T20:20:13Z") }
|
85
|
+
])
|
86
|
+
|
87
|
+
# End Versioned API Example 5
|
88
|
+
|
89
|
+
expect do
|
90
|
+
client.database.command(count: :sales)
|
91
|
+
end.to raise_error(Mongo::Error::OperationFailure)
|
92
|
+
|
93
|
+
# Start Versioned API Example 6
|
94
|
+
|
95
|
+
# Mongo::Error::OperationFailure:
|
96
|
+
# [323:APIStrictError]: Provided apiStrict:true, but the command count is not in API Version 1. Information on supported commands and migrations in API Version 1 can be found at https://dochub.mongodb.org/core/manual-versioned-api
|
97
|
+
|
98
|
+
# End Versioned API Example 6
|
99
|
+
|
100
|
+
# Start Versioned API Example 7
|
101
|
+
|
102
|
+
client[:sales].count_documents
|
103
|
+
|
104
|
+
# End Versioned API Example 7
|
105
|
+
|
106
|
+
# Start Versioned API Example 8
|
107
|
+
|
108
|
+
# 8
|
109
|
+
|
110
|
+
# End Versioned API Example 8
|
111
|
+
# Do not leak clients.
|
112
|
+
client.close
|
113
|
+
end
|
69
114
|
end
|
@@ -38,7 +38,7 @@ describe 'X.509 auth integration tests' do
|
|
38
38
|
"C=US,ST=New York,L=New York City,O=MongoDB,OU=x509,CN=localhost".freeze
|
39
39
|
end
|
40
40
|
|
41
|
-
let(:subscriber) { EventSubscriber.new }
|
41
|
+
let(:subscriber) { Mrss::EventSubscriber.new }
|
42
42
|
|
43
43
|
shared_examples 'authenticates successfully' do
|
44
44
|
it 'authenticates successfully' do
|
data/spec/lite_spec_helper.rb
CHANGED
@@ -16,7 +16,6 @@ RETRYABLE_READS_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/retryable_read
|
|
16
16
|
COMMAND_MONITORING_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/command_monitoring/**/*.yml").sort
|
17
17
|
CONNECTION_STRING_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/connection_string/*.yml").sort
|
18
18
|
URI_OPTIONS_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/uri_options/*.yml").sort
|
19
|
-
DNS_SEEDLIST_DISCOVERY_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/dns_seedlist_discovery/*.yml").sort
|
20
19
|
GRIDFS_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/gridfs/*.yml").sort
|
21
20
|
TRANSACTIONS_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/transactions/*.yml").sort
|
22
21
|
TRANSACTIONS_API_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/transactions_api/*.yml").sort
|
@@ -78,7 +77,7 @@ end
|
|
78
77
|
|
79
78
|
require 'mrss/lite_constraints'
|
80
79
|
require 'support/matchers'
|
81
|
-
require '
|
80
|
+
require 'mrss/event_subscriber'
|
82
81
|
require 'support/common_shortcuts'
|
83
82
|
require 'support/client_registry'
|
84
83
|
require 'support/client_registry_macros'
|
data/spec/mongo/auth/cr_spec.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
# encoding: utf-8
|
3
3
|
|
4
4
|
require 'spec_helper'
|
5
|
+
require 'support/shared/auth_context'
|
5
6
|
|
6
7
|
describe Mongo::Auth::CR do
|
7
8
|
|
@@ -9,9 +10,7 @@ describe Mongo::Auth::CR do
|
|
9
10
|
authorized_client.cluster.next_primary
|
10
11
|
end
|
11
12
|
|
12
|
-
|
13
|
-
Mongo::Server::Connection.new(server, SpecConfig.instance.test_options)
|
14
|
-
end
|
13
|
+
include_context 'auth unit tests'
|
15
14
|
|
16
15
|
describe '#login' do
|
17
16
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# encoding: utf-8
|
3
3
|
|
4
4
|
require 'spec_helper'
|
5
|
+
require 'support/shared/auth_context'
|
5
6
|
|
6
7
|
describe Mongo::Auth::LDAP do
|
7
8
|
|
@@ -9,9 +10,7 @@ describe Mongo::Auth::LDAP do
|
|
9
10
|
authorized_client.cluster.next_primary
|
10
11
|
end
|
11
12
|
|
12
|
-
|
13
|
-
Mongo::Server::Connection.new(server, SpecConfig.instance.test_options)
|
14
|
-
end
|
13
|
+
include_context 'auth unit tests'
|
15
14
|
|
16
15
|
let(:user) do
|
17
16
|
Mongo::Auth::User.new(
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# encoding: utf-8
|
3
3
|
|
4
4
|
require 'spec_helper'
|
5
|
+
require 'support/shared/auth_context'
|
5
6
|
|
6
7
|
describe Mongo::Auth::Scram do
|
7
8
|
require_no_external_user
|
@@ -10,9 +11,7 @@ describe Mongo::Auth::Scram do
|
|
10
11
|
authorized_client.cluster.next_primary
|
11
12
|
end
|
12
13
|
|
13
|
-
|
14
|
-
Mongo::Server::Connection.new(server, SpecConfig.instance.monitoring_options)
|
15
|
-
end
|
14
|
+
include_context 'auth unit tests'
|
16
15
|
|
17
16
|
let(:cache_mod) { Mongo::Auth::CredentialCache }
|
18
17
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# encoding: utf-8
|
3
3
|
|
4
4
|
require 'spec_helper'
|
5
|
+
require 'support/shared/auth_context'
|
5
6
|
|
6
7
|
describe Mongo::Auth::X509 do
|
7
8
|
|
@@ -9,9 +10,7 @@ describe Mongo::Auth::X509 do
|
|
9
10
|
authorized_client.cluster.next_primary
|
10
11
|
end
|
11
12
|
|
12
|
-
|
13
|
-
Mongo::Server::Connection.new(server, SpecConfig.instance.test_options)
|
14
|
-
end
|
13
|
+
include_context 'auth unit tests'
|
15
14
|
|
16
15
|
let(:user) do
|
17
16
|
Mongo::Auth::User.new(database: '$external')
|
@@ -1424,7 +1424,7 @@ describe Mongo::BulkWrite do
|
|
1424
1424
|
|
1425
1425
|
# In a multi-sharded cluster, the write seems to go to a
|
1426
1426
|
# different shard from the read
|
1427
|
-
|
1427
|
+
require_no_multi_mongos
|
1428
1428
|
|
1429
1429
|
let(:extra_options) do
|
1430
1430
|
{ write_concern: { w: 0 } }
|
@@ -2103,10 +2103,10 @@ describe Mongo::BulkWrite do
|
|
2103
2103
|
|
2104
2104
|
# In a multi-shard cluster, retries may go to a different server
|
2105
2105
|
# than original command which these tests are not prepared to handle
|
2106
|
-
|
2106
|
+
require_no_multi_mongos
|
2107
2107
|
|
2108
2108
|
|
2109
|
-
let(:subscriber) { EventSubscriber.new }
|
2109
|
+
let(:subscriber) { Mrss::EventSubscriber.new }
|
2110
2110
|
|
2111
2111
|
let(:client) do
|
2112
2112
|
authorized_client_with_retry_writes.tap do |client|
|
@@ -6,7 +6,7 @@ require 'spec_helper'
|
|
6
6
|
describe Mongo::Client do
|
7
7
|
clean_slate
|
8
8
|
|
9
|
-
let(:subscriber) { EventSubscriber.new }
|
9
|
+
let(:subscriber) { Mrss::EventSubscriber.new }
|
10
10
|
|
11
11
|
describe '.new' do
|
12
12
|
context 'with scan: false' do
|
@@ -24,26 +24,8 @@ describe Mongo::Client do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
context 'with default scan: true' do
|
27
|
-
|
28
|
-
|
29
|
-
# can be executed on a thread that belongs to one of the global
|
30
|
-
# clients for instance
|
31
|
-
it 'performs one round of sdam' do
|
32
|
-
# Does not work due to
|
33
|
-
# https://github.com/rspec/rspec-mocks/issues/1242.
|
34
|
-
#expect_any_instance_of(Mongo::Server::Monitor).to receive(:scan!).
|
35
|
-
# exactly(SpecConfig.instance.addresses.length).times.and_call_original
|
36
|
-
c = new_local_client(
|
37
|
-
SpecConfig.instance.addresses, SpecConfig.instance.test_options)
|
38
|
-
expect(c.cluster.servers).not_to be_empty
|
39
|
-
end
|
40
|
-
|
41
|
-
# This checks the case of all initial seeds being removed from
|
42
|
-
# cluster during SDAM
|
43
|
-
context 'me mismatch on the only initial seed' do
|
44
|
-
let(:address) do
|
45
|
-
ClusterConfig.instance.alternate_address.to_s
|
46
|
-
end
|
27
|
+
|
28
|
+
shared_examples 'does not wait for server selection timeout' do
|
47
29
|
|
48
30
|
let(:logger) do
|
49
31
|
Logger.new(STDOUT, level: Logger::DEBUG)
|
@@ -94,6 +76,7 @@ describe Mongo::Client do
|
|
94
76
|
Mongo::Cluster::Topology::ReplicaSetWithPrimary,
|
95
77
|
Mongo::Cluster::Topology::Single,
|
96
78
|
Mongo::Cluster::Topology::Sharded,
|
79
|
+
Mongo::Cluster::Topology::LoadBalanced,
|
97
80
|
]).to include(actual_class)
|
98
81
|
expect(time_taken).to be < 5
|
99
82
|
|
@@ -101,6 +84,44 @@ describe Mongo::Client do
|
|
101
84
|
client.database.command(ping: 1)
|
102
85
|
end
|
103
86
|
end
|
87
|
+
|
88
|
+
context 'when cluster is monitored' do
|
89
|
+
require_topology :single, :replica_set, :sharded
|
90
|
+
|
91
|
+
# TODO this test requires there being no outstanding background
|
92
|
+
# monitoring threads running, as otherwise the scan! expectation
|
93
|
+
# can be executed on a thread that belongs to one of the global
|
94
|
+
# clients for instance
|
95
|
+
it 'performs one round of sdam' do
|
96
|
+
# Does not work due to
|
97
|
+
# https://github.com/rspec/rspec-mocks/issues/1242.
|
98
|
+
#expect_any_instance_of(Mongo::Server::Monitor).to receive(:scan!).
|
99
|
+
# exactly(SpecConfig.instance.addresses.length).times.and_call_original
|
100
|
+
c = new_local_client(
|
101
|
+
SpecConfig.instance.addresses, SpecConfig.instance.test_options)
|
102
|
+
expect(c.cluster.servers).not_to be_empty
|
103
|
+
end
|
104
|
+
|
105
|
+
# This checks the case of all initial seeds being removed from
|
106
|
+
# cluster during SDAM
|
107
|
+
context 'me mismatch on the only initial seed' do
|
108
|
+
let(:address) do
|
109
|
+
ClusterConfig.instance.alternate_address.to_s
|
110
|
+
end
|
111
|
+
|
112
|
+
include_examples 'does not wait for server selection timeout'
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
context 'when cluster is not monitored' do
|
117
|
+
require_topology :load_balanced
|
118
|
+
|
119
|
+
let(:address) do
|
120
|
+
ClusterConfig.instance.alternate_address.to_s
|
121
|
+
end
|
122
|
+
|
123
|
+
include_examples 'does not wait for server selection timeout'
|
124
|
+
end
|
104
125
|
end
|
105
126
|
|
106
127
|
context 'with monitoring_io: false' do
|
@@ -388,10 +409,24 @@ describe Mongo::Client do
|
|
388
409
|
end.should_not raise_error
|
389
410
|
end
|
390
411
|
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
412
|
+
context 'non-lb' do
|
413
|
+
require_topology :single, :replica_set, :sharded
|
414
|
+
|
415
|
+
it 'fails server selection due to very small timeout' do
|
416
|
+
lambda do
|
417
|
+
client.database.command(ping: 1)
|
418
|
+
end.should raise_error(Mongo::Error::NoServerAvailable)
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
422
|
+
context 'lb' do
|
423
|
+
require_topology :load_balanced
|
424
|
+
|
425
|
+
it 'fails the operation after successful server selection' do
|
426
|
+
lambda do
|
427
|
+
client.database.command(ping: 1)
|
428
|
+
end.should raise_error(Mongo::Error::SocketTimeoutError, /socket took over.*to connect/)
|
429
|
+
end
|
395
430
|
end
|
396
431
|
end
|
397
432
|
|
@@ -412,7 +447,7 @@ describe Mongo::Client do
|
|
412
447
|
end.should_not raise_error
|
413
448
|
end
|
414
449
|
|
415
|
-
it 'fails operations due to very small timeout' do
|
450
|
+
it 'fails operations due to very small timeout', retry: 3 do
|
416
451
|
lambda do
|
417
452
|
client.database.command(ping: 1)
|
418
453
|
end.should raise_error(Mongo::Error::SocketTimeoutError)
|
@@ -1292,6 +1327,192 @@ describe Mongo::Client do
|
|
1292
1327
|
client.options[:connect].should be :sharded
|
1293
1328
|
end
|
1294
1329
|
end
|
1330
|
+
|
1331
|
+
context 'load_balanced: true and multiple seeds' do
|
1332
|
+
let(:client) do
|
1333
|
+
new_local_client_nmio(['127.0.0.1:27017', '127.0.0.2:27017'],
|
1334
|
+
load_balanced: true)
|
1335
|
+
end
|
1336
|
+
|
1337
|
+
it 'is rejected' do
|
1338
|
+
lambda do
|
1339
|
+
client
|
1340
|
+
end.should raise_error(ArgumentError, /load_balanced=true cannot be used with multiple seeds/)
|
1341
|
+
end
|
1342
|
+
end
|
1343
|
+
|
1344
|
+
context 'load_balanced: false and multiple seeds' do
|
1345
|
+
let(:client) do
|
1346
|
+
new_local_client_nmio(['127.0.0.1:27017', '127.0.0.2:27017'],
|
1347
|
+
load_balanced: false)
|
1348
|
+
end
|
1349
|
+
|
1350
|
+
it 'is accepted' do
|
1351
|
+
lambda do
|
1352
|
+
client
|
1353
|
+
end.should_not raise_error
|
1354
|
+
client.options[:load_balanced].should be false
|
1355
|
+
end
|
1356
|
+
end
|
1357
|
+
|
1358
|
+
context 'load_balanced: true and direct_connection: true' do
|
1359
|
+
let(:client) do
|
1360
|
+
new_local_client_nmio(['127.0.0.1:27017'],
|
1361
|
+
load_balanced: true, direct_connection: true)
|
1362
|
+
end
|
1363
|
+
|
1364
|
+
it 'is rejected' do
|
1365
|
+
lambda do
|
1366
|
+
client
|
1367
|
+
end.should raise_error(ArgumentError, /direct_connection=true cannot be used with load_balanced=true/)
|
1368
|
+
end
|
1369
|
+
end
|
1370
|
+
|
1371
|
+
context 'load_balanced: true and direct_connection: false' do
|
1372
|
+
let(:client) do
|
1373
|
+
new_local_client_nmio(['127.0.0.1:27017'],
|
1374
|
+
load_balanced: true, direct_connection: false)
|
1375
|
+
end
|
1376
|
+
|
1377
|
+
it 'is accepted' do
|
1378
|
+
lambda do
|
1379
|
+
client
|
1380
|
+
end.should_not raise_error
|
1381
|
+
client.options[:load_balanced].should be true
|
1382
|
+
client.options[:direct_connection].should be false
|
1383
|
+
end
|
1384
|
+
end
|
1385
|
+
|
1386
|
+
context 'load_balanced: false and direct_connection: true' do
|
1387
|
+
let(:client) do
|
1388
|
+
new_local_client_nmio(['127.0.0.1:27017'],
|
1389
|
+
load_balanced: false, direct_connection: true)
|
1390
|
+
end
|
1391
|
+
|
1392
|
+
it 'is accepted' do
|
1393
|
+
lambda do
|
1394
|
+
client
|
1395
|
+
end.should_not raise_error
|
1396
|
+
client.options[:load_balanced].should be false
|
1397
|
+
client.options[:direct_connection].should be true
|
1398
|
+
end
|
1399
|
+
end
|
1400
|
+
|
1401
|
+
[:direct, 'direct', :sharded, 'sharded'].each do |v|
|
1402
|
+
context "load_balanced: true and connect: #{v.inspect}" do
|
1403
|
+
let(:client) do
|
1404
|
+
new_local_client_nmio(['127.0.0.1:27017'],
|
1405
|
+
load_balanced: true, connect: v)
|
1406
|
+
end
|
1407
|
+
|
1408
|
+
it 'is rejected' do
|
1409
|
+
lambda do
|
1410
|
+
client
|
1411
|
+
end.should raise_error(ArgumentError, /connect=#{v} cannot be used with load_balanced=true/)
|
1412
|
+
end
|
1413
|
+
end
|
1414
|
+
end
|
1415
|
+
|
1416
|
+
[nil].each do |v|
|
1417
|
+
context "load_balanced: true and connect: #{v.inspect}" do
|
1418
|
+
let(:client) do
|
1419
|
+
new_local_client_nmio(['127.0.0.1:27017'],
|
1420
|
+
load_balanced: true, connect: v)
|
1421
|
+
end
|
1422
|
+
|
1423
|
+
it 'is accepted' do
|
1424
|
+
lambda do
|
1425
|
+
client
|
1426
|
+
end.should_not raise_error
|
1427
|
+
client.options[:load_balanced].should be true
|
1428
|
+
client.options[:connect].should eq v
|
1429
|
+
end
|
1430
|
+
end
|
1431
|
+
end
|
1432
|
+
|
1433
|
+
[:load_balanced, 'load_balanced'].each do |v|
|
1434
|
+
context "load_balanced: true and connect: #{v.inspect}" do
|
1435
|
+
let(:client) do
|
1436
|
+
new_local_client_nmio(['127.0.0.1:27017'],
|
1437
|
+
load_balanced: true, connect: v)
|
1438
|
+
end
|
1439
|
+
|
1440
|
+
it 'is accepted' do
|
1441
|
+
lambda do
|
1442
|
+
client
|
1443
|
+
end.should_not raise_error
|
1444
|
+
client.options[:load_balanced].should be true
|
1445
|
+
client.options[:connect].should eq v
|
1446
|
+
end
|
1447
|
+
end
|
1448
|
+
|
1449
|
+
context "replica_set and connect: #{v.inspect}" do
|
1450
|
+
let(:client) do
|
1451
|
+
new_local_client_nmio(['127.0.0.1:27017'],
|
1452
|
+
replica_set: 'foo', connect: v)
|
1453
|
+
end
|
1454
|
+
|
1455
|
+
it 'is rejected' do
|
1456
|
+
lambda do
|
1457
|
+
client
|
1458
|
+
end.should raise_error(ArgumentError, /connect=load_balanced cannot be used with replica_set option/)
|
1459
|
+
end
|
1460
|
+
end
|
1461
|
+
|
1462
|
+
context "direct_connection=true and connect: #{v.inspect}" do
|
1463
|
+
let(:client) do
|
1464
|
+
new_local_client_nmio(['127.0.0.1:27017'],
|
1465
|
+
direct_connection: true, connect: v)
|
1466
|
+
end
|
1467
|
+
|
1468
|
+
it 'is rejected' do
|
1469
|
+
lambda do
|
1470
|
+
client
|
1471
|
+
end.should raise_error(ArgumentError, /Conflicting client options: direct_connection=true and connect=load_balanced/)
|
1472
|
+
end
|
1473
|
+
end
|
1474
|
+
|
1475
|
+
context "multiple seed addresses and connect: #{v.inspect}" do
|
1476
|
+
let(:client) do
|
1477
|
+
new_local_client_nmio(['127.0.0.1:27017', '127.0.0.1:1234'],
|
1478
|
+
connect: v)
|
1479
|
+
end
|
1480
|
+
|
1481
|
+
it 'is rejected' do
|
1482
|
+
lambda do
|
1483
|
+
client
|
1484
|
+
end.should raise_error(ArgumentError, /connect=load_balanced cannot be used with multiple seeds/)
|
1485
|
+
end
|
1486
|
+
end
|
1487
|
+
end
|
1488
|
+
|
1489
|
+
[:replica_set, 'replica_set'].each do |v|
|
1490
|
+
context "load_balanced: true and connect: #{v.inspect}" do
|
1491
|
+
let(:client) do
|
1492
|
+
new_local_client_nmio(['127.0.0.1:27017'],
|
1493
|
+
load_balanced: true, connect: v, replica_set: 'x')
|
1494
|
+
end
|
1495
|
+
|
1496
|
+
it 'is rejected' do
|
1497
|
+
lambda do
|
1498
|
+
client
|
1499
|
+
end.should raise_error(ArgumentError, /connect=replica_set cannot be used with load_balanced=true/)
|
1500
|
+
end
|
1501
|
+
end
|
1502
|
+
|
1503
|
+
context "load_balanced: true and #{v.inspect} option" do
|
1504
|
+
let(:client) do
|
1505
|
+
new_local_client_nmio(['127.0.0.1:27017'],
|
1506
|
+
load_balanced: true, v => 'rs')
|
1507
|
+
end
|
1508
|
+
|
1509
|
+
it 'is rejected' do
|
1510
|
+
lambda do
|
1511
|
+
client
|
1512
|
+
end.should raise_error(ArgumentError, /load_balanced=true cannot be used with replica_set option/)
|
1513
|
+
end
|
1514
|
+
end
|
1515
|
+
end
|
1295
1516
|
end
|
1296
1517
|
|
1297
1518
|
context ':bg_error_backtrace option' do
|
@@ -2306,7 +2527,12 @@ describe Mongo::Client do
|
|
2306
2527
|
before do
|
2307
2528
|
client.cluster.next_primary
|
2308
2529
|
events = subscriber.select_started_events(Mongo::Monitoring::Event::ServerHeartbeatStarted)
|
2309
|
-
|
2530
|
+
if ClusterConfig.instance.topology == :load_balanced
|
2531
|
+
# No server monitoring in LB topology
|
2532
|
+
events.length.should == 0
|
2533
|
+
else
|
2534
|
+
events.length.should > 0
|
2535
|
+
end
|
2310
2536
|
end
|
2311
2537
|
|
2312
2538
|
it 'does not copy sdam_proc option to new client' do
|
@@ -2318,7 +2544,12 @@ describe Mongo::Client do
|
|
2318
2544
|
# Give those some time to be processed.
|
2319
2545
|
sleep 2
|
2320
2546
|
|
2321
|
-
|
2547
|
+
if ClusterConfig.instance.topology == :load_balanced
|
2548
|
+
# No server monitoring in LB topology
|
2549
|
+
expect(subscriber.started_events.length).to eq 0
|
2550
|
+
else
|
2551
|
+
expect(subscriber.started_events.length).to be > 0
|
2552
|
+
end
|
2322
2553
|
subscriber.started_events.clear
|
2323
2554
|
|
2324
2555
|
# If this test takes longer than heartbeat interval,
|