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
@@ -1,10 +1,5 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
require 'mongo/crypt/helpers/mongo_crypt_spec_helper'
|
4
|
-
|
5
|
-
RSpec.configure do |config|
|
6
|
-
config.extend(LiteConstraints)
|
7
|
-
end
|
1
|
+
require 'lite_spec_helper'
|
2
|
+
require_relative '../helpers/mongo_crypt_spec_helper'
|
8
3
|
|
9
4
|
shared_context 'initialized for data key creation' do
|
10
5
|
let(:master_key) { "ru\xfe\x00" * 24 }
|
@@ -1,10 +1,5 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
require 'mongo/crypt/helpers/mongo_crypt_spec_helper'
|
4
|
-
|
5
|
-
RSpec.configure do |config|
|
6
|
-
config.extend(LiteConstraints)
|
7
|
-
end
|
1
|
+
require 'lite_spec_helper'
|
2
|
+
require_relative '../helpers/mongo_crypt_spec_helper'
|
8
3
|
|
9
4
|
describe 'Mongo::Crypt::Binding' do
|
10
5
|
describe 'mongocrypt_t binding' do
|
@@ -188,7 +188,7 @@ describe Mongo::Crypt::DataKeyContext do
|
|
188
188
|
end
|
189
189
|
|
190
190
|
context 'with valid endpoint' do
|
191
|
-
let(:options) { { master_key: { region: 'us-east-2', key: 'arn', endpoint: '
|
191
|
+
let(:options) { { master_key: { region: 'us-east-2', key: 'arn', endpoint: 'kms.us-east-2.amazonaws.com:443' } } }
|
192
192
|
|
193
193
|
it 'does not raise an exception' do
|
194
194
|
expect do
|
data/spec/mongo/database_spec.rb
CHANGED
@@ -2,6 +2,19 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Mongo::Database do
|
4
4
|
|
5
|
+
shared_context 'more than 100 collections' do
|
6
|
+
let(:client) do
|
7
|
+
root_authorized_client.use('many-collections')
|
8
|
+
end
|
9
|
+
|
10
|
+
before do
|
11
|
+
120.times do |i|
|
12
|
+
client["coll-#{i}"].drop
|
13
|
+
client["coll-#{i}"].create
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
5
18
|
describe '#==' do
|
6
19
|
|
7
20
|
let(:database) do
|
@@ -82,6 +95,26 @@ describe Mongo::Database do
|
|
82
95
|
expect(collection.server_selector).to eq(Mongo::ServerSelector.get(mode: :secondary))
|
83
96
|
expect(collection.read_preference).to eq(BSON::Document.new(mode: :secondary))
|
84
97
|
end
|
98
|
+
|
99
|
+
context ':server_api option' do
|
100
|
+
|
101
|
+
let(:client) do
|
102
|
+
new_local_client_nmio(['localhost'], server_api: {version: '1'})
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'is not transfered to the collection' do
|
106
|
+
client.options[:server_api].should == {'version' => '1'}
|
107
|
+
collection.options[:server_api].should be nil
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'when providing :server_api option' do
|
113
|
+
it 'is rejected' do
|
114
|
+
lambda do
|
115
|
+
database['foo', server_api: {version: '1'}]
|
116
|
+
end.should raise_error(ArgumentError, 'The :server_api option cannot be specified for collection objects. It can only be specified on Client level')
|
117
|
+
end
|
85
118
|
end
|
86
119
|
end
|
87
120
|
|
@@ -228,6 +261,20 @@ describe Mongo::Database do
|
|
228
261
|
end
|
229
262
|
end
|
230
263
|
end
|
264
|
+
|
265
|
+
context 'when there are more than 100 collections' do
|
266
|
+
include_context 'more than 100 collections'
|
267
|
+
|
268
|
+
let(:collection_names) do
|
269
|
+
client.database.collection_names.sort
|
270
|
+
end
|
271
|
+
|
272
|
+
it 'lists all collections' do
|
273
|
+
collection_names.length.should == 120
|
274
|
+
collection_names.should include('coll-0')
|
275
|
+
collection_names.should include('coll-119')
|
276
|
+
end
|
277
|
+
end
|
231
278
|
end
|
232
279
|
|
233
280
|
describe '#list_collections' do
|
@@ -292,21 +339,40 @@ describe Mongo::Database do
|
|
292
339
|
described_class.new(root_authorized_client, 'admin')
|
293
340
|
end
|
294
341
|
|
295
|
-
|
296
|
-
|
342
|
+
shared_examples 'does not include system collections' do
|
343
|
+
it 'does not include system collections' do
|
344
|
+
expect(result.none? { |name| name =~ /(^|\.)system\./ }).to be true
|
345
|
+
end
|
346
|
+
end
|
347
|
+
|
348
|
+
context 'server 4.7+' do
|
349
|
+
min_server_fcv '4.7'
|
350
|
+
# https://jira.mongodb.org/browse/SERVER-35804
|
351
|
+
require_topology :single, :replica_set
|
352
|
+
|
353
|
+
include_examples 'does not include system collections'
|
354
|
+
|
355
|
+
it 'returns results' do
|
356
|
+
expect(result).to include('acol')
|
357
|
+
end
|
297
358
|
end
|
298
359
|
|
299
|
-
context 'server 3.0
|
360
|
+
context 'server 3.0-4.5' do
|
300
361
|
min_server_fcv '3.0'
|
362
|
+
max_server_version '4.5'
|
363
|
+
|
364
|
+
include_examples 'does not include system collections'
|
301
365
|
|
302
366
|
it 'returns results' do
|
303
367
|
expect(result).to include('acol')
|
304
368
|
end
|
305
369
|
end
|
306
370
|
|
307
|
-
context 'server 2.6
|
371
|
+
context 'server 2.6' do
|
308
372
|
max_server_version '2.6'
|
309
373
|
|
374
|
+
include_examples 'does not include system collections'
|
375
|
+
|
310
376
|
it 'returns results' do
|
311
377
|
expect(result).to include('admin.acol')
|
312
378
|
end
|
@@ -391,6 +457,25 @@ describe Mongo::Database do
|
|
391
457
|
end
|
392
458
|
end
|
393
459
|
end
|
460
|
+
|
461
|
+
context 'when there are more than 100 collections' do
|
462
|
+
include_context 'more than 100 collections'
|
463
|
+
|
464
|
+
let(:collections) do
|
465
|
+
client.database.list_collections
|
466
|
+
end
|
467
|
+
|
468
|
+
let(:collection_names) do
|
469
|
+
# 2.6 server prefixes collection names with database name
|
470
|
+
collections.map { |info| info['name'].sub(/^many-collections\./, '') }.sort
|
471
|
+
end
|
472
|
+
|
473
|
+
it 'lists all collections' do
|
474
|
+
collections.length.should == 120
|
475
|
+
collection_names.should include('coll-0')
|
476
|
+
collection_names.should include('coll-119')
|
477
|
+
end
|
478
|
+
end
|
394
479
|
end
|
395
480
|
|
396
481
|
describe '#collections' do
|
@@ -541,6 +626,24 @@ describe Mongo::Database do
|
|
541
626
|
end
|
542
627
|
end
|
543
628
|
end
|
629
|
+
|
630
|
+
context 'when there are more than 100 collections' do
|
631
|
+
include_context 'more than 100 collections'
|
632
|
+
|
633
|
+
let(:collections) do
|
634
|
+
client.database.collections
|
635
|
+
end
|
636
|
+
|
637
|
+
let(:collection_names) do
|
638
|
+
collections.map(&:name).sort
|
639
|
+
end
|
640
|
+
|
641
|
+
it 'lists all collections' do
|
642
|
+
collections.length.should == 120
|
643
|
+
collection_names.should include('coll-0')
|
644
|
+
collection_names.should include('coll-119')
|
645
|
+
end
|
646
|
+
end
|
544
647
|
end
|
545
648
|
|
546
649
|
describe '#command' do
|
@@ -772,6 +875,29 @@ describe Mongo::Database do
|
|
772
875
|
end
|
773
876
|
end
|
774
877
|
end
|
878
|
+
|
879
|
+
context 'when client server api is not set' do
|
880
|
+
require_no_required_api_version
|
881
|
+
min_server_fcv '4.7'
|
882
|
+
|
883
|
+
it 'passes server api parameters' do
|
884
|
+
lambda do
|
885
|
+
database.command(ping: 1, apiVersion: 'does-not-exist')
|
886
|
+
end.should raise_error(
|
887
|
+
an_instance_of(Mongo::Error::OperationFailure).and having_attributes(code: 322))
|
888
|
+
end
|
889
|
+
end
|
890
|
+
|
891
|
+
context 'when client server api is set' do
|
892
|
+
require_required_api_version
|
893
|
+
min_server_fcv '4.7'
|
894
|
+
|
895
|
+
it 'reports server api conflict' do
|
896
|
+
lambda do
|
897
|
+
database.command(ping: 1, apiVersion: 'does-not-exist')
|
898
|
+
end.should raise_error(Mongo::Error::ServerApiConflict)
|
899
|
+
end
|
900
|
+
end
|
775
901
|
end
|
776
902
|
|
777
903
|
describe '#drop' do
|
@@ -825,6 +951,50 @@ describe Mongo::Database do
|
|
825
951
|
end
|
826
952
|
end
|
827
953
|
|
954
|
+
context 'when write concern is passed in as an option' do
|
955
|
+
min_server_fcv '3.4'
|
956
|
+
require_topology :single
|
957
|
+
|
958
|
+
let(:client_options) do
|
959
|
+
{
|
960
|
+
write_concern: {w: 0},
|
961
|
+
database: :test
|
962
|
+
}
|
963
|
+
end
|
964
|
+
|
965
|
+
let(:session) do
|
966
|
+
client.start_session
|
967
|
+
end
|
968
|
+
|
969
|
+
let(:subscriber) { EventSubscriber.new }
|
970
|
+
|
971
|
+
let(:client) do
|
972
|
+
root_authorized_client.tap do |client|
|
973
|
+
client.subscribe(Mongo::Monitoring::COMMAND, subscriber)
|
974
|
+
end.with(client_options)
|
975
|
+
end
|
976
|
+
|
977
|
+
let(:events) do
|
978
|
+
subscriber.command_started_events('dropDatabase')
|
979
|
+
end
|
980
|
+
|
981
|
+
let(:database_test_wc) do
|
982
|
+
client.database
|
983
|
+
end
|
984
|
+
|
985
|
+
let!(:command) do
|
986
|
+
Utils.get_command_event(client, 'dropDatabase') do |client|
|
987
|
+
database_test_wc.drop({ write_concern: {w: 'majority'} })
|
988
|
+
end.command
|
989
|
+
end
|
990
|
+
|
991
|
+
it 'applies the write concern passed in as an option' do
|
992
|
+
expect(events.length).to eq(1)
|
993
|
+
expect(command).to_not be_nil
|
994
|
+
expect(command[:writeConcern][:w]).to eq('majority')
|
995
|
+
end
|
996
|
+
end
|
997
|
+
|
828
998
|
context 'when the server does not support write concern on the dropDatabase command' do
|
829
999
|
max_server_version '3.2'
|
830
1000
|
|
@@ -31,19 +31,19 @@ describe Mongo::Error::BulkWriteError do
|
|
31
31
|
|
32
32
|
describe '#message' do
|
33
33
|
it 'is correct' do
|
34
|
-
expect(error.message).to eq("
|
34
|
+
expect(error.message).to eq("Multiple errors: [1]: message1; [2]: message2 (note1, note2)")
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
describe '#to_s' do
|
39
39
|
it 'is correct' do
|
40
|
-
expect(error.to_s).to eq("
|
40
|
+
expect(error.to_s).to eq("Multiple errors: [1]: message1; [2]: message2 (note1, note2)")
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
44
|
describe '#inspect' do
|
45
45
|
it 'is correct' do
|
46
|
-
expect(error.inspect).to eq("#<Mongo::Error::BulkWriteError:
|
46
|
+
expect(error.inspect).to eq("#<Mongo::Error::BulkWriteError: Multiple errors: [1]: message1; [2]: message2 (note1, note2)>")
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -16,7 +16,7 @@ describe Mongo::Error::NoServerAvailable do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'is correct' do
|
19
|
-
expect(error.message).to eq('No primary server is available in cluster: #<Cluster topology=Unknown[127.0.0.1:27017] servers=[#<Server address=127.0.0.1:27017 UNKNOWN>]> with timeout=30, LT=0.015')
|
19
|
+
expect(error.message).to eq('No primary server is available in cluster: #<Cluster topology=Unknown[127.0.0.1:27017] servers=[#<Server address=127.0.0.1:27017 UNKNOWN NO-MONITORING>]> with timeout=30, LT=0.015')
|
20
20
|
end
|
21
21
|
|
22
22
|
context 'when cluster is nil' do
|
@@ -25,10 +25,22 @@ describe Mongo::Error::Parser do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'returns the message' do
|
28
|
-
expect(parser.message).to eq('no such command: notacommand
|
28
|
+
expect(parser.message).to eq('[59]: no such command: notacommand')
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
context 'when the document contains an errmsg and code name' do
|
33
|
+
|
34
|
+
let(:document) do
|
35
|
+
{ 'errmsg' => 'no such command: notacommand', 'code' => 59, 'codeName' => 'foo' }
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'returns the message' do
|
39
|
+
expect(parser.message).to eq('[59:foo]: no such command: notacommand')
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
=begin
|
32
44
|
context 'when the document contains writeErrors' do
|
33
45
|
|
34
46
|
context 'when only a single error exists' do
|
@@ -38,7 +50,7 @@ describe Mongo::Error::Parser do
|
|
38
50
|
end
|
39
51
|
|
40
52
|
it 'returns the message' do
|
41
|
-
expect(parser.message).to eq('Unknown modifier: $st
|
53
|
+
expect(parser.message).to eq('[9]: Unknown modifier: $st')
|
42
54
|
end
|
43
55
|
end
|
44
56
|
|
@@ -55,11 +67,30 @@ describe Mongo::Error::Parser do
|
|
55
67
|
|
56
68
|
it 'returns the messages concatenated' do
|
57
69
|
expect(parser.message).to eq(
|
58
|
-
'Unknown modifier: $st
|
70
|
+
'Multiple errors: 9: Unknown modifier: $st; 9: Unknown modifier: $bl'
|
71
|
+
)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context 'when multiple errors with code names exist' do
|
76
|
+
|
77
|
+
let(:document) do
|
78
|
+
{
|
79
|
+
'writeErrors' => [
|
80
|
+
{ 'code' => 9, 'codeName' => 'foo', 'errmsg' => 'Unknown modifier: $st' },
|
81
|
+
{ 'code' => 9, 'codeName' => 'foo', 'errmsg' => 'Unknown modifier: $bl' },
|
82
|
+
]
|
83
|
+
}
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'returns the messages concatenated' do
|
87
|
+
expect(parser.message).to eq(
|
88
|
+
'Multiple errors: [9:foo]: Unknown modifier: $st; [9:foo]: Unknown modifier: $bl'
|
59
89
|
)
|
60
90
|
end
|
61
91
|
end
|
62
92
|
end
|
93
|
+
=end
|
63
94
|
|
64
95
|
context 'when the document contains $err' do
|
65
96
|
|
@@ -68,7 +99,7 @@ describe Mongo::Error::Parser do
|
|
68
99
|
end
|
69
100
|
|
70
101
|
it 'returns the message' do
|
71
|
-
expect(parser.message).to eq('not authorized for query
|
102
|
+
expect(parser.message).to eq('[13]: not authorized for query')
|
72
103
|
end
|
73
104
|
end
|
74
105
|
|
@@ -79,7 +110,7 @@ describe Mongo::Error::Parser do
|
|
79
110
|
end
|
80
111
|
|
81
112
|
it 'returns the message' do
|
82
|
-
expect(parser.message).to eq('not authorized for query
|
113
|
+
expect(parser.message).to eq('[13]: not authorized for query')
|
83
114
|
end
|
84
115
|
end
|
85
116
|
|
@@ -90,7 +121,7 @@ describe Mongo::Error::Parser do
|
|
90
121
|
end
|
91
122
|
|
92
123
|
it 'returns the message' do
|
93
|
-
expect(parser.message).to eq('Not enough data-bearing nodes
|
124
|
+
expect(parser.message).to eq('[100]: Not enough data-bearing nodes')
|
94
125
|
end
|
95
126
|
end
|
96
127
|
end
|