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
@@ -106,12 +106,7 @@ describe Mongo::Operation::Insert::OpMsg do
|
|
106
106
|
end
|
107
107
|
|
108
108
|
let!(:expected_payload_1) do
|
109
|
-
|
110
|
-
type: 1,
|
111
|
-
payload: { identifier: 'documents',
|
112
|
-
sequence: op.documents
|
113
|
-
}
|
114
|
-
}
|
109
|
+
Mongo::Protocol::Msg::Section1.new('documents', op.documents)
|
115
110
|
end
|
116
111
|
|
117
112
|
let(:session) do
|
@@ -158,6 +153,8 @@ describe Mongo::Operation::Insert::OpMsg do
|
|
158
153
|
end
|
159
154
|
|
160
155
|
context 'when an implicit session is created and the topology is then updated and the server does not support sessions' do
|
156
|
+
# Mocks on features are incompatible with linting
|
157
|
+
skip_if_linting
|
161
158
|
|
162
159
|
let(:expected_global_args) do
|
163
160
|
global_args.dup.tap do |args|
|
@@ -83,7 +83,7 @@ describe Mongo::Operation::Insert do
|
|
83
83
|
end
|
84
84
|
|
85
85
|
let(:inserted_ids) do
|
86
|
-
insert.execute(authorized_primary).inserted_ids
|
86
|
+
insert.execute(authorized_primary, client: nil).inserted_ids
|
87
87
|
end
|
88
88
|
|
89
89
|
let(:collection_ids) do
|
@@ -112,7 +112,7 @@ describe Mongo::Operation::Insert do
|
|
112
112
|
context 'when the insert succeeds' do
|
113
113
|
|
114
114
|
let!(:response) do
|
115
|
-
insert.execute(authorized_primary)
|
115
|
+
insert.execute(authorized_primary, client: nil)
|
116
116
|
end
|
117
117
|
|
118
118
|
it 'reports the correct written count' do
|
@@ -144,8 +144,8 @@ describe Mongo::Operation::Insert do
|
|
144
144
|
|
145
145
|
it 'raises an error' do
|
146
146
|
expect {
|
147
|
-
failing_insert.execute(authorized_primary)
|
148
|
-
failing_insert.execute(authorized_primary)
|
147
|
+
failing_insert.execute(authorized_primary, client: nil)
|
148
|
+
failing_insert.execute(authorized_primary, client: nil)
|
149
149
|
}.to raise_error(Mongo::Error::OperationFailure)
|
150
150
|
end
|
151
151
|
end
|
@@ -163,7 +163,7 @@ describe Mongo::Operation::Insert do
|
|
163
163
|
end
|
164
164
|
|
165
165
|
let!(:response) do
|
166
|
-
insert.execute(authorized_primary)
|
166
|
+
insert.execute(authorized_primary, client: nil)
|
167
167
|
end
|
168
168
|
|
169
169
|
it 'reports the correct written count' do
|
@@ -195,8 +195,8 @@ describe Mongo::Operation::Insert do
|
|
195
195
|
|
196
196
|
it 'raises an error' do
|
197
197
|
expect {
|
198
|
-
failing_insert.execute(authorized_primary)
|
199
|
-
failing_insert.execute(authorized_primary)
|
198
|
+
failing_insert.execute(authorized_primary, client: nil)
|
199
|
+
failing_insert.execute(authorized_primary, client: nil)
|
200
200
|
}.to raise_error(Mongo::Error::OperationFailure)
|
201
201
|
end
|
202
202
|
end
|
@@ -221,8 +221,8 @@ describe Mongo::Operation::Insert do
|
|
221
221
|
|
222
222
|
it 'raises an error' do
|
223
223
|
expect {
|
224
|
-
failing_insert.execute(authorized_primary)
|
225
|
-
failing_insert.execute(authorized_primary)
|
224
|
+
failing_insert.execute(authorized_primary, client: nil)
|
225
|
+
failing_insert.execute(authorized_primary, client: nil)
|
226
226
|
}.to raise_error(Mongo::Error::OperationFailure)
|
227
227
|
end
|
228
228
|
|
@@ -236,13 +236,13 @@ describe Mongo::Operation::Insert do
|
|
236
236
|
|
237
237
|
it 'raises an error' do
|
238
238
|
expect {
|
239
|
-
insert.execute(authorized_primary)
|
239
|
+
insert.execute(authorized_primary, client: nil)
|
240
240
|
}.to raise_error(Mongo::Error::MaxBSONSize)
|
241
241
|
end
|
242
242
|
|
243
243
|
it 'does not insert the document' do
|
244
244
|
expect {
|
245
|
-
insert.execute(authorized_primary)
|
245
|
+
insert.execute(authorized_primary, client: nil)
|
246
246
|
}.to raise_error(Mongo::Error::MaxBSONSize)
|
247
247
|
expect(authorized_collection.find.count).to eq(0)
|
248
248
|
end
|
@@ -273,7 +273,7 @@ describe Mongo::Operation::Insert do
|
|
273
273
|
end
|
274
274
|
|
275
275
|
let(:response) do
|
276
|
-
op.execute(authorized_primary)
|
276
|
+
op.execute(authorized_primary, client: nil)
|
277
277
|
end
|
278
278
|
|
279
279
|
it 'uses op codes instead of write commands' do
|
@@ -97,7 +97,7 @@ describe Mongo::Operation::MapReduce do
|
|
97
97
|
context 'when the map/reduce succeeds' do
|
98
98
|
|
99
99
|
let(:response) do
|
100
|
-
op.execute(authorized_primary)
|
100
|
+
op.execute(authorized_primary, client: nil)
|
101
101
|
end
|
102
102
|
|
103
103
|
it 'returns the response' do
|
@@ -117,7 +117,7 @@ describe Mongo::Operation::MapReduce do
|
|
117
117
|
|
118
118
|
it 'raises an exception' do
|
119
119
|
expect {
|
120
|
-
op.execute(authorized_primary)
|
120
|
+
op.execute(authorized_primary, client: nil)
|
121
121
|
}.to raise_error(Mongo::Error::OperationFailure)
|
122
122
|
end
|
123
123
|
end
|
@@ -0,0 +1,351 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mongo::Operation::ReadPreferenceSupported do
|
4
|
+
|
5
|
+
let(:selector) do
|
6
|
+
{ 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::ReadPreferenceSupported
|
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_slave_ok_flag_maybe' do
|
38
|
+
|
39
|
+
let(:actual) do
|
40
|
+
operation.send(:add_slave_ok_flag_maybe, operation.send(:options), server)
|
41
|
+
end
|
42
|
+
|
43
|
+
shared_examples_for 'sets the slave_ok flag as expected' do
|
44
|
+
it 'sets the slave_ok flag as expected' do
|
45
|
+
expect(actual).to eq(expected)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
shared_examples_for 'never sets slave_ok' do
|
50
|
+
|
51
|
+
let(:expected) do
|
52
|
+
{ }
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'when no read preference is specified' do
|
56
|
+
let(:read_pref) { Mongo::ServerSelector.get }
|
57
|
+
|
58
|
+
it_behaves_like 'sets the slave_ok flag as expected'
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'when primary read preference is specified' do
|
62
|
+
let(:read_pref) { Mongo::ServerSelector.get(:mode => :primary) }
|
63
|
+
|
64
|
+
it_behaves_like 'sets the slave_ok flag as expected'
|
65
|
+
end
|
66
|
+
|
67
|
+
context 'when secondary read preference is specified' do
|
68
|
+
let(:read_pref) { Mongo::ServerSelector.get(:mode => :secondary) }
|
69
|
+
|
70
|
+
it_behaves_like 'sets the slave_ok flag as expected'
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
shared_examples_for 'always sets slave_ok' do
|
75
|
+
|
76
|
+
let(:expected) do
|
77
|
+
{ :flags => [ :slave_ok ] }
|
78
|
+
end
|
79
|
+
|
80
|
+
context 'when no read preference is specified' do
|
81
|
+
let(:read_pref) { Mongo::ServerSelector.get }
|
82
|
+
|
83
|
+
it_behaves_like 'sets the slave_ok flag as expected'
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'when primary read preference is specified' do
|
87
|
+
let(:read_pref) { Mongo::ServerSelector.get(:mode => :primary) }
|
88
|
+
|
89
|
+
it_behaves_like 'sets the slave_ok flag as expected'
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'when secondary read preference is specified' do
|
93
|
+
let(:read_pref) { Mongo::ServerSelector.get(:mode => :secondary) }
|
94
|
+
|
95
|
+
it_behaves_like 'sets the slave_ok flag as expected'
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
shared_examples_for 'sets slave_ok if read preference is specified and is not primary' do
|
100
|
+
|
101
|
+
context 'when there is no read preference set' do
|
102
|
+
|
103
|
+
let(:read_pref) { Mongo::ServerSelector.get }
|
104
|
+
|
105
|
+
let(:expected) do
|
106
|
+
{ }
|
107
|
+
end
|
108
|
+
|
109
|
+
it_behaves_like 'sets the slave_ok flag as expected'
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'when there is a read preference' do
|
113
|
+
|
114
|
+
context 'when the read preference requires the slave_ok flag' do
|
115
|
+
|
116
|
+
let(:read_pref) { Mongo::ServerSelector.get(:mode => :secondary) }
|
117
|
+
|
118
|
+
let(:expected) do
|
119
|
+
{ :flags => [ :slave_ok ] }
|
120
|
+
end
|
121
|
+
|
122
|
+
it_behaves_like 'sets the slave_ok flag as expected'
|
123
|
+
end
|
124
|
+
|
125
|
+
context 'when the read preference does not require the slave_ok flag' do
|
126
|
+
|
127
|
+
let(:read_pref) { Mongo::ServerSelector.get(:mode => :primary) }
|
128
|
+
|
129
|
+
let(:expected) do
|
130
|
+
{ }
|
131
|
+
end
|
132
|
+
|
133
|
+
it_behaves_like 'sets the slave_ok flag as expected'
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
context 'when the topology is Single' do
|
139
|
+
|
140
|
+
let(:single?) { true }
|
141
|
+
let(:mongos?) { false }
|
142
|
+
|
143
|
+
context 'when the server is a standalone' do
|
144
|
+
|
145
|
+
let(:standalone?) { true }
|
146
|
+
|
147
|
+
it_behaves_like 'never sets slave_ok'
|
148
|
+
end
|
149
|
+
|
150
|
+
context 'when the server is a mongos' do
|
151
|
+
|
152
|
+
let(:standalone?) { false }
|
153
|
+
let(:mongos?) { true }
|
154
|
+
|
155
|
+
it_behaves_like 'always sets slave_ok'
|
156
|
+
end
|
157
|
+
|
158
|
+
context 'when the server is a replica set member' do
|
159
|
+
|
160
|
+
let(:standalone?) { false }
|
161
|
+
let(:mongos?) { false }
|
162
|
+
|
163
|
+
it_behaves_like 'always sets slave_ok'
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
context 'when the topology is not Single' do
|
168
|
+
|
169
|
+
let(:single?) { false }
|
170
|
+
let(:mongos?) { false }
|
171
|
+
|
172
|
+
context 'when the server is a standalone' do
|
173
|
+
|
174
|
+
let(:standalone?) { true }
|
175
|
+
|
176
|
+
it_behaves_like 'never sets slave_ok'
|
177
|
+
end
|
178
|
+
|
179
|
+
context 'when the server is a mongos' do
|
180
|
+
|
181
|
+
let(:standalone?) { false }
|
182
|
+
let(:mongos?) { true }
|
183
|
+
|
184
|
+
it_behaves_like 'sets slave_ok if read preference is specified and is not primary'
|
185
|
+
end
|
186
|
+
|
187
|
+
context 'when the server is a replica set member' do
|
188
|
+
|
189
|
+
let(:standalone?) { false }
|
190
|
+
let(:mongos?) { false }
|
191
|
+
|
192
|
+
it_behaves_like 'sets slave_ok if read preference is specified and is not primary'
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
describe '#update_selector_for_read_pref' do
|
198
|
+
|
199
|
+
let(:read_pref) do
|
200
|
+
Mongo::ServerSelector.get(:mode => mode)
|
201
|
+
end
|
202
|
+
|
203
|
+
# Behavior of sending $readPreference is the same regardless of topology.
|
204
|
+
shared_examples_for '$readPreference in the command' do
|
205
|
+
let(:actual) do
|
206
|
+
operation.send(:update_selector_for_read_pref, operation.send(:selector), server)
|
207
|
+
end
|
208
|
+
|
209
|
+
let(:expected_read_preference) do
|
210
|
+
{mode: mode.to_s.gsub(/_(.)/) { $1.upcase }}
|
211
|
+
end
|
212
|
+
|
213
|
+
shared_examples_for 'adds read preference moving existing contents to $query' do
|
214
|
+
|
215
|
+
let(:expected) do
|
216
|
+
{ :$query => selector, :$readPreference => expected_read_preference }
|
217
|
+
end
|
218
|
+
|
219
|
+
it 'moves existing selector contents under $query and adds read preference' do
|
220
|
+
expect(actual).to eq(expected)
|
221
|
+
end
|
222
|
+
|
223
|
+
context 'when the selector already has $query in it' do
|
224
|
+
|
225
|
+
let(:selector) do
|
226
|
+
{ :$query => { :name => 'test' },
|
227
|
+
:$orderby => { :name => -1 } }
|
228
|
+
end
|
229
|
+
|
230
|
+
let(:expected) do
|
231
|
+
selector.merge(:$readPreference => expected_read_preference)
|
232
|
+
end
|
233
|
+
|
234
|
+
it 'keeps existing $query and adds read preference' do
|
235
|
+
expect(actual).to eq(expected)
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
shared_examples_for 'does not modify selector' do
|
241
|
+
|
242
|
+
it 'does not modify selector' do
|
243
|
+
expect(actual).to eq(selector)
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
shared_examples_for 'does not send read preference' do
|
248
|
+
([nil] + %i(primary primary_preferred secondary secondary_preferred nearest)).each do |_mode|
|
249
|
+
active_mode = _mode
|
250
|
+
|
251
|
+
context "when read preference mode is #{active_mode}" do
|
252
|
+
let(:mode) { active_mode }
|
253
|
+
|
254
|
+
it_behaves_like 'does not modify selector'
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
context 'when the server is a standalone' do
|
260
|
+
|
261
|
+
let(:standalone?) { true }
|
262
|
+
let(:mongos?) { false }
|
263
|
+
|
264
|
+
it_behaves_like 'does not send read preference'
|
265
|
+
end
|
266
|
+
|
267
|
+
context 'when the server is a mongos' do
|
268
|
+
|
269
|
+
let(:standalone?) { false }
|
270
|
+
let(:mongos?) { true }
|
271
|
+
|
272
|
+
context 'when the read preference mode is nil' do
|
273
|
+
|
274
|
+
let(:mode) { nil }
|
275
|
+
|
276
|
+
it_behaves_like 'does not modify selector'
|
277
|
+
end
|
278
|
+
|
279
|
+
context 'when the read preference mode is primary' do
|
280
|
+
|
281
|
+
let(:mode) { :primary }
|
282
|
+
|
283
|
+
it_behaves_like 'does not modify selector'
|
284
|
+
end
|
285
|
+
|
286
|
+
context 'when the read preference mode is primary_preferred' do
|
287
|
+
|
288
|
+
let(:mode) { :primary_preferred }
|
289
|
+
|
290
|
+
it_behaves_like 'adds read preference moving existing contents to $query'
|
291
|
+
end
|
292
|
+
|
293
|
+
context 'when the read preference mode is secondary' do
|
294
|
+
|
295
|
+
let(:mode) { :secondary }
|
296
|
+
|
297
|
+
it_behaves_like 'adds read preference moving existing contents to $query'
|
298
|
+
end
|
299
|
+
|
300
|
+
context 'when the read preference mode is secondary_preferred' do
|
301
|
+
|
302
|
+
let(:mode) { :secondary_preferred }
|
303
|
+
|
304
|
+
it_behaves_like 'does not modify selector'
|
305
|
+
|
306
|
+
context 'when there are fields in the selector besides :mode' do
|
307
|
+
let(:read_pref) do
|
308
|
+
Mongo::ServerSelector.get(:mode => mode, tag_sets: ['dc' => 'nyc'])
|
309
|
+
end
|
310
|
+
|
311
|
+
let(:expected_read_preference) do
|
312
|
+
{mode: mode.to_s.gsub(/_(.)/) { $1.upcase }, tags: ['dc' => 'nyc']}
|
313
|
+
end
|
314
|
+
|
315
|
+
it_behaves_like 'adds read preference moving existing contents to $query'
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
319
|
+
context 'when the read preference mode is nearest' do
|
320
|
+
|
321
|
+
let(:mode) { :nearest }
|
322
|
+
|
323
|
+
it_behaves_like 'adds read preference moving existing contents to $query'
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
context 'when the server is a replica set member' do
|
328
|
+
|
329
|
+
let(:standalone?) { false }
|
330
|
+
let(:mongos?) { false }
|
331
|
+
|
332
|
+
# $readPreference is not sent to replica set nodes running legacy
|
333
|
+
# servers - the allowance of secondary reads is handled by slave_ok
|
334
|
+
# flag.
|
335
|
+
it_behaves_like 'does not send read preference'
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
context 'in single topology' do
|
340
|
+
let(:single?) { true }
|
341
|
+
|
342
|
+
it_behaves_like '$readPreference in the command'
|
343
|
+
end
|
344
|
+
|
345
|
+
context 'not in single topology' do
|
346
|
+
let(:single?) { false }
|
347
|
+
|
348
|
+
it_behaves_like '$readPreference in the command'
|
349
|
+
end
|
350
|
+
end
|
351
|
+
end
|