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
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mongo::CachingCursor do
|
4
|
+
|
5
|
+
around do |spec|
|
6
|
+
Mongo::QueryCache.clear
|
7
|
+
Mongo::QueryCache.cache { spec.run }
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:authorized_collection) do
|
11
|
+
authorized_client['caching_cursor']
|
12
|
+
end
|
13
|
+
|
14
|
+
before do
|
15
|
+
authorized_collection.drop
|
16
|
+
end
|
17
|
+
|
18
|
+
let(:server) do
|
19
|
+
view.send(:server_selector).select_server(authorized_client.cluster)
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:reply) do
|
23
|
+
view.send(:send_initial_query, server)
|
24
|
+
end
|
25
|
+
|
26
|
+
let(:cursor) do
|
27
|
+
described_class.new(view, reply, server)
|
28
|
+
end
|
29
|
+
|
30
|
+
let(:view) do
|
31
|
+
Mongo::Collection::View.new(authorized_collection)
|
32
|
+
end
|
33
|
+
|
34
|
+
before do
|
35
|
+
authorized_collection.delete_many
|
36
|
+
3.times { |i| authorized_collection.insert_one(_id: i) }
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '#cached_docs' do
|
40
|
+
context 'when no query has been performed' do
|
41
|
+
it 'returns nil' do
|
42
|
+
expect(cursor.cached_docs).to be_nil
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'when a query has been performed' do
|
47
|
+
it 'returns the number of documents' do
|
48
|
+
cursor.to_a
|
49
|
+
expect(cursor.cached_docs.length).to eq(3)
|
50
|
+
expect(cursor.cached_docs).to eq([{ '_id' => 0 }, { '_id' => 1 }, { '_id' => 2 }])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#try_next' do
|
56
|
+
it 'fetches the next document' do
|
57
|
+
expect(cursor.try_next).to eq('_id' => 0)
|
58
|
+
expect(cursor.try_next).to eq('_id' => 1)
|
59
|
+
expect(cursor.try_next).to eq('_id' => 2)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe '#each' do
|
64
|
+
it 'iterates the cursor' do
|
65
|
+
result = cursor.each.to_a
|
66
|
+
expect(result.length).to eq(3)
|
67
|
+
expect(result).to eq([{ '_id' => 0 }, { '_id' => 1 }, { '_id' => 2 }])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -463,7 +463,56 @@ describe Mongo::Client do
|
|
463
463
|
SpecConfig.instance.all_test_options.merge(options))
|
464
464
|
end
|
465
465
|
|
466
|
-
context 'when the compressor is supported' do
|
466
|
+
context 'when the compressor is not supported by the driver' do
|
467
|
+
require_warning_clean
|
468
|
+
|
469
|
+
let(:options) do
|
470
|
+
{ compressors: ['snoopy'] }
|
471
|
+
end
|
472
|
+
|
473
|
+
it 'does not set the compressor and warns' do
|
474
|
+
expect(Mongo::Logger.logger).to receive(:warn)
|
475
|
+
expect(client.options['compressors']).to be_nil
|
476
|
+
end
|
477
|
+
|
478
|
+
it 'sets the compression key of the handshake document to an empty array' do
|
479
|
+
expect(client.cluster.app_metadata.send(:document)[:compression]).to eq([])
|
480
|
+
end
|
481
|
+
|
482
|
+
context 'when one supported compressor and one unsupported compressor are provided' do
|
483
|
+
require_compression
|
484
|
+
min_server_fcv '3.6'
|
485
|
+
|
486
|
+
let(:options) do
|
487
|
+
{ compressors: ['zlib', 'snoopy'] }
|
488
|
+
end
|
489
|
+
|
490
|
+
it 'does not set the unsupported compressor and warns' do
|
491
|
+
expect(Mongo::Logger.logger).to receive(:warn).at_least(:once)
|
492
|
+
expect(client.options['compressors']).to eq(['zlib'])
|
493
|
+
end
|
494
|
+
|
495
|
+
it 'sets the compression key of the handshake document to the list of supported compressors' do
|
496
|
+
expect(client.cluster.app_metadata.send(:document)[:compression]).to eq(['zlib'])
|
497
|
+
end
|
498
|
+
end
|
499
|
+
end
|
500
|
+
|
501
|
+
context 'when the compressor is not supported by the server' do
|
502
|
+
max_server_version '3.4'
|
503
|
+
|
504
|
+
let(:options) do
|
505
|
+
{ compressors: ['zlib'] }
|
506
|
+
end
|
507
|
+
|
508
|
+
it 'does not set the compressor and warns' do
|
509
|
+
expect(Mongo::Logger.logger).to receive(:warn).at_least(:once)
|
510
|
+
expect(client.cluster.next_primary.monitor.compressor).to be_nil
|
511
|
+
end
|
512
|
+
end
|
513
|
+
|
514
|
+
context 'when zlib compression is requested' do
|
515
|
+
require_zlib_compression
|
467
516
|
|
468
517
|
let(:options) do
|
469
518
|
{ compressors: ['zlib'] }
|
@@ -478,7 +527,6 @@ describe Mongo::Client do
|
|
478
527
|
end
|
479
528
|
|
480
529
|
context 'when server supports compression' do
|
481
|
-
require_compression
|
482
530
|
min_server_fcv '3.6'
|
483
531
|
|
484
532
|
it 'uses compression for messages' do
|
@@ -495,50 +543,55 @@ describe Mongo::Client do
|
|
495
543
|
end
|
496
544
|
end
|
497
545
|
|
498
|
-
context 'when
|
546
|
+
context 'when snappy compression is requested and supported by the server' do
|
547
|
+
min_server_version '3.6'
|
499
548
|
|
500
549
|
let(:options) do
|
501
|
-
{ compressors: ['
|
550
|
+
{ compressors: ['snappy'] }
|
502
551
|
end
|
503
552
|
|
504
|
-
|
505
|
-
|
506
|
-
expect(client.options['compressors']).to be_nil
|
507
|
-
end
|
508
|
-
|
509
|
-
it 'sets the compression key of the handshake document to an empty array' do
|
510
|
-
expect(client.cluster.app_metadata.send(:document)[:compression]).to eq([])
|
511
|
-
end
|
512
|
-
|
513
|
-
context 'when one supported compressor and one unsupported compressor are provided' do
|
514
|
-
require_compression
|
515
|
-
min_server_fcv '3.6'
|
553
|
+
context 'when snappy gem is installed' do
|
554
|
+
require_snappy_compression
|
516
555
|
|
517
|
-
|
518
|
-
|
556
|
+
it 'creates the client' do
|
557
|
+
expect(client.options['compressors']).to eq(['snappy'])
|
519
558
|
end
|
559
|
+
end
|
520
560
|
|
521
|
-
|
522
|
-
|
523
|
-
expect(client.options['compressors']).to eq(['zlib'])
|
524
|
-
end
|
561
|
+
context 'when snappy gem is not installed' do
|
562
|
+
require_no_snappy_compression
|
525
563
|
|
526
|
-
it '
|
527
|
-
expect
|
564
|
+
it 'raises an exception' do
|
565
|
+
expect do
|
566
|
+
client
|
567
|
+
end.to raise_error(Mongo::Error::UnmetDependency, /Cannot enable snappy compression/)
|
528
568
|
end
|
529
569
|
end
|
530
570
|
end
|
531
571
|
|
532
|
-
context 'when
|
533
|
-
|
572
|
+
context 'when zstd compression is requested and supported by the server' do
|
573
|
+
min_server_version '4.2'
|
534
574
|
|
535
575
|
let(:options) do
|
536
|
-
{ compressors: ['
|
576
|
+
{ compressors: ['zstd'] }
|
537
577
|
end
|
538
578
|
|
539
|
-
|
540
|
-
|
541
|
-
|
579
|
+
context 'when zstd gem is installed' do
|
580
|
+
require_zstd_compression
|
581
|
+
|
582
|
+
it 'creates the client' do
|
583
|
+
expect(client.options['compressors']).to eq(['zstd'])
|
584
|
+
end
|
585
|
+
end
|
586
|
+
|
587
|
+
context 'when zstd gem is not installed' do
|
588
|
+
require_no_zstd_compression
|
589
|
+
|
590
|
+
it 'raises an exception' do
|
591
|
+
expect do
|
592
|
+
client
|
593
|
+
end.to raise_error(Mongo::Error::UnmetDependency, /Cannot enable zstd compression/)
|
594
|
+
end
|
542
595
|
end
|
543
596
|
end
|
544
597
|
end
|
@@ -674,7 +727,7 @@ describe Mongo::Client do
|
|
674
727
|
context 'when providing a custom logger' do
|
675
728
|
|
676
729
|
let(:logger) do
|
677
|
-
Logger.new(
|
730
|
+
Logger.new(STDOUT).tap do |l|
|
678
731
|
l.level = Logger::FATAL
|
679
732
|
end
|
680
733
|
end
|
@@ -844,13 +897,14 @@ describe Mongo::Client do
|
|
844
897
|
end
|
845
898
|
|
846
899
|
context 'mri' do
|
847
|
-
|
900
|
+
require_mri
|
848
901
|
|
849
902
|
let(:platform_string) do
|
850
903
|
[
|
851
904
|
"Ruby #{RUBY_VERSION}",
|
852
905
|
RUBY_PLATFORM,
|
853
|
-
RbConfig::CONFIG['build']
|
906
|
+
RbConfig::CONFIG['build'],
|
907
|
+
'A',
|
854
908
|
].join(', ')
|
855
909
|
end
|
856
910
|
|
@@ -868,7 +922,8 @@ describe Mongo::Client do
|
|
868
922
|
"like Ruby #{RUBY_VERSION}",
|
869
923
|
RUBY_PLATFORM,
|
870
924
|
"JVM #{java.lang.System.get_property('java.version')}",
|
871
|
-
RbConfig::CONFIG['build']
|
925
|
+
RbConfig::CONFIG['build'],
|
926
|
+
'A',
|
872
927
|
].join(', ')
|
873
928
|
end
|
874
929
|
|
@@ -1311,7 +1366,7 @@ describe Mongo::Client do
|
|
1311
1366
|
end
|
1312
1367
|
|
1313
1368
|
context 'when not linting' do
|
1314
|
-
|
1369
|
+
require_no_linting
|
1315
1370
|
|
1316
1371
|
it 'rejects bogus read preference as symbol' do
|
1317
1372
|
expect do
|
@@ -1343,6 +1398,46 @@ describe Mongo::Client do
|
|
1343
1398
|
end
|
1344
1399
|
end
|
1345
1400
|
|
1401
|
+
context 'when setting read concern options' do
|
1402
|
+
min_server_fcv '3.2'
|
1403
|
+
|
1404
|
+
context 'when read concern is valid' do
|
1405
|
+
let(:options) do
|
1406
|
+
{ read_concern: { level: :local } }
|
1407
|
+
end
|
1408
|
+
|
1409
|
+
it 'does not warn' do
|
1410
|
+
expect(Mongo::Logger.logger).to_not receive(:warn)
|
1411
|
+
new_local_client_nmio(SpecConfig.instance.addresses, options)
|
1412
|
+
end
|
1413
|
+
end
|
1414
|
+
|
1415
|
+
context 'when read concern has an invalid key' do
|
1416
|
+
require_no_linting
|
1417
|
+
|
1418
|
+
let(:options) do
|
1419
|
+
{ read_concern: { hello: :local } }
|
1420
|
+
end
|
1421
|
+
|
1422
|
+
it 'logs a warning' do
|
1423
|
+
expect(Mongo::Logger.logger).to receive(:warn).with(/Read concern has invalid keys: hello/)
|
1424
|
+
new_local_client_nmio(SpecConfig.instance.addresses, options)
|
1425
|
+
end
|
1426
|
+
end
|
1427
|
+
|
1428
|
+
context 'when read concern has a non-user-settable key' do
|
1429
|
+
let(:options) do
|
1430
|
+
{ read_concern: { after_cluster_time: 100 } }
|
1431
|
+
end
|
1432
|
+
|
1433
|
+
it 'raises an exception' do
|
1434
|
+
expect do
|
1435
|
+
new_local_client_nmio(SpecConfig.instance.addresses, options)
|
1436
|
+
end.to raise_error(Mongo::Error::InvalidReadConcern, 'The after_cluster_time read_concern option cannot be specified by the user')
|
1437
|
+
end
|
1438
|
+
end
|
1439
|
+
end
|
1440
|
+
|
1346
1441
|
context 'when an invalid option is provided' do
|
1347
1442
|
|
1348
1443
|
let(:options) do
|
@@ -1494,6 +1589,107 @@ describe Mongo::Client do
|
|
1494
1589
|
end
|
1495
1590
|
end
|
1496
1591
|
end
|
1592
|
+
|
1593
|
+
context ':auth_mech_properties option' do
|
1594
|
+
context 'is nil' do
|
1595
|
+
let(:options) do
|
1596
|
+
{auth_mech_properties: nil}
|
1597
|
+
end
|
1598
|
+
|
1599
|
+
it 'creates the client without the option' do
|
1600
|
+
client.options.should_not have_key(:auth_mech_properties)
|
1601
|
+
end
|
1602
|
+
end
|
1603
|
+
end
|
1604
|
+
|
1605
|
+
context ':server_api parameter' do
|
1606
|
+
context 'is a hash with symbol keys' do
|
1607
|
+
context 'using known keys' do
|
1608
|
+
let(:options) do
|
1609
|
+
{server_api: {
|
1610
|
+
version: '1',
|
1611
|
+
strict: true,
|
1612
|
+
deprecation_errors: false,
|
1613
|
+
}}
|
1614
|
+
end
|
1615
|
+
|
1616
|
+
it 'is accepted' do
|
1617
|
+
client.options[:server_api].should == {
|
1618
|
+
'version' => '1',
|
1619
|
+
'strict' => true,
|
1620
|
+
'deprecation_errors' => false,
|
1621
|
+
}
|
1622
|
+
end
|
1623
|
+
end
|
1624
|
+
|
1625
|
+
context 'using an unknown version' do
|
1626
|
+
let(:options) do
|
1627
|
+
{server_api: {
|
1628
|
+
version: '42',
|
1629
|
+
}}
|
1630
|
+
end
|
1631
|
+
|
1632
|
+
it 'is rejected' do
|
1633
|
+
lambda do
|
1634
|
+
client
|
1635
|
+
end.should raise_error(ArgumentError, 'Unknown server API version: 42')
|
1636
|
+
end
|
1637
|
+
end
|
1638
|
+
|
1639
|
+
context 'using an unknown option' do
|
1640
|
+
let(:options) do
|
1641
|
+
{server_api: {
|
1642
|
+
vversion: '1',
|
1643
|
+
}}
|
1644
|
+
end
|
1645
|
+
|
1646
|
+
it 'is rejected' do
|
1647
|
+
lambda do
|
1648
|
+
client
|
1649
|
+
end.should raise_error(ArgumentError, 'Unknown keys under :server_api: "vversion"')
|
1650
|
+
end
|
1651
|
+
end
|
1652
|
+
|
1653
|
+
context 'using a value which is not a hash' do
|
1654
|
+
let(:options) do
|
1655
|
+
{server_api: 42}
|
1656
|
+
end
|
1657
|
+
|
1658
|
+
it 'is rejected' do
|
1659
|
+
lambda do
|
1660
|
+
client
|
1661
|
+
end.should raise_error(ArgumentError, ':server_api value must be a hash: 42')
|
1662
|
+
end
|
1663
|
+
end
|
1664
|
+
end
|
1665
|
+
|
1666
|
+
context 'when connected to a pre-OP_MSG server' do
|
1667
|
+
max_server_version '3.4'
|
1668
|
+
|
1669
|
+
let(:options) do
|
1670
|
+
{server_api: {version: 1}}
|
1671
|
+
end
|
1672
|
+
|
1673
|
+
let(:client) do
|
1674
|
+
new_local_client(SpecConfig.instance.addresses,
|
1675
|
+
SpecConfig.instance.all_test_options.merge(options))
|
1676
|
+
end
|
1677
|
+
|
1678
|
+
it 'constructs the client' do
|
1679
|
+
client.should be_a(Mongo::Client)
|
1680
|
+
end
|
1681
|
+
|
1682
|
+
it 'discovers servers' do
|
1683
|
+
client.summary.should_not =~ /UNKNOWN/
|
1684
|
+
end
|
1685
|
+
|
1686
|
+
it 'fails operations' do
|
1687
|
+
lambda do
|
1688
|
+
client.command(ping: 1)
|
1689
|
+
end.should raise_error(Mongo::Error::ServerApiNotSupported)
|
1690
|
+
end
|
1691
|
+
end
|
1692
|
+
end
|
1497
1693
|
end
|
1498
1694
|
|
1499
1695
|
context 'when making a block client' do
|
@@ -2092,6 +2288,7 @@ describe Mongo::Client do
|
|
2092
2288
|
sdam_proc: sdam_proc,
|
2093
2289
|
connect_timeout: 3.08, socket_timeout: 3.09,
|
2094
2290
|
server_selection_timeout: 2.92,
|
2291
|
+
heartbeat_frequency: 100,
|
2095
2292
|
database: SpecConfig.instance.test_db))
|
2096
2293
|
end
|
2097
2294
|
|
@@ -2112,6 +2309,10 @@ describe Mongo::Client do
|
|
2112
2309
|
end
|
2113
2310
|
|
2114
2311
|
it 'does not notify subscribers set up by sdam_proc' do
|
2312
|
+
# On 4.4, the push monitor also is receiving heartbeats.
|
2313
|
+
# Give those some time to be processed.
|
2314
|
+
sleep 2
|
2315
|
+
|
2115
2316
|
expect(subscriber.started_events.length).to be > 0
|
2116
2317
|
subscriber.started_events.clear
|
2117
2318
|
|
@@ -2119,10 +2320,47 @@ describe Mongo::Client do
|
|
2119
2320
|
# subscriber may receive events from the original client.
|
2120
2321
|
|
2121
2322
|
new_client.cluster.next_primary
|
2323
|
+
|
2324
|
+
# Diagnostics
|
2325
|
+
unless subscriber.started_events.empty?
|
2326
|
+
p subscriber.started_events
|
2327
|
+
end
|
2328
|
+
|
2122
2329
|
expect(subscriber.started_events.length).to eq 0
|
2123
2330
|
new_client.cluster.topology.class.should_not be Mongo::Cluster::Topology::Unknown
|
2124
2331
|
end
|
2125
2332
|
end
|
2333
|
+
|
2334
|
+
context 'when :server_api is changed' do
|
2335
|
+
|
2336
|
+
let(:client) do
|
2337
|
+
new_local_client_nmio(['127.0.0.1:27017'])
|
2338
|
+
end
|
2339
|
+
|
2340
|
+
let(:new_client) do
|
2341
|
+
client.with(server_api: {version: '1'})
|
2342
|
+
end
|
2343
|
+
|
2344
|
+
it 'changes :server_api' do
|
2345
|
+
new_client.options[:server_api].should == {'version' => '1'}
|
2346
|
+
end
|
2347
|
+
end
|
2348
|
+
|
2349
|
+
context 'when :server_api is cleared' do
|
2350
|
+
|
2351
|
+
let(:client) do
|
2352
|
+
new_local_client_nmio(['127.0.0.1:27017'], server_api: {version: '1'})
|
2353
|
+
end
|
2354
|
+
|
2355
|
+
let(:new_client) do
|
2356
|
+
client.with(server_api: nil)
|
2357
|
+
end
|
2358
|
+
|
2359
|
+
it 'clears :server_api' do
|
2360
|
+
new_client.options[:server_api].should be nil
|
2361
|
+
end
|
2362
|
+
end
|
2363
|
+
|
2126
2364
|
end
|
2127
2365
|
|
2128
2366
|
describe '#dup' do
|