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,194 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mongo::Operation::SessionsSupported do
|
4
|
+
|
5
|
+
let(:selector) do
|
6
|
+
BSON::Document.new(name: 'test')
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:options) do
|
10
|
+
{}
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:cluster) do
|
14
|
+
double('cluster').tap do |cluster|
|
15
|
+
allow(cluster).to receive(:single?).and_return(single?)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
let(:operation) do
|
20
|
+
Class.new do
|
21
|
+
include Mongo::Operation::SessionsSupported
|
22
|
+
end.new.tap do |op|
|
23
|
+
allow(op).to receive(:read).and_return(read_pref)
|
24
|
+
allow(op).to receive(:selector).and_return(selector)
|
25
|
+
allow(op).to receive(:options).and_return(options)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
let(:server) do
|
30
|
+
double('server').tap do |server|
|
31
|
+
allow(server).to receive(:cluster).and_return(cluster)
|
32
|
+
allow(server).to receive(:mongos?).and_return(mongos?)
|
33
|
+
allow(server).to receive(:standalone?).and_return(standalone?)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#add_read_preference' do
|
38
|
+
|
39
|
+
let(:read_pref) do
|
40
|
+
Mongo::ServerSelector.get(:mode => mode)
|
41
|
+
end
|
42
|
+
|
43
|
+
let(:actual) do
|
44
|
+
sel = operation.send(:selector).dup
|
45
|
+
operation.send(:add_read_preference, sel, server)
|
46
|
+
sel
|
47
|
+
end
|
48
|
+
|
49
|
+
let(:expected_read_preference) do
|
50
|
+
{mode: mode.to_s.gsub(/_(.)/) { $1.upcase }}
|
51
|
+
end
|
52
|
+
|
53
|
+
shared_examples_for 'adds read preference' do
|
54
|
+
|
55
|
+
let(:expected) do
|
56
|
+
selector.merge(:$readPreference => expected_read_preference)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'adds read preference' do
|
60
|
+
expect(actual).to eq(expected)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
shared_examples_for 'does not modify selector' do
|
65
|
+
|
66
|
+
it 'does not modify selector' do
|
67
|
+
expect(actual).to eq(selector)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
shared_examples_for 'does not send read preference' do
|
72
|
+
([nil] + %i(primary primary_preferred secondary secondary_preferred nearest)).each do |_mode|
|
73
|
+
active_mode = _mode
|
74
|
+
|
75
|
+
context "when read preference mode is #{active_mode}" do
|
76
|
+
let(:mode) { active_mode }
|
77
|
+
|
78
|
+
it_behaves_like 'does not modify selector'
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
shared_examples_for 'sends user-specified read preference' do
|
84
|
+
%i(primary primary_preferred secondary secondary_preferred nearest).each do |_mode|
|
85
|
+
active_mode = _mode
|
86
|
+
|
87
|
+
context "when read preference mode is #{active_mode}" do
|
88
|
+
let(:mode) { active_mode }
|
89
|
+
|
90
|
+
it_behaves_like 'adds read preference'
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
context "when read preference mode is nil" do
|
95
|
+
let(:mode) { nil }
|
96
|
+
|
97
|
+
let(:expected_read_preference) do
|
98
|
+
{mode: 'primary'}
|
99
|
+
end
|
100
|
+
|
101
|
+
it_behaves_like 'adds read preference'
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
shared_examples_for 'changes read preference to allow secondary reads' do
|
106
|
+
|
107
|
+
%i(primary_preferred secondary secondary_preferred nearest).each do |_mode|
|
108
|
+
active_mode = _mode
|
109
|
+
|
110
|
+
context "when read preference mode is #{active_mode}" do
|
111
|
+
let(:mode) { active_mode }
|
112
|
+
|
113
|
+
it_behaves_like 'adds read preference'
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context "when read preference mode is primary" do
|
118
|
+
let(:mode) { :primary }
|
119
|
+
|
120
|
+
let(:expected_read_preference) do
|
121
|
+
{mode: 'primaryPreferred'}
|
122
|
+
end
|
123
|
+
|
124
|
+
it_behaves_like 'adds read preference'
|
125
|
+
end
|
126
|
+
|
127
|
+
context "when read preference mode is nil" do
|
128
|
+
let(:mode) { nil }
|
129
|
+
|
130
|
+
let(:expected_read_preference) do
|
131
|
+
{mode: 'primaryPreferred'}
|
132
|
+
end
|
133
|
+
|
134
|
+
it_behaves_like 'adds read preference'
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
context 'in single topology' do
|
139
|
+
let(:single?) { true }
|
140
|
+
|
141
|
+
context 'when the server is a standalone' do
|
142
|
+
|
143
|
+
let(:standalone?) { true }
|
144
|
+
let(:mongos?) { false }
|
145
|
+
|
146
|
+
it_behaves_like 'does not send read preference'
|
147
|
+
end
|
148
|
+
|
149
|
+
context 'when the server is a mongos' do
|
150
|
+
|
151
|
+
let(:standalone?) { false }
|
152
|
+
let(:mongos?) { true }
|
153
|
+
|
154
|
+
it_behaves_like 'changes read preference to allow secondary reads'
|
155
|
+
end
|
156
|
+
|
157
|
+
context 'when the server is a replica set member' do
|
158
|
+
|
159
|
+
let(:standalone?) { false }
|
160
|
+
let(:mongos?) { false }
|
161
|
+
|
162
|
+
it_behaves_like 'changes read preference to allow secondary reads'
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
context 'not in single topology' do
|
167
|
+
let(:single?) { false }
|
168
|
+
|
169
|
+
context 'when the server is a standalone' do
|
170
|
+
|
171
|
+
let(:standalone?) { true }
|
172
|
+
let(:mongos?) { false }
|
173
|
+
|
174
|
+
it_behaves_like 'does not send read preference'
|
175
|
+
end
|
176
|
+
|
177
|
+
context 'when the server is a mongos' do
|
178
|
+
|
179
|
+
let(:standalone?) { false }
|
180
|
+
let(:mongos?) { true }
|
181
|
+
|
182
|
+
it_behaves_like 'sends user-specified read preference'
|
183
|
+
end
|
184
|
+
|
185
|
+
context 'when the server is a replica set member' do
|
186
|
+
|
187
|
+
let(:standalone?) { false }
|
188
|
+
let(:mongos?) { false }
|
189
|
+
|
190
|
+
it_behaves_like 'sends user-specified read preference'
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
@@ -22,7 +22,7 @@ describe Mongo::Operation::RemoveUser do
|
|
22
22
|
context 'when user removal was successful' do
|
23
23
|
|
24
24
|
let!(:response) do
|
25
|
-
operation.execute(root_authorized_primary)
|
25
|
+
operation.execute(root_authorized_primary, client: nil)
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'removes the user from the database' do
|
@@ -33,12 +33,12 @@ describe Mongo::Operation::RemoveUser do
|
|
33
33
|
context 'when removal was not successful' do
|
34
34
|
|
35
35
|
before do
|
36
|
-
operation.execute(root_authorized_primary)
|
36
|
+
operation.execute(root_authorized_primary, client: nil)
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'raises an exception' do
|
40
40
|
expect {
|
41
|
-
operation.execute(root_authorized_primary)
|
41
|
+
operation.execute(root_authorized_primary, client: nil)
|
42
42
|
}.to raise_error(Mongo::Error::OperationFailure)
|
43
43
|
end
|
44
44
|
end
|
@@ -98,7 +98,7 @@ describe Mongo::Operation::Update do
|
|
98
98
|
end
|
99
99
|
|
100
100
|
it 'updates the document' do
|
101
|
-
op.bulk_execute(authorized_primary)
|
101
|
+
op.bulk_execute(authorized_primary, client: nil)
|
102
102
|
expect(authorized_collection.find(field: 'blah').count).to eq(1)
|
103
103
|
end
|
104
104
|
end
|
@@ -122,7 +122,7 @@ describe Mongo::Operation::Update do
|
|
122
122
|
end
|
123
123
|
|
124
124
|
it 'updates the documents' do
|
125
|
-
op.bulk_execute(authorized_primary)
|
125
|
+
op.bulk_execute(authorized_primary, client: nil)
|
126
126
|
expect(authorized_collection.find(field: 'blah').count).to eq(2)
|
127
127
|
end
|
128
128
|
end
|
@@ -154,7 +154,7 @@ describe Mongo::Operation::Update do
|
|
154
154
|
context 'when write concern is acknowledged' do
|
155
155
|
|
156
156
|
it 'aborts after first error' do
|
157
|
-
failing_update.bulk_execute(authorized_primary)
|
157
|
+
failing_update.bulk_execute(authorized_primary, client: nil)
|
158
158
|
expect(authorized_collection.find(other: 'blah').count).to eq(0)
|
159
159
|
end
|
160
160
|
end
|
@@ -166,7 +166,7 @@ describe Mongo::Operation::Update do
|
|
166
166
|
end
|
167
167
|
|
168
168
|
it 'aborts after first error' do
|
169
|
-
failing_update.bulk_execute(authorized_primary)
|
169
|
+
failing_update.bulk_execute(authorized_primary, client: nil)
|
170
170
|
expect(authorized_collection.find(other: 'blah').count).to eq(0)
|
171
171
|
end
|
172
172
|
end
|
@@ -199,7 +199,7 @@ describe Mongo::Operation::Update do
|
|
199
199
|
context 'when write concern is acknowledged' do
|
200
200
|
|
201
201
|
it 'does not abort after first error' do
|
202
|
-
failing_update.bulk_execute(authorized_primary)
|
202
|
+
failing_update.bulk_execute(authorized_primary, client: nil)
|
203
203
|
expect(authorized_collection.find(other: 'blah').count).to eq(1)
|
204
204
|
end
|
205
205
|
end
|
@@ -211,7 +211,7 @@ describe Mongo::Operation::Update do
|
|
211
211
|
end
|
212
212
|
|
213
213
|
it 'does not abort after first error' do
|
214
|
-
failing_update.bulk_execute(authorized_primary)
|
214
|
+
failing_update.bulk_execute(authorized_primary, client: nil)
|
215
215
|
expect(authorized_collection.find(other: 'blah').count).to eq(1)
|
216
216
|
end
|
217
217
|
end
|
@@ -108,12 +108,7 @@ describe Mongo::Operation::Update::OpMsg do
|
|
108
108
|
end
|
109
109
|
|
110
110
|
let(:expected_payload_1) do
|
111
|
-
|
112
|
-
type: 1,
|
113
|
-
payload: { identifier: 'updates',
|
114
|
-
sequence: updates
|
115
|
-
}
|
116
|
-
}
|
111
|
+
Mongo::Protocol::Msg::Section1.new('updates', updates)
|
117
112
|
end
|
118
113
|
|
119
114
|
let(:session) do
|
@@ -150,6 +145,8 @@ describe Mongo::Operation::Update::OpMsg do
|
|
150
145
|
end
|
151
146
|
|
152
147
|
context 'when an implicit session is created and the topology is then updated and the server does not support sessions' do
|
148
|
+
# Mocks on features are incompatible with linting
|
149
|
+
skip_if_linting
|
153
150
|
|
154
151
|
let(:expected_global_args) do
|
155
152
|
global_args.dup.tap do |args|
|
@@ -100,7 +100,7 @@ describe Mongo::Operation::Update do
|
|
100
100
|
end
|
101
101
|
|
102
102
|
let(:result) do
|
103
|
-
update.execute(authorized_primary)
|
103
|
+
update.execute(authorized_primary, client: nil)
|
104
104
|
end
|
105
105
|
|
106
106
|
it 'updates the document' do
|
@@ -128,7 +128,7 @@ describe Mongo::Operation::Update do
|
|
128
128
|
|
129
129
|
it 'raises an exception' do
|
130
130
|
expect {
|
131
|
-
update.execute(authorized_primary)
|
131
|
+
update.execute(authorized_primary, client: nil)
|
132
132
|
}.to raise_error(Mongo::Error::OperationFailure)
|
133
133
|
end
|
134
134
|
end
|
@@ -152,7 +152,7 @@ describe Mongo::Operation::Update do
|
|
152
152
|
end
|
153
153
|
|
154
154
|
let(:result) do
|
155
|
-
update.execute(authorized_primary)
|
155
|
+
update.execute(authorized_primary, client: nil)
|
156
156
|
end
|
157
157
|
|
158
158
|
it 'updates the documents' do
|
@@ -180,7 +180,7 @@ describe Mongo::Operation::Update do
|
|
180
180
|
|
181
181
|
it 'raises an exception' do
|
182
182
|
expect {
|
183
|
-
update.execute(authorized_primary)
|
183
|
+
update.execute(authorized_primary, client: nil)
|
184
184
|
}.to raise_error(Mongo::Error::OperationFailure)
|
185
185
|
end
|
186
186
|
end
|
@@ -193,7 +193,7 @@ describe Mongo::Operation::Update do
|
|
193
193
|
|
194
194
|
it 'raises an error' do
|
195
195
|
expect {
|
196
|
-
update.execute(authorized_primary)
|
196
|
+
update.execute(authorized_primary, client: nil)
|
197
197
|
}.to raise_error(Mongo::Error::MaxBSONSize)
|
198
198
|
end
|
199
199
|
end
|
@@ -205,7 +205,7 @@ describe Mongo::Operation::Update do
|
|
205
205
|
end
|
206
206
|
|
207
207
|
let(:result) do
|
208
|
-
update.execute(authorized_primary)
|
208
|
+
update.execute(authorized_primary, client: nil)
|
209
209
|
end
|
210
210
|
|
211
211
|
it 'inserts the document' do
|
@@ -243,7 +243,7 @@ describe Mongo::Operation::Update do
|
|
243
243
|
end
|
244
244
|
|
245
245
|
let(:result) do
|
246
|
-
update.execute(authorized_primary)
|
246
|
+
update.execute(authorized_primary, client: nil)
|
247
247
|
end
|
248
248
|
|
249
249
|
before do
|
@@ -35,7 +35,7 @@ describe Mongo::Operation::UpdateUser do
|
|
35
35
|
context 'when user update was successful' do
|
36
36
|
|
37
37
|
let!(:response) do
|
38
|
-
operation.execute(root_authorized_primary)
|
38
|
+
operation.execute(root_authorized_primary, client: nil)
|
39
39
|
end
|
40
40
|
|
41
41
|
it 'updates the user in the database' do
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require '
|
1
|
+
require 'lite_spec_helper'
|
2
2
|
|
3
3
|
describe Mongo::Protocol::Compressed do
|
4
4
|
|
5
|
-
let(:original_message) { Mongo::Protocol::Query.new(SpecConfig.instance.test_db,
|
5
|
+
let(:original_message) { Mongo::Protocol::Query.new(SpecConfig.instance.test_db, 'protocol-test', { ping: 1 }) }
|
6
6
|
let(:compressor) { 'zlib' }
|
7
7
|
let(:level) { nil }
|
8
8
|
|
@@ -53,7 +53,6 @@ describe Mongo::Protocol::Compressed do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
context 'when the original message is not replyable' do
|
56
|
-
min_server_fcv '3.6'
|
57
56
|
|
58
57
|
let(:original_message) do
|
59
58
|
Mongo::Protocol::Msg.new([:more_to_come], {}, { ping: 1 })
|
@@ -1,16 +1,17 @@
|
|
1
|
-
require '
|
1
|
+
require 'lite_spec_helper'
|
2
|
+
require 'support/shared/protocol'
|
2
3
|
|
3
4
|
describe Mongo::Protocol::Delete do
|
4
5
|
|
5
6
|
let(:opcode) { 2006 }
|
6
7
|
let(:db) { SpecConfig.instance.test_db }
|
7
|
-
let(:
|
8
|
-
let(:ns) { "#{db}.#{
|
8
|
+
let(:collection_name) { 'protocol-test' }
|
9
|
+
let(:ns) { "#{db}.#{collection_name}" }
|
9
10
|
let(:selector) { { :name => 'Tyler' } }
|
10
11
|
let(:options) { Hash.new }
|
11
12
|
|
12
13
|
let(:message) do
|
13
|
-
described_class.new(db,
|
14
|
+
described_class.new(db, collection_name, selector, options)
|
14
15
|
end
|
15
16
|
|
16
17
|
describe '#initialize' do
|
@@ -41,7 +42,7 @@ describe Mongo::Protocol::Delete do
|
|
41
42
|
|
42
43
|
context 'when the fields are equal' do
|
43
44
|
let(:other) do
|
44
|
-
described_class.new(db,
|
45
|
+
described_class.new(db, collection_name, selector, options)
|
45
46
|
end
|
46
47
|
|
47
48
|
it 'returns true' do
|
@@ -51,7 +52,7 @@ describe Mongo::Protocol::Delete do
|
|
51
52
|
|
52
53
|
context 'when the database is not equal' do
|
53
54
|
let(:other) do
|
54
|
-
described_class.new('tyler',
|
55
|
+
described_class.new('tyler', collection_name, selector, options)
|
55
56
|
end
|
56
57
|
|
57
58
|
it 'returns false' do
|
@@ -71,7 +72,7 @@ describe Mongo::Protocol::Delete do
|
|
71
72
|
|
72
73
|
context 'when the selector is not equal' do
|
73
74
|
let(:other) do
|
74
|
-
described_class.new(db,
|
75
|
+
described_class.new(db, collection_name, { :a => 1 }, options)
|
75
76
|
end
|
76
77
|
|
77
78
|
it 'returns false' do
|
@@ -81,7 +82,7 @@ describe Mongo::Protocol::Delete do
|
|
81
82
|
|
82
83
|
context 'when the options are not equal' do
|
83
84
|
let(:other) do
|
84
|
-
described_class.new(db,
|
85
|
+
described_class.new(db, collection_name, selector, :flags => [:single_remove])
|
85
86
|
end
|
86
87
|
|
87
88
|
it 'returns false' do
|
@@ -1,16 +1,17 @@
|
|
1
|
-
require '
|
1
|
+
require 'lite_spec_helper'
|
2
|
+
require 'support/shared/protocol'
|
2
3
|
|
3
4
|
describe Mongo::Protocol::GetMore do
|
4
5
|
|
5
6
|
let(:opcode) { 2005 }
|
6
7
|
let(:db) { SpecConfig.instance.test_db }
|
7
|
-
let(:
|
8
|
-
let(:ns) { "#{db}.#{
|
8
|
+
let(:collection_name) { 'protocol-test' }
|
9
|
+
let(:ns) { "#{db}.#{collection_name}" }
|
9
10
|
let(:limit) { 25 }
|
10
11
|
let(:cursor_id) { 12345 }
|
11
12
|
|
12
13
|
let(:message) do
|
13
|
-
described_class.new(db,
|
14
|
+
described_class.new(db, collection_name, limit, cursor_id)
|
14
15
|
end
|
15
16
|
|
16
17
|
describe '#initialize' do
|
@@ -34,7 +35,7 @@ describe Mongo::Protocol::GetMore do
|
|
34
35
|
|
35
36
|
context 'when the fields are equal' do
|
36
37
|
let(:other) do
|
37
|
-
described_class.new(db,
|
38
|
+
described_class.new(db, collection_name, limit, cursor_id)
|
38
39
|
end
|
39
40
|
|
40
41
|
it 'returns true' do
|
@@ -44,7 +45,7 @@ describe Mongo::Protocol::GetMore do
|
|
44
45
|
|
45
46
|
context 'when the database is not equal' do
|
46
47
|
let(:other) do
|
47
|
-
described_class.new('tyler',
|
48
|
+
described_class.new('tyler', collection_name, limit, cursor_id)
|
48
49
|
end
|
49
50
|
|
50
51
|
it 'returns false' do
|
@@ -64,7 +65,7 @@ describe Mongo::Protocol::GetMore do
|
|
64
65
|
|
65
66
|
context 'when the limit is not equal' do
|
66
67
|
let(:other) do
|
67
|
-
described_class.new(db,
|
68
|
+
described_class.new(db, collection_name, 123, cursor_id)
|
68
69
|
end
|
69
70
|
|
70
71
|
it 'returns false' do
|
@@ -74,7 +75,7 @@ describe Mongo::Protocol::GetMore do
|
|
74
75
|
|
75
76
|
context 'when the cursor id is not equal' do
|
76
77
|
let(:other) do
|
77
|
-
described_class.new(db,
|
78
|
+
described_class.new(db, collection_name, limit, 7777)
|
78
79
|
end
|
79
80
|
|
80
81
|
it 'returns false' do
|