mongo 2.13.0 → 2.15.0.alpha
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 +1 -4
- data.tar.gz.sig +0 -0
- data/README.md +4 -1
- data/Rakefile +46 -18
- data/lib/mongo.rb +32 -0
- data/lib/mongo/address.rb +1 -1
- data/lib/mongo/address/ipv4.rb +1 -1
- data/lib/mongo/address/ipv6.rb +1 -1
- data/lib/mongo/auth/aws/conversation.rb +1 -4
- data/lib/mongo/auth/base.rb +13 -7
- data/lib/mongo/auth/conversation_base.rb +32 -0
- data/lib/mongo/auth/cr/conversation.rb +6 -29
- data/lib/mongo/auth/gssapi/conversation.rb +4 -15
- data/lib/mongo/auth/ldap/conversation.rb +3 -14
- data/lib/mongo/auth/sasl_conversation_base.rb +1 -13
- data/lib/mongo/auth/scram_conversation_base.rb +7 -34
- data/lib/mongo/auth/user/view.rb +16 -9
- data/lib/mongo/auth/x509/conversation.rb +4 -25
- data/lib/mongo/background_thread.rb +11 -0
- data/lib/mongo/bulk_write.rb +38 -18
- data/lib/mongo/caching_cursor.rb +74 -0
- data/lib/mongo/client.rb +142 -16
- data/lib/mongo/cluster.rb +22 -31
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +6 -2
- data/lib/mongo/cluster/sdam_flow.rb +14 -0
- data/lib/mongo/cluster/topology/single.rb +1 -1
- data/lib/mongo/collection.rb +58 -18
- data/lib/mongo/collection/view.rb +24 -20
- data/lib/mongo/collection/view/aggregation.rb +26 -5
- data/lib/mongo/collection/view/builder/find_command.rb +38 -18
- data/lib/mongo/collection/view/change_stream.rb +1 -1
- data/lib/mongo/collection/view/explainable.rb +27 -8
- data/lib/mongo/collection/view/iterable.rb +73 -13
- data/lib/mongo/collection/view/map_reduce.rb +2 -2
- data/lib/mongo/collection/view/readable.rb +57 -21
- data/lib/mongo/collection/view/writable.rb +29 -15
- data/lib/mongo/crypt/encryption_io.rb +6 -6
- data/lib/mongo/cursor.rb +18 -5
- data/lib/mongo/database.rb +28 -5
- data/lib/mongo/database/view.rb +2 -2
- data/lib/mongo/error.rb +11 -1
- data/lib/mongo/error/bulk_write_error.rb +17 -3
- data/lib/mongo/error/internal_driver_error.rb +22 -0
- data/lib/mongo/error/invalid_read_concern.rb +28 -0
- data/lib/mongo/error/operation_failure.rb +26 -7
- data/lib/mongo/error/parser.rb +65 -12
- data/lib/mongo/error/server_api_conflict.rb +23 -0
- data/lib/mongo/error/server_api_not_supported.rb +24 -0
- data/lib/mongo/error/server_certificate_revoked.rb +22 -0
- data/lib/mongo/error/unmet_dependency.rb +21 -0
- data/lib/mongo/error/unsupported_option.rb +14 -12
- data/lib/mongo/grid/fs_bucket.rb +37 -37
- data/lib/mongo/index/view.rb +21 -11
- data/lib/mongo/lint.rb +2 -1
- data/lib/mongo/logger.rb +3 -3
- data/lib/mongo/monitoring.rb +13 -4
- data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +27 -16
- data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +26 -15
- data/lib/mongo/operation.rb +4 -2
- data/lib/mongo/operation/aggregate/result.rb +9 -8
- data/lib/mongo/operation/collections_info.rb +18 -1
- data/lib/mongo/operation/collections_info/command.rb +5 -0
- data/lib/mongo/operation/collections_info/result.rb +18 -1
- data/lib/mongo/operation/context.rb +99 -0
- data/lib/mongo/operation/delete/bulk_result.rb +2 -0
- data/lib/mongo/operation/delete/result.rb +3 -0
- data/lib/mongo/operation/explain/command.rb +4 -0
- data/lib/mongo/operation/explain/legacy.rb +4 -0
- data/lib/mongo/operation/explain/op_msg.rb +6 -0
- data/lib/mongo/operation/explain/result.rb +3 -0
- data/lib/mongo/operation/find/legacy/result.rb +2 -0
- data/lib/mongo/operation/find/result.rb +13 -0
- data/lib/mongo/operation/get_more/result.rb +3 -0
- data/lib/mongo/operation/indexes.rb +15 -1
- data/lib/mongo/operation/indexes/result.rb +5 -0
- data/lib/mongo/operation/insert/bulk_result.rb +5 -0
- 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 +2 -2
- data/lib/mongo/operation/insert/result.rb +5 -0
- data/lib/mongo/operation/list_collections/result.rb +9 -1
- data/lib/mongo/operation/map_reduce/result.rb +10 -0
- data/lib/mongo/operation/parallel_scan/result.rb +4 -0
- data/lib/mongo/operation/result.rb +37 -6
- data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -0
- data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -0
- data/lib/mongo/operation/shared/executable.rb +25 -14
- data/lib/mongo/operation/shared/executable_no_validate.rb +2 -2
- data/lib/mongo/operation/shared/idable.rb +2 -1
- data/lib/mongo/operation/shared/limited.rb +1 -0
- data/lib/mongo/operation/shared/object_id_generator.rb +1 -0
- data/lib/mongo/operation/shared/op_msg_or_command.rb +1 -7
- data/lib/mongo/operation/shared/op_msg_or_find_command.rb +1 -7
- data/lib/mongo/operation/shared/polymorphic_operation.rb +39 -0
- data/lib/mongo/operation/shared/response_handling.rb +23 -23
- data/lib/mongo/operation/shared/result/aggregatable.rb +1 -0
- data/lib/mongo/operation/shared/sessions_supported.rb +14 -2
- data/lib/mongo/operation/shared/specifiable.rb +1 -0
- data/lib/mongo/operation/shared/write.rb +9 -18
- data/lib/mongo/operation/shared/write_concern_supported.rb +1 -0
- data/lib/mongo/operation/update/legacy/result.rb +7 -0
- data/lib/mongo/operation/update/result.rb +8 -0
- data/lib/mongo/operation/users_info/result.rb +3 -0
- data/lib/mongo/protocol/compressed.rb +51 -5
- data/lib/mongo/protocol/message.rb +31 -4
- data/lib/mongo/protocol/msg.rb +37 -12
- data/lib/mongo/protocol/query.rb +36 -0
- data/lib/mongo/query_cache.rb +272 -0
- data/lib/mongo/retryable.rb +9 -2
- data/lib/mongo/server.rb +12 -16
- data/lib/mongo/server/app_metadata.rb +52 -18
- data/lib/mongo/server/connection.rb +5 -0
- data/lib/mongo/server/connection_base.rb +16 -15
- data/lib/mongo/server/connection_common.rb +2 -2
- data/lib/mongo/server/connection_pool.rb +9 -4
- data/lib/mongo/server/description.rb +12 -1
- data/lib/mongo/server/description/features.rb +9 -8
- data/lib/mongo/server/monitor.rb +21 -2
- data/lib/mongo/server/monitor/app_metadata.rb +1 -1
- data/lib/mongo/server/monitor/connection.rb +12 -13
- data/lib/mongo/server/pending_connection.rb +26 -8
- data/lib/mongo/server/push_monitor.rb +12 -2
- data/lib/mongo/server_selector/base.rb +5 -1
- data/lib/mongo/session.rb +7 -3
- data/lib/mongo/session/session_pool.rb +4 -2
- data/lib/mongo/socket.rb +35 -8
- data/lib/mongo/socket/ocsp_cache.rb +97 -0
- data/lib/mongo/socket/ocsp_verifier.rb +368 -0
- data/lib/mongo/socket/ssl.rb +53 -24
- data/lib/mongo/srv/monitor.rb +7 -24
- data/lib/mongo/srv/resolver.rb +14 -10
- data/lib/mongo/timeout.rb +2 -0
- data/lib/mongo/uri.rb +21 -390
- data/lib/mongo/uri/options_mapper.rb +620 -0
- data/lib/mongo/uri/srv_protocol.rb +3 -2
- data/lib/mongo/utils.rb +27 -1
- data/lib/mongo/version.rb +1 -1
- data/spec/NOTES.aws-auth.md +12 -7
- data/spec/README.md +87 -2
- data/spec/integration/auth_spec.rb +25 -15
- data/spec/integration/bson_symbol_spec.rb +4 -2
- data/spec/integration/bulk_write_error_message_spec.rb +41 -0
- data/spec/integration/bulk_write_spec.rb +48 -0
- data/spec/integration/change_stream_spec.rb +5 -5
- data/spec/integration/client_authentication_options_spec.rb +92 -28
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +6 -2
- data/spec/integration/command_monitoring_spec.rb +2 -2
- data/spec/integration/connection_pool_populator_spec.rb +4 -2
- data/spec/integration/connection_spec.rb +2 -0
- data/spec/integration/cursor_reaping_spec.rb +54 -18
- data/spec/integration/docs_examples_spec.rb +8 -1
- data/spec/integration/fork_reconnect_spec.rb +60 -2
- data/spec/integration/ocsp_connectivity_spec.rb +26 -0
- data/spec/integration/ocsp_verifier_cache_spec.rb +188 -0
- data/spec/integration/ocsp_verifier_spec.rb +340 -0
- data/spec/integration/operation_failure_code_spec.rb +1 -1
- data/spec/integration/operation_failure_message_spec.rb +90 -0
- data/spec/integration/query_cache_spec.rb +1045 -0
- data/spec/integration/query_cache_transactions_spec.rb +190 -0
- data/spec/integration/reconnect_spec.rb +1 -1
- data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -0
- data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +2 -0
- data/spec/integration/sdam_error_handling_spec.rb +86 -1
- data/spec/integration/sdam_events_spec.rb +8 -7
- data/spec/integration/server_selection_spec.rb +36 -0
- data/spec/integration/size_limit_spec.rb +20 -19
- data/spec/integration/snappy_compression_spec.rb +25 -0
- data/spec/integration/srv_monitoring_spec.rb +39 -4
- data/spec/integration/srv_spec.rb +56 -0
- data/spec/integration/transactions_examples_spec.rb +23 -7
- data/spec/integration/zlib_compression_spec.rb +1 -1
- data/spec/integration/zstd_compression_spec.rb +26 -0
- data/spec/lite_spec_helper.rb +15 -5
- data/spec/mongo/address_spec.rb +16 -12
- data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
- data/spec/mongo/auth/ldap_spec.rb +5 -1
- data/spec/mongo/auth/scram_negotiation_spec.rb +1 -1
- data/spec/mongo/auth/scram_spec.rb +1 -1
- data/spec/mongo/auth/user_spec.rb +1 -1
- data/spec/mongo/auth/x509/conversation_spec.rb +3 -3
- data/spec/mongo/bulk_write_spec.rb +2 -2
- data/spec/mongo/caching_cursor_spec.rb +70 -0
- data/spec/mongo/client_construction_spec.rb +273 -35
- data/spec/mongo/client_encryption_spec.rb +16 -10
- data/spec/mongo/client_spec.rb +64 -0
- data/spec/mongo/cluster/topology/replica_set_spec.rb +1 -1
- data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
- data/spec/mongo/cluster/topology/single_spec.rb +15 -6
- data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
- data/spec/mongo/cluster/topology_spec.rb +1 -1
- data/spec/mongo/cluster_spec.rb +6 -18
- data/spec/mongo/collection/view/change_stream_resume_spec.rb +1 -1
- data/spec/mongo/collection/view/explainable_spec.rb +87 -4
- data/spec/mongo/collection/view/map_reduce_spec.rb +2 -0
- data/spec/mongo/collection/view/readable_spec.rb +50 -0
- data/spec/mongo/collection_crud_spec.rb +4357 -0
- data/spec/mongo/collection_ddl_spec.rb +534 -0
- data/spec/mongo/collection_spec.rb +5 -4787
- data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/binary_spec.rb +1 -6
- data/spec/mongo/crypt/binding/binary_spec.rb +1 -6
- data/spec/mongo/crypt/binding/context_spec.rb +2 -7
- data/spec/mongo/crypt/binding/helpers_spec.rb +1 -6
- data/spec/mongo/crypt/binding/mongocrypt_spec.rb +2 -7
- data/spec/mongo/crypt/binding/status_spec.rb +1 -6
- data/spec/mongo/crypt/binding/version_spec.rb +1 -6
- data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
- data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/status_spec.rb +1 -6
- data/spec/mongo/database_spec.rb +174 -4
- data/spec/mongo/error/bulk_write_error_spec.rb +3 -3
- data/spec/mongo/error/no_server_available_spec.rb +1 -1
- data/spec/mongo/error/parser_spec.rb +37 -6
- data/spec/mongo/index/view_spec.rb +8 -2
- data/spec/mongo/logger_spec.rb +13 -11
- data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
- data/spec/mongo/operation/aggregate_spec.rb +2 -1
- data/spec/mongo/operation/collections_info_spec.rb +4 -1
- data/spec/mongo/operation/command_spec.rb +6 -3
- data/spec/mongo/operation/create_index_spec.rb +6 -3
- data/spec/mongo/operation/create_user_spec.rb +6 -3
- data/spec/mongo/operation/delete/bulk_spec.rb +9 -6
- data/spec/mongo/operation/delete/op_msg_spec.rb +3 -3
- data/spec/mongo/operation/delete_spec.rb +11 -7
- data/spec/mongo/operation/drop_index_spec.rb +6 -2
- data/spec/mongo/operation/find/legacy_spec.rb +3 -1
- data/spec/mongo/operation/get_more_spec.rb +3 -1
- data/spec/mongo/operation/indexes_spec.rb +5 -1
- data/spec/mongo/operation/insert/bulk_spec.rb +10 -7
- data/spec/mongo/operation/insert/command_spec.rb +2 -2
- data/spec/mongo/operation/insert/op_msg_spec.rb +3 -3
- data/spec/mongo/operation/insert_spec.rb +15 -12
- data/spec/mongo/operation/map_reduce_spec.rb +5 -2
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
- data/spec/mongo/operation/remove_user_spec.rb +6 -3
- data/spec/mongo/operation/result_spec.rb +1 -1
- data/spec/mongo/operation/update/bulk_spec.rb +9 -6
- data/spec/mongo/operation/update/command_spec.rb +2 -2
- data/spec/mongo/operation/update/op_msg_spec.rb +3 -3
- data/spec/mongo/operation/update_spec.rb +10 -7
- data/spec/mongo/operation/update_user_spec.rb +4 -1
- data/spec/mongo/protocol/compressed_spec.rb +26 -12
- data/spec/mongo/query_cache_middleware_spec.rb +55 -0
- data/spec/mongo/query_cache_spec.rb +280 -0
- data/spec/mongo/retryable_spec.rb +3 -2
- data/spec/mongo/server/app_metadata_shared.rb +2 -2
- data/spec/mongo/server/app_metadata_spec.rb +2 -0
- data/spec/mongo/server/connection_pool/populator_spec.rb +3 -1
- data/spec/mongo/server/connection_pool_spec.rb +8 -4
- data/spec/mongo/server/connection_spec.rb +39 -25
- data/spec/mongo/server/description_spec.rb +18 -0
- data/spec/mongo/server/monitor/connection_spec.rb +17 -7
- data/spec/mongo/server/monitor_spec.rb +9 -1
- data/spec/mongo/server_selector_spec.rb +2 -2
- data/spec/mongo/server_spec.rb +15 -2
- data/spec/mongo/socket/ssl_spec.rb +44 -4
- data/spec/mongo/socket_spec.rb +2 -2
- data/spec/mongo/tls_context_hooks_spec.rb +37 -0
- data/spec/mongo/uri/srv_protocol_spec.rb +64 -33
- data/spec/mongo/uri_option_parsing_spec.rb +11 -11
- data/spec/mongo/uri_spec.rb +68 -41
- data/spec/mongo/utils_spec.rb +39 -0
- data/spec/runners/auth.rb +3 -0
- data/spec/runners/change_streams/test.rb +1 -1
- data/spec/runners/connection_string.rb +31 -124
- data/spec/runners/crud/requirement.rb +40 -3
- data/spec/runners/crud/test_base.rb +0 -19
- data/spec/runners/crud/verifier.rb +8 -0
- data/spec/runners/server_selection.rb +1 -1
- data/spec/runners/transactions/operation.rb +13 -2
- data/spec/runners/transactions/test.rb +3 -2
- data/spec/runners/unified.rb +96 -0
- data/spec/runners/unified/assertions.rb +249 -0
- data/spec/runners/unified/change_stream_operations.rb +26 -0
- data/spec/runners/unified/crud_operations.rb +199 -0
- data/spec/runners/unified/ddl_operations.rb +96 -0
- data/spec/runners/unified/entity_map.rb +39 -0
- data/spec/runners/unified/error.rb +25 -0
- data/spec/runners/unified/event_subscriber.rb +91 -0
- data/spec/runners/unified/exceptions.rb +21 -0
- data/spec/runners/unified/grid_fs_operations.rb +55 -0
- data/spec/runners/unified/support_operations.rb +250 -0
- data/spec/runners/unified/test.rb +393 -0
- data/spec/runners/unified/test_group.rb +28 -0
- data/spec/runners/unified/using_hash.rb +31 -0
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +218 -0
- data/spec/shared/lib/mrss/constraints.rb +346 -0
- data/spec/shared/lib/mrss/docker_runner.rb +262 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +112 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +231 -0
- data/spec/shared/shlib/distro.sh +73 -0
- data/spec/shared/shlib/server.sh +290 -0
- data/spec/shared/shlib/set_env.sh +128 -0
- data/spec/solo/clean_exit_spec.rb +21 -0
- data/spec/spec_helper.rb +7 -2
- data/spec/spec_tests/cmap_spec.rb +7 -3
- data/spec/spec_tests/crud_unified_spec.rb +10 -0
- data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -1
- data/spec/spec_tests/data/change_streams/change-streams.yml +0 -2
- data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +6 -2
- data/spec/spec_tests/data/cmap/pool-create-min-size.yml +3 -0
- data/spec/spec_tests/data/connection_string/valid-warnings.yml +24 -0
- data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +267 -0
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +60 -0
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount.yml → estimatedDocumentCount-pre4.9.yml} +2 -0
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +146 -0
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors.yml → estimatedDocumentCount-serverErrors-pre4.9.yml} +2 -0
- data/spec/spec_tests/data/retryable_reads/listIndexNames.yml +1 -1
- data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -3
- data/spec/spec_tests/data/sdam_monitoring/standalone.yml +2 -2
- data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +2 -2
- data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
- data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +2 -2
- data/spec/spec_tests/data/unified/valid-fail/operation-failure.yml +31 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +220 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +102 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +184 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-gridfs.yml +155 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +193 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +210 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +215 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +235 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +169 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +170 -0
- data/spec/spec_tests/data/uri_options/auth-options.yml +25 -0
- data/spec/spec_tests/data/uri_options/compression-options.yml +7 -4
- data/spec/spec_tests/data/uri_options/read-preference-options.yml +24 -0
- data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +1 -0
- data/spec/spec_tests/data/uri_options/tls-options.yml +160 -4
- data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +416 -0
- data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +409 -0
- data/spec/spec_tests/data/versioned_api/runcommand-helper-no-api-version-declared.yml +67 -0
- data/spec/spec_tests/data/versioned_api/test-commands-deprecation-errors.yml +47 -0
- data/spec/spec_tests/data/versioned_api/test-commands-strict-mode.yml +44 -0
- data/spec/spec_tests/data/versioned_api/transaction-handling.yml +180 -0
- data/spec/spec_tests/dns_seedlist_discovery_spec.rb +9 -1
- data/spec/spec_tests/unified_spec.rb +15 -0
- data/spec/spec_tests/uri_options_spec.rb +47 -33
- data/spec/spec_tests/versioned_api_spec.rb +10 -0
- data/spec/stress/fork_reconnect_stress_spec.rb +1 -1
- data/spec/support/certificates/atlas-ocsp-ca.crt +28 -0
- data/spec/support/certificates/atlas-ocsp.crt +41 -0
- data/spec/support/client_registry_macros.rb +11 -2
- data/spec/support/common_shortcuts.rb +59 -0
- data/spec/support/constraints.rb +6 -253
- data/spec/support/matchers.rb +16 -0
- data/spec/support/ocsp +1 -0
- data/spec/support/session_registry.rb +52 -0
- data/spec/support/shared/session.rb +2 -2
- data/spec/support/spec_config.rb +68 -3
- data/spec/support/spec_setup.rb +48 -38
- data/spec/support/utils.rb +102 -4
- metadata +1087 -936
- metadata.gz.sig +0 -0
- data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +0 -56
- data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +0 -47
- data/spec/support/child_process_helper.rb +0 -78
- data/spec/support/cluster_config.rb +0 -207
- data/spec/support/lite_constraints.rb +0 -141
- data/spec/support/spec_organizer.rb +0 -129
@@ -97,7 +97,7 @@ module Mongo
|
|
97
97
|
|
98
98
|
# @return [ String ] NO_SRV_RECORDS Error message format string indicating that no SRV records
|
99
99
|
# were found.
|
100
|
-
NO_SRV_RECORDS = "The DNS query returned no SRV records
|
100
|
+
NO_SRV_RECORDS = "The DNS query returned no SRV records for '%s'".freeze
|
101
101
|
|
102
102
|
# @return [ String ] INVALID_TXT_RECORD_OPTION Error message format string indicating that an
|
103
103
|
# unexpected TXT record option was found.
|
@@ -130,6 +130,7 @@ module Mongo
|
|
130
130
|
@resolver ||= Srv::Resolver.new(
|
131
131
|
raise_on_invalid: true,
|
132
132
|
resolv_options: options[:resolv_options],
|
133
|
+
timeout: options[:connect_timeout],
|
133
134
|
)
|
134
135
|
end
|
135
136
|
|
@@ -220,7 +221,7 @@ module Mongo
|
|
220
221
|
raise Error::InvalidTXTRecord.new(INVALID_OPTS_VALUE_DELIM) unless opt.index(URI_OPTS_VALUE_DELIM)
|
221
222
|
key, value = opt.split(URI_OPTS_VALUE_DELIM)
|
222
223
|
raise Error::InvalidTXTRecord.new(INVALID_TXT_RECORD_OPTION) unless VALID_TXT_OPTIONS.include?(key.downcase)
|
223
|
-
add_uri_option(key, value, txt_options)
|
224
|
+
options_mapper.add_uri_option(key, value, txt_options)
|
224
225
|
txt_options
|
225
226
|
end
|
226
227
|
end
|
data/lib/mongo/utils.rb
CHANGED
@@ -34,7 +34,7 @@ module Mongo
|
|
34
34
|
# @option opts [ Logger ] :logger A custom logger to use.
|
35
35
|
# @option opts [ String ] :log_prefix A custom log prefix to use when
|
36
36
|
# logging.
|
37
|
-
module_function def
|
37
|
+
module_function def warn_bg_exception(msg, exc, **opts)
|
38
38
|
bt_excerpt = excerpt_backtrace(exc, **opts)
|
39
39
|
logger = LocalLogger.new(**opts)
|
40
40
|
logger.log_warn("#{msg}: #{exc.class}: #{exc}#{bt_excerpt}")
|
@@ -55,8 +55,34 @@ module Mongo
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
+
# Symbolizes the keys in the provided hash.
|
58
59
|
module_function def shallow_symbolize_keys(hash)
|
59
60
|
Hash[hash.map { |k, v| [k.to_sym, v] }]
|
60
61
|
end
|
62
|
+
|
63
|
+
# Stringifies the keys in the provided hash and converts underscore
|
64
|
+
# style keys to camel case style keys.
|
65
|
+
module_function def shallow_camelize_keys(hash)
|
66
|
+
Hash[hash.map { |k, v| [camelize(k), v] }]
|
67
|
+
end
|
68
|
+
|
69
|
+
module_function def camelize(sym)
|
70
|
+
sym.to_s.gsub(/_(\w)/) { $1.upcase }
|
71
|
+
end
|
72
|
+
|
73
|
+
# @note server_api must have symbol keys or be a BSON::Document.
|
74
|
+
module_function def transform_server_api(server_api)
|
75
|
+
{}.tap do |doc|
|
76
|
+
if version = server_api[:version]
|
77
|
+
doc['apiVersion'] = version
|
78
|
+
end
|
79
|
+
unless server_api[:strict].nil?
|
80
|
+
doc['apiStrict'] = server_api[:strict]
|
81
|
+
end
|
82
|
+
unless server_api[:deprecation_errors].nil?
|
83
|
+
doc['apiDeprecationErrors'] = server_api[:deprecation_errors]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
61
87
|
end
|
62
88
|
end
|
data/lib/mongo/version.rb
CHANGED
data/spec/NOTES.aws-auth.md
CHANGED
@@ -145,13 +145,16 @@ problem. Below are some of the puzzling responses I encountered:
|
|
145
145
|
line) but the value is otherwise completely valid. This error has no relation
|
146
146
|
to the "session token" or "security token" as used with temporary AWS
|
147
147
|
credentials.
|
148
|
-
- *The security token included in the request is invalid*: this error
|
149
|
-
produced
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
148
|
+
- *The security token included in the request is invalid*: this error can be
|
149
|
+
produced in several circumstances:
|
150
|
+
- When the AWS access key id, as specified in the scope part of the
|
151
|
+
`Authorization` header, is not a valid access key id. In the case of
|
152
|
+
non-temporary credentials being used for authentication, the error refers to
|
153
|
+
a "security token" but the authentication process does not actually use a
|
154
|
+
security token as this term is used in the AWS documentation describing
|
155
|
+
temporary credentials.
|
156
|
+
- When using temporary credentials and the security token is not provided
|
157
|
+
in the STS request at all (x-amz-security-token header).
|
155
158
|
- *Signature expired: 20200317T000000Z is now earlier than 20200317T222541Z
|
156
159
|
(20200317T224041Z - 15 min.)*: This error happens when `x-amz-date` header
|
157
160
|
value is the formatted date (`YYYYMMDD`) rather than the ISO8601 formatted
|
@@ -168,6 +171,8 @@ problem. Below are some of the puzzling responses I encountered:
|
|
168
171
|
produced when temporary credentials are used and the credentials have
|
169
172
|
expired.
|
170
173
|
|
174
|
+
See also [AWS documentation for STS error messages](https://docs.aws.amazon.com/STS/latest/APIReference/CommonErrors.html).
|
175
|
+
|
171
176
|
### Resources
|
172
177
|
|
173
178
|
Generally I found Amazon's own documentation to be the best for implementing
|
data/spec/README.md
CHANGED
@@ -2,6 +2,13 @@
|
|
2
2
|
|
3
3
|
## Quick Start
|
4
4
|
|
5
|
+
The test suite requires shared tooling that is stored in a separate repository
|
6
|
+
and is referenced as a submodule. After checking out the desired driver
|
7
|
+
branch, check out the matching submodules:
|
8
|
+
|
9
|
+
git submodule init
|
10
|
+
git submodule update
|
11
|
+
|
5
12
|
To run the test suite against a local MongoDB deployment listening on port
|
6
13
|
27017, run:
|
7
14
|
|
@@ -107,7 +114,7 @@ other tests require a sharded cluster with more than one shard. Tests requiring
|
|
107
114
|
a single shard can be run against a deployment with multiple shards by
|
108
115
|
specifying only one mongos address in MONGODB_URI.
|
109
116
|
|
110
|
-
## Note Regarding SSL
|
117
|
+
## Note Regarding TLS/SSL Arguments
|
111
118
|
|
112
119
|
MongoDB 4.2 (server and shell) added new command line options for setting TLS
|
113
120
|
parameters. These options follow the naming of URI options used by both the
|
@@ -185,6 +192,51 @@ verification, run:
|
|
185
192
|
Note that there are tests in the test suite that cover TLS verification, and
|
186
193
|
they may fail if the test suite is run in this way.
|
187
194
|
|
195
|
+
## OCSP
|
196
|
+
|
197
|
+
There are several types of OCSP tests implemented in the test suite.
|
198
|
+
|
199
|
+
OCSP unit tests are in `spec/integration/ocsp_verifier_spec.rb`. To run
|
200
|
+
these, set `OCSP_VERIFIER=1` in the environment. There must NOT be a process
|
201
|
+
running on the host port 8100 as that port will be used by the OCSP responder
|
202
|
+
launched by the tests.
|
203
|
+
|
204
|
+
For the remaining OCSP tests, the following environment variables must be set
|
205
|
+
to the possible values indicated below:
|
206
|
+
|
207
|
+
OCSP_ALGORITHM=rsa|ecdsa
|
208
|
+
OCSP_STATUS=valid|revoked|unknown
|
209
|
+
OCSP_DELEGATE=0|1
|
210
|
+
OCSP_MUST_STAPLE=0|1
|
211
|
+
|
212
|
+
These tests also require the mock OCSP responder running on the host machine
|
213
|
+
on port 8100 with the configuration that matches the environment variables
|
214
|
+
just described. Please refer to the Docker and Evergreen scripts in the
|
215
|
+
driver repository for further details.
|
216
|
+
|
217
|
+
Additionally, the server must be configured to use the appropriate server
|
218
|
+
certificate and CA certificate from the respective subdirectory of
|
219
|
+
`spec/support/ocsp`. This is easiest to achieve by using the Docker tooling
|
220
|
+
described in `.evergreen/README.md`.
|
221
|
+
|
222
|
+
OCSP connectivity tests are in `spec/integration/ocsp_connectivity.rb`.
|
223
|
+
These test the combinations described
|
224
|
+
[here](https://github.com/mongodb/specifications/blob/master/source/ocsp-support/tests/README.rst#integration-tests-permutations-to-be-tested).
|
225
|
+
To run these tests, set `OCSP_CONNECTIVITY=pass` environment variable if
|
226
|
+
the tests are expected to connect successfully or `OCSP_CONNECTIVITY=fail` if
|
227
|
+
the tests are expected to not connect.
|
228
|
+
Note that some of these configurations require OCSP responder to return
|
229
|
+
the failure response; in such configurations, ONLY the OCSP connectivity tests
|
230
|
+
may pass (since the driver may reject connections to servers when OCSP
|
231
|
+
responder returns the failure response, or OCSP verification otherwise
|
232
|
+
definitively fails).
|
233
|
+
|
234
|
+
When not running either OCSP verifier tests or OCSP connectivity tests but
|
235
|
+
when OCSP algorithm is configured, the test suite will execute normally
|
236
|
+
using the provided `MONGO_URI`. This configuration may be used to exercise
|
237
|
+
OCSP while running the full test suite. In this case, setting `OCSP_STATUS`
|
238
|
+
to `revoked` will generally cause the test suite to fail.
|
239
|
+
|
188
240
|
## Authentication
|
189
241
|
|
190
242
|
mlaunch can configure authentication on the server:
|
@@ -460,13 +512,36 @@ To test compression, set the `compressors` URI option:
|
|
460
512
|
|
461
513
|
MONGODB_URI="mongodb://localhost:27017/?compressors=zlib" rake
|
462
514
|
|
463
|
-
Note that as of this writing, the driver
|
515
|
+
Note that as of this writing, the driver supports
|
516
|
+
[ztsd](https://docs.mongodb.com/manual/reference/glossary/#term-zstd),
|
517
|
+
[snappy](https://docs.mongodb.com/manual/reference/glossary/#term-snappy)
|
518
|
+
and [zlib](https://docs.mongodb.com/manual/reference/glossary/#term-zlib)
|
519
|
+
compression.
|
520
|
+
|
464
521
|
Servers 4.2+ enable zlib by default; to test older servers, explicitly enable
|
465
522
|
zlib compression when launching the server:
|
466
523
|
|
467
524
|
mongod --dbpath /tmp/mdb --setParameter enableTestCommands=1 \
|
468
525
|
--networkMessageCompressors snappy,zlib
|
469
526
|
|
527
|
+
## Server API
|
528
|
+
|
529
|
+
To specify server API parameters, use the `SERVER_API` environment variable.
|
530
|
+
The server API parameters cannot be specified via URI options.
|
531
|
+
|
532
|
+
Both YAML and JSON syntaxes are accepted:
|
533
|
+
|
534
|
+
SERVER_API='{version: "1", strict: true}' rake
|
535
|
+
|
536
|
+
SERVER_API='{"version":"1","strict":true}' rake
|
537
|
+
|
538
|
+
Note that the input must be valid YAML or JSON and the version number must
|
539
|
+
be a string, therefore all of the following specifications are invalid:
|
540
|
+
|
541
|
+
SERVER_API='{version:"1",strict:true}' rake
|
542
|
+
SERVER_API='{version: 1}' rake
|
543
|
+
SERVER_API='{"version":1,"strict":true}' rake
|
544
|
+
|
470
545
|
## Other Options
|
471
546
|
|
472
547
|
Generally, all URI options recognized by the driver may be set for a test run,
|
@@ -511,6 +586,16 @@ following environment variable:
|
|
511
586
|
|
512
587
|
FORK=1
|
513
588
|
|
589
|
+
OCSP tests require Python 3 with asn1crypto, oscrypto and flask packages
|
590
|
+
installed, and they require the drivers-evergreen-tools submodule to be
|
591
|
+
checked out. To run these tests, set the following environment variable:
|
592
|
+
|
593
|
+
OCSP=1
|
594
|
+
|
595
|
+
To check out the submodule, run:
|
596
|
+
|
597
|
+
git submodule update --init --recursive
|
598
|
+
|
514
599
|
## Debug Logging
|
515
600
|
|
516
601
|
The test suite is run with the driver log level set to `WARN` by default.
|
@@ -10,8 +10,12 @@ describe 'Auth' do
|
|
10
10
|
authorized_client.cluster.next_primary
|
11
11
|
end
|
12
12
|
|
13
|
+
let(:base_options) do
|
14
|
+
SpecConfig.instance.monitoring_options
|
15
|
+
end
|
16
|
+
|
13
17
|
let(:connection) do
|
14
|
-
Mongo::Server::Connection.new(server, options)
|
18
|
+
Mongo::Server::Connection.new(server, base_options.merge(options))
|
15
19
|
end
|
16
20
|
|
17
21
|
before(:all) do
|
@@ -31,8 +35,9 @@ describe 'Auth' do
|
|
31
35
|
context 'user mechanism not provided' do
|
32
36
|
|
33
37
|
context 'user does not exist' do
|
34
|
-
let(:options)
|
35
|
-
user: 'nonexistent_user'
|
38
|
+
let(:options) do
|
39
|
+
{user: 'nonexistent_user' }
|
40
|
+
end
|
36
41
|
|
37
42
|
before do
|
38
43
|
expect(connection.app_metadata.send(:document)[:saslSupportedMechs]).to eq('admin.nonexistent_user')
|
@@ -63,8 +68,9 @@ describe 'Auth' do
|
|
63
68
|
end
|
64
69
|
|
65
70
|
context 'user exists' do
|
66
|
-
let(:options)
|
67
|
-
user: 'existing_user', password: 'bogus'
|
71
|
+
let(:options) do
|
72
|
+
{user: 'existing_user', password: 'bogus'}
|
73
|
+
end
|
68
74
|
|
69
75
|
before do
|
70
76
|
expect(connection.app_metadata.send(:document)[:saslSupportedMechs]).to eq("admin.existing_user")
|
@@ -99,8 +105,9 @@ describe 'Auth' do
|
|
99
105
|
min_server_fcv '3.0'
|
100
106
|
|
101
107
|
context 'scram-sha-1 requested' do
|
102
|
-
let(:options)
|
103
|
-
user: 'nonexistent_user', auth_mech: :scram
|
108
|
+
let(:options) do
|
109
|
+
{user: 'nonexistent_user', auth_mech: :scram}
|
110
|
+
end
|
104
111
|
|
105
112
|
it 'indicates scram-sha-1 was requested and used' do
|
106
113
|
expect do
|
@@ -112,8 +119,9 @@ describe 'Auth' do
|
|
112
119
|
context 'scram-sha-256 requested' do
|
113
120
|
min_server_fcv '4.0'
|
114
121
|
|
115
|
-
let(:options)
|
116
|
-
user: 'nonexistent_user', auth_mech: :scram256
|
122
|
+
let(:options) do
|
123
|
+
{user: 'nonexistent_user', auth_mech: :scram256}
|
124
|
+
end
|
117
125
|
|
118
126
|
it 'indicates scram-sha-256 was requested and used' do
|
119
127
|
expect do
|
@@ -124,8 +132,9 @@ describe 'Auth' do
|
|
124
132
|
end
|
125
133
|
|
126
134
|
context 'when authentication fails' do
|
127
|
-
let(:options)
|
128
|
-
user: 'nonexistent_user', password: 'foo'
|
135
|
+
let(:options) do
|
136
|
+
{user: 'nonexistent_user', password: 'foo'}
|
137
|
+
end
|
129
138
|
|
130
139
|
it 'reports which server authentication was attempted against' do
|
131
140
|
expect do
|
@@ -142,8 +151,9 @@ describe 'Auth' do
|
|
142
151
|
end
|
143
152
|
|
144
153
|
context 'with custom auth source' do
|
145
|
-
let(:options)
|
146
|
-
user: 'nonexistent_user', password: 'foo', auth_source: 'authdb'
|
154
|
+
let(:options) do
|
155
|
+
{user: 'nonexistent_user', password: 'foo', auth_source: 'authdb'}
|
156
|
+
end
|
147
157
|
|
148
158
|
it 'reports auth source used' do
|
149
159
|
expect do
|
@@ -240,7 +250,7 @@ describe 'Auth' do
|
|
240
250
|
require_no_auth
|
241
251
|
|
242
252
|
let(:client) do
|
243
|
-
new_local_client(SpecConfig.instance.addresses, SpecConfig.instance.
|
253
|
+
new_local_client(SpecConfig.instance.addresses, SpecConfig.instance.monitoring_options.merge(
|
244
254
|
auth_source: 'foo'))
|
245
255
|
end
|
246
256
|
|
@@ -254,7 +264,7 @@ describe 'Auth' do
|
|
254
264
|
require_x509_auth
|
255
265
|
|
256
266
|
let(:client) do
|
257
|
-
new_local_client(SpecConfig.instance.addresses,
|
267
|
+
new_local_client(SpecConfig.instance.addresses, base_options.merge(
|
258
268
|
auth_mech: :mongodb_x509))
|
259
269
|
end
|
260
270
|
|
@@ -25,8 +25,10 @@ describe 'Symbol encoding to BSON' do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'round-trips symbol values using the same byte buffer' do
|
28
|
-
if BSON::Environment.jruby?
|
29
|
-
|
28
|
+
if BSON::Environment.jruby? && (BSON::VERSION.split('.').map(&:to_i) <=> [4, 11, 0]) < 0
|
29
|
+
skip 'This test is only relevant to bson versions that increment ByteBuffer '\
|
30
|
+
'read and write positions separately in JRuby, as implemented in ' \
|
31
|
+
'bson version 4.11.0. For more information, see https://jira.mongodb.org/browse/RUBY-2128'
|
30
32
|
end
|
31
33
|
|
32
34
|
Hash.from_bson(hash.to_bson).should == hash
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'BulkWriteError message' do
|
4
|
+
let(:client) { authorized_client }
|
5
|
+
let(:collection_name) { 'bulk_write_error_message_spec' }
|
6
|
+
let(:collection) { client[collection_name] }
|
7
|
+
|
8
|
+
before do
|
9
|
+
collection.delete_many
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'a bulk write with one error' do
|
13
|
+
it 'reports code name, code and message' do
|
14
|
+
begin
|
15
|
+
collection.insert_many([
|
16
|
+
{_id: 1},
|
17
|
+
{_id: 1},
|
18
|
+
{_id: 1},
|
19
|
+
], ordered: true)
|
20
|
+
fail('Should have raised')
|
21
|
+
rescue Mongo::Error::BulkWriteError => e
|
22
|
+
e.message.should =~ %r,\A\[11000\]: (insertDocument :: caused by :: 11000 )?E11000 duplicate key error (collection|index):,
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'a bulk write with multiple errors' do
|
28
|
+
it 'reports code name, code and message' do
|
29
|
+
begin
|
30
|
+
collection.insert_many([
|
31
|
+
{_id: 1},
|
32
|
+
{_id: 1},
|
33
|
+
{_id: 1},
|
34
|
+
], ordered: false)
|
35
|
+
fail('Should have raised')
|
36
|
+
rescue Mongo::Error::BulkWriteError => e
|
37
|
+
e.message.should =~ %r,\AMultiple errors: \[11000\]: (insertDocument :: caused by :: 11000 )?E11000 duplicate key error (collection|index):.*\[11000\]: (insertDocument :: caused by :: 11000 )?E11000 duplicate key error (collection|index):,
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -16,4 +16,52 @@ describe 'Bulk writes' do
|
|
16
16
|
end.not_to raise_error
|
17
17
|
end
|
18
18
|
end
|
19
|
+
|
20
|
+
context 'when bulk write needs to be split' do
|
21
|
+
let(:subscriber) { EventSubscriber.new }
|
22
|
+
|
23
|
+
let(:max_bson_size) { Mongo::Server::ConnectionBase::DEFAULT_MAX_BSON_OBJECT_SIZE }
|
24
|
+
|
25
|
+
let(:insert_events) do
|
26
|
+
subscriber.command_started_events('insert')
|
27
|
+
end
|
28
|
+
|
29
|
+
let(:failed_events) do
|
30
|
+
subscriber.failed_events
|
31
|
+
end
|
32
|
+
|
33
|
+
let(:operations) do
|
34
|
+
[{ insert_one: { text: 'a' * (max_bson_size/2) } }] * 6
|
35
|
+
end
|
36
|
+
|
37
|
+
before do
|
38
|
+
authorized_client.subscribe(Mongo::Monitoring::COMMAND, subscriber)
|
39
|
+
authorized_collection.bulk_write(operations)
|
40
|
+
end
|
41
|
+
|
42
|
+
context '3.6+ server' do
|
43
|
+
min_server_fcv '3.6'
|
44
|
+
|
45
|
+
it 'splits the operations' do
|
46
|
+
# 3.6+ servers can send multiple bulk operations in one message,
|
47
|
+
# with the whole message being limited to 48m.
|
48
|
+
expect(insert_events.length).to eq(2)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'pre-3.6 server' do
|
53
|
+
max_server_version '3.4'
|
54
|
+
|
55
|
+
it 'splits the operations' do
|
56
|
+
# Pre-3.6 servers limit the entire message payload to the size of
|
57
|
+
# a single document which is 16m. Given our test data this means
|
58
|
+
# twice as many messages are sent.
|
59
|
+
expect(insert_events.length).to eq(4)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'does not have a command failed event' do
|
64
|
+
expect(failed_events).to be_empty
|
65
|
+
end
|
66
|
+
end
|
19
67
|
end
|