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
@@ -574,8 +574,9 @@ describe Mongo::Retryable do
|
|
574
574
|
context 'when an error due to using an unsupported storage engine occurs' do
|
575
575
|
before do
|
576
576
|
expect(operation).to receive(:execute).and_raise(
|
577
|
-
Mongo::Error::OperationFailure.new('
|
578
|
-
nil, :
|
577
|
+
Mongo::Error::OperationFailure.new('message which is not checked',
|
578
|
+
nil, code: 20, server_message: 'Transaction numbers are only allowed on...',
|
579
|
+
)).ordered
|
579
580
|
end
|
580
581
|
|
581
582
|
it 'raises an exception with the correct error message' do
|
@@ -10,7 +10,7 @@ shared_examples 'app metadata document' do
|
|
10
10
|
|
11
11
|
it 'includes operating system information' do
|
12
12
|
document[:client][:os][:type].should == 'linux'
|
13
|
-
if BSON::Environment.jruby?
|
13
|
+
if BSON::Environment.jruby? || RUBY_VERSION >= '3.0'
|
14
14
|
document[:client][:os][:name].should == 'linux'
|
15
15
|
else
|
16
16
|
document[:client][:os][:name].should == 'linux-gnu'
|
@@ -19,7 +19,7 @@ shared_examples 'app metadata document' do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
context 'mri' do
|
22
|
-
|
22
|
+
require_mri
|
23
23
|
|
24
24
|
it 'includes Ruby version' do
|
25
25
|
document[:client][:platform].should start_with("Ruby #{RUBY_VERSION}")
|
@@ -53,6 +53,8 @@ describe Mongo::Server::AppMetadata do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
context 'when the client document exceeds the max of 512 bytes' do
|
56
|
+
# Server api parameters change metadata length
|
57
|
+
require_no_required_api_version
|
56
58
|
|
57
59
|
context 'when the os.type length is too long' do
|
58
60
|
|
@@ -5,9 +5,13 @@ describe Mongo::Server::ConnectionPool do
|
|
5
5
|
let(:options) { {} }
|
6
6
|
|
7
7
|
let(:server_options) do
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
Mongo::Utils.shallow_symbolize_keys(Mongo::Client.canonicalize_ruby_options(
|
9
|
+
SpecConfig.instance.all_test_options,
|
10
|
+
)).tap do |opts|
|
11
|
+
opts.delete(:min_pool_size)
|
12
|
+
opts.delete(:max_pool_size)
|
13
|
+
opts.delete(:wait_queue_timeout)
|
14
|
+
end.update(options)
|
11
15
|
end
|
12
16
|
|
13
17
|
let(:address) do
|
@@ -527,7 +531,7 @@ describe Mongo::Server::ConnectionPool do
|
|
527
531
|
authorized_client
|
528
532
|
end
|
529
533
|
|
530
|
-
|
534
|
+
let(:pool) do
|
531
535
|
client.cluster.next_primary.pool
|
532
536
|
end
|
533
537
|
|
@@ -158,6 +158,8 @@ describe Mongo::Server::Connection do
|
|
158
158
|
end
|
159
159
|
|
160
160
|
shared_examples_for 'logs a warning' do
|
161
|
+
require_warning_clean
|
162
|
+
|
161
163
|
it 'logs a warning' do
|
162
164
|
messages = []
|
163
165
|
expect(Mongo::Logger.logger).to receive(:warn) do |msg|
|
@@ -172,6 +174,8 @@ describe Mongo::Server::Connection do
|
|
172
174
|
end
|
173
175
|
|
174
176
|
shared_examples_for 'adds server diagnostics' do
|
177
|
+
require_warning_clean
|
178
|
+
|
175
179
|
it 'adds server diagnostics' do
|
176
180
|
messages = []
|
177
181
|
expect(Mongo::Logger.logger).to receive(:warn) do |msg|
|
@@ -248,8 +252,9 @@ describe Mongo::Server::Connection do
|
|
248
252
|
require_auth
|
249
253
|
|
250
254
|
let(:server_options) do
|
251
|
-
|
252
|
-
|
255
|
+
Mongo::Client.canonicalize_ruby_options(
|
256
|
+
SpecConfig.instance.all_test_options,
|
257
|
+
).update(monitoring_io: false)
|
253
258
|
end
|
254
259
|
|
255
260
|
let(:exception) do
|
@@ -584,15 +589,19 @@ describe Mongo::Server::Connection do
|
|
584
589
|
|
585
590
|
let(:server) { monitored_server }
|
586
591
|
|
592
|
+
let(:context) { Mongo::Operation::Context.new }
|
593
|
+
|
587
594
|
let!(:connection) do
|
588
595
|
described_class.new(
|
589
596
|
server,
|
590
597
|
SpecConfig.instance.test_options.merge(
|
591
598
|
:database => SpecConfig.instance.test_user.database,
|
592
|
-
).merge(
|
593
|
-
|
594
|
-
|
595
|
-
|
599
|
+
).merge(Mongo::Utils.shallow_symbolize_keys(Mongo::Client.canonicalize_ruby_options(
|
600
|
+
SpecConfig.instance.credentials_or_external_user(
|
601
|
+
user: SpecConfig.instance.test_user.name,
|
602
|
+
password: SpecConfig.instance.test_user.password,
|
603
|
+
),
|
604
|
+
)))
|
596
605
|
).tap do |connection|
|
597
606
|
connection.connect!
|
598
607
|
end
|
@@ -613,12 +622,12 @@ describe Mongo::Server::Connection do
|
|
613
622
|
context 'when providing a single message' do
|
614
623
|
|
615
624
|
let(:reply) do
|
616
|
-
connection.dispatch([ query ])
|
625
|
+
connection.dispatch([ query ], context)
|
617
626
|
end
|
618
627
|
|
619
628
|
before do
|
620
629
|
authorized_collection.delete_many
|
621
|
-
|
630
|
+
authorized_collection.insert_one(name: 'testing')
|
622
631
|
end
|
623
632
|
|
624
633
|
it 'it dispatches the message to the socket' do
|
@@ -637,7 +646,7 @@ describe Mongo::Server::Connection do
|
|
637
646
|
end
|
638
647
|
|
639
648
|
let(:reply) do
|
640
|
-
connection.dispatch([ insert, command ])
|
649
|
+
connection.dispatch([ insert, command ], context)
|
641
650
|
end
|
642
651
|
|
643
652
|
before do
|
@@ -674,22 +683,22 @@ describe Mongo::Server::Connection do
|
|
674
683
|
end
|
675
684
|
|
676
685
|
before do
|
677
|
-
connection.dispatch([ insert ])
|
686
|
+
connection.dispatch([ insert ], context)
|
678
687
|
# Fake a query for which we did not read the response. See RUBY-1117
|
679
688
|
allow(query_bob).to receive(:replyable?) { false }
|
680
|
-
connection.dispatch([ query_bob ])
|
689
|
+
connection.dispatch([ query_bob ], context)
|
681
690
|
end
|
682
691
|
|
683
692
|
it 'raises an UnexpectedResponse error' do
|
684
693
|
expect {
|
685
|
-
connection.dispatch([ query_alice ])
|
694
|
+
connection.dispatch([ query_alice ], context)
|
686
695
|
}.to raise_error(Mongo::Error::UnexpectedResponse,
|
687
696
|
/Got response for request ID \d+ but expected response for request ID \d+/)
|
688
697
|
end
|
689
698
|
|
690
699
|
it 'marks connection perished' do
|
691
700
|
expect {
|
692
|
-
connection.dispatch([ query_alice ])
|
701
|
+
connection.dispatch([ query_alice ], context)
|
693
702
|
}.to raise_error(Mongo::Error::UnexpectedResponse)
|
694
703
|
|
695
704
|
connection.should be_error
|
@@ -697,16 +706,17 @@ describe Mongo::Server::Connection do
|
|
697
706
|
|
698
707
|
it 'makes the connection no longer usable' do
|
699
708
|
expect {
|
700
|
-
connection.dispatch([ query_alice ])
|
709
|
+
connection.dispatch([ query_alice ], context)
|
701
710
|
}.to raise_error(Mongo::Error::UnexpectedResponse)
|
702
711
|
|
703
712
|
expect {
|
704
|
-
connection.dispatch([ query_alice ])
|
713
|
+
connection.dispatch([ query_alice ], context)
|
705
714
|
}.to raise_error(Mongo::Error::ConnectionPerished)
|
706
715
|
end
|
707
716
|
end
|
708
717
|
|
709
718
|
context 'when a request is interrupted (Thread.kill)' do
|
719
|
+
require_no_required_api_version
|
710
720
|
|
711
721
|
let(:documents) do
|
712
722
|
[{ 'name' => 'bob' }, { 'name' => 'alice' }]
|
@@ -726,18 +736,19 @@ describe Mongo::Server::Connection do
|
|
726
736
|
|
727
737
|
before do
|
728
738
|
authorized_collection.delete_many
|
729
|
-
connection.dispatch([ insert ])
|
739
|
+
connection.dispatch([ insert ], context)
|
730
740
|
end
|
731
741
|
|
732
742
|
it 'closes the socket and does not use it for subsequent requests' do
|
733
743
|
t = Thread.new {
|
734
744
|
# Kill the thread just before the reply is read
|
735
745
|
allow(Mongo::Protocol::Reply).to receive(:deserialize_header) { t.kill && !t.alive? }
|
736
|
-
connection.dispatch([ query_bob ])
|
746
|
+
connection.dispatch([ query_bob ], context)
|
737
747
|
}
|
738
748
|
t.join
|
739
749
|
allow(Mongo::Protocol::Message).to receive(:deserialize_header).and_call_original
|
740
|
-
|
750
|
+
resp = connection.dispatch([ query_alice ], context)
|
751
|
+
expect(resp.documents.first['name']).to eq('alice')
|
741
752
|
end
|
742
753
|
end
|
743
754
|
|
@@ -754,7 +765,7 @@ describe Mongo::Server::Connection do
|
|
754
765
|
end
|
755
766
|
|
756
767
|
let(:reply) do
|
757
|
-
connection.dispatch([ insert ])
|
768
|
+
connection.dispatch([ insert ], context)
|
758
769
|
end
|
759
770
|
|
760
771
|
it 'checks the size against the max message size' do
|
@@ -767,7 +778,7 @@ describe Mongo::Server::Connection do
|
|
767
778
|
context 'when the message is a command' do
|
768
779
|
# Server description is frozen when linting is enabled, which is
|
769
780
|
# incompatible with expectations set on it in this test
|
770
|
-
|
781
|
+
require_no_linting
|
771
782
|
|
772
783
|
let(:selector) do
|
773
784
|
# The driver allows up to 16KiB for command overhead on top of
|
@@ -781,7 +792,7 @@ describe Mongo::Server::Connection do
|
|
781
792
|
end
|
782
793
|
|
783
794
|
let(:reply) do
|
784
|
-
connection.dispatch([ command ])
|
795
|
+
connection.dispatch([ command ], context)
|
785
796
|
end
|
786
797
|
|
787
798
|
it 'checks the size against the max bson size' do
|
@@ -821,7 +832,7 @@ describe Mongo::Server::Connection do
|
|
821
832
|
|
822
833
|
let(:result) do
|
823
834
|
expect do
|
824
|
-
connection.dispatch([ insert ])
|
835
|
+
connection.dispatch([ insert ], context)
|
825
836
|
end.to raise_error(Mongo::Error::SocketError)
|
826
837
|
end
|
827
838
|
|
@@ -855,7 +866,7 @@ describe Mongo::Server::Connection do
|
|
855
866
|
|
856
867
|
let(:result) do
|
857
868
|
expect do
|
858
|
-
connection.dispatch([ insert ])
|
869
|
+
connection.dispatch([ insert ], context)
|
859
870
|
end.to raise_error(Mongo::Error::SocketTimeoutError)
|
860
871
|
end
|
861
872
|
|
@@ -899,6 +910,7 @@ describe Mongo::Server::Connection do
|
|
899
910
|
end
|
900
911
|
|
901
912
|
before do
|
913
|
+
authorized_collection.insert_one(test: 1)
|
902
914
|
client.cluster.next_primary
|
903
915
|
end
|
904
916
|
|
@@ -912,6 +924,8 @@ describe Mongo::Server::Connection do
|
|
912
924
|
end_time = Time.now
|
913
925
|
expect(ex).to be_a(Mongo::Error::SocketTimeoutError)
|
914
926
|
expect(ex.message).to match(/Took more than 1.5 seconds to receive data/)
|
927
|
+
else
|
928
|
+
fail 'Expected a timeout'
|
915
929
|
end
|
916
930
|
# allow 1.5 seconds +- 0.5 seconds
|
917
931
|
expect(end_time - start).to be_within(1).of(2)
|
@@ -931,7 +945,7 @@ describe Mongo::Server::Connection do
|
|
931
945
|
|
932
946
|
before do
|
933
947
|
expect(message).to receive(:replyable?) { false }
|
934
|
-
connection.send(:deliver, message,
|
948
|
+
connection.send(:deliver, message, context)
|
935
949
|
|
936
950
|
connection.send(:socket).instance_variable_set(:@timeout, -(Time.now.to_i))
|
937
951
|
end
|
@@ -1099,7 +1113,7 @@ describe Mongo::Server::Connection do
|
|
1099
1113
|
:user => SpecConfig.instance.test_user.name,
|
1100
1114
|
:password => SpecConfig.instance.test_user.password,
|
1101
1115
|
:database => SpecConfig.instance.test_db,
|
1102
|
-
:auth_mech => :mongodb_cr
|
1116
|
+
:auth_mech => :mongodb_cr,
|
1103
1117
|
)
|
1104
1118
|
end
|
1105
1119
|
|
@@ -27,6 +27,7 @@ describe Mongo::Server::Description do
|
|
27
27
|
'logicalSessionTimeoutMinutes' => 7,
|
28
28
|
'operationTime' => 1,
|
29
29
|
'$clusterTime' => 1,
|
30
|
+
'connectionId' => 11,
|
30
31
|
'ok' => 1
|
31
32
|
}
|
32
33
|
end
|
@@ -757,6 +758,23 @@ describe Mongo::Server::Description do
|
|
757
758
|
end
|
758
759
|
end
|
759
760
|
|
761
|
+
context 'when the configs match, but have different connectionId values' do
|
762
|
+
|
763
|
+
let(:description) do
|
764
|
+
described_class.new(address, replica)
|
765
|
+
end
|
766
|
+
|
767
|
+
let(:other) do
|
768
|
+
described_class.new(address, replica.merge(
|
769
|
+
'connectionId' => 12
|
770
|
+
))
|
771
|
+
end
|
772
|
+
|
773
|
+
it 'returns true' do
|
774
|
+
expect(description == other).to be(true)
|
775
|
+
end
|
776
|
+
end
|
777
|
+
|
760
778
|
context 'when the configs do not match' do
|
761
779
|
|
762
780
|
let(:description) do
|
@@ -9,13 +9,21 @@ describe Mongo::Server::Monitor::Connection do
|
|
9
9
|
|
10
10
|
declare_topology_double
|
11
11
|
|
12
|
+
let(:monitor_app_metadata) do
|
13
|
+
Mongo::Server::Monitor::AppMetadata.new(
|
14
|
+
server_api: SpecConfig.instance.ruby_options[:server_api],
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
12
18
|
let(:cluster) do
|
13
|
-
double('cluster').tap do |
|
14
|
-
allow(
|
15
|
-
allow(
|
16
|
-
allow(
|
17
|
-
allow(
|
18
|
-
allow(
|
19
|
+
double('cluster').tap do |cluster|
|
20
|
+
allow(cluster).to receive(:topology).and_return(topology)
|
21
|
+
allow(cluster).to receive(:app_metadata).and_return(Mongo::Server::Monitor::AppMetadata.new({}))
|
22
|
+
allow(cluster).to receive(:options).and_return({})
|
23
|
+
allow(cluster).to receive(:monitor_app_metadata).and_return(monitor_app_metadata)
|
24
|
+
allow(cluster).to receive(:push_monitor_app_metadata).and_return(monitor_app_metadata)
|
25
|
+
allow(cluster).to receive(:heartbeat_interval).and_return(1000)
|
26
|
+
allow(cluster).to receive(:run_sdam_flow)
|
19
27
|
end
|
20
28
|
end
|
21
29
|
|
@@ -27,10 +35,12 @@ describe Mongo::Server::Monitor::Connection do
|
|
27
35
|
end
|
28
36
|
|
29
37
|
let(:monitor) do
|
38
|
+
metadata = Mongo::Server::Monitor::AppMetadata.new(options)
|
30
39
|
register_background_thread_object(
|
31
40
|
Mongo::Server::Monitor.new(server, server.event_listeners, server.monitoring,
|
32
41
|
{
|
33
|
-
app_metadata:
|
42
|
+
app_metadata: metadata,
|
43
|
+
push_monitor_app_metadata: metadata,
|
34
44
|
}.update(options))
|
35
45
|
).tap do |monitor|
|
36
46
|
monitor.scan!
|
@@ -17,6 +17,12 @@ describe Mongo::Server::Monitor do
|
|
17
17
|
{}
|
18
18
|
end
|
19
19
|
|
20
|
+
let(:monitor_app_metadata) do
|
21
|
+
Mongo::Server::Monitor::AppMetadata.new(
|
22
|
+
server_api: SpecConfig.instance.ruby_options[:server_api],
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
20
26
|
let(:cluster) do
|
21
27
|
double('cluster').tap do |cluster|
|
22
28
|
allow(cluster).to receive(:run_sdam_flow)
|
@@ -32,7 +38,9 @@ describe Mongo::Server::Monitor do
|
|
32
38
|
let(:monitor) do
|
33
39
|
register_background_thread_object(
|
34
40
|
described_class.new(server, listeners, Mongo::Monitoring.new,
|
35
|
-
SpecConfig.instance.test_options.merge(cluster: cluster).merge(monitor_options)
|
41
|
+
SpecConfig.instance.test_options.merge(cluster: cluster).merge(monitor_options).update(
|
42
|
+
app_metadata: monitor_app_metadata,
|
43
|
+
push_monitor_app_metadata: monitor_app_metadata))
|
36
44
|
)
|
37
45
|
end
|
38
46
|
|
@@ -196,7 +196,7 @@ describe Mongo::ServerSelector do
|
|
196
196
|
end
|
197
197
|
|
198
198
|
describe "#select_server" do
|
199
|
-
|
199
|
+
require_no_linting
|
200
200
|
|
201
201
|
context 'when #select_in_replica_set returns a list of nils' do
|
202
202
|
|
@@ -498,7 +498,7 @@ describe Mongo::ServerSelector do
|
|
498
498
|
end
|
499
499
|
|
500
500
|
describe '#filter_stale_servers' do
|
501
|
-
|
501
|
+
require_no_linting
|
502
502
|
|
503
503
|
include_context 'server selector'
|
504
504
|
let(:name) do
|
data/spec/mongo/server_spec.rb
CHANGED
@@ -40,12 +40,20 @@ describe Mongo::Server do
|
|
40
40
|
)
|
41
41
|
end
|
42
42
|
|
43
|
+
let(:monitor_app_metadata) do
|
44
|
+
Mongo::Server::Monitor::AppMetadata.new(
|
45
|
+
server_api: SpecConfig.instance.ruby_options[:server_api],
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
43
49
|
shared_context 'with monitoring io' do
|
44
50
|
let(:server_options) do
|
45
51
|
{monitoring_io: true}
|
46
52
|
end
|
47
53
|
|
48
54
|
before do
|
55
|
+
allow(cluster).to receive(:monitor_app_metadata).and_return(monitor_app_metadata)
|
56
|
+
allow(cluster).to receive(:push_monitor_app_metadata).and_return(monitor_app_metadata)
|
49
57
|
allow(cluster).to receive(:heartbeat_interval).and_return(1000)
|
50
58
|
end
|
51
59
|
end
|
@@ -144,8 +152,13 @@ describe Mongo::Server do
|
|
144
152
|
expect(server.options[:monitoring_io]).to be true
|
145
153
|
end
|
146
154
|
|
147
|
-
|
148
|
-
|
155
|
+
context 'with monitoring app metadata option' do
|
156
|
+
require_no_required_api_version
|
157
|
+
|
158
|
+
it 'creates monitor with monitoring app metadata' do
|
159
|
+
server.monitor.scan!
|
160
|
+
expect(server.monitor.connection.options[:app_metadata]).to be monitor_app_metadata
|
161
|
+
end
|
149
162
|
end
|
150
163
|
|
151
164
|
context 'monitoring_io: false' do
|