mongo 2.13.0.beta1 → 2.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +1 -5
- data/Rakefile +50 -9
- data/lib/mongo.rb +13 -2
- data/lib/mongo/address.rb +1 -1
- data/lib/mongo/address/ipv4.rb +1 -1
- data/lib/mongo/address/ipv6.rb +1 -1
- data/lib/mongo/auth/aws/request.rb +31 -5
- data/lib/mongo/bulk_write.rb +18 -0
- data/lib/mongo/caching_cursor.rb +74 -0
- data/lib/mongo/client.rb +238 -31
- data/lib/mongo/cluster.rb +56 -20
- data/lib/mongo/cluster/sdam_flow.rb +13 -10
- data/lib/mongo/cluster/topology/replica_set_no_primary.rb +3 -2
- data/lib/mongo/cluster/topology/sharded.rb +1 -1
- data/lib/mongo/cluster/topology/single.rb +2 -2
- data/lib/mongo/collection.rb +66 -24
- data/lib/mongo/collection/view.rb +24 -20
- data/lib/mongo/collection/view/aggregation.rb +25 -4
- data/lib/mongo/collection/view/builder/find_command.rb +38 -18
- data/lib/mongo/collection/view/explainable.rb +27 -8
- data/lib/mongo/collection/view/iterable.rb +72 -12
- data/lib/mongo/collection/view/readable.rb +19 -3
- data/lib/mongo/collection/view/writable.rb +55 -5
- data/lib/mongo/crypt/encryption_io.rb +6 -6
- data/lib/mongo/cursor.rb +16 -3
- data/lib/mongo/database.rb +37 -4
- data/lib/mongo/database/view.rb +18 -3
- data/lib/mongo/distinguishing_semaphore.rb +55 -0
- data/lib/mongo/error.rb +5 -0
- data/lib/mongo/error/invalid_read_concern.rb +28 -0
- data/lib/mongo/error/invalid_server_auth_host.rb +22 -0
- data/lib/mongo/error/invalid_session.rb +2 -1
- data/lib/mongo/error/operation_failure.rb +11 -5
- data/lib/mongo/error/server_certificate_revoked.rb +22 -0
- data/lib/mongo/error/sessions_not_supported.rb +35 -0
- data/lib/mongo/error/unsupported_option.rb +14 -12
- data/lib/mongo/event/base.rb +6 -0
- data/lib/mongo/grid/file.rb +5 -0
- data/lib/mongo/grid/file/chunk.rb +2 -0
- data/lib/mongo/grid/fs_bucket.rb +15 -13
- data/lib/mongo/grid/stream/write.rb +9 -3
- data/lib/mongo/index/view.rb +3 -0
- data/lib/mongo/lint.rb +2 -1
- data/lib/mongo/logger.rb +3 -3
- data/lib/mongo/monitoring.rb +38 -0
- data/lib/mongo/monitoring/command_log_subscriber.rb +10 -2
- data/lib/mongo/monitoring/event/command_failed.rb +11 -0
- data/lib/mongo/monitoring/event/command_started.rb +37 -2
- data/lib/mongo/monitoring/event/command_succeeded.rb +11 -0
- data/lib/mongo/monitoring/event/server_closed.rb +1 -1
- data/lib/mongo/monitoring/event/server_description_changed.rb +27 -4
- data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +9 -2
- data/lib/mongo/monitoring/event/server_heartbeat_started.rb +9 -2
- data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +9 -2
- 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 +6 -3
- data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +9 -1
- data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
- data/lib/mongo/operation.rb +2 -0
- data/lib/mongo/operation/aggregate/result.rb +9 -8
- data/lib/mongo/operation/collections_info/command.rb +5 -0
- data/lib/mongo/operation/collections_info/result.rb +18 -1
- data/lib/mongo/operation/delete/bulk_result.rb +2 -0
- data/lib/mongo/operation/delete/result.rb +3 -0
- data/lib/mongo/operation/explain/command.rb +4 -0
- data/lib/mongo/operation/explain/legacy.rb +4 -0
- data/lib/mongo/operation/explain/op_msg.rb +6 -0
- data/lib/mongo/operation/explain/result.rb +3 -0
- data/lib/mongo/operation/find/legacy/result.rb +2 -0
- data/lib/mongo/operation/find/result.rb +13 -0
- data/lib/mongo/operation/get_more/result.rb +3 -0
- data/lib/mongo/operation/indexes/result.rb +5 -0
- data/lib/mongo/operation/insert/bulk_result.rb +5 -0
- data/lib/mongo/operation/insert/result.rb +5 -0
- data/lib/mongo/operation/list_collections/result.rb +5 -0
- data/lib/mongo/operation/map_reduce/result.rb +10 -0
- data/lib/mongo/operation/parallel_scan/result.rb +4 -0
- data/lib/mongo/operation/result.rb +35 -6
- data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -0
- data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -0
- data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +2 -0
- data/lib/mongo/operation/shared/executable.rb +1 -0
- data/lib/mongo/operation/shared/idable.rb +2 -1
- data/lib/mongo/operation/shared/limited.rb +1 -0
- data/lib/mongo/operation/shared/object_id_generator.rb +1 -0
- data/lib/mongo/operation/shared/result/aggregatable.rb +1 -0
- data/lib/mongo/operation/shared/sessions_supported.rb +1 -0
- data/lib/mongo/operation/shared/specifiable.rb +1 -0
- data/lib/mongo/operation/shared/write.rb +1 -0
- data/lib/mongo/operation/shared/write_concern_supported.rb +1 -0
- data/lib/mongo/operation/update/legacy/result.rb +7 -0
- data/lib/mongo/operation/update/result.rb +8 -0
- data/lib/mongo/operation/users_info/result.rb +3 -0
- data/lib/mongo/protocol/message.rb +47 -10
- data/lib/mongo/protocol/msg.rb +34 -1
- data/lib/mongo/protocol/query.rb +36 -0
- data/lib/mongo/protocol/serializers.rb +5 -2
- data/lib/mongo/query_cache.rb +242 -0
- data/lib/mongo/retryable.rb +8 -1
- data/lib/mongo/server.rb +15 -4
- data/lib/mongo/server/app_metadata.rb +27 -3
- data/lib/mongo/server/connection.rb +4 -4
- data/lib/mongo/server/connection_base.rb +38 -12
- data/lib/mongo/server/connection_common.rb +2 -2
- data/lib/mongo/server/connection_pool.rb +3 -0
- data/lib/mongo/server/description.rb +13 -1
- data/lib/mongo/server/monitor.rb +76 -44
- data/lib/mongo/server/monitor/connection.rb +57 -9
- data/lib/mongo/server/pending_connection.rb +14 -4
- data/lib/mongo/server/push_monitor.rb +173 -0
- data/{spec/runners/transactions/context.rb → lib/mongo/server/push_monitor/connection.rb} +9 -14
- data/lib/mongo/server_selector.rb +0 -1
- data/lib/mongo/server_selector/base.rb +583 -1
- data/lib/mongo/server_selector/nearest.rb +1 -6
- data/lib/mongo/server_selector/primary.rb +1 -6
- data/lib/mongo/server_selector/primary_preferred.rb +7 -10
- data/lib/mongo/server_selector/secondary.rb +1 -6
- data/lib/mongo/server_selector/secondary_preferred.rb +1 -7
- data/lib/mongo/session.rb +7 -1
- data/lib/mongo/socket.rb +26 -12
- data/lib/mongo/socket/ocsp_cache.rb +97 -0
- data/lib/mongo/socket/ocsp_verifier.rb +368 -0
- data/lib/mongo/socket/ssl.rb +46 -25
- data/lib/mongo/socket/tcp.rb +1 -1
- data/lib/mongo/srv/monitor.rb +7 -13
- data/lib/mongo/srv/resolver.rb +14 -10
- data/lib/mongo/timeout.rb +2 -0
- data/lib/mongo/topology_version.rb +9 -0
- data/lib/mongo/uri.rb +21 -390
- data/lib/mongo/uri/options_mapper.rb +582 -0
- data/lib/mongo/uri/srv_protocol.rb +3 -2
- data/lib/mongo/utils.rb +73 -0
- data/lib/mongo/version.rb +1 -1
- data/spec/NOTES.aws-auth.md +12 -7
- data/spec/README.aws-auth.md +2 -2
- data/spec/README.md +63 -1
- data/spec/integration/awaited_ismaster_spec.rb +28 -0
- data/spec/integration/bson_symbol_spec.rb +4 -2
- data/spec/integration/bulk_write_spec.rb +67 -0
- data/spec/integration/change_stream_examples_spec.rb +6 -2
- data/spec/integration/change_stream_spec.rb +1 -1
- data/spec/integration/check_clean_slate_spec.rb +16 -0
- data/spec/integration/client_authentication_options_spec.rb +92 -28
- data/spec/integration/client_construction_spec.rb +1 -0
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -5
- data/spec/integration/connect_single_rs_name_spec.rb +5 -2
- data/spec/integration/connection_pool_populator_spec.rb +4 -2
- data/spec/integration/connection_spec.rb +7 -4
- data/spec/integration/crud_spec.rb +4 -4
- data/spec/integration/cursor_reaping_spec.rb +54 -18
- data/spec/integration/docs_examples_spec.rb +6 -0
- data/spec/integration/fork_reconnect_spec.rb +56 -1
- data/spec/integration/grid_fs_bucket_spec.rb +48 -0
- data/spec/integration/heartbeat_events_spec.rb +4 -23
- data/spec/integration/ocsp_connectivity_spec.rb +26 -0
- data/spec/integration/ocsp_verifier_cache_spec.rb +188 -0
- data/spec/integration/ocsp_verifier_spec.rb +334 -0
- data/spec/integration/query_cache_spec.rb +1045 -0
- data/spec/integration/query_cache_transactions_spec.rb +190 -0
- data/spec/integration/read_concern_spec.rb +1 -1
- data/spec/integration/retryable_errors_spec.rb +1 -1
- data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -0
- data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +4 -2
- data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +3 -3
- data/spec/integration/retryable_writes/shared/performs_no_retries.rb +2 -2
- data/spec/integration/sdam_error_handling_spec.rb +122 -15
- data/spec/integration/sdam_events_spec.rb +80 -6
- data/spec/integration/sdam_prose_spec.rb +64 -0
- data/spec/integration/server_monitor_spec.rb +25 -1
- data/spec/integration/server_selection_spec.rb +36 -0
- data/spec/integration/size_limit_spec.rb +23 -5
- data/spec/integration/srv_monitoring_spec.rb +38 -3
- data/spec/integration/srv_spec.rb +56 -0
- data/spec/integration/ssl_uri_options_spec.rb +2 -2
- data/spec/integration/transactions_examples_spec.rb +17 -7
- data/spec/integration/zlib_compression_spec.rb +25 -0
- data/spec/lite_spec_helper.rb +20 -9
- data/spec/mongo/address_spec.rb +1 -1
- data/spec/mongo/auth/aws/request_region_spec.rb +42 -0
- data/spec/mongo/auth/aws/request_spec.rb +76 -0
- data/spec/mongo/auth/scram_spec.rb +1 -1
- data/spec/mongo/auth/user_spec.rb +1 -1
- data/spec/mongo/bulk_write_spec.rb +2 -2
- data/spec/mongo/caching_cursor_spec.rb +70 -0
- data/spec/mongo/client_construction_spec.rb +386 -3
- data/spec/mongo/client_encryption_spec.rb +16 -10
- data/spec/mongo/client_spec.rb +85 -3
- data/spec/mongo/cluster/topology/replica_set_spec.rb +53 -10
- data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
- data/spec/mongo/cluster/topology/single_spec.rb +19 -8
- data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
- data/spec/mongo/cluster/topology_spec.rb +1 -1
- data/spec/mongo/cluster_spec.rb +37 -35
- data/spec/mongo/collection/view/change_stream_resume_spec.rb +7 -7
- data/spec/mongo/collection/view/explainable_spec.rb +87 -4
- data/spec/mongo/collection/view/map_reduce_spec.rb +2 -0
- data/spec/mongo/collection/view/readable_spec.rb +36 -0
- data/spec/mongo/collection_spec.rb +572 -0
- data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/binary_spec.rb +1 -6
- data/spec/mongo/crypt/binding/binary_spec.rb +1 -6
- data/spec/mongo/crypt/binding/context_spec.rb +2 -7
- data/spec/mongo/crypt/binding/helpers_spec.rb +1 -6
- data/spec/mongo/crypt/binding/mongocrypt_spec.rb +2 -7
- data/spec/mongo/crypt/binding/status_spec.rb +1 -6
- data/spec/mongo/crypt/binding/version_spec.rb +1 -6
- data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
- data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/status_spec.rb +1 -6
- data/spec/mongo/database_spec.rb +353 -8
- data/spec/mongo/distinguishing_semaphore_spec.rb +63 -0
- data/spec/mongo/error/no_server_available_spec.rb +1 -1
- data/spec/mongo/error/operation_failure_spec.rb +40 -0
- data/spec/mongo/index/view_spec.rb +148 -2
- data/spec/mongo/logger_spec.rb +13 -11
- data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -4
- data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
- data/spec/mongo/operation/delete/op_msg_spec.rb +3 -3
- data/spec/mongo/operation/insert/command_spec.rb +2 -2
- data/spec/mongo/operation/insert/op_msg_spec.rb +3 -3
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
- data/spec/mongo/operation/update/command_spec.rb +2 -2
- data/spec/mongo/operation/update/op_msg_spec.rb +3 -3
- data/spec/mongo/protocol/msg_spec.rb +10 -0
- data/spec/mongo/query_cache_spec.rb +280 -0
- data/spec/mongo/semaphore_spec.rb +51 -0
- data/spec/mongo/server/app_metadata_shared.rb +82 -2
- data/spec/mongo/server/connection_auth_spec.rb +2 -2
- data/spec/mongo/server/connection_pool_spec.rb +7 -3
- data/spec/mongo/server/connection_spec.rb +15 -8
- data/spec/mongo/server/description_spec.rb +18 -0
- data/spec/mongo/server_selector/nearest_spec.rb +23 -23
- data/spec/mongo/server_selector/primary_preferred_spec.rb +26 -26
- data/spec/mongo/server_selector/primary_spec.rb +9 -9
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +22 -22
- data/spec/mongo/server_selector/secondary_spec.rb +18 -18
- data/spec/mongo/server_selector_spec.rb +6 -6
- data/spec/mongo/session_spec.rb +35 -0
- data/spec/mongo/socket/ssl_spec.rb +4 -4
- data/spec/mongo/socket_spec.rb +1 -1
- data/spec/mongo/uri/srv_protocol_spec.rb +64 -33
- data/spec/mongo/uri_option_parsing_spec.rb +11 -11
- data/spec/mongo/uri_spec.rb +68 -41
- data/spec/mongo/utils_spec.rb +39 -0
- data/spec/runners/auth.rb +3 -0
- data/spec/runners/change_streams/test.rb +3 -3
- data/spec/runners/cmap.rb +1 -1
- data/spec/runners/command_monitoring.rb +3 -34
- data/spec/runners/connection_string.rb +35 -124
- data/spec/runners/crud/context.rb +9 -5
- data/spec/runners/crud/operation.rb +59 -27
- data/spec/runners/crud/spec.rb +0 -8
- data/spec/runners/crud/test.rb +1 -1
- data/spec/runners/crud/test_base.rb +0 -19
- data/spec/runners/sdam.rb +2 -2
- data/spec/runners/server_selection.rb +242 -28
- data/spec/runners/transactions.rb +12 -12
- data/spec/runners/transactions/operation.rb +151 -25
- data/spec/runners/transactions/test.rb +62 -18
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/constraints.rb +303 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
- data/spec/spec_helper.rb +3 -1
- data/spec/spec_tests/cmap_spec.rb +7 -3
- data/spec/spec_tests/command_monitoring_spec.rb +22 -12
- data/spec/spec_tests/crud_spec.rb +1 -1
- data/spec/spec_tests/data/change_streams/change-streams-errors.yml +4 -9
- data/spec/spec_tests/data/change_streams/change-streams-resume-whitelist.yml +66 -0
- data/spec/spec_tests/data/change_streams/change-streams.yml +0 -1
- data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +6 -2
- data/spec/spec_tests/data/cmap/pool-create-min-size.yml +3 -0
- data/spec/spec_tests/data/connection_string/valid-warnings.yml +24 -0
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/MaxStalenessTooSmall.yml +15 -0
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml +4 -3
- data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +1 -0
- data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +96 -0
- data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +88 -0
- data/spec/spec_tests/data/sdam_integration/find-network-error.yml +83 -0
- data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +116 -0
- data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +86 -0
- data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +115 -0
- data/spec/spec_tests/data/sdam_integration/isMaster-command-error.yml +168 -0
- data/spec/spec_tests/data/sdam_integration/isMaster-network-error.yml +162 -0
- data/spec/spec_tests/data/sdam_integration/isMaster-timeout.yml +229 -0
- data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +87 -0
- data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -3
- data/spec/spec_tests/data/sdam_monitoring/standalone.yml +2 -2
- data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +2 -2
- data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
- data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +2 -2
- data/spec/spec_tests/data/uri_options/auth-options.yml +25 -0
- data/spec/spec_tests/data/uri_options/compression-options.yml +6 -3
- data/spec/spec_tests/data/uri_options/read-preference-options.yml +24 -0
- data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +1 -0
- data/spec/spec_tests/data/uri_options/tls-options.yml +160 -4
- data/spec/spec_tests/dns_seedlist_discovery_spec.rb +9 -1
- data/spec/spec_tests/max_staleness_spec.rb +4 -142
- data/spec/spec_tests/retryable_reads_spec.rb +2 -2
- data/spec/spec_tests/sdam_integration_spec.rb +13 -0
- data/spec/spec_tests/sdam_monitoring_spec.rb +1 -2
- data/spec/spec_tests/server_selection_spec.rb +4 -116
- data/spec/spec_tests/uri_options_spec.rb +31 -33
- data/spec/stress/cleanup_spec.rb +17 -2
- data/spec/stress/connection_pool_stress_spec.rb +10 -8
- data/spec/stress/fork_reconnect_stress_spec.rb +1 -1
- data/spec/support/certificates/atlas-ocsp-ca.crt +28 -0
- data/spec/support/certificates/atlas-ocsp.crt +41 -0
- data/spec/support/client_registry.rb +1 -0
- data/spec/support/client_registry_macros.rb +11 -2
- data/spec/support/cluster_config.rb +4 -0
- data/spec/support/common_shortcuts.rb +45 -0
- data/spec/support/constraints.rb +6 -253
- data/spec/support/event_subscriber.rb +123 -33
- data/spec/support/keyword_struct.rb +26 -0
- data/spec/support/matchers.rb +16 -0
- data/spec/support/ocsp +1 -0
- data/spec/support/session_registry.rb +52 -0
- data/spec/support/shared/server_selector.rb +13 -1
- data/spec/support/spec_config.rb +60 -13
- data/spec/support/spec_setup.rb +1 -1
- data/spec/support/utils.rb +84 -1
- metadata +1027 -937
- metadata.gz.sig +0 -0
- data/lib/mongo/server_selector/selectable.rb +0 -560
- data/spec/runners/sdam_monitoring.rb +0 -89
- data/spec/support/lite_constraints.rb +0 -141
@@ -268,7 +268,7 @@ describe Mongo::ClientEncryption do
|
|
268
268
|
it_behaves_like 'it creates a data key'
|
269
269
|
end
|
270
270
|
|
271
|
-
context 'with
|
271
|
+
context 'with https' do
|
272
272
|
let(:options) do
|
273
273
|
{
|
274
274
|
master_key: {
|
@@ -279,20 +279,26 @@ describe Mongo::ClientEncryption do
|
|
279
279
|
}
|
280
280
|
end
|
281
281
|
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
282
|
+
it_behaves_like 'it creates a data key'
|
283
|
+
end
|
284
|
+
|
285
|
+
context 'with invalid endpoint' do
|
286
|
+
let(:options) do
|
287
|
+
{
|
288
|
+
master_key: {
|
289
|
+
key: aws_arn,
|
290
|
+
region: aws_region,
|
291
|
+
endpoint: "invalid-nonsense-endpoint.com"
|
292
|
+
}
|
293
|
+
}
|
290
294
|
end
|
291
295
|
|
292
296
|
it 'raises an exception' do
|
297
|
+
# RUBY-2129: This error message could be more specific and inform the user
|
298
|
+
# that there is a problem with their KMS endpoint
|
293
299
|
expect do
|
294
300
|
data_key_id
|
295
|
-
end.to raise_error(Mongo::Error::KmsError,
|
301
|
+
end.to raise_error(Mongo::Error::KmsError, /SocketError/)
|
296
302
|
end
|
297
303
|
end
|
298
304
|
|
data/spec/mongo/client_spec.rb
CHANGED
@@ -595,6 +595,21 @@ describe Mongo::Client do
|
|
595
595
|
end
|
596
596
|
|
597
597
|
context 'when name_only is true' do
|
598
|
+
min_server_fcv '3.6'
|
599
|
+
|
600
|
+
let(:command) do
|
601
|
+
Utils.get_command_event(root_authorized_client, 'listDatabases') do |client|
|
602
|
+
client.list_databases({}, true)
|
603
|
+
end.command
|
604
|
+
end
|
605
|
+
|
606
|
+
it 'sends the command with the nameOnly flag set to true' do
|
607
|
+
expect(command[:nameOnly]).to be(true)
|
608
|
+
end
|
609
|
+
end
|
610
|
+
|
611
|
+
context 'when authorized_databases is provided' do
|
612
|
+
min_server_fcv '4.0'
|
598
613
|
|
599
614
|
let(:client_options) do
|
600
615
|
root_authorized_client.options.merge(heartbeat_frequency: 100, monitoring: true)
|
@@ -614,12 +629,32 @@ describe Mongo::Client do
|
|
614
629
|
subscriber.started_events.find { |c| c.command_name == 'listDatabases' }.command
|
615
630
|
end
|
616
631
|
|
632
|
+
let(:authDb) do
|
633
|
+
{ authorized_databases: true }
|
634
|
+
end
|
635
|
+
|
636
|
+
let(:noAuthDb) do
|
637
|
+
{ authorized_databases: false }
|
638
|
+
end
|
639
|
+
|
617
640
|
before do
|
618
|
-
client.list_databases({}, true)
|
641
|
+
client.list_databases({}, true, authDb)
|
642
|
+
client.list_databases({}, true, noAuthDb)
|
619
643
|
end
|
620
644
|
|
621
|
-
|
622
|
-
|
645
|
+
let(:events) do
|
646
|
+
subscriber.command_started_events('listDatabases')
|
647
|
+
end
|
648
|
+
|
649
|
+
it 'sends the command with the authorizedDatabases flag set to true' do
|
650
|
+
expect(events.length).to eq(2)
|
651
|
+
command = events.first.command
|
652
|
+
expect(command[:authorizedDatabases]).to be(true)
|
653
|
+
end
|
654
|
+
|
655
|
+
it 'sends the command with the authorizedDatabases flag set to nil' do
|
656
|
+
command = events.last.command
|
657
|
+
expect(command[:authorizedDatabases]).to be_nil
|
623
658
|
end
|
624
659
|
end
|
625
660
|
end
|
@@ -692,6 +727,13 @@ describe Mongo::Client do
|
|
692
727
|
expect(new_id).not_to eql(old_id)
|
693
728
|
end
|
694
729
|
|
730
|
+
it 'replaces the session pool' do
|
731
|
+
old_id = client.cluster.session_pool.object_id
|
732
|
+
client.reconnect
|
733
|
+
new_id = client.cluster.session_pool.object_id
|
734
|
+
expect(new_id).not_to eql(old_id)
|
735
|
+
end
|
736
|
+
|
695
737
|
it 'returns true' do
|
696
738
|
expect(client.reconnect).to be(true)
|
697
739
|
end
|
@@ -859,4 +901,44 @@ describe Mongo::Client do
|
|
859
901
|
end
|
860
902
|
end
|
861
903
|
end
|
904
|
+
|
905
|
+
describe '#summary' do
|
906
|
+
|
907
|
+
context 'monitoring omitted' do
|
908
|
+
let(:client) do
|
909
|
+
new_local_client_nmio(
|
910
|
+
['127.0.0.1:27017'],
|
911
|
+
:read => { :mode => :primary },
|
912
|
+
:database => SpecConfig.instance.test_db
|
913
|
+
)
|
914
|
+
end
|
915
|
+
|
916
|
+
it 'indicates lack of monitoring' do
|
917
|
+
client.summary.should =~ /servers=.*UNKNOWN.*NO-MONITORING/
|
918
|
+
end
|
919
|
+
end
|
920
|
+
|
921
|
+
context 'monitoring present' do
|
922
|
+
let(:client) do
|
923
|
+
authorized_client
|
924
|
+
end
|
925
|
+
|
926
|
+
it 'does not indicate lack of monitoring' do
|
927
|
+
client.summary.should =~ /servers=.*(STANDALONE|PRIMARY|MONGOS)/
|
928
|
+
client.summary.should_not =~ /servers=.*(STANDALONE|PRIMARY|MONGOS).*NO-MONITORING/
|
929
|
+
end
|
930
|
+
end
|
931
|
+
|
932
|
+
context 'background threads killed' do
|
933
|
+
let(:client) do
|
934
|
+
authorized_client.tap do |client|
|
935
|
+
client.cluster.servers.map(&:disconnect!)
|
936
|
+
end
|
937
|
+
end
|
938
|
+
|
939
|
+
it 'does not indicate lack of monitoring' do
|
940
|
+
client.summary.should =~ /servers=.*(STANDALONE|PRIMARY|MONGOS).*NO-MONITORING/
|
941
|
+
end
|
942
|
+
end
|
943
|
+
end
|
862
944
|
end
|
@@ -150,7 +150,13 @@ describe Mongo::Cluster::Topology::ReplicaSetNoPrimary do
|
|
150
150
|
end
|
151
151
|
|
152
152
|
let(:cluster) do
|
153
|
-
double('cluster',
|
153
|
+
double('cluster',
|
154
|
+
servers: servers,
|
155
|
+
single?: false,
|
156
|
+
replica_set?: true,
|
157
|
+
sharded?: false,
|
158
|
+
unknown?: false,
|
159
|
+
)
|
154
160
|
end
|
155
161
|
|
156
162
|
context 'when the read preference is primary' do
|
@@ -162,7 +168,11 @@ describe Mongo::Cluster::Topology::ReplicaSetNoPrimary do
|
|
162
168
|
context 'when a primary exists' do
|
163
169
|
|
164
170
|
let(:servers) do
|
165
|
-
[ double('server',
|
171
|
+
[ double('server',
|
172
|
+
primary?: true,
|
173
|
+
# for runs with linting enabled
|
174
|
+
average_round_trip_time: 42,
|
175
|
+
) ]
|
166
176
|
end
|
167
177
|
|
168
178
|
it 'returns true' do
|
@@ -191,7 +201,12 @@ describe Mongo::Cluster::Topology::ReplicaSetNoPrimary do
|
|
191
201
|
context 'when a primary exists' do
|
192
202
|
|
193
203
|
let(:servers) do
|
194
|
-
[ double('server',
|
204
|
+
[ double('server',
|
205
|
+
primary?: true,
|
206
|
+
secondary?: false,
|
207
|
+
# for runs with linting enabled
|
208
|
+
average_round_trip_time: 42,
|
209
|
+
) ]
|
195
210
|
end
|
196
211
|
|
197
212
|
it 'returns true' do
|
@@ -260,7 +275,12 @@ describe Mongo::Cluster::Topology::ReplicaSetNoPrimary do
|
|
260
275
|
context 'when a secondary does not exist' do
|
261
276
|
|
262
277
|
let(:servers) do
|
263
|
-
[ double('server',
|
278
|
+
[ double('server',
|
279
|
+
secondary?: false,
|
280
|
+
primary?: true,
|
281
|
+
# for runs with linting enabled
|
282
|
+
average_round_trip_time: 42,
|
283
|
+
) ]
|
264
284
|
end
|
265
285
|
|
266
286
|
it 'returns true' do
|
@@ -289,7 +309,12 @@ describe Mongo::Cluster::Topology::ReplicaSetNoPrimary do
|
|
289
309
|
context 'when a primary exists' do
|
290
310
|
|
291
311
|
let(:servers) do
|
292
|
-
[ double('server',
|
312
|
+
[ double('server',
|
313
|
+
primary?: true,
|
314
|
+
secondary?: false,
|
315
|
+
# for runs with linting enabled
|
316
|
+
average_round_trip_time: 42,
|
317
|
+
) ]
|
293
318
|
end
|
294
319
|
|
295
320
|
it 'returns true' do
|
@@ -319,15 +344,28 @@ describe Mongo::Cluster::Topology::ReplicaSetNoPrimary do
|
|
319
344
|
context 'when a primary server exists' do
|
320
345
|
|
321
346
|
let(:primary) do
|
322
|
-
double('server',
|
347
|
+
double('server',
|
348
|
+
:primary? => true,
|
349
|
+
# for runs with linting enabled
|
350
|
+
average_round_trip_time: 42,
|
351
|
+
)
|
323
352
|
end
|
324
353
|
|
325
354
|
let(:secondary) do
|
326
|
-
double('server',
|
355
|
+
double('server',
|
356
|
+
:primary? => false,
|
357
|
+
# for runs with linting enabled
|
358
|
+
average_round_trip_time: 42,
|
359
|
+
)
|
327
360
|
end
|
328
361
|
|
329
362
|
let(:cluster) do
|
330
|
-
double('cluster',
|
363
|
+
double('cluster',
|
364
|
+
single?: false,
|
365
|
+
replica_set?: true,
|
366
|
+
sharded?: false,
|
367
|
+
servers: [ primary, secondary ],
|
368
|
+
)
|
331
369
|
end
|
332
370
|
|
333
371
|
it 'returns true' do
|
@@ -342,7 +380,12 @@ describe Mongo::Cluster::Topology::ReplicaSetNoPrimary do
|
|
342
380
|
end
|
343
381
|
|
344
382
|
let(:cluster) do
|
345
|
-
double('cluster',
|
383
|
+
double('cluster',
|
384
|
+
single?: false,
|
385
|
+
replica_set?: true,
|
386
|
+
sharded?: false,
|
387
|
+
servers: [ server ],
|
388
|
+
)
|
346
389
|
end
|
347
390
|
|
348
391
|
it 'returns false' do
|
@@ -522,7 +565,7 @@ describe Mongo::Cluster::Topology::ReplicaSetNoPrimary do
|
|
522
565
|
end
|
523
566
|
|
524
567
|
describe '#summary' do
|
525
|
-
|
568
|
+
require_no_linting
|
526
569
|
|
527
570
|
let(:desc) do
|
528
571
|
Mongo::Server::Description.new(Mongo::Address.new('127.0.0.2:27017'))
|
@@ -87,8 +87,10 @@ describe Mongo::Cluster::Topology::Single do
|
|
87
87
|
topology.servers([ mongos, standalone, standalone_two, replica_set ])
|
88
88
|
end
|
89
89
|
|
90
|
-
it 'returns
|
91
|
-
|
90
|
+
it 'returns all data-bearing non-unknown servers' do
|
91
|
+
# mongos and replica_set do not have ok: 1 in their descriptions,
|
92
|
+
# and are considered unknown.
|
93
|
+
expect(servers).to eq([ standalone, standalone_two ])
|
92
94
|
end
|
93
95
|
end
|
94
96
|
|
@@ -111,19 +113,28 @@ describe Mongo::Cluster::Topology::Single do
|
|
111
113
|
monitoring, temp_cluster)
|
112
114
|
end
|
113
115
|
|
116
|
+
let(:server_1) do
|
117
|
+
double('server').tap do |server|
|
118
|
+
allow(server).to receive(:address).and_return(Mongo::Address.new('one'))
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
let(:server_2) do
|
123
|
+
double('server').tap do |server|
|
124
|
+
allow(server).to receive(:address).and_return(Mongo::Address.new('two'))
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
114
128
|
let(:temp_cluster) do
|
115
129
|
double('temp cluster').tap do |cluster|
|
116
|
-
allow(cluster).to receive(:servers_list).and_return([
|
117
|
-
double('server'),
|
118
|
-
double('server'),
|
119
|
-
])
|
130
|
+
allow(cluster).to receive(:servers_list).and_return([server_1, server_2])
|
120
131
|
end
|
121
132
|
end
|
122
133
|
|
123
134
|
it 'fails' do
|
124
135
|
expect do
|
125
136
|
topology
|
126
|
-
end.to raise_error(ArgumentError,
|
137
|
+
end.to raise_error(ArgumentError, /Cannot instantiate a single topology with more than one server in the cluster: one, two/)
|
127
138
|
end
|
128
139
|
end
|
129
140
|
end
|
@@ -164,7 +175,7 @@ describe Mongo::Cluster::Topology::Single do
|
|
164
175
|
end
|
165
176
|
|
166
177
|
describe '#summary' do
|
167
|
-
|
178
|
+
require_no_linting
|
168
179
|
|
169
180
|
let(:desc) do
|
170
181
|
Mongo::Server::Description.new(Mongo::Address.new('127.0.0.2:27017'))
|
data/spec/mongo/cluster_spec.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'runners/sdam_monitoring'
|
3
2
|
|
4
3
|
describe Mongo::Cluster do
|
5
4
|
|
@@ -179,6 +178,9 @@ describe Mongo::Cluster do
|
|
179
178
|
before do
|
180
179
|
expect(server).to receive(:monitor).at_least(:once).and_return(monitor)
|
181
180
|
expect(monitor).to receive(:scan!)
|
181
|
+
|
182
|
+
# scan! complains that there isn't a monitor on the server, calls summary
|
183
|
+
allow(monitor).to receive(:running?)
|
182
184
|
end
|
183
185
|
|
184
186
|
it 'returns true' do
|
@@ -344,13 +346,13 @@ describe Mongo::Cluster do
|
|
344
346
|
end
|
345
347
|
|
346
348
|
let(:monitoring) { Mongo::Monitoring.new }
|
347
|
-
let(:subscriber) {
|
349
|
+
let(:subscriber) { EventSubscriber.new }
|
348
350
|
|
349
351
|
it 'publishes server closed event once' do
|
350
352
|
monitoring.subscribe(Mongo::Monitoring::SERVER_CLOSED, subscriber)
|
351
353
|
expect(cluster.disconnect!).to be(true)
|
352
354
|
expect(subscriber.first_event('server_closed_event')).not_to be nil
|
353
|
-
subscriber.
|
355
|
+
subscriber.succeeded_events.clear
|
354
356
|
expect(cluster.disconnect!).to be(true)
|
355
357
|
expect(subscriber.first_event('server_closed_event')).to be nil
|
356
358
|
end
|
@@ -595,7 +597,23 @@ describe Mongo::Cluster do
|
|
595
597
|
end
|
596
598
|
end
|
597
599
|
|
598
|
-
describe '#
|
600
|
+
describe '#validate_session_support!' do
|
601
|
+
shared_examples 'supports sessions' do
|
602
|
+
it 'supports sessions' do
|
603
|
+
lambda do
|
604
|
+
cluster.validate_session_support!
|
605
|
+
end.should_not raise_error
|
606
|
+
end
|
607
|
+
end
|
608
|
+
|
609
|
+
shared_examples 'does not support sessions' do
|
610
|
+
it 'does not support sessions' do
|
611
|
+
lambda do
|
612
|
+
cluster.validate_session_support!
|
613
|
+
end.should raise_error(Mongo::Error::SessionsNotSupported)
|
614
|
+
end
|
615
|
+
end
|
616
|
+
|
599
617
|
context 'when client has not contacted any servers' do
|
600
618
|
|
601
619
|
let(:cluster) do
|
@@ -604,9 +622,7 @@ describe Mongo::Cluster do
|
|
604
622
|
monitoring_io: false, server_selection_timeout: 0.183))
|
605
623
|
end
|
606
624
|
|
607
|
-
|
608
|
-
expect(cluster.send(:sessions_supported?)).to be false
|
609
|
-
end
|
625
|
+
it_behaves_like 'does not support sessions'
|
610
626
|
end
|
611
627
|
|
612
628
|
context 'when client has contacted servers and then disconnected' do
|
@@ -629,22 +645,20 @@ describe Mongo::Cluster do
|
|
629
645
|
cluster.servers_list.map(&:unknown!)
|
630
646
|
end
|
631
647
|
|
632
|
-
|
633
|
-
expect(cluster.send(:sessions_supported?)).to be true
|
634
|
-
end
|
648
|
+
it_behaves_like 'supports sessions'
|
635
649
|
end
|
636
650
|
|
637
651
|
context 'in server < 3.6' do
|
638
652
|
max_server_version '3.4'
|
639
653
|
|
654
|
+
let(:cluster) { client.cluster }
|
655
|
+
|
640
656
|
context 'in single topology' do
|
641
657
|
require_topology :single
|
642
658
|
|
643
659
|
let(:client) { ClientRegistry.instance.global_client('authorized') }
|
644
660
|
|
645
|
-
|
646
|
-
expect(client.cluster.send(:sessions_supported?)).to be false
|
647
|
-
end
|
661
|
+
it_behaves_like 'does not support sessions'
|
648
662
|
end
|
649
663
|
|
650
664
|
context 'in single topology with replica set name set' do
|
@@ -656,9 +670,7 @@ describe Mongo::Cluster do
|
|
656
670
|
connect: :direct, replica_set: ClusterConfig.instance.replica_set_name))
|
657
671
|
end
|
658
672
|
|
659
|
-
|
660
|
-
expect(client.cluster.send(:sessions_supported?)).to be false
|
661
|
-
end
|
673
|
+
it_behaves_like 'does not support sessions'
|
662
674
|
end
|
663
675
|
|
664
676
|
context 'in replica set topology' do
|
@@ -666,9 +678,7 @@ describe Mongo::Cluster do
|
|
666
678
|
|
667
679
|
let(:client) { ClientRegistry.instance.global_client('authorized') }
|
668
680
|
|
669
|
-
|
670
|
-
expect(client.cluster.send(:sessions_supported?)).to be false
|
671
|
-
end
|
681
|
+
it_behaves_like 'does not support sessions'
|
672
682
|
end
|
673
683
|
|
674
684
|
context 'in sharded topology' do
|
@@ -676,15 +686,15 @@ describe Mongo::Cluster do
|
|
676
686
|
|
677
687
|
let(:client) { ClientRegistry.instance.global_client('authorized') }
|
678
688
|
|
679
|
-
|
680
|
-
expect(client.cluster.send(:sessions_supported?)).to be false
|
681
|
-
end
|
689
|
+
it_behaves_like 'does not support sessions'
|
682
690
|
end
|
683
691
|
end
|
684
692
|
|
685
693
|
context 'in server 3.6+' do
|
686
694
|
min_server_fcv '3.6'
|
687
695
|
|
696
|
+
let(:cluster) { client.cluster }
|
697
|
+
|
688
698
|
context 'in single topology' do
|
689
699
|
require_topology :single
|
690
700
|
|
@@ -692,10 +702,8 @@ describe Mongo::Cluster do
|
|
692
702
|
|
693
703
|
# Contrary to the session spec, 3.6 and 4.0 standalone servers
|
694
704
|
# report a logical session timeout and thus are considered to
|
695
|
-
# support sessions
|
696
|
-
|
697
|
-
expect(client.cluster.send(:sessions_supported?)).to be true
|
698
|
-
end
|
705
|
+
# support sessions.
|
706
|
+
it_behaves_like 'supports sessions'
|
699
707
|
end
|
700
708
|
|
701
709
|
context 'in single topology with replica set name set' do
|
@@ -707,9 +715,7 @@ describe Mongo::Cluster do
|
|
707
715
|
connect: :direct, replica_set: ClusterConfig.instance.replica_set_name))
|
708
716
|
end
|
709
717
|
|
710
|
-
|
711
|
-
expect(client.cluster.send(:sessions_supported?)).to be true
|
712
|
-
end
|
718
|
+
it_behaves_like 'supports sessions'
|
713
719
|
end
|
714
720
|
|
715
721
|
context 'in replica set topology' do
|
@@ -717,9 +723,7 @@ describe Mongo::Cluster do
|
|
717
723
|
|
718
724
|
let(:client) { ClientRegistry.instance.global_client('authorized') }
|
719
725
|
|
720
|
-
|
721
|
-
expect(client.cluster.send(:sessions_supported?)).to be true
|
722
|
-
end
|
726
|
+
it_behaves_like 'supports sessions'
|
723
727
|
end
|
724
728
|
|
725
729
|
context 'in sharded topology' do
|
@@ -727,9 +731,7 @@ describe Mongo::Cluster do
|
|
727
731
|
|
728
732
|
let(:client) { ClientRegistry.instance.global_client('authorized') }
|
729
733
|
|
730
|
-
|
731
|
-
expect(client.cluster.send(:sessions_supported?)).to be true
|
732
|
-
end
|
734
|
+
it_behaves_like 'supports sessions'
|
733
735
|
end
|
734
736
|
end
|
735
737
|
end
|