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
data/spec/mongo/session_spec.rb
CHANGED
@@ -307,4 +307,39 @@ describe Mongo::Session do
|
|
307
307
|
end
|
308
308
|
end
|
309
309
|
end
|
310
|
+
|
311
|
+
describe '#start_session' do
|
312
|
+
context 'when block doesn\'t raise an error' do
|
313
|
+
it 'closes the session after the block' do
|
314
|
+
block_session = nil
|
315
|
+
authorized_client.start_session do |session|
|
316
|
+
expect(session.ended?).to be false
|
317
|
+
block_session = session
|
318
|
+
end
|
319
|
+
expect(block_session.ended?).to be true
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
context 'when block raises an error' do
|
324
|
+
it 'closes the session after the block' do
|
325
|
+
block_session = nil
|
326
|
+
expect do
|
327
|
+
authorized_client.start_session do |session|
|
328
|
+
block_session = session
|
329
|
+
raise 'This is an error!'
|
330
|
+
end
|
331
|
+
end.to raise_error(StandardError, 'This is an error!')
|
332
|
+
expect(block_session.ended?).to be true
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
context 'when block returns value' do
|
337
|
+
it 'is returned by the function' do
|
338
|
+
res = authorized_client.start_session do |session|
|
339
|
+
4
|
340
|
+
end
|
341
|
+
expect(res).to be 4
|
342
|
+
end
|
343
|
+
end
|
344
|
+
end
|
310
345
|
end
|
@@ -246,7 +246,7 @@ describe Mongo::Socket::SSL, retry: 3 do
|
|
246
246
|
it 'raises an error' do
|
247
247
|
lambda do
|
248
248
|
socket
|
249
|
-
end.should raise_error(Mongo::Error::SocketError, /
|
249
|
+
end.should raise_error(Mongo::Error::SocketError, /TLS handshake failed due to a hostname mismatch/)
|
250
250
|
end
|
251
251
|
end
|
252
252
|
|
@@ -338,7 +338,7 @@ describe Mongo::Socket::SSL, retry: 3 do
|
|
338
338
|
end
|
339
339
|
|
340
340
|
context 'mri' do
|
341
|
-
|
341
|
+
require_mri
|
342
342
|
|
343
343
|
context 'when a bad certificate is provided' do
|
344
344
|
|
@@ -625,7 +625,7 @@ describe Mongo::Socket::SSL, retry: 3 do
|
|
625
625
|
context 'bundled with intermediate cert' do
|
626
626
|
|
627
627
|
# https://github.com/jruby/jruby-openssl/issues/181
|
628
|
-
|
628
|
+
require_mri
|
629
629
|
|
630
630
|
let(:ssl_options) do
|
631
631
|
SpecConfig.instance.test_options.merge(
|
@@ -670,7 +670,7 @@ describe Mongo::Socket::SSL, retry: 3 do
|
|
670
670
|
context 'bundled with intermediate cert' do
|
671
671
|
|
672
672
|
# https://github.com/jruby/jruby-openssl/issues/181
|
673
|
-
|
673
|
+
require_mri
|
674
674
|
|
675
675
|
let(:ssl_options) do
|
676
676
|
SpecConfig.instance.test_options.merge(
|
data/spec/mongo/socket_spec.rb
CHANGED
@@ -48,7 +48,7 @@ describe Mongo::Socket do
|
|
48
48
|
socket.send(:map_exceptions) do
|
49
49
|
raise OpenSSL::SSL::SSLError.new('Test error')
|
50
50
|
end
|
51
|
-
end.to raise_error(Mongo::Error::SocketError, 'OpenSSL::SSL::SSLError: Test error (for fake-address) (MongoDB may not be configured with
|
51
|
+
end.to raise_error(Mongo::Error::SocketError, 'OpenSSL::SSL::SSLError: Test error (for fake-address) (MongoDB may not be configured with TLS support)')
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
@@ -567,8 +567,8 @@ describe Mongo::URI::SRVProtocol do
|
|
567
567
|
'readPreference=secondary&maxStalenessSeconds=89'
|
568
568
|
end
|
569
569
|
|
570
|
-
it 'does not raise an exception
|
571
|
-
expect(client.read_preference).to eq(BSON::Document.new(mode: :secondary
|
570
|
+
it 'does not raise an exception and is omitted' do
|
571
|
+
expect(client.read_preference).to eq(BSON::Document.new(mode: :secondary))
|
572
572
|
end
|
573
573
|
end
|
574
574
|
end
|
@@ -715,83 +715,114 @@ describe Mongo::URI::SRVProtocol do
|
|
715
715
|
end
|
716
716
|
end
|
717
717
|
|
718
|
+
# This context exactly duplicates the same one in uri_spec.rb
|
718
719
|
context 'auth mechanism properties provided' do
|
719
720
|
|
721
|
+
shared_examples 'sets options in the expected manner' do
|
722
|
+
it 'preserves case in auth mechanism properties returned from URI' do
|
723
|
+
expect(uri.uri_options[:auth_mech_properties]).to eq(expected_uri_options)
|
724
|
+
end
|
725
|
+
|
726
|
+
it 'downcases auth mechanism properties keys in client options' do
|
727
|
+
client = new_local_client_nmio(string)
|
728
|
+
expect(client.options[:auth_mech_properties]).to eq(expected_client_options)
|
729
|
+
end
|
730
|
+
end
|
731
|
+
|
720
732
|
context 'service_name' do
|
721
733
|
let(:options) do
|
722
|
-
"authMechanismProperties=
|
734
|
+
"authMechanismProperties=SERVICE_name:#{service_name}"
|
723
735
|
end
|
724
736
|
|
725
737
|
let(:service_name) { 'foo' }
|
726
|
-
let(:expected) { Mongo::Options::Redacted.new({ service_name: service_name }) }
|
727
738
|
|
728
|
-
|
729
|
-
|
739
|
+
let(:expected_uri_options) do
|
740
|
+
Mongo::Options::Redacted.new(
|
741
|
+
SERVICE_name: service_name,
|
742
|
+
)
|
730
743
|
end
|
731
744
|
|
732
|
-
|
733
|
-
|
745
|
+
let(:expected_client_options) do
|
746
|
+
Mongo::Options::Redacted.new(
|
747
|
+
service_name: service_name,
|
748
|
+
)
|
734
749
|
end
|
750
|
+
|
751
|
+
include_examples 'sets options in the expected manner'
|
735
752
|
end
|
736
753
|
|
737
754
|
context 'canonicalize_host_name' do
|
738
755
|
let(:options) do
|
739
|
-
"authMechanismProperties=
|
756
|
+
"authMechanismProperties=CANONICALIZE_HOST_name:#{canonicalize_host_name}"
|
740
757
|
end
|
758
|
+
|
741
759
|
let(:canonicalize_host_name) { 'true' }
|
742
|
-
let(:expected) { Mongo::Options::Redacted.new({ canonicalize_host_name: true }) }
|
743
760
|
|
744
|
-
|
745
|
-
|
761
|
+
let(:expected_uri_options) do
|
762
|
+
Mongo::Options::Redacted.new(
|
763
|
+
CANONICALIZE_HOST_name: true,
|
764
|
+
)
|
746
765
|
end
|
747
766
|
|
748
|
-
|
749
|
-
|
767
|
+
let(:expected_client_options) do
|
768
|
+
Mongo::Options::Redacted.new(
|
769
|
+
canonicalize_host_name: true,
|
770
|
+
)
|
750
771
|
end
|
772
|
+
|
773
|
+
include_examples 'sets options in the expected manner'
|
751
774
|
end
|
752
775
|
|
753
776
|
context 'service_realm' do
|
754
777
|
let(:options) do
|
755
|
-
"authMechanismProperties=
|
778
|
+
"authMechanismProperties=SERVICE_realm:#{service_realm}"
|
756
779
|
end
|
757
780
|
|
758
781
|
let(:service_realm) { 'dumdum' }
|
759
|
-
let(:expected) { Mongo::Options::Redacted.new({ service_realm: service_realm }) }
|
760
782
|
|
761
|
-
|
762
|
-
|
763
|
-
|
783
|
+
let(:expected_uri_options) do
|
784
|
+
Mongo::Options::Redacted.new(
|
785
|
+
SERVICE_realm: service_realm,
|
786
|
+
)
|
764
787
|
end
|
765
788
|
|
766
|
-
|
767
|
-
|
789
|
+
let(:expected_client_options) do
|
790
|
+
Mongo::Options::Redacted.new(
|
791
|
+
service_realm: service_realm,
|
792
|
+
)
|
768
793
|
end
|
794
|
+
|
795
|
+
include_examples 'sets options in the expected manner'
|
769
796
|
end
|
770
797
|
|
771
798
|
context 'multiple properties' do
|
772
799
|
let(:options) do
|
773
|
-
"authMechanismProperties=
|
774
|
-
|
775
|
-
|
800
|
+
"authMechanismProperties=SERVICE_realm:#{service_realm}," +
|
801
|
+
"CANONICALIZE_HOST_name:#{canonicalize_host_name}," +
|
802
|
+
"SERVICE_name:#{service_name}"
|
776
803
|
end
|
777
804
|
|
778
805
|
let(:service_name) { 'foo' }
|
779
806
|
let(:canonicalize_host_name) { 'true' }
|
780
807
|
let(:service_realm) { 'dumdum' }
|
781
808
|
|
782
|
-
let(:
|
783
|
-
Mongo::Options::Redacted.new(
|
784
|
-
|
785
|
-
|
809
|
+
let(:expected_uri_options) do
|
810
|
+
Mongo::Options::Redacted.new(
|
811
|
+
SERVICE_name: service_name,
|
812
|
+
CANONICALIZE_HOST_name: true,
|
813
|
+
SERVICE_realm: service_realm,
|
814
|
+
)
|
786
815
|
end
|
787
816
|
|
788
|
-
|
789
|
-
|
817
|
+
let(:expected_client_options) do
|
818
|
+
Mongo::Options::Redacted.new(
|
819
|
+
service_name: service_name,
|
820
|
+
canonicalize_host_name: true,
|
821
|
+
service_realm: service_realm,
|
822
|
+
)
|
790
823
|
end
|
791
824
|
|
792
|
-
|
793
|
-
expect(client.options[:auth_mech_properties]).to eq(expected)
|
794
|
-
end
|
825
|
+
include_examples 'sets options in the expected manner'
|
795
826
|
end
|
796
827
|
end
|
797
828
|
|
@@ -199,37 +199,37 @@ describe Mongo::URI do
|
|
199
199
|
|
200
200
|
context 'authMechanismProperties' do
|
201
201
|
|
202
|
-
let(:string) { 'mongodb://example.com/?authmechanismproperties=
|
202
|
+
let(:string) { 'mongodb://example.com/?authmechanismproperties=SERVICE_realm:foo,CANONICALIZE_HOST_name:TRUE' }
|
203
203
|
|
204
204
|
it_behaves_like 'parses successfully'
|
205
205
|
|
206
206
|
it 'parses correctly' do
|
207
207
|
expect(uri.uri_options[:auth_mech_properties]).to eq(BSON::Document.new(
|
208
|
-
|
209
|
-
|
208
|
+
SERVICE_realm: 'foo',
|
209
|
+
CANONICALIZE_HOST_name: true,
|
210
210
|
))
|
211
211
|
end
|
212
212
|
|
213
213
|
context 'canonicalize host name is false' do
|
214
214
|
|
215
|
-
let(:string) { 'mongodb://example.com/?authmechanismproperties=
|
215
|
+
let(:string) { 'mongodb://example.com/?authmechanismproperties=SERVICE_realm:foo,CANONICALIZE_HOST_name:false' }
|
216
216
|
|
217
217
|
it 'parses correctly' do
|
218
218
|
expect(uri.uri_options[:auth_mech_properties]).to eq(BSON::Document.new(
|
219
|
-
|
220
|
-
|
219
|
+
SERVICE_realm: 'foo',
|
220
|
+
CANONICALIZE_HOST_name: false,
|
221
221
|
))
|
222
222
|
end
|
223
223
|
end
|
224
224
|
|
225
225
|
context 'canonicalize host name is true in mixed case' do
|
226
226
|
|
227
|
-
let(:string) { 'mongodb://example.com/?authmechanismproperties=
|
227
|
+
let(:string) { 'mongodb://example.com/?authmechanismproperties=SERVICE_realm:foo,CANONICALIZE_HOST_name:TrUe' }
|
228
228
|
|
229
229
|
it 'parses correctly' do
|
230
230
|
expect(uri.uri_options[:auth_mech_properties]).to eq(BSON::Document.new(
|
231
|
-
|
232
|
-
|
231
|
+
SERVICE_realm: 'foo',
|
232
|
+
CANONICALIZE_HOST_name: true,
|
233
233
|
))
|
234
234
|
end
|
235
235
|
end
|
@@ -350,8 +350,8 @@ describe Mongo::URI do
|
|
350
350
|
|
351
351
|
it_behaves_like 'parses successfully'
|
352
352
|
|
353
|
-
it 'is
|
354
|
-
|
353
|
+
it 'is omitted' do
|
354
|
+
uri.uri_options.should_not have_key(:read)
|
355
355
|
end
|
356
356
|
end
|
357
357
|
end
|
data/spec/mongo/uri_spec.rb
CHANGED
@@ -727,9 +727,9 @@ describe Mongo::URI do
|
|
727
727
|
'readPreference=secondary&maxStalenessSeconds=89'
|
728
728
|
end
|
729
729
|
|
730
|
-
it 'does not raise an exception
|
730
|
+
it 'does not raise an exception and drops the option' do
|
731
731
|
client = new_local_client_nmio(string)
|
732
|
-
expect(client.read_preference).to eq(BSON::Document.new(mode: :secondary
|
732
|
+
expect(client.read_preference).to eq(BSON::Document.new(mode: :secondary))
|
733
733
|
end
|
734
734
|
end
|
735
735
|
end
|
@@ -854,16 +854,16 @@ describe Mongo::URI do
|
|
854
854
|
context 'when a mapping value is missing' do
|
855
855
|
let(:options) { "authMechanism=#{mechanism}&authMechanismProperties=SERVICE_NAME:,CANONICALIZE_HOST_NAME:" }
|
856
856
|
|
857
|
-
it 'sets the options
|
858
|
-
expect(client.options[:auth_mech_properties]).to eq({ '
|
857
|
+
it 'sets the options to defaults' do
|
858
|
+
expect(client.options[:auth_mech_properties]).to eq({ 'service_name' => 'mongodb' })
|
859
859
|
end
|
860
860
|
end
|
861
861
|
|
862
862
|
context 'when a mapping value is missing but another is present' do
|
863
863
|
let(:options) { "authMechanism=#{mechanism}&authMechanismProperties=SERVICE_NAME:foo,CANONICALIZE_HOST_NAME:" }
|
864
864
|
|
865
|
-
it 'sets the
|
866
|
-
expect(client.options[:auth_mech_properties]).to eq({ '
|
865
|
+
it 'only sets the present value' do
|
866
|
+
expect(client.options[:auth_mech_properties]).to eq({ 'service_name' => 'foo' })
|
867
867
|
end
|
868
868
|
end
|
869
869
|
end
|
@@ -1013,84 +1013,111 @@ describe Mongo::URI do
|
|
1013
1013
|
|
1014
1014
|
context 'auth mechanism properties provided' do
|
1015
1015
|
|
1016
|
+
shared_examples 'sets options in the expected manner' do
|
1017
|
+
it 'preserves case in auth mechanism properties returned from URI' do
|
1018
|
+
expect(uri.uri_options[:auth_mech_properties]).to eq(expected_uri_options)
|
1019
|
+
end
|
1020
|
+
|
1021
|
+
it 'downcases auth mechanism properties keys in client options' do
|
1022
|
+
client = new_local_client_nmio(string)
|
1023
|
+
expect(client.options[:auth_mech_properties]).to eq(expected_client_options)
|
1024
|
+
end
|
1025
|
+
end
|
1026
|
+
|
1016
1027
|
context 'service_name' do
|
1017
1028
|
let(:options) do
|
1018
|
-
"authMechanismProperties=
|
1029
|
+
"authMechanismProperties=SERVICE_name:#{service_name}"
|
1019
1030
|
end
|
1031
|
+
|
1020
1032
|
let(:service_name) { 'foo' }
|
1021
|
-
let(:expected) { Mongo::Options::Redacted.new({ service_name: service_name }) }
|
1022
1033
|
|
1023
|
-
|
1024
|
-
|
1034
|
+
let(:expected_uri_options) do
|
1035
|
+
Mongo::Options::Redacted.new(
|
1036
|
+
SERVICE_name: service_name,
|
1037
|
+
)
|
1025
1038
|
end
|
1026
1039
|
|
1027
|
-
|
1028
|
-
|
1029
|
-
|
1040
|
+
let(:expected_client_options) do
|
1041
|
+
Mongo::Options::Redacted.new(
|
1042
|
+
service_name: service_name,
|
1043
|
+
)
|
1030
1044
|
end
|
1045
|
+
|
1046
|
+
include_examples 'sets options in the expected manner'
|
1031
1047
|
end
|
1032
1048
|
|
1033
1049
|
context 'canonicalize_host_name' do
|
1034
1050
|
let(:options) do
|
1035
|
-
"authMechanismProperties=
|
1051
|
+
"authMechanismProperties=CANONICALIZE_HOST_name:#{canonicalize_host_name}"
|
1036
1052
|
end
|
1053
|
+
|
1037
1054
|
let(:canonicalize_host_name) { 'true' }
|
1038
|
-
let(:expected) { Mongo::Options::Redacted.new({ canonicalize_host_name: true }) }
|
1039
1055
|
|
1040
|
-
|
1041
|
-
|
1056
|
+
let(:expected_uri_options) do
|
1057
|
+
Mongo::Options::Redacted.new(
|
1058
|
+
CANONICALIZE_HOST_name: true,
|
1059
|
+
)
|
1042
1060
|
end
|
1043
1061
|
|
1044
|
-
|
1045
|
-
|
1046
|
-
|
1062
|
+
let(:expected_client_options) do
|
1063
|
+
Mongo::Options::Redacted.new(
|
1064
|
+
canonicalize_host_name: true,
|
1065
|
+
)
|
1047
1066
|
end
|
1067
|
+
|
1068
|
+
include_examples 'sets options in the expected manner'
|
1048
1069
|
end
|
1049
1070
|
|
1050
1071
|
context 'service_realm' do
|
1051
1072
|
let(:options) do
|
1052
|
-
"authMechanismProperties=
|
1073
|
+
"authMechanismProperties=SERVICE_realm:#{service_realm}"
|
1053
1074
|
end
|
1054
1075
|
|
1055
1076
|
let(:service_realm) { 'dumdum' }
|
1056
|
-
let(:expected) { Mongo::Options::Redacted.new({ service_realm: service_realm }) }
|
1057
1077
|
|
1058
|
-
|
1059
|
-
|
1060
|
-
|
1078
|
+
let(:expected_uri_options) do
|
1079
|
+
Mongo::Options::Redacted.new(
|
1080
|
+
SERVICE_realm: service_realm,
|
1081
|
+
)
|
1061
1082
|
end
|
1062
1083
|
|
1063
|
-
|
1064
|
-
|
1065
|
-
|
1084
|
+
let(:expected_client_options) do
|
1085
|
+
Mongo::Options::Redacted.new(
|
1086
|
+
service_realm: service_realm,
|
1087
|
+
)
|
1066
1088
|
end
|
1089
|
+
|
1090
|
+
include_examples 'sets options in the expected manner'
|
1067
1091
|
end
|
1068
1092
|
|
1069
1093
|
context 'multiple properties' do
|
1070
1094
|
let(:options) do
|
1071
|
-
"authMechanismProperties=
|
1072
|
-
"
|
1073
|
-
"
|
1095
|
+
"authMechanismProperties=SERVICE_realm:#{service_realm}," +
|
1096
|
+
"CANONICALIZE_HOST_name:#{canonicalize_host_name}," +
|
1097
|
+
"SERVICE_name:#{service_name}"
|
1074
1098
|
end
|
1075
1099
|
|
1076
1100
|
let(:service_name) { 'foo' }
|
1077
1101
|
let(:canonicalize_host_name) { 'true' }
|
1078
1102
|
let(:service_realm) { 'dumdum' }
|
1079
1103
|
|
1080
|
-
let(:
|
1081
|
-
Mongo::Options::Redacted.new(
|
1082
|
-
|
1083
|
-
|
1104
|
+
let(:expected_uri_options) do
|
1105
|
+
Mongo::Options::Redacted.new(
|
1106
|
+
SERVICE_name: service_name,
|
1107
|
+
CANONICALIZE_HOST_name: true,
|
1108
|
+
SERVICE_realm: service_realm,
|
1109
|
+
)
|
1084
1110
|
end
|
1085
1111
|
|
1086
|
-
|
1087
|
-
|
1112
|
+
let(:expected_client_options) do
|
1113
|
+
Mongo::Options::Redacted.new(
|
1114
|
+
service_name: service_name,
|
1115
|
+
canonicalize_host_name: true,
|
1116
|
+
service_realm: service_realm,
|
1117
|
+
)
|
1088
1118
|
end
|
1089
1119
|
|
1090
|
-
|
1091
|
-
client = new_local_client_nmio(string)
|
1092
|
-
expect(client.options[:auth_mech_properties]).to eq(expected)
|
1093
|
-
end
|
1120
|
+
include_examples 'sets options in the expected manner'
|
1094
1121
|
end
|
1095
1122
|
end
|
1096
1123
|
|