mongo 2.11.6 → 2.12.0.rc0
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 +2 -2
- data.tar.gz.sig +0 -0
- data/CONTRIBUTING.md +1 -1
- data/lib/mongo.rb +3 -0
- data/lib/mongo/address.rb +13 -2
- 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 +126 -11
- data/lib/mongo/client_encryption.rb +103 -0
- data/lib/mongo/cluster.rb +2 -2
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +18 -6
- data/lib/mongo/cluster/sdam_flow.rb +54 -58
- data/lib/mongo/cluster/srv_monitor.rb +1 -1
- 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 +7 -9
- data/lib/mongo/collection/view/writable.rb +7 -7
- data/lib/mongo/crypt.rb +33 -0
- data/lib/mongo/crypt/auto_decryption_context.rb +42 -0
- data/lib/mongo/crypt/auto_encrypter.rb +169 -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 +1162 -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 +283 -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 +293 -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 +13 -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/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/operation_failure.rb +1 -0
- data/lib/mongo/grid/file.rb +0 -5
- data/lib/mongo/grid/file/chunk.rb +0 -2
- data/lib/mongo/grid/file/info.rb +2 -1
- data/lib/mongo/grid/fs_bucket.rb +13 -15
- data/lib/mongo/grid/stream/write.rb +3 -9
- data/lib/mongo/index/view.rb +3 -3
- 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 +2 -2
- data/lib/mongo/operation/insert/legacy.rb +2 -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 +10 -8
- 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/write.rb +17 -10
- data/lib/mongo/operation/update/op_msg.rb +1 -1
- data/lib/mongo/protocol/compressed.rb +6 -5
- data/lib/mongo/protocol/insert.rb +3 -1
- data/lib/mongo/protocol/message.rb +72 -8
- data/lib/mongo/protocol/msg.rb +191 -37
- data/lib/mongo/protocol/query.rb +7 -9
- data/lib/mongo/protocol/serializers.rb +6 -2
- data/lib/mongo/server.rb +10 -4
- data/lib/mongo/server/connection.rb +20 -9
- data/lib/mongo/server/connection_base.rb +81 -12
- data/lib/mongo/server/connection_common.rb +61 -0
- data/lib/mongo/server/connection_pool.rb +37 -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 +2 -2
- 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/timeout.rb +49 -0
- data/lib/mongo/uri.rb +30 -1
- data/lib/mongo/version.rb +1 -1
- data/mongo.gemspec +1 -1
- data/spec/README.md +134 -7
- data/spec/integration/auth_spec.rb +53 -0
- data/spec/integration/{client_options_spec.rb → client_authentication_options_spec.rb} +10 -10
- data/spec/integration/client_construction_spec.rb +76 -1
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +351 -0
- data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +301 -0
- data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +71 -0
- data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +76 -0
- data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +216 -0
- data/spec/integration/client_side_encryption/auto_encryption_spec.rb +600 -0
- data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +183 -0
- data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +74 -0
- data/spec/integration/client_side_encryption/client_close_spec.rb +59 -0
- data/spec/integration/client_side_encryption/corpus_spec.rb +228 -0
- data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +132 -0
- data/spec/integration/client_side_encryption/data_key_spec.rb +163 -0
- data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +114 -0
- data/spec/integration/client_side_encryption/external_key_vault_spec.rb +137 -0
- data/spec/integration/client_side_encryption/views_spec.rb +42 -0
- data/spec/integration/client_update_spec.rb +120 -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/reconnect_spec.rb +7 -6
- data/spec/integration/size_limit_spec.rb +94 -0
- data/spec/integration/srv_monitoring_spec.rb +14 -6
- data/spec/lite_spec_helper.rb +31 -22
- 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/x509_spec.rb +5 -1
- data/spec/mongo/client_construction_spec.rb +206 -3
- data/spec/mongo/client_encryption_spec.rb +408 -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 +4 -33
- data/spec/mongo/crypt/auto_decryption_context_spec.rb +90 -0
- data/spec/mongo/crypt/auto_encrypter_spec.rb +182 -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 +198 -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/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/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 +1 -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/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/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 +4 -4
- 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 +13 -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 +85 -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 +61 -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 +168 -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/common_shortcuts.rb +12 -0
- data/spec/support/constraints.rb +16 -0
- data/spec/support/crypt.rb +140 -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 +17 -1
- data/spec/support/matchers.rb +19 -0
- data/spec/support/shared/protocol.rb +2 -0
- data/spec/support/spec_config.rb +43 -13
- data/spec/support/utils.rb +132 -10
- metadata +277 -81
- metadata.gz.sig +0 -0
- data/spec/integration/grid_fs_bucket_spec.rb +0 -48
- data/spec/integration/zlib_compression_spec.rb +0 -25
- data/spec/spec_tests/data/sdam/sharded/single_mongos.yml +0 -33
- data/spec/support/connection_string.rb +0 -354
@@ -1,17 +1,17 @@
|
|
1
|
-
|
2
|
-
require '
|
1
|
+
require 'lite_spec_helper'
|
2
|
+
require 'support/shared/protocol'
|
3
3
|
|
4
4
|
describe Mongo::Protocol::Query do
|
5
5
|
|
6
6
|
let(:opcode) { 2004 }
|
7
7
|
let(:db) { SpecConfig.instance.test_db }
|
8
|
-
let(:
|
9
|
-
let(:ns) { "#{db}.#{
|
8
|
+
let(:collection_name) { 'protocol-test' }
|
9
|
+
let(:ns) { "#{db}.#{collection_name}" }
|
10
10
|
let(:selector) { { :name => 'Tyler' } }
|
11
11
|
let(:options) { Hash.new }
|
12
12
|
|
13
13
|
let(:message) do
|
14
|
-
described_class.new(db,
|
14
|
+
described_class.new(db, collection_name, selector, options)
|
15
15
|
end
|
16
16
|
|
17
17
|
describe '#initialize' do
|
@@ -66,7 +66,7 @@ describe Mongo::Protocol::Query do
|
|
66
66
|
|
67
67
|
context 'when the fields are equal' do
|
68
68
|
let(:other) do
|
69
|
-
described_class.new(db,
|
69
|
+
described_class.new(db, collection_name, selector, options)
|
70
70
|
end
|
71
71
|
|
72
72
|
it 'returns true' do
|
@@ -76,7 +76,7 @@ describe Mongo::Protocol::Query do
|
|
76
76
|
|
77
77
|
context 'when the database is not equal' do
|
78
78
|
let(:other) do
|
79
|
-
described_class.new('tyler',
|
79
|
+
described_class.new('tyler', collection_name, selector, options)
|
80
80
|
end
|
81
81
|
|
82
82
|
it 'returns false' do
|
@@ -96,7 +96,7 @@ describe Mongo::Protocol::Query do
|
|
96
96
|
|
97
97
|
context 'when the selector is not equal' do
|
98
98
|
let(:other) do
|
99
|
-
described_class.new(db,
|
99
|
+
described_class.new(db, collection_name, { :a => 1 }, options)
|
100
100
|
end
|
101
101
|
|
102
102
|
it 'returns false' do
|
@@ -106,7 +106,7 @@ describe Mongo::Protocol::Query do
|
|
106
106
|
|
107
107
|
context 'when the options are not equal' do
|
108
108
|
let(:other) do
|
109
|
-
described_class.new(db,
|
109
|
+
described_class.new(db, collection_name, selector, :skip => 2)
|
110
110
|
end
|
111
111
|
|
112
112
|
it 'returns false' do
|
@@ -225,7 +225,7 @@ describe Mongo::Protocol::Query do
|
|
225
225
|
context 'when the namespace contains unicode characters' do
|
226
226
|
let(:field) { bytes.to_s[20..40] }
|
227
227
|
|
228
|
-
let(:
|
228
|
+
let(:collection_name) do
|
229
229
|
'områder'
|
230
230
|
end
|
231
231
|
|
@@ -320,7 +320,7 @@ describe Mongo::Protocol::Query do
|
|
320
320
|
end
|
321
321
|
|
322
322
|
it 'returns a compressed message' do
|
323
|
-
expect(message.
|
323
|
+
expect(message.maybe_compress('zlib')).to be_a(Mongo::Protocol::Compressed)
|
324
324
|
end
|
325
325
|
end
|
326
326
|
|
@@ -335,7 +335,7 @@ describe Mongo::Protocol::Query do
|
|
335
335
|
context "when the command is #{command}" do
|
336
336
|
|
337
337
|
it 'does not allow compression for the command' do
|
338
|
-
expect(message.
|
338
|
+
expect(message.maybe_compress('zlib')).to be(message)
|
339
339
|
end
|
340
340
|
end
|
341
341
|
end
|
@@ -1,17 +1,18 @@
|
|
1
|
-
require '
|
1
|
+
require 'lite_spec_helper'
|
2
|
+
require 'support/shared/protocol'
|
2
3
|
|
3
4
|
describe Mongo::Protocol::Update do
|
4
5
|
|
5
6
|
let(:opcode) { 2001 }
|
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(:update_doc) { { :name => 'Bob' } }
|
11
12
|
let(:options) { Hash.new }
|
12
13
|
|
13
14
|
let(:message) do
|
14
|
-
described_class.new(db,
|
15
|
+
described_class.new(db, collection_name, selector, update_doc, options)
|
15
16
|
end
|
16
17
|
|
17
18
|
describe '#initialize' do
|
@@ -35,7 +36,7 @@ describe Mongo::Protocol::Update do
|
|
35
36
|
|
36
37
|
context 'when the fields are equal' do
|
37
38
|
let(:other) do
|
38
|
-
described_class.new(db,
|
39
|
+
described_class.new(db, collection_name, selector, update_doc, options)
|
39
40
|
end
|
40
41
|
|
41
42
|
it 'returns true' do
|
@@ -45,7 +46,7 @@ describe Mongo::Protocol::Update do
|
|
45
46
|
|
46
47
|
context 'when the database is not equal' do
|
47
48
|
let(:other) do
|
48
|
-
described_class.new('tyler',
|
49
|
+
described_class.new('tyler', collection_name, selector, update_doc, options)
|
49
50
|
end
|
50
51
|
|
51
52
|
it 'returns false' do
|
@@ -65,7 +66,7 @@ describe Mongo::Protocol::Update do
|
|
65
66
|
|
66
67
|
context 'when the selector is not equal' do
|
67
68
|
let(:other) do
|
68
|
-
described_class.new(db,
|
69
|
+
described_class.new(db, collection_name, { :a => 1 }, update_doc, options)
|
69
70
|
end
|
70
71
|
|
71
72
|
it 'returns false' do
|
@@ -75,7 +76,7 @@ describe Mongo::Protocol::Update do
|
|
75
76
|
|
76
77
|
context 'when the update document is not equal' do
|
77
78
|
let(:other) do
|
78
|
-
described_class.new(db,
|
79
|
+
described_class.new(db, collection_name, selector, { :a => 1 }, options)
|
79
80
|
end
|
80
81
|
|
81
82
|
it 'returns false' do
|
@@ -85,7 +86,7 @@ describe Mongo::Protocol::Update do
|
|
85
86
|
|
86
87
|
context 'when the options are not equal' do
|
87
88
|
let(:other) do
|
88
|
-
described_class.new(db,
|
89
|
+
described_class.new(db, collection_name, selector, update_doc,
|
89
90
|
:flags => :upsert)
|
90
91
|
end
|
91
92
|
|
@@ -532,7 +532,9 @@ describe Mongo::Server::Connection, retry: 3 do
|
|
532
532
|
user: SpecConfig.instance.test_user.name,
|
533
533
|
password: SpecConfig.instance.test_user.password,
|
534
534
|
))
|
535
|
-
)
|
535
|
+
).tap do |connection|
|
536
|
+
connection.connect!
|
537
|
+
end
|
536
538
|
end
|
537
539
|
|
538
540
|
let(:documents) do
|
@@ -627,14 +629,24 @@ describe Mongo::Server::Connection, retry: 3 do
|
|
627
629
|
context 'linting' do
|
628
630
|
require_linting
|
629
631
|
|
630
|
-
it '
|
632
|
+
it 'does not permit sending over the connection' do
|
631
633
|
expect {
|
632
634
|
connection.dispatch([ query_alice ])
|
633
635
|
}.to raise_error(Mongo::Error::UnexpectedResponse)
|
634
636
|
|
635
637
|
expect do
|
636
638
|
connection.dispatch([ query_alice ]).documents
|
637
|
-
end.to raise_error(Mongo::Error::LintError, /
|
639
|
+
end.to raise_error(Mongo::Error::LintError, /Trying to deliver a message over a disconnected connection/)
|
640
|
+
end
|
641
|
+
|
642
|
+
it 'marks the connection no longer usable' do
|
643
|
+
expect {
|
644
|
+
connection.dispatch([ query_alice ])
|
645
|
+
}.to raise_error(Mongo::Error::UnexpectedResponse)
|
646
|
+
|
647
|
+
expect do
|
648
|
+
connection.connect!
|
649
|
+
end.to raise_error(Mongo::Error::LintError, /Reconnecting closed connections is no longer supported/)
|
638
650
|
end
|
639
651
|
end
|
640
652
|
|
@@ -714,9 +726,15 @@ describe Mongo::Server::Connection, retry: 3 do
|
|
714
726
|
end
|
715
727
|
|
716
728
|
context 'when the message is a command' do
|
729
|
+
# Server description is frozen when linting is enabled, which is
|
730
|
+
# incompatible with expectations set on it in this test
|
731
|
+
skip_if_linting
|
717
732
|
|
718
733
|
let(:selector) do
|
719
|
-
|
734
|
+
# The driver allows up to 16KiB for command overhead on top of
|
735
|
+
# the max bson object size reported by the server.
|
736
|
+
# Add that much padding.
|
737
|
+
{ :getlasterror => '1', 'padding' => 'x'*16384 }
|
720
738
|
end
|
721
739
|
|
722
740
|
let(:command) do
|
@@ -730,7 +748,8 @@ describe Mongo::Server::Connection, retry: 3 do
|
|
730
748
|
it 'checks the size against the max bson size' do
|
731
749
|
# 100 works for non-x509 auth.
|
732
750
|
# 10 is needed for x509 auth due to smaller payloads, apparently.
|
733
|
-
expect_any_instance_of(Mongo::Server).to receive(
|
751
|
+
expect_any_instance_of(Mongo::Server::Description).to receive(
|
752
|
+
:max_bson_object_size).at_least(:once).and_return(10)
|
734
753
|
expect do
|
735
754
|
reply
|
736
755
|
end.to raise_exception(Mongo::Error::MaxBSONSize)
|
@@ -862,7 +881,9 @@ describe Mongo::Server::Connection, retry: 3 do
|
|
862
881
|
context 'when the socket_timeout is negative' do
|
863
882
|
|
864
883
|
let(:connection) do
|
865
|
-
described_class.new(server, server.options)
|
884
|
+
described_class.new(server, server.options).tap do |connection|
|
885
|
+
connection.connect!
|
886
|
+
end
|
866
887
|
end
|
867
888
|
|
868
889
|
let(:message) do
|
@@ -871,7 +892,7 @@ describe Mongo::Server::Connection, retry: 3 do
|
|
871
892
|
|
872
893
|
before do
|
873
894
|
expect(message).to receive(:replyable?) { false }
|
874
|
-
connection.send(:deliver, message)
|
895
|
+
connection.send(:deliver, message, nil)
|
875
896
|
|
876
897
|
connection.send(:socket).instance_variable_set(:@timeout, -(Time.now.to_i))
|
877
898
|
end
|
data/spec/mongo/socket_spec.rb
CHANGED
@@ -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
|