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
@@ -19,11 +19,13 @@ module Mongo
|
|
19
19
|
# Defines custom behavior of results in a parallel scan.
|
20
20
|
#
|
21
21
|
# @since 2.0.0
|
22
|
+
# @api semiprivate
|
22
23
|
class Result < Operation::Result
|
23
24
|
|
24
25
|
# The name of the cursors field in the result.
|
25
26
|
#
|
26
27
|
# @since 2.0.0
|
28
|
+
# @api private
|
27
29
|
CURSORS = 'cursors'.freeze
|
28
30
|
|
29
31
|
# Get all the cursor ids from the result.
|
@@ -34,6 +36,7 @@ module Mongo
|
|
34
36
|
# @return [ Array<Integer> ] The cursor ids.
|
35
37
|
#
|
36
38
|
# @since 2.0.0
|
39
|
+
# @api private
|
37
40
|
def cursor_ids
|
38
41
|
documents.map {|doc| doc[CURSOR][CURSOR_ID]}
|
39
42
|
end
|
@@ -46,6 +49,7 @@ module Mongo
|
|
46
49
|
# @return [ Array<BSON::Document> ] The documents.
|
47
50
|
#
|
48
51
|
# @since 2.0.0
|
52
|
+
# @api public
|
49
53
|
def documents
|
50
54
|
reply.documents[0][CURSORS]
|
51
55
|
end
|
@@ -27,6 +27,7 @@ module Mongo
|
|
27
27
|
# produce a reply (in which case it is assumed to have succeeded).
|
28
28
|
#
|
29
29
|
# @since 2.0.0
|
30
|
+
# @api semiprivate
|
30
31
|
class Result
|
31
32
|
extend Forwardable
|
32
33
|
include Enumerable
|
@@ -34,41 +35,49 @@ module Mongo
|
|
34
35
|
# The field name for the cursor document in an aggregation.
|
35
36
|
#
|
36
37
|
# @since 2.2.0
|
38
|
+
# @api private
|
37
39
|
CURSOR = 'cursor'.freeze
|
38
40
|
|
39
41
|
# The cursor id field in the cursor document.
|
40
42
|
#
|
41
43
|
# @since 2.2.0
|
44
|
+
# @api private
|
42
45
|
CURSOR_ID = 'id'.freeze
|
43
46
|
|
44
47
|
# The field name for the first batch of a cursor.
|
45
48
|
#
|
46
49
|
# @since 2.2.0
|
50
|
+
# @api private
|
47
51
|
FIRST_BATCH = 'firstBatch'.freeze
|
48
52
|
|
49
53
|
# The field name for the next batch of a cursor.
|
50
54
|
#
|
51
55
|
# @since 2.2.0
|
56
|
+
# @api private
|
52
57
|
NEXT_BATCH = 'nextBatch'.freeze
|
53
58
|
|
54
59
|
# The namespace field in the cursor document.
|
55
60
|
#
|
56
61
|
# @since 2.2.0
|
62
|
+
# @api private
|
57
63
|
NAMESPACE = 'ns'.freeze
|
58
64
|
|
59
65
|
# The number of documents updated in the write.
|
60
66
|
#
|
61
67
|
# @since 2.0.0
|
68
|
+
# @api private
|
62
69
|
N = 'n'.freeze
|
63
70
|
|
64
71
|
# The ok status field in the result.
|
65
72
|
#
|
66
73
|
# @since 2.0.0
|
74
|
+
# @api private
|
67
75
|
OK = 'ok'.freeze
|
68
76
|
|
69
77
|
# The result field constant.
|
70
78
|
#
|
71
79
|
# @since 2.2.0
|
80
|
+
# @api private
|
72
81
|
RESULT = 'result'.freeze
|
73
82
|
|
74
83
|
# Initialize a new result.
|
@@ -106,6 +115,8 @@ module Mongo
|
|
106
115
|
end
|
107
116
|
|
108
117
|
# @return [ Array<Protocol::Message> ] replies The wrapped wire protocol replies.
|
118
|
+
#
|
119
|
+
# @api private
|
109
120
|
attr_reader :replies
|
110
121
|
|
111
122
|
# @return [ Server::Description ] Server description of the server that
|
@@ -129,6 +140,7 @@ module Mongo
|
|
129
140
|
# @return [ true, false ] If the result is acknowledged.
|
130
141
|
#
|
131
142
|
# @since 2.0.0
|
143
|
+
# @api public
|
132
144
|
def acknowledged?
|
133
145
|
!!@replies
|
134
146
|
end
|
@@ -143,6 +155,7 @@ module Mongo
|
|
143
155
|
# @return [ Integer ] The cursor id.
|
144
156
|
#
|
145
157
|
# @since 2.0.0
|
158
|
+
# @api private
|
146
159
|
def cursor_id
|
147
160
|
acknowledged? ? replies.last.cursor_id : 0
|
148
161
|
end
|
@@ -153,6 +166,7 @@ module Mongo
|
|
153
166
|
# @return [ Nil ]
|
154
167
|
#
|
155
168
|
# @since 2.0.0
|
169
|
+
# @api private
|
156
170
|
def namespace
|
157
171
|
nil
|
158
172
|
end
|
@@ -165,6 +179,7 @@ module Mongo
|
|
165
179
|
# @return [ Array<BSON::Document> ] The documents.
|
166
180
|
#
|
167
181
|
# @since 2.0.0
|
182
|
+
# @api public
|
168
183
|
def documents
|
169
184
|
if acknowledged?
|
170
185
|
replies.flat_map(&:documents)
|
@@ -182,9 +197,10 @@ module Mongo
|
|
182
197
|
#
|
183
198
|
# @return [ Enumerator ] The enumerator.
|
184
199
|
#
|
185
|
-
# @since 2.0.0
|
186
|
-
#
|
187
200
|
# @yieldparam [ BSON::Document ] Each document in the result.
|
201
|
+
#
|
202
|
+
# @since 2.0.0
|
203
|
+
# @api public
|
188
204
|
def each(&block)
|
189
205
|
documents.each(&block)
|
190
206
|
end
|
@@ -197,6 +213,7 @@ module Mongo
|
|
197
213
|
# @return [ String ] The inspection.
|
198
214
|
#
|
199
215
|
# @since 2.0.0
|
216
|
+
# @api public
|
200
217
|
def inspect
|
201
218
|
"#<#{self.class.name}:0x#{object_id} documents=#{documents}>"
|
202
219
|
end
|
@@ -209,6 +226,7 @@ module Mongo
|
|
209
226
|
# @return [ Protocol::Message ] The first reply.
|
210
227
|
#
|
211
228
|
# @since 2.0.0
|
229
|
+
# @api private
|
212
230
|
def reply
|
213
231
|
if acknowledged?
|
214
232
|
replies.first
|
@@ -225,6 +243,7 @@ module Mongo
|
|
225
243
|
# @return [ Integer ] The number of documents returned.
|
226
244
|
#
|
227
245
|
# @since 2.0.0
|
246
|
+
# @api public
|
228
247
|
def returned_count
|
229
248
|
if acknowledged?
|
230
249
|
reply.number_returned
|
@@ -245,6 +264,7 @@ module Mongo
|
|
245
264
|
# @return [ true, false ] If the command was successful.
|
246
265
|
#
|
247
266
|
# @since 2.0.0
|
267
|
+
# @api public
|
248
268
|
def successful?
|
249
269
|
return true if !acknowledged?
|
250
270
|
if first_document.has_key?(OK)
|
@@ -262,6 +282,7 @@ module Mongo
|
|
262
282
|
# @return [ true, false ] If the command returned ok.
|
263
283
|
#
|
264
284
|
# @since 2.1.0
|
285
|
+
# @api public
|
265
286
|
def ok?
|
266
287
|
# first_document[OK] is a float, and the server can return
|
267
288
|
# ok as a BSON int32, BSON int64 or a BSON double.
|
@@ -285,6 +306,7 @@ module Mongo
|
|
285
306
|
# @return [ Result ] The result if verification passed.
|
286
307
|
#
|
287
308
|
# @since 2.0.0
|
309
|
+
# @api private
|
288
310
|
def validate!
|
289
311
|
!successful? ? raise_operation_failure : self
|
290
312
|
end
|
@@ -310,6 +332,8 @@ module Mongo
|
|
310
332
|
labels: parser.labels,
|
311
333
|
wtimeout: parser.wtimeout,
|
312
334
|
connection_description: connection_description,
|
335
|
+
document: parser.document,
|
336
|
+
server_message: parser.server_message,
|
313
337
|
)
|
314
338
|
end
|
315
339
|
|
@@ -317,12 +341,13 @@ module Mongo
|
|
317
341
|
# error information in this result.
|
318
342
|
#
|
319
343
|
# @raise Error::OperationFailure
|
320
|
-
def raise_operation_failure
|
344
|
+
private def raise_operation_failure
|
321
345
|
raise error
|
322
346
|
end
|
323
|
-
private :raise_operation_failure
|
324
347
|
|
325
348
|
# @return [ TopologyVersion | nil ] The topology version.
|
349
|
+
#
|
350
|
+
# @api private
|
326
351
|
def topology_version
|
327
352
|
unless defined?(@topology_version)
|
328
353
|
@topology_version = first_document['topologyVersion'] &&
|
@@ -339,6 +364,7 @@ module Mongo
|
|
339
364
|
# @return [ Integer ] The number of documents written.
|
340
365
|
#
|
341
366
|
# @since 2.0.0
|
367
|
+
# @api public
|
342
368
|
def written_count
|
343
369
|
if acknowledged?
|
344
370
|
first_document[N] || 0
|
@@ -346,6 +372,8 @@ module Mongo
|
|
346
372
|
0
|
347
373
|
end
|
348
374
|
end
|
375
|
+
|
376
|
+
# @api public
|
349
377
|
alias :n :written_count
|
350
378
|
|
351
379
|
# Get the operation time reported in the server response.
|
@@ -353,9 +381,10 @@ module Mongo
|
|
353
381
|
# @example Get the operation time.
|
354
382
|
# result.operation_time
|
355
383
|
#
|
356
|
-
# @return [ Object ] The operation time value.
|
384
|
+
# @return [ Object | nil ] The operation time value.
|
357
385
|
#
|
358
386
|
# @since 2.5.0
|
387
|
+
# @api public
|
359
388
|
def operation_time
|
360
389
|
first_document && first_document[OPERATION_TIME]
|
361
390
|
end
|
@@ -365,13 +394,14 @@ module Mongo
|
|
365
394
|
# @example Get the cluster time.
|
366
395
|
# result.cluster_time
|
367
396
|
#
|
368
|
-
# @return [
|
397
|
+
# @return [ ClusterTime | nil ] The cluster time document.
|
369
398
|
#
|
370
399
|
# Changed in version 2.9.0: This attribute became an instance of
|
371
400
|
# ClusterTime, which is a subclass of BSON::Document.
|
372
401
|
# Previously it was an instance of BSON::Document.
|
373
402
|
#
|
374
403
|
# @since 2.5.0
|
404
|
+
# @api public
|
375
405
|
def cluster_time
|
376
406
|
first_document && ClusterTime[first_document['$clusterTime']]
|
377
407
|
end
|
@@ -384,6 +414,7 @@ module Mongo
|
|
384
414
|
# @return [ Array ] labels The set of labels.
|
385
415
|
#
|
386
416
|
# @since 2.7.0
|
417
|
+
# @api private
|
387
418
|
def labels
|
388
419
|
@labels ||= parser.labels
|
389
420
|
end
|
@@ -18,15 +18,16 @@ module Mongo
|
|
18
18
|
# Shared executable behavior of operations.
|
19
19
|
#
|
20
20
|
# @since 2.5.2
|
21
|
+
# @api private
|
21
22
|
module Executable
|
22
23
|
|
23
24
|
include ResponseHandling
|
24
25
|
|
25
|
-
def do_execute(connection,
|
26
|
+
def do_execute(connection, context, options = {})
|
26
27
|
unpin_maybe(session) do
|
27
|
-
add_error_labels(
|
28
|
+
add_error_labels(connection, context) do
|
28
29
|
add_server_diagnostics(connection) do
|
29
|
-
get_result(connection,
|
30
|
+
get_result(connection, context, options).tap do |result|
|
30
31
|
process_result(result, connection)
|
31
32
|
end
|
32
33
|
end
|
@@ -34,15 +35,15 @@ module Mongo
|
|
34
35
|
end
|
35
36
|
end
|
36
37
|
|
37
|
-
def execute(connection,
|
38
|
+
def execute(connection, context:, options: {})
|
38
39
|
if Lint.enabled?
|
39
40
|
unless connection.is_a?(Mongo::Server::Connection)
|
40
41
|
raise Error::LintError, "Connection argument is of wrong type: #{connection}"
|
41
42
|
end
|
42
43
|
end
|
43
44
|
|
44
|
-
do_execute(connection,
|
45
|
-
validate_result(result,
|
45
|
+
do_execute(connection, context, options).tap do |result|
|
46
|
+
validate_result(result, connection, context)
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
@@ -52,20 +53,30 @@ module Mongo
|
|
52
53
|
Result
|
53
54
|
end
|
54
55
|
|
55
|
-
def get_result(connection,
|
56
|
-
result_class.new(*dispatch_message(connection,
|
56
|
+
def get_result(connection, context, options = {})
|
57
|
+
result_class.new(*dispatch_message(connection, context, options))
|
57
58
|
end
|
58
59
|
|
59
60
|
# Returns a Protocol::Message or nil as reply.
|
60
|
-
def dispatch_message(connection,
|
61
|
-
message = build_message(connection)
|
62
|
-
message = message.maybe_encrypt(connection,
|
63
|
-
reply = connection.dispatch([ message ],
|
61
|
+
def dispatch_message(connection, context, options = {})
|
62
|
+
message = build_message(connection, context)
|
63
|
+
message = message.maybe_encrypt(connection, context)
|
64
|
+
reply = connection.dispatch([ message ], context, options)
|
64
65
|
[reply, connection.description]
|
65
66
|
end
|
66
67
|
|
67
|
-
|
68
|
-
|
68
|
+
# @param [ Mongo::Server::Connection ] connection The connection on which
|
69
|
+
# the operation is performed.
|
70
|
+
# @param [ Mongo::Operation::Context ] context The operation context.
|
71
|
+
def build_message(connection, context)
|
72
|
+
msg = message(connection)
|
73
|
+
if (server_api = context.server_api) &&
|
74
|
+
# Commands in a transaction do not allow API parameters.
|
75
|
+
!(context.in_transaction? && !context.starting_transaction?)
|
76
|
+
then
|
77
|
+
msg = msg.maybe_add_server_api(server_api)
|
78
|
+
end
|
79
|
+
msg
|
69
80
|
end
|
70
81
|
|
71
82
|
def process_result(result, connection)
|
@@ -20,15 +20,9 @@ module Mongo
|
|
20
20
|
#
|
21
21
|
# @api private
|
22
22
|
module OpMsgOrCommand
|
23
|
+
include PolymorphicOperation
|
23
24
|
include PolymorphicLookup
|
24
25
|
|
25
|
-
def execute(server, client:, options: {})
|
26
|
-
server.with_connection do |connection|
|
27
|
-
operation = final_operation(connection)
|
28
|
-
operation.execute(connection, client: client, options: options)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
26
|
private
|
33
27
|
|
34
28
|
def final_operation(connection)
|
@@ -21,15 +21,9 @@ module Mongo
|
|
21
21
|
#
|
22
22
|
# @api private
|
23
23
|
module OpMsgOrFindCommand
|
24
|
+
include PolymorphicOperation
|
24
25
|
include PolymorphicLookup
|
25
26
|
|
26
|
-
def execute(server, client:)
|
27
|
-
server.with_connection do |connection|
|
28
|
-
operation = final_operation(connection)
|
29
|
-
operation.execute(connection, client: client)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
27
|
private
|
34
28
|
|
35
29
|
def final_operation(connection)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# Copyright (C) 2021 MongoDB Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
module Operation
|
17
|
+
|
18
|
+
# Shared behavior of implementing an operation differently based on
|
19
|
+
# the server that will be executing the operation.
|
20
|
+
#
|
21
|
+
# @api private
|
22
|
+
module PolymorphicOperation
|
23
|
+
|
24
|
+
# Execute the operation.
|
25
|
+
#
|
26
|
+
# @param [ Mongo::Server ] server The server to send the operation to.
|
27
|
+
# @param [ Operation::Context ] context The operation context.
|
28
|
+
# @param [ Hash ] options Operation execution options.
|
29
|
+
#
|
30
|
+
# @return [ Mongo::Operation::Result ] The operation result.
|
31
|
+
def execute(server, context:, options: {})
|
32
|
+
server.with_connection do |connection|
|
33
|
+
operation = final_operation(connection)
|
34
|
+
operation.execute(connection, context: context, options: options)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|