mongo 2.11.4 → 2.12.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CONTRIBUTING.md +1 -1
- data/README.md +2 -1
- data/lib/mongo.rb +3 -0
- data/lib/mongo/address.rb +44 -19
- data/lib/mongo/auth.rb +1 -0
- data/lib/mongo/auth/credential_cache.rb +51 -0
- data/lib/mongo/auth/scram/conversation.rb +20 -16
- data/lib/mongo/auth/user.rb +0 -8
- data/lib/mongo/auth/user/view.rb +4 -4
- data/lib/mongo/background_thread.rb +1 -1
- data/lib/mongo/bulk_write.rb +5 -5
- data/lib/mongo/client.rb +143 -14
- data/lib/mongo/client_encryption.rb +103 -0
- data/lib/mongo/cluster.rb +8 -4
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +18 -6
- data/lib/mongo/cluster/sdam_flow.rb +54 -58
- data/lib/mongo/collection.rb +3 -3
- data/lib/mongo/collection/view.rb +1 -1
- data/lib/mongo/collection/view/aggregation.rb +1 -1
- data/lib/mongo/collection/view/change_stream.rb +12 -3
- data/lib/mongo/collection/view/iterable.rb +14 -5
- data/lib/mongo/collection/view/map_reduce.rb +2 -2
- data/lib/mongo/collection/view/readable.rb +9 -7
- data/lib/mongo/collection/view/writable.rb +7 -7
- data/lib/mongo/crypt.rb +33 -0
- data/lib/mongo/crypt/auto_decryption_context.rb +40 -0
- data/lib/mongo/crypt/auto_encrypter.rb +179 -0
- data/lib/mongo/crypt/auto_encryption_context.rb +44 -0
- data/lib/mongo/crypt/binary.rb +155 -0
- data/lib/mongo/crypt/binding.rb +1229 -0
- data/lib/mongo/crypt/context.rb +135 -0
- data/lib/mongo/crypt/data_key_context.rb +162 -0
- data/lib/mongo/crypt/encryption_io.rb +289 -0
- data/lib/mongo/crypt/explicit_decryption_context.rb +40 -0
- data/lib/mongo/crypt/explicit_encrypter.rb +117 -0
- data/lib/mongo/crypt/explicit_encryption_context.rb +89 -0
- data/lib/mongo/crypt/handle.rb +315 -0
- data/lib/mongo/crypt/hooks.rb +90 -0
- data/lib/mongo/crypt/kms_context.rb +67 -0
- data/lib/mongo/crypt/status.rb +131 -0
- data/lib/mongo/cursor.rb +64 -32
- data/lib/mongo/database.rb +23 -6
- data/lib/mongo/database/view.rb +13 -4
- data/lib/mongo/dbref.rb +9 -2
- data/lib/mongo/error.rb +5 -1
- data/lib/mongo/error/bulk_write_error.rb +16 -14
- data/lib/mongo/error/crypt_error.rb +31 -0
- data/lib/mongo/error/{failed_stringprep_validation.rb → failed_string_prep_validation.rb} +0 -0
- data/lib/mongo/error/invalid_cursor_operation.rb +27 -0
- data/lib/mongo/error/kms_error.rb +22 -0
- data/lib/mongo/error/max_bson_size.rb +14 -3
- data/lib/mongo/error/mongocryptd_spawn_error.rb +22 -0
- data/lib/mongo/error/no_server_available.rb +8 -3
- data/lib/mongo/error/notable.rb +0 -15
- data/lib/mongo/error/operation_failure.rb +1 -0
- data/lib/mongo/error/parser.rb +1 -1
- data/lib/mongo/grid/file.rb +5 -0
- data/lib/mongo/grid/file/chunk.rb +2 -0
- data/lib/mongo/grid/file/info.rb +3 -2
- 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 -3
- data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -1
- data/lib/mongo/monitoring/event/command_started.rb +6 -1
- data/lib/mongo/operation/collections_info.rb +6 -3
- data/lib/mongo/operation/delete/op_msg.rb +1 -1
- data/lib/mongo/operation/find/op_msg.rb +4 -1
- data/lib/mongo/operation/get_more/op_msg.rb +4 -1
- data/lib/mongo/operation/insert/command.rb +3 -2
- data/lib/mongo/operation/insert/legacy.rb +3 -2
- data/lib/mongo/operation/insert/op_msg.rb +3 -3
- data/lib/mongo/operation/result.rb +36 -27
- data/lib/mongo/operation/shared/executable.rb +11 -9
- data/lib/mongo/operation/shared/executable_no_validate.rb +2 -2
- data/lib/mongo/operation/shared/op_msg_or_command.rb +2 -2
- data/lib/mongo/operation/shared/op_msg_or_find_command.rb +2 -2
- data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +2 -2
- data/lib/mongo/operation/shared/read_preference_supported.rb +68 -19
- data/lib/mongo/operation/shared/response_handling.rb +1 -1
- data/lib/mongo/operation/shared/sessions_supported.rb +44 -3
- data/lib/mongo/operation/shared/write.rb +17 -10
- data/lib/mongo/operation/update/op_msg.rb +1 -1
- data/lib/mongo/protocol/bit_vector.rb +2 -1
- data/lib/mongo/protocol/compressed.rb +6 -5
- data/lib/mongo/protocol/insert.rb +3 -1
- data/lib/mongo/protocol/message.rb +94 -15
- data/lib/mongo/protocol/msg.rb +207 -37
- data/lib/mongo/protocol/query.rb +7 -9
- data/lib/mongo/protocol/serializers.rb +43 -15
- data/lib/mongo/retryable.rb +1 -1
- data/lib/mongo/server.rb +10 -4
- data/lib/mongo/server/connection.rb +20 -9
- data/lib/mongo/server/connection_base.rb +118 -18
- data/lib/mongo/server/connection_common.rb +61 -0
- data/lib/mongo/server/connection_pool.rb +37 -1
- data/lib/mongo/server/connection_pool/populator.rb +1 -1
- data/lib/mongo/server/description.rb +9 -11
- data/lib/mongo/server/monitor.rb +2 -0
- data/lib/mongo/server/monitor/connection.rb +3 -18
- data/lib/mongo/server/pending_connection.rb +2 -1
- data/lib/mongo/session.rb +3 -3
- data/lib/mongo/session/session_pool.rb +8 -3
- data/lib/mongo/socket.rb +29 -16
- data/lib/mongo/socket/ssl.rb +23 -8
- data/lib/mongo/socket/tcp.rb +12 -3
- data/lib/mongo/srv/monitor.rb +73 -42
- data/lib/mongo/srv/result.rb +0 -1
- data/lib/mongo/timeout.rb +49 -0
- data/lib/mongo/uri.rb +30 -1
- data/lib/mongo/uri/srv_protocol.rb +1 -1
- data/lib/mongo/version.rb +1 -1
- data/mongo.gemspec +1 -3
- data/spec/README.md +228 -7
- data/spec/integration/auth_spec.rb +53 -0
- data/spec/integration/bulk_write_spec.rb +19 -0
- data/spec/integration/{client_options_spec.rb → client_authentication_options_spec.rb} +10 -10
- data/spec/integration/client_construction_spec.rb +100 -1
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +353 -0
- data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +303 -0
- data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +72 -0
- data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +79 -0
- data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +221 -0
- data/spec/integration/client_side_encryption/auto_encryption_spec.rb +601 -0
- data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +187 -0
- data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +78 -0
- data/spec/integration/client_side_encryption/client_close_spec.rb +63 -0
- data/spec/integration/client_side_encryption/corpus_spec.rb +233 -0
- data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +132 -0
- data/spec/integration/client_side_encryption/data_key_spec.rb +165 -0
- data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +114 -0
- data/spec/integration/client_side_encryption/external_key_vault_spec.rb +141 -0
- data/spec/integration/client_side_encryption/views_spec.rb +44 -0
- data/spec/integration/client_update_spec.rb +154 -0
- data/spec/integration/command_monitoring_spec.rb +3 -1
- data/spec/integration/command_spec.rb +44 -10
- data/spec/integration/connection_spec.rb +57 -0
- data/spec/integration/crud_spec.rb +89 -0
- data/spec/integration/grid_fs_bucket_spec.rb +48 -0
- data/spec/integration/read_preference_spec.rb +26 -0
- data/spec/integration/reconnect_spec.rb +7 -6
- data/spec/integration/size_limit_spec.rb +111 -0
- data/spec/integration/srv_monitoring_spec.rb +16 -8
- data/spec/integration/zlib_compression_spec.rb +25 -0
- data/spec/kerberos/kerberos_spec.rb +87 -0
- data/spec/lite_spec_helper.rb +34 -29
- data/spec/mongo/auth/cr_spec.rb +8 -0
- data/spec/mongo/auth/ldap_spec.rb +5 -1
- data/spec/mongo/auth/scram/conversation_spec.rb +5 -6
- data/spec/mongo/auth/scram/negotiation_spec.rb +74 -75
- data/spec/mongo/auth/scram_spec.rb +45 -35
- data/spec/mongo/auth/user/view_spec.rb +3 -6
- data/spec/mongo/auth/x509_spec.rb +5 -1
- data/spec/mongo/bulk_write/result_spec.rb +11 -7
- data/spec/mongo/client_construction_spec.rb +206 -2
- data/spec/mongo/client_encryption_spec.rb +405 -0
- data/spec/mongo/cluster/cursor_reaper_spec.rb +12 -8
- data/spec/mongo/cluster/socket_reaper_spec.rb +14 -3
- data/spec/mongo/collection/view/aggregation_spec.rb +0 -2
- data/spec/mongo/collection/view/change_stream_spec.rb +7 -7
- data/spec/mongo/collection/view/map_reduce_spec.rb +3 -3
- data/spec/mongo/collection/view_spec.rb +1 -1
- data/spec/mongo/collection_spec.rb +28 -9
- data/spec/mongo/crypt/auto_decryption_context_spec.rb +90 -0
- data/spec/mongo/crypt/auto_encrypter_spec.rb +187 -0
- data/spec/mongo/crypt/auto_encryption_context_spec.rb +107 -0
- data/spec/mongo/crypt/binary_spec.rb +115 -0
- data/spec/mongo/crypt/binding/binary_spec.rb +56 -0
- data/spec/mongo/crypt/binding/context_spec.rb +257 -0
- data/spec/mongo/crypt/binding/helpers_spec.rb +46 -0
- data/spec/mongo/crypt/binding/mongocrypt_spec.rb +144 -0
- data/spec/mongo/crypt/binding/status_spec.rb +99 -0
- data/spec/mongo/crypt/binding/version_spec.rb +22 -0
- data/spec/mongo/crypt/binding_unloaded_spec.rb +20 -0
- data/spec/mongo/crypt/data_key_context_spec.rb +213 -0
- data/spec/mongo/crypt/encryption_io_spec.rb +136 -0
- data/spec/mongo/crypt/explicit_decryption_context_spec.rb +72 -0
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +170 -0
- data/spec/mongo/crypt/handle_spec.rb +232 -0
- data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +108 -0
- data/spec/mongo/crypt/status_spec.rb +152 -0
- data/spec/mongo/cursor_spec.rb +24 -4
- data/spec/mongo/database_spec.rb +20 -0
- data/spec/mongo/error/bulk_write_error_spec.rb +49 -0
- data/spec/mongo/error/crypt_error_spec.rb +26 -0
- data/spec/mongo/error/max_bson_size_spec.rb +35 -0
- data/spec/mongo/error/no_server_available_spec.rb +11 -1
- data/spec/mongo/error/notable_spec.rb +59 -0
- data/spec/mongo/error/operation_failure_spec.rb +6 -6
- data/spec/mongo/operation/aggregate_spec.rb +1 -1
- data/spec/mongo/operation/collections_info_spec.rb +1 -1
- data/spec/mongo/operation/command_spec.rb +3 -3
- data/spec/mongo/operation/create_index_spec.rb +3 -3
- data/spec/mongo/operation/create_user_spec.rb +3 -3
- data/spec/mongo/operation/delete/bulk_spec.rb +6 -6
- data/spec/mongo/operation/delete/op_msg_spec.rb +1 -6
- data/spec/mongo/operation/delete_spec.rb +7 -7
- data/spec/mongo/operation/drop_index_spec.rb +2 -2
- data/spec/mongo/operation/find/legacy_spec.rb +2 -1
- data/spec/mongo/operation/get_more_spec.rb +1 -1
- data/spec/mongo/operation/indexes_spec.rb +1 -1
- data/spec/mongo/operation/insert/bulk_spec.rb +7 -7
- data/spec/mongo/operation/insert/op_msg_spec.rb +3 -6
- data/spec/mongo/operation/insert_spec.rb +12 -12
- data/spec/mongo/operation/map_reduce_spec.rb +2 -2
- data/spec/mongo/operation/read_preference_legacy_spec.rb +351 -0
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +194 -0
- data/spec/mongo/operation/remove_user_spec.rb +3 -3
- data/spec/mongo/operation/update/bulk_spec.rb +6 -6
- data/spec/mongo/operation/update/op_msg_spec.rb +3 -6
- data/spec/mongo/operation/update_spec.rb +7 -7
- data/spec/mongo/operation/update_user_spec.rb +1 -1
- data/spec/mongo/protocol/compressed_spec.rb +2 -3
- data/spec/mongo/protocol/delete_spec.rb +9 -8
- data/spec/mongo/protocol/get_more_spec.rb +9 -8
- data/spec/mongo/protocol/insert_spec.rb +9 -8
- data/spec/mongo/protocol/kill_cursors_spec.rb +6 -5
- data/spec/mongo/protocol/msg_spec.rb +57 -53
- data/spec/mongo/protocol/query_spec.rb +12 -12
- data/spec/mongo/protocol/registry_spec.rb +1 -1
- data/spec/mongo/protocol/reply_spec.rb +1 -1
- data/spec/mongo/protocol/update_spec.rb +10 -9
- data/spec/mongo/server/connection_pool_spec.rb +1 -1
- data/spec/mongo/server/connection_spec.rb +28 -7
- data/spec/mongo/socket_spec.rb +1 -1
- data/spec/mongo/srv/monitor_spec.rb +88 -69
- data/spec/mongo/timeout_spec.rb +85 -0
- data/spec/mongo/uri/srv_protocol_spec.rb +2 -2
- data/spec/mongo/uri_spec.rb +52 -5
- data/spec/mongo/write_concern_spec.rb +13 -1
- data/spec/{support → runners}/auth.rb +14 -1
- data/spec/{support → runners}/change_streams.rb +1 -1
- data/spec/{support → runners}/change_streams/operation.rb +0 -0
- data/spec/{support → runners}/cmap.rb +1 -1
- data/spec/{support → runners}/cmap/verifier.rb +0 -0
- data/spec/{support → runners}/command_monitoring.rb +0 -0
- data/spec/runners/connection_string.rb +358 -4
- data/spec/{support → runners}/crud.rb +9 -9
- data/spec/{support → runners}/crud/context.rb +0 -0
- data/spec/{support → runners}/crud/operation.rb +7 -3
- data/spec/{support → runners}/crud/outcome.rb +0 -0
- data/spec/{support → runners}/crud/requirement.rb +1 -1
- data/spec/{support → runners}/crud/spec.rb +12 -1
- data/spec/{support → runners}/crud/test.rb +0 -0
- data/spec/{support → runners}/crud/test_base.rb +0 -0
- data/spec/{support → runners}/crud/verifier.rb +10 -12
- data/spec/{support → runners}/gridfs.rb +0 -0
- data/spec/{support → runners}/sdam_monitoring.rb +0 -0
- data/spec/{support → runners}/server_discovery_and_monitoring.rb +0 -0
- data/spec/{support → runners}/server_selection.rb +0 -0
- data/spec/{support → runners}/server_selection_rtt.rb +0 -0
- data/spec/{support → runners}/transactions.rb +9 -11
- data/spec/{support → runners}/transactions/context.rb +0 -0
- data/spec/{support → runners}/transactions/operation.rb +0 -0
- data/spec/{support → runners}/transactions/spec.rb +0 -0
- data/spec/{support → runners}/transactions/test.rb +37 -5
- data/spec/spec_helper.rb +0 -5
- data/spec/spec_tests/auth_spec.rb +3 -3
- data/spec/spec_tests/client_side_encryption_spec.rb +8 -0
- data/spec/spec_tests/connection_string_spec.rb +1 -1
- data/spec/spec_tests/data/auth/connection-string.yml +13 -0
- data/spec/spec_tests/data/client_side_encryption/aggregate.yml +134 -0
- data/spec/spec_tests/data/client_side_encryption/badQueries.yml +526 -0
- data/spec/spec_tests/data/client_side_encryption/badSchema.yml +73 -0
- data/spec/spec_tests/data/client_side_encryption/basic.yml +116 -0
- data/spec/spec_tests/data/client_side_encryption/bulk.yml +88 -0
- data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +100 -0
- data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +42 -0
- data/spec/spec_tests/data/client_side_encryption/count.yml +61 -0
- data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +59 -0
- data/spec/spec_tests/data/client_side_encryption/delete.yml +105 -0
- data/spec/spec_tests/data/client_side_encryption/distinct.yml +73 -0
- data/spec/spec_tests/data/client_side_encryption/explain.yml +64 -0
- data/spec/spec_tests/data/client_side_encryption/find.yml +119 -0
- data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +57 -0
- data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +57 -0
- data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +57 -0
- data/spec/spec_tests/data/client_side_encryption/getMore.yml +68 -0
- data/spec/spec_tests/data/client_side_encryption/insert.yml +102 -0
- data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +71 -0
- data/spec/spec_tests/data/client_side_encryption/localKMS.yml +54 -0
- data/spec/spec_tests/data/client_side_encryption/localSchema.yml +72 -0
- data/spec/spec_tests/data/client_side_encryption/malformedCiphertext.yml +69 -0
- data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +20 -0
- data/spec/spec_tests/data/client_side_encryption/missingKey.yml +49 -0
- data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +64 -0
- data/spec/spec_tests/data/client_side_encryption/types.yml +527 -0
- data/spec/spec_tests/data/client_side_encryption/unsupportedCommand.yml +25 -0
- data/spec/spec_tests/data/client_side_encryption/updateMany.yml +77 -0
- data/spec/spec_tests/data/client_side_encryption/updateOne.yml +171 -0
- data/spec/spec_tests/data/read_write_concern/connection-string/write-concern.yml +1 -4
- data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +21 -0
- data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +2 -4
- data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +1 -1
- data/spec/spec_tests/data/sdam/rs/primary_mismatched_me_not_removed.yml +73 -0
- data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +1 -2
- data/spec/spec_tests/data/sdam/rs/repeated.yml +101 -0
- data/spec/spec_tests/data/sdam/rs/{primary_address_change.yml → ruby_primary_address_change.yml} +2 -0
- data/spec/spec_tests/data/sdam/rs/{secondary_wrong_set_name_with_primary_second.yml → ruby_secondary_wrong_set_name_with_primary_second.yml} +0 -0
- data/spec/spec_tests/data/sdam/sharded/ruby_discovered_single_mongos.yml +27 -0
- data/spec/spec_tests/data/sdam/sharded/{primary_address_change.yml → ruby_primary_different_address.yml} +1 -1
- data/spec/spec_tests/data/sdam/sharded/{primary_mismatched_me.yml → ruby_primary_mismatched_me.yml} +1 -1
- data/spec/spec_tests/data/sdam/single/{primary_address_change.yml → ruby_primary_different_address.yml} +1 -1
- data/spec/spec_tests/data/sdam/single/{primary_mismatched_me.yml → ruby_primary_mismatched_me.yml} +1 -1
- data/spec/spec_tests/data/sdam_monitoring/{replica_set_with_primary_change.yml → replica_set_primary_address_change.yml} +27 -5
- data/spec/spec_tests/data/sdam_monitoring/replica_set_with_me_mismatch.yml +26 -74
- data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +20 -16
- data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +73 -0
- data/spec/spec_tests/data/transactions/pin-mongos.yml +2 -3
- data/spec/spec_tests/data/uri_options/auth-options.yml +10 -0
- data/spec/spec_tests/data/uri_options/tls-options.yml +75 -4
- data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
- data/spec/spec_tests/uri_options_spec.rb +6 -8
- data/spec/stress/connection_pool_timing_spec.rb +6 -3
- data/spec/support/certificates/README.md +4 -0
- data/spec/support/certificates/server-second-level-bundle.pem +77 -77
- data/spec/support/certificates/server-second-level.crt +52 -52
- data/spec/support/certificates/server-second-level.key +25 -25
- data/spec/support/certificates/server-second-level.pem +77 -77
- data/spec/support/client_registry.rb +19 -3
- data/spec/support/cluster_config.rb +9 -1
- data/spec/support/cluster_tools.rb +6 -1
- data/spec/support/common_shortcuts.rb +12 -0
- data/spec/support/constraints.rb +16 -0
- data/spec/support/crypt.rb +154 -0
- data/spec/support/crypt/corpus/corpus-key-aws.json +33 -0
- data/spec/support/crypt/corpus/corpus-key-local.json +31 -0
- data/spec/support/crypt/corpus/corpus-schema.json +2057 -0
- data/spec/support/crypt/corpus/corpus.json +3657 -0
- data/spec/support/crypt/corpus/corpus_encrypted.json +4152 -0
- data/spec/support/crypt/data_keys/key_document_aws.json +34 -0
- data/spec/support/crypt/data_keys/key_document_local.json +31 -0
- data/spec/support/crypt/external/external-key.json +31 -0
- data/spec/support/crypt/external/external-schema.json +19 -0
- data/spec/support/crypt/limits/limits-doc.json +102 -0
- data/spec/support/crypt/limits/limits-key.json +31 -0
- data/spec/support/crypt/limits/limits-schema.json +1405 -0
- data/spec/support/crypt/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/crypt/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/crypt/schema_maps/schema_map_local.json +18 -0
- data/spec/support/crypt/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/lite_constraints.rb +19 -1
- data/spec/support/matchers.rb +19 -0
- data/spec/support/shared/protocol.rb +2 -0
- data/spec/support/spec_config.rb +53 -13
- data/spec/support/utils.rb +140 -10
- metadata +894 -687
- metadata.gz.sig +0 -0
- data/lib/mongo/cluster/srv_monitor.rb +0 -127
- data/lib/mongo/srv/warning_result.rb +0 -35
- data/spec/enterprise_auth/kerberos_spec.rb +0 -58
- data/spec/mongo/cluster/srv_monitor_spec.rb +0 -214
- data/spec/mongo/operation/read_preference_spec.rb +0 -245
- data/spec/spec_tests/data/sdam/sharded/single_mongos.yml +0 -33
- data/spec/support/connection_string.rb +0 -354
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'lite_spec_helper'
|
2
|
+
|
3
|
+
describe Mongo::Timeout do
|
4
|
+
describe '#timeout' do
|
5
|
+
let(:default_error_message) { 'execution expired' }
|
6
|
+
let(:custom_error_class) { Mongo::Error::SocketTimeoutError }
|
7
|
+
let(:custom_error_message) { 'socket timed out' }
|
8
|
+
|
9
|
+
context 'Ruby version older than 2.4.0' do
|
10
|
+
before do
|
11
|
+
unless RUBY_VERSION < '2.4.0'
|
12
|
+
skip 'This test requires a Ruby version older than 2.4.0'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'with time argument' do
|
17
|
+
it 'raises StandardError' do
|
18
|
+
expect do
|
19
|
+
Mongo::Timeout.timeout(0.1) do
|
20
|
+
sleep 1
|
21
|
+
end
|
22
|
+
end.to raise_error(::Timeout::Error, default_error_message)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'with time and class arguments' do
|
27
|
+
it 'raises the specified error class' do
|
28
|
+
expect do
|
29
|
+
Mongo::Timeout.timeout(0.1, custom_error_class) do
|
30
|
+
sleep 1
|
31
|
+
end
|
32
|
+
end.to raise_error(custom_error_class, default_error_message)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'with time, class, and message arguments' do
|
37
|
+
it 'raises the specified error class but ignores the message' do
|
38
|
+
expect do
|
39
|
+
Mongo::Timeout.timeout(0.1, custom_error_class, custom_error_message) do
|
40
|
+
sleep 1
|
41
|
+
end
|
42
|
+
end.to raise_error(custom_error_class, default_error_message)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'Ruby 2.4.0 or newer' do
|
48
|
+
before do
|
49
|
+
unless RUBY_VERSION >= '2.4.0'
|
50
|
+
skip 'This test requires a Ruby 2.4.0 or newer'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'with time argument' do
|
55
|
+
it 'raises StandardError' do
|
56
|
+
expect do
|
57
|
+
Mongo::Timeout.timeout(0.1) do
|
58
|
+
sleep 1
|
59
|
+
end
|
60
|
+
end.to raise_error(::Timeout::Error, default_error_message)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'with time and class arguments' do
|
65
|
+
it 'raises the specified error class' do
|
66
|
+
expect do
|
67
|
+
Mongo::Timeout.timeout(0.1, custom_error_class) do
|
68
|
+
sleep 1
|
69
|
+
end
|
70
|
+
end.to raise_error(custom_error_class, default_error_message)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context 'with time, class, and message arguments' do
|
75
|
+
it 'raises the specified error class with message' do
|
76
|
+
expect do
|
77
|
+
Mongo::Timeout.timeout(0.1, custom_error_class, custom_error_message) do
|
78
|
+
sleep 1
|
79
|
+
end
|
80
|
+
end.to raise_error(custom_error_class, custom_error_message)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
data/spec/mongo/uri_spec.rb
CHANGED
@@ -6,6 +6,40 @@ describe Mongo::URI do
|
|
6
6
|
|
7
7
|
let(:uri) { described_class.get(string) }
|
8
8
|
|
9
|
+
describe 'invalid uris' do
|
10
|
+
|
11
|
+
context 'string is not uri' do
|
12
|
+
|
13
|
+
let(:string) { 'tyler' }
|
14
|
+
|
15
|
+
it 'raises an error' do
|
16
|
+
expect { uri }.to raise_error(Mongo::Error::InvalidURI)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'nil' do
|
21
|
+
|
22
|
+
let(:string) { nil }
|
23
|
+
|
24
|
+
it 'raises an error' do
|
25
|
+
expect do
|
26
|
+
uri
|
27
|
+
end.to raise_error(Mongo::Error::InvalidURI, /URI must be a string, not nil/)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'empty string' do
|
32
|
+
|
33
|
+
let(:string) { '' }
|
34
|
+
|
35
|
+
it 'raises an error' do
|
36
|
+
expect do
|
37
|
+
uri
|
38
|
+
end.to raise_error(Mongo::Error::InvalidURI, /Cannot parse an empty URI/)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
9
43
|
context 'when the scheme is mongodb://' do
|
10
44
|
|
11
45
|
let(:string) do
|
@@ -55,12 +89,25 @@ describe Mongo::URI do
|
|
55
89
|
end
|
56
90
|
end
|
57
91
|
|
92
|
+
context 'nil' do
|
93
|
+
|
94
|
+
let(:string) { nil }
|
95
|
+
|
96
|
+
it 'raises an error' do
|
97
|
+
expect do
|
98
|
+
uri
|
99
|
+
end.to raise_error(Mongo::Error::InvalidURI, /URI must be a string, not nil/)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
58
103
|
context 'empty string' do
|
59
104
|
|
60
105
|
let(:string) { '' }
|
61
106
|
|
62
107
|
it 'raises an error' do
|
63
|
-
expect
|
108
|
+
expect do
|
109
|
+
uri
|
110
|
+
end.to raise_error(Mongo::Error::InvalidURI, /Cannot parse an empty URI/)
|
64
111
|
end
|
65
112
|
end
|
66
113
|
|
@@ -880,9 +927,9 @@ describe Mongo::URI do
|
|
880
927
|
let(:password) { 's3kr4t' }
|
881
928
|
|
882
929
|
it 'does not allow a client to be created' do
|
883
|
-
expect
|
930
|
+
expect do
|
884
931
|
new_local_client_nmio(string)
|
885
|
-
|
932
|
+
end.to raise_error(Mongo::Auth::InvalidConfiguration, /Password is not supported/)
|
886
933
|
end
|
887
934
|
end
|
888
935
|
|
@@ -925,9 +972,9 @@ describe Mongo::URI do
|
|
925
972
|
end
|
926
973
|
|
927
974
|
it 'does not allow a client to be created with default auth mechanism' do
|
928
|
-
expect
|
975
|
+
expect do
|
929
976
|
new_local_client_nmio(string)
|
930
|
-
|
977
|
+
end.to raise_error(Mongo::Auth::InvalidConfiguration, /Empty username is not supported/)
|
931
978
|
end
|
932
979
|
end
|
933
980
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'lite_spec_helper'
|
2
2
|
|
3
3
|
describe Mongo::WriteConcern do
|
4
4
|
|
@@ -194,6 +194,18 @@ describe Mongo::WriteConcern do
|
|
194
194
|
expect(wc).to be_a(Mongo::WriteConcern::Unacknowledged)
|
195
195
|
expect(wc.options[:w]).to eq(0)
|
196
196
|
end
|
197
|
+
|
198
|
+
context 'and j is true' do
|
199
|
+
let(:options) do
|
200
|
+
{ 'w' => 0, j: true }
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'raises an exception' do
|
204
|
+
expect do
|
205
|
+
wc
|
206
|
+
end.to raise_error(Mongo::Error::InvalidWriteConcern, /:j cannot be true when :w is 0/)
|
207
|
+
end
|
208
|
+
end
|
197
209
|
end
|
198
210
|
end
|
199
211
|
|
@@ -13,7 +13,20 @@
|
|
13
13
|
# limitations under the License.
|
14
14
|
RSpec::Matchers.define :have_blank_credentials do
|
15
15
|
match do |client|
|
16
|
-
|
16
|
+
# The "null credential" definition in auth spec tests readme at
|
17
|
+
# https://github.com/mongodb/specifications/blob/master/source/auth/tests/README.rst
|
18
|
+
# is as follows:
|
19
|
+
#
|
20
|
+
# credential: If null, the credential must not be considered configured
|
21
|
+
# for the the purpose of deciding if the driver should authenticate to the
|
22
|
+
# topology.
|
23
|
+
#
|
24
|
+
# Ruby driver authenticates if :user or :auth_mech client options are set.
|
25
|
+
#
|
26
|
+
# Note that this is a different test from "no auth-related options are
|
27
|
+
# set on the client". Options like password or auth source are preserved
|
28
|
+
# by the client if set, but do not trigger authentication.
|
29
|
+
%i(auth_mech user).all? do |key|
|
17
30
|
client.options[key].nil?
|
18
31
|
end
|
19
32
|
end
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,7 +1,361 @@
|
|
1
|
+
# Copyright (C) 2014-2019 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
RSpec::Matchers.define :have_hosts do |test, hosts|
|
16
|
+
|
17
|
+
match do |cl|
|
18
|
+
|
19
|
+
def find_server(client, host)
|
20
|
+
client.cluster.servers_list.detect do |s|
|
21
|
+
if host.port
|
22
|
+
s.address.host == host.host && s.address.port == host.port
|
23
|
+
else
|
24
|
+
s.address.host == host.host
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def match_host?(server, host)
|
30
|
+
server.address.host == host.host
|
31
|
+
end
|
32
|
+
|
33
|
+
def match_port?(server, host)
|
34
|
+
server.address.port == host.port || !host.port
|
35
|
+
end
|
36
|
+
|
37
|
+
def match_address_family?(server, host)
|
38
|
+
address_family(server) == host.address_family
|
39
|
+
end
|
40
|
+
|
41
|
+
def address_family(server)
|
42
|
+
server.address.socket(2)
|
43
|
+
server.address.instance_variable_get(:@resolver).class
|
44
|
+
end
|
45
|
+
|
46
|
+
hosts.all? do |host|
|
47
|
+
server = find_server(cl, host)
|
48
|
+
server &&
|
49
|
+
match_host?(server, host) &&
|
50
|
+
match_port?(server, host) #&&
|
51
|
+
#match_address_family?(server, host)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
failure_message do |client|
|
56
|
+
"With URI: #{test.uri_string}\n" +
|
57
|
+
"Expected client hosts: #{client.cluster.instance_variable_get(:@servers)} " +
|
58
|
+
"to match #{hosts}"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
RSpec::Matchers.define :match_auth do |test|
|
63
|
+
|
64
|
+
def match_database?(client, auth)
|
65
|
+
client.options[:database] == auth.database || !auth.database
|
66
|
+
end
|
67
|
+
|
68
|
+
def match_password?(client, auth)
|
69
|
+
client.options[:password] == auth.password ||
|
70
|
+
client.options[:password].nil? && auth.password == ''
|
71
|
+
end
|
72
|
+
|
73
|
+
match do |client|
|
74
|
+
auth = test.auth
|
75
|
+
return true unless auth
|
76
|
+
client.options[:user] == auth.username &&
|
77
|
+
match_password?(client, auth) &&
|
78
|
+
match_database?(client, auth)
|
79
|
+
end
|
80
|
+
|
81
|
+
failure_message do |client|
|
82
|
+
"With URI: #{test.uri_string}\n" +
|
83
|
+
"Expected that test auth: #{test.auth} would match client auth: #{client.options}"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
RSpec::Matchers.define :match_options do |test|
|
88
|
+
|
89
|
+
match do |client|
|
90
|
+
options = test.options
|
91
|
+
return true unless options
|
92
|
+
options.match?(client.options)
|
93
|
+
end
|
94
|
+
|
95
|
+
failure_message do |client|
|
96
|
+
"With URI: #{test.uri_string}\n" +
|
97
|
+
"Expected that test options: #{test.options.options} would match client options: #{client.options}"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
module Mongo
|
102
|
+
module ConnectionString
|
103
|
+
|
104
|
+
class Spec
|
105
|
+
|
106
|
+
attr_reader :description
|
107
|
+
|
108
|
+
# Instantiate the new spec.
|
109
|
+
#
|
110
|
+
# @param [ String ] test_path The path to the file.
|
111
|
+
#
|
112
|
+
# @since 2.0.0
|
113
|
+
def initialize(test_path)
|
114
|
+
@spec = YAML.load(File.read(test_path))
|
115
|
+
@description = File.basename(test_path)
|
116
|
+
end
|
117
|
+
|
118
|
+
def tests
|
119
|
+
@tests ||= @spec['tests'].collect do |spec|
|
120
|
+
Test.new(spec)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
class Test
|
126
|
+
include RSpec::Core::Pending
|
127
|
+
|
128
|
+
attr_reader :description
|
129
|
+
attr_reader :uri_string
|
130
|
+
|
131
|
+
def initialize(spec)
|
132
|
+
@spec = spec
|
133
|
+
@description = @spec['description']
|
134
|
+
@uri_string = @spec['uri']
|
135
|
+
end
|
136
|
+
|
137
|
+
def valid?
|
138
|
+
@spec['valid']
|
139
|
+
end
|
140
|
+
|
141
|
+
def warn?
|
142
|
+
@spec['warning']
|
143
|
+
end
|
144
|
+
|
145
|
+
def hosts
|
146
|
+
@hosts ||= (@spec['hosts'] || []).collect do |host|
|
147
|
+
Host.new(host)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def seeds
|
152
|
+
if @spec['seeds']
|
153
|
+
@seeds ||= (@spec['seeds'] || []).collect do |host|
|
154
|
+
Host.new(host)
|
155
|
+
end
|
156
|
+
else
|
157
|
+
nil
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def options
|
162
|
+
@options ||= Options.new(@spec['options']) if @spec['options']
|
163
|
+
end
|
164
|
+
|
165
|
+
def client
|
166
|
+
@client ||= ClientRegistry.instance.new_local_client(@spec['uri'], monitoring_io: false)
|
167
|
+
rescue Mongo::Error::LintError => e
|
168
|
+
if e.message =~ /arbitraryButStillValid/
|
169
|
+
skip 'Test uses a read concern that fails linter'
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
def uri
|
174
|
+
@uri ||= Mongo::URI.get(@spec['uri'])
|
175
|
+
end
|
176
|
+
|
177
|
+
def auth
|
178
|
+
@auth ||= Auth.new(@spec['auth']) if @spec['auth']
|
179
|
+
end
|
180
|
+
|
181
|
+
def raise_error?
|
182
|
+
@spec['error']
|
183
|
+
end
|
184
|
+
|
185
|
+
def read_concern_expectation
|
186
|
+
@spec['readConcern']
|
187
|
+
end
|
188
|
+
|
189
|
+
def write_concern_expectation
|
190
|
+
@spec['writeConcern']
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
class Host
|
195
|
+
|
196
|
+
MAPPING = {
|
197
|
+
'ipv4' => Mongo::Address::IPv4,
|
198
|
+
'ipv6' => Mongo::Address::IPv6,
|
199
|
+
'unix' => Mongo::Address::Unix
|
200
|
+
}
|
201
|
+
|
202
|
+
attr_reader :host
|
203
|
+
attr_reader :port
|
204
|
+
|
205
|
+
def initialize(spec)
|
206
|
+
if spec.is_a?(Hash)
|
207
|
+
# Connection string spec tests
|
208
|
+
@spec = spec
|
209
|
+
@host = @spec['host']
|
210
|
+
@port = @spec['port']
|
211
|
+
else
|
212
|
+
# DNS seed list spec tests
|
213
|
+
address = Mongo::Address.new(spec)
|
214
|
+
@host = address.host
|
215
|
+
@port = address.port
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
def address_family
|
220
|
+
MAPPING[@spec['type']]
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
class Auth
|
225
|
+
|
226
|
+
attr_reader :username
|
227
|
+
attr_reader :password
|
228
|
+
attr_reader :database
|
229
|
+
|
230
|
+
def initialize(spec)
|
231
|
+
@spec = spec
|
232
|
+
@username = @spec['username']
|
233
|
+
@password = @spec['password']
|
234
|
+
@database = @spec['db']
|
235
|
+
end
|
236
|
+
|
237
|
+
def to_s
|
238
|
+
"username: #{username}, password: #{password}, database: #{database}"
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
class Options
|
243
|
+
|
244
|
+
MAPPINGS = {
|
245
|
+
# Replica Set Options
|
246
|
+
'replicaset' => :replica_set,
|
247
|
+
|
248
|
+
# Timeout Options
|
249
|
+
'connecttimeoutms' => :connect_timeout,
|
250
|
+
'sockettimeoutms' => :socket_timeout,
|
251
|
+
'serverselectiontimeoutms' => :server_selection_timeout,
|
252
|
+
'localthresholdms' => :local_threshold,
|
253
|
+
'heartbeatfrequencyms' => :heartbeat_frequency,
|
254
|
+
'maxidletimems' => :max_idle_time,
|
255
|
+
|
256
|
+
# Write Options
|
257
|
+
'journal' => [:write_concern, 'j'],
|
258
|
+
'w' => [:write_concern, 'w'],
|
259
|
+
'wtimeoutms' => [:write_concern, 'wtimeout'],
|
260
|
+
|
261
|
+
# Read Options
|
262
|
+
'readpreference' => ['read', 'mode'],
|
263
|
+
'readpreferencetags' => ['read', 'tag_sets'],
|
264
|
+
'maxstalenessseconds' => ['read', 'max_staleness'],
|
265
|
+
|
266
|
+
# Pool Options
|
267
|
+
'minpoolsize' => :min_pool_size,
|
268
|
+
'maxpoolsize' => :max_pool_size,
|
269
|
+
|
270
|
+
# Security Options
|
271
|
+
'tls' => :ssl,
|
272
|
+
'tlsallowinvalidcertificates' => :ssl_verify_certificate,
|
273
|
+
'tlsallowinvalidhostnames' => :ssl_verify_hostname,
|
274
|
+
'tlscafile' => :ssl_ca_cert,
|
275
|
+
'tlscertificatekeyfile' => :ssl_cert,
|
276
|
+
'tlscertificatekeyfilepassword' => :ssl_key_pass_phrase,
|
277
|
+
'tlsinsecure' => :ssl_verify,
|
278
|
+
|
279
|
+
# Auth Options
|
280
|
+
'authsource' => :auth_source,
|
281
|
+
'authmechanism' => :auth_mech,
|
282
|
+
'authmechanismproperties' => :auth_mech_properties,
|
283
|
+
|
284
|
+
# Client Options
|
285
|
+
'appname' => :app_name,
|
286
|
+
'readconcernlevel' => [:read_concern, 'level'],
|
287
|
+
'retrywrites' => :retry_writes,
|
288
|
+
'zlibcompressionlevel' => :zlib_compression_level,
|
289
|
+
}
|
290
|
+
|
291
|
+
attr_reader :options
|
292
|
+
|
293
|
+
def initialize(options)
|
294
|
+
@options = options
|
295
|
+
end
|
296
|
+
|
297
|
+
def match?(opts)
|
298
|
+
@options.all? do |k, v|
|
299
|
+
k = k.downcase
|
300
|
+
|
301
|
+
expected =
|
302
|
+
case k
|
303
|
+
when 'authmechanism'
|
304
|
+
Mongo::URI::AUTH_MECH_MAP[v].downcase.to_s
|
305
|
+
when 'authmechanismproperties'
|
306
|
+
v.reduce({}) do |new_v, prop|
|
307
|
+
prop_key = prop.first.downcase
|
308
|
+
prop_val = prop.last == 'true' ? true : prop.last
|
309
|
+
new_v[prop_key] = prop_val
|
310
|
+
|
311
|
+
new_v
|
312
|
+
end
|
313
|
+
when 'compressors'
|
314
|
+
v.dup.tap do |compressors|
|
315
|
+
# The Ruby driver doesn't support snappy
|
316
|
+
compressors.delete('snappy')
|
317
|
+
end
|
318
|
+
when 'readpreference'
|
319
|
+
Mongo::URI::READ_MODE_MAP[v.downcase].to_s
|
320
|
+
when 'tlsallowinvalidcertificates', 'tlsallowinvalidhostnames', 'tlsinsecure'
|
321
|
+
!v
|
322
|
+
else
|
323
|
+
if k.end_with?('ms') && k != 'wtimeoutms'
|
324
|
+
v / 1000.0
|
325
|
+
elsif v.is_a?(String)
|
326
|
+
v.downcase
|
327
|
+
else
|
328
|
+
v
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
actual =
|
333
|
+
case MAPPINGS[k]
|
334
|
+
when nil
|
335
|
+
opts[k]
|
336
|
+
when Array
|
337
|
+
opts[MAPPINGS[k].first][MAPPINGS[k].last]
|
338
|
+
else
|
339
|
+
opts[MAPPINGS[k]]
|
340
|
+
end
|
341
|
+
|
342
|
+
if actual.is_a?(Symbol)
|
343
|
+
actual = actual.to_s
|
344
|
+
end
|
345
|
+
if actual.is_a?(String)
|
346
|
+
actual = actual.downcase
|
347
|
+
end
|
348
|
+
|
349
|
+
expected == actual
|
350
|
+
end
|
351
|
+
end
|
352
|
+
end
|
353
|
+
end
|
354
|
+
end
|
1
355
|
|
2
356
|
def define_connection_string_spec_tests(test_paths, spec_cls = Mongo::ConnectionString::Spec, &block)
|
3
357
|
|
4
|
-
|
358
|
+
clean_slate_for_all_if_possible
|
5
359
|
|
6
360
|
test_paths.each do |path|
|
7
361
|
|
@@ -20,9 +374,9 @@ def define_connection_string_spec_tests(test_paths, spec_cls = Mongo::Connection
|
|
20
374
|
context 'when the uri is invalid', unless: test.valid? do
|
21
375
|
|
22
376
|
it 'raises an error' do
|
23
|
-
expect
|
377
|
+
expect do
|
24
378
|
test.uri
|
25
|
-
|
379
|
+
end.to raise_exception(Mongo::Error::InvalidURI)
|
26
380
|
end
|
27
381
|
end
|
28
382
|
|
@@ -47,7 +401,7 @@ def define_connection_string_spec_tests(test_paths, spec_cls = Mongo::Connection
|
|
47
401
|
expect(test.client).to have_hosts(test, test.hosts)
|
48
402
|
end
|
49
403
|
|
50
|
-
it 'creates a client with the correct authentication
|
404
|
+
it 'creates a client with the correct authentication options' do
|
51
405
|
expect(test.client).to match_auth(test)
|
52
406
|
end
|
53
407
|
|