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,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'Change stream integration', retry: 4 do
|
4
|
-
|
4
|
+
require_mri
|
5
5
|
max_example_run_time 7
|
6
6
|
min_server_fcv '3.6'
|
7
7
|
require_topology :replica_set
|
@@ -98,7 +98,7 @@ describe 'Change stream integration', retry: 4 do
|
|
98
98
|
it 'watch raises error' do
|
99
99
|
expect do
|
100
100
|
client['change-stream'].watch
|
101
|
-
end.to raise_error(Mongo::Error::OperationFailure, /Failing command due to 'failCommand' failpoint
|
101
|
+
end.to raise_error(Mongo::Error::OperationFailure, /10107\b.*Failing command due to 'failCommand' failpoint/)
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
@@ -283,7 +283,7 @@ describe 'Change stream integration', retry: 4 do
|
|
283
283
|
|
284
284
|
expect do
|
285
285
|
enum.next
|
286
|
-
end.to raise_error(Mongo::Error::OperationFailure, /Failing command due to 'failCommand' failpoint
|
286
|
+
end.to raise_error(Mongo::Error::OperationFailure, /101\b.*Failing command due to 'failCommand' failpoint/)
|
287
287
|
end
|
288
288
|
end
|
289
289
|
end
|
@@ -414,7 +414,7 @@ describe 'Change stream integration', retry: 4 do
|
|
414
414
|
|
415
415
|
expect do
|
416
416
|
enum.try_next
|
417
|
-
end.to raise_error(Mongo::Error::OperationFailure, /Failing command due to 'failCommand' failpoint
|
417
|
+
end.to raise_error(Mongo::Error::OperationFailure, /10107\b.*Failing command due to 'failCommand' failpoint/)
|
418
418
|
end
|
419
419
|
end
|
420
420
|
|
@@ -441,7 +441,7 @@ describe 'Change stream integration', retry: 4 do
|
|
441
441
|
|
442
442
|
expect do
|
443
443
|
enum.try_next
|
444
|
-
end.to raise_error(Mongo::Error::OperationFailure, /Failing command due to 'failCommand' failpoint
|
444
|
+
end.to raise_error(Mongo::Error::OperationFailure, /10107\b.*Failing command due to 'failCommand' failpoint/)
|
445
445
|
end
|
446
446
|
end
|
447
447
|
end
|
@@ -131,7 +131,7 @@ describe 'Client authentication options' do
|
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
|
-
shared_examples_for 'an auth mechanism that
|
134
|
+
shared_examples_for 'an auth mechanism that does not support auth_mech_properties' do
|
135
135
|
context 'with URI options' do
|
136
136
|
let(:credentials) { "#{user}:#{pwd}@" }
|
137
137
|
let(:options) { "?authMechanism=#{auth_mech_string}&authMechanismProperties=CANONICALIZE_HOST_NAME:true" }
|
@@ -163,7 +163,7 @@ describe 'Client authentication options' do
|
|
163
163
|
end
|
164
164
|
end
|
165
165
|
|
166
|
-
shared_examples_for 'an auth mechanism that
|
166
|
+
shared_examples_for 'an auth mechanism that does not support invalid auth sources' do
|
167
167
|
context 'with URI options' do
|
168
168
|
let(:credentials) { "#{user}:#{pwd}@" }
|
169
169
|
let(:options) { "?authMechanism=#{auth_mech_string}&authSource=foo" }
|
@@ -199,7 +199,7 @@ describe 'Client authentication options' do
|
|
199
199
|
|
200
200
|
it_behaves_like 'a supported auth mechanism'
|
201
201
|
it_behaves_like 'auth mechanism that uses database or default auth source', 'admin'
|
202
|
-
it_behaves_like 'an auth mechanism that
|
202
|
+
it_behaves_like 'an auth mechanism that does not support auth_mech_properties'
|
203
203
|
end
|
204
204
|
|
205
205
|
context 'with SCRAM-SHA-1 auth mechanism' do
|
@@ -208,7 +208,7 @@ describe 'Client authentication options' do
|
|
208
208
|
|
209
209
|
it_behaves_like 'a supported auth mechanism'
|
210
210
|
it_behaves_like 'auth mechanism that uses database or default auth source', 'admin'
|
211
|
-
it_behaves_like 'an auth mechanism that
|
211
|
+
it_behaves_like 'an auth mechanism that does not support auth_mech_properties'
|
212
212
|
end
|
213
213
|
|
214
214
|
context 'with SCRAM-SHA-256 auth mechanism' do
|
@@ -217,7 +217,7 @@ describe 'Client authentication options' do
|
|
217
217
|
|
218
218
|
it_behaves_like 'a supported auth mechanism'
|
219
219
|
it_behaves_like 'auth mechanism that uses database or default auth source', 'admin'
|
220
|
-
it_behaves_like 'an auth mechanism that
|
220
|
+
it_behaves_like 'an auth mechanism that does not support auth_mech_properties'
|
221
221
|
end
|
222
222
|
|
223
223
|
context 'with GSSAPI auth mechanism' do
|
@@ -227,7 +227,7 @@ describe 'Client authentication options' do
|
|
227
227
|
let(:auth_mech_sym) { :gssapi }
|
228
228
|
|
229
229
|
it_behaves_like 'a supported auth mechanism'
|
230
|
-
it_behaves_like 'an auth mechanism that
|
230
|
+
it_behaves_like 'an auth mechanism that does not support invalid auth sources'
|
231
231
|
|
232
232
|
let(:auth_mech_properties) { { canonicalize_host_name: true, service_name: 'other'} }
|
233
233
|
|
@@ -256,6 +256,43 @@ describe 'Client authentication options' do
|
|
256
256
|
expect(client.options[:auth_mech_properties]).to eq({ 'service_name' => 'mongodb' })
|
257
257
|
end
|
258
258
|
end
|
259
|
+
|
260
|
+
context 'when properties are given but not service name' do
|
261
|
+
context 'with URI options' do
|
262
|
+
let(:credentials) { "#{user}:#{pwd}@" }
|
263
|
+
|
264
|
+
context 'with default auth mech properties' do
|
265
|
+
let(:options) { '?authMechanism=GSSAPI&authMechanismProperties=service_realm:foo' }
|
266
|
+
|
267
|
+
it 'sets service name to mongodb' do
|
268
|
+
expect(client.options[:auth_mech_properties]).to eq(
|
269
|
+
'service_name' => 'mongodb',
|
270
|
+
'service_realm' => 'foo',
|
271
|
+
)
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
context 'with client options' do
|
277
|
+
let(:client_opts) do
|
278
|
+
{
|
279
|
+
auth_mech: :gssapi,
|
280
|
+
user: user,
|
281
|
+
password: pwd,
|
282
|
+
auth_mech_properties: {
|
283
|
+
service_realm: 'foo',
|
284
|
+
}.freeze,
|
285
|
+
}.freeze
|
286
|
+
end
|
287
|
+
|
288
|
+
it 'sets default auth mech properties' do
|
289
|
+
expect(client.options[:auth_mech_properties]).to eq(
|
290
|
+
'service_name' => 'mongodb',
|
291
|
+
'service_realm' => 'foo',
|
292
|
+
)
|
293
|
+
end
|
294
|
+
end
|
295
|
+
end
|
259
296
|
end
|
260
297
|
|
261
298
|
context 'with PLAIN auth mechanism' do
|
@@ -265,7 +302,7 @@ describe 'Client authentication options' do
|
|
265
302
|
it_behaves_like 'a supported auth mechanism'
|
266
303
|
it_behaves_like 'auth mechanism that uses database or default auth source', '$external'
|
267
304
|
it_behaves_like 'an auth mechanism with ssl'
|
268
|
-
it_behaves_like 'an auth mechanism that
|
305
|
+
it_behaves_like 'an auth mechanism that does not support auth_mech_properties'
|
269
306
|
end
|
270
307
|
|
271
308
|
context 'with MONGODB-X509 auth mechanism' do
|
@@ -276,8 +313,8 @@ describe 'Client authentication options' do
|
|
276
313
|
|
277
314
|
it_behaves_like 'a supported auth mechanism'
|
278
315
|
it_behaves_like 'an auth mechanism with ssl'
|
279
|
-
it_behaves_like 'an auth mechanism that
|
280
|
-
it_behaves_like 'an auth mechanism that
|
316
|
+
it_behaves_like 'an auth mechanism that does not support auth_mech_properties'
|
317
|
+
it_behaves_like 'an auth mechanism that does not support invalid auth sources'
|
281
318
|
|
282
319
|
context 'with URI options' do
|
283
320
|
let(:credentials) { "#{user}@" }
|
@@ -402,35 +439,62 @@ describe 'Client authentication options' do
|
|
402
439
|
{
|
403
440
|
service_name: service_name,
|
404
441
|
canonicalize_host_name: canonicalize_host_name,
|
405
|
-
service_realm: service_realm
|
406
|
-
}
|
442
|
+
service_realm: service_realm,
|
443
|
+
}.freeze
|
407
444
|
end
|
408
445
|
|
409
|
-
|
410
|
-
let(:options) do
|
411
|
-
"?authMechanismProperties=SERVICE_NAME:#{service_name}," +
|
412
|
-
"CANONICALIZE_HOST_NAME:#{canonicalize_host_name}," +
|
413
|
-
"SERVICE_REALM:#{service_realm}"
|
414
|
-
end
|
415
|
-
|
446
|
+
shared_examples 'correctly sets auth mechanism properties on the client' do
|
416
447
|
it 'correctly sets auth mechanism properties on the client' do
|
417
|
-
expect(client.options[:auth_mech_properties]).to eq(
|
448
|
+
expect(client.options[:auth_mech_properties]).to eq(
|
418
449
|
'service_name' => service_name,
|
419
450
|
'canonicalize_host_name' => canonicalize_host_name,
|
420
|
-
'service_realm' => service_realm
|
421
|
-
|
451
|
+
'service_realm' => service_realm,
|
452
|
+
)
|
453
|
+
end
|
454
|
+
end
|
455
|
+
|
456
|
+
context 'with URI options' do
|
457
|
+
let(:options) do
|
458
|
+
"?authMechanismProperties=SERVICE_name:#{service_name}," +
|
459
|
+
"CANONICALIZE_HOST_name:#{canonicalize_host_name}," +
|
460
|
+
"SERVICE_realm:#{service_realm}"
|
422
461
|
end
|
462
|
+
|
463
|
+
include_examples 'correctly sets auth mechanism properties on the client'
|
423
464
|
end
|
424
465
|
|
425
466
|
context 'with client options' do
|
426
|
-
|
467
|
+
[:auth_mech_properties, 'auth_mech_properties'].each do |key|
|
427
468
|
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
'
|
432
|
-
|
433
|
-
|
469
|
+
context "using #{key.class} keys" do
|
470
|
+
let(:client_opts) { { key => auth_mechanism_properties } }
|
471
|
+
|
472
|
+
include_examples 'correctly sets auth mechanism properties on the client'
|
473
|
+
|
474
|
+
context 'when options are given in mixed case' do
|
475
|
+
let(:auth_mechanism_properties) do
|
476
|
+
{
|
477
|
+
service_NAME: service_name,
|
478
|
+
canonicalize_host_NAME: canonicalize_host_name,
|
479
|
+
service_REALM: service_realm,
|
480
|
+
}.freeze
|
481
|
+
end
|
482
|
+
|
483
|
+
context 'using URI and options' do
|
484
|
+
|
485
|
+
let(:client) { new_local_client_nmio(uri, client_opts) }
|
486
|
+
|
487
|
+
include_examples 'correctly sets auth mechanism properties on the client'
|
488
|
+
end
|
489
|
+
|
490
|
+
context 'using host and options' do
|
491
|
+
|
492
|
+
let(:client) { new_local_client_nmio(['localhost'], client_opts) }
|
493
|
+
|
494
|
+
include_examples 'correctly sets auth mechanism properties on the client'
|
495
|
+
end
|
496
|
+
end
|
497
|
+
end
|
434
498
|
end
|
435
499
|
end
|
436
500
|
end
|
@@ -162,15 +162,19 @@ describe 'Bulk writes with auto-encryption enabled' do
|
|
162
162
|
context 'when one operation is larger than 16MiB' do
|
163
163
|
let(:requests) do
|
164
164
|
[
|
165
|
-
{ update_one: { filter: { _id: 1 }, update: { ssn: 'a' * (Mongo::Server::ConnectionBase::DEFAULT_MAX_BSON_OBJECT_SIZE
|
165
|
+
{ update_one: { filter: { _id: 1 }, update: { ssn: 'a' * (Mongo::Server::ConnectionBase::DEFAULT_MAX_BSON_OBJECT_SIZE) } } },
|
166
166
|
{ update_one: { filter: { _id: 2 }, update: { ssn: 'a' * size_limit } } },
|
167
167
|
]
|
168
168
|
end
|
169
169
|
|
170
|
+
before do
|
171
|
+
expect(requests.first.to_bson.length).to be > Mongo::Server::ConnectionBase::DEFAULT_MAX_BSON_OBJECT_SIZE
|
172
|
+
end
|
173
|
+
|
170
174
|
it 'raises an exception' do
|
171
175
|
expect do
|
172
176
|
bulk_write.execute
|
173
|
-
end.to raise_error(Mongo::Error::MaxBSONSize, /maximum allowed size
|
177
|
+
end.to raise_error(Mongo::Error::MaxBSONSize, /The document exceeds maximum allowed BSON object size after serialization/)
|
174
178
|
end
|
175
179
|
end
|
176
180
|
end
|
@@ -135,8 +135,8 @@ describe 'Command monitoring' do
|
|
135
135
|
|
136
136
|
subscriber.clear_events!
|
137
137
|
expect do
|
138
|
-
command.execute(server,
|
139
|
-
end.to raise_error(Mongo::Error::OperationFailure, /Not enough data-bearing nodes
|
138
|
+
command.execute(server, context: Mongo::Operation::Context.new(session: session))
|
139
|
+
end.to raise_error(Mongo::Error::OperationFailure, /100\b.*Not enough data-bearing nodes/)
|
140
140
|
|
141
141
|
expect(subscriber.started_events.length).to eq(1)
|
142
142
|
event = subscriber.started_events.first
|
@@ -4,7 +4,9 @@ describe 'Connection pool populator integration' do
|
|
4
4
|
let(:options) { {} }
|
5
5
|
|
6
6
|
let(:server_options) do
|
7
|
-
|
7
|
+
Mongo::Utils.shallow_symbolize_keys(Mongo::Client.canonicalize_ruby_options(
|
8
|
+
SpecConfig.instance.all_test_options,
|
9
|
+
)).update(options)
|
8
10
|
end
|
9
11
|
|
10
12
|
let(:address) do
|
@@ -269,7 +271,7 @@ describe 'Connection pool populator integration' do
|
|
269
271
|
end
|
270
272
|
|
271
273
|
describe 'when forking is enabled' do
|
272
|
-
|
274
|
+
require_mri
|
273
275
|
|
274
276
|
context 'when min size is provided' do
|
275
277
|
min_server_version '2.8'
|
@@ -232,6 +232,8 @@ describe 'Connections' do
|
|
232
232
|
end
|
233
233
|
|
234
234
|
describe 'wire protocol version range update' do
|
235
|
+
require_no_required_api_version
|
236
|
+
|
235
237
|
# 3.2 wire protocol is 4.
|
236
238
|
# Wire protocol < 2 means only scram auth is available,
|
237
239
|
# which is not supported by modern mongos.
|
@@ -3,7 +3,17 @@ require 'spec_helper'
|
|
3
3
|
describe 'Cursor reaping' do
|
4
4
|
# JRuby does reap cursors but GC.start does not force GC to run like it does
|
5
5
|
# in MRI, I don't currently know how to force GC to run in JRuby
|
6
|
-
|
6
|
+
require_mri
|
7
|
+
|
8
|
+
around(:all) do |example|
|
9
|
+
saved_level = Mongo::Logger.logger.level
|
10
|
+
Mongo::Logger.logger.level = Logger::DEBUG
|
11
|
+
begin
|
12
|
+
example.run
|
13
|
+
ensure
|
14
|
+
Mongo::Logger.logger.level = saved_level
|
15
|
+
end
|
16
|
+
end
|
7
17
|
|
8
18
|
let(:subscriber) { EventSubscriber.new }
|
9
19
|
|
@@ -37,37 +47,63 @@ describe 'Cursor reaping' do
|
|
37
47
|
expect(events).to be_empty
|
38
48
|
end
|
39
49
|
|
50
|
+
def abandon_cursors
|
51
|
+
[].tap do |cursor_ids|
|
52
|
+
# scopes are weird, having this result in a let block
|
53
|
+
# makes it not garbage collected
|
54
|
+
10.times do
|
55
|
+
scope = collection.find.batch_size(2).no_cursor_timeout
|
56
|
+
|
57
|
+
# there is no API for retrieving the cursor
|
58
|
+
scope.each.first
|
59
|
+
# and keep the first cursor
|
60
|
+
cursor_ids << scope.instance_variable_get('@cursor').id
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
40
65
|
# this let block is a kludge to avoid copy pasting all of this code
|
41
66
|
let(:cursor_id_and_kill_event) do
|
42
67
|
expect(Mongo::Operation::KillCursors).to receive(:new).at_least(:once).and_call_original
|
43
68
|
|
44
|
-
|
45
|
-
|
46
|
-
# scopes are weird, having this result in a let block
|
47
|
-
# makes it not garbage collected
|
48
|
-
2.times do
|
49
|
-
scope = collection.find.batch_size(2).no_cursor_timeout
|
69
|
+
cursor_ids = abandon_cursors
|
50
70
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
cursor_id ||= scope.instance_variable_get('@cursor').id
|
71
|
+
cursor_ids.each do |cursor_id|
|
72
|
+
expect(cursor_id).to be_a(Integer)
|
73
|
+
expect(cursor_id > 0).to be true
|
55
74
|
end
|
56
75
|
|
57
|
-
expect(cursor_id).to be_a(Integer)
|
58
|
-
expect(cursor_id > 0).to be true
|
59
|
-
|
60
76
|
GC.start
|
77
|
+
sleep 1
|
61
78
|
|
62
79
|
# force periodic executor to run because its frequency is not configurable
|
63
80
|
client.cluster.instance_variable_get('@periodic_executor').execute
|
64
81
|
|
65
82
|
started_event = subscriber.started_events.detect do |event|
|
66
|
-
event.command['killCursors']
|
67
|
-
|
83
|
+
event.command['killCursors']
|
84
|
+
end
|
85
|
+
started_event.should_not be nil
|
86
|
+
|
87
|
+
found_cursor_id = nil
|
88
|
+
started_event = subscriber.started_events.detect do |event|
|
89
|
+
found = false
|
90
|
+
if event.command['killCursors']
|
91
|
+
cursor_ids.each do |cursor_id|
|
92
|
+
if event.command['cursors'].map { |c| Utils.int64_value(c) }.include?(cursor_id)
|
93
|
+
found_cursor_id = cursor_id
|
94
|
+
found = true
|
95
|
+
break
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
found
|
100
|
+
end
|
101
|
+
|
102
|
+
if started_event.nil?
|
103
|
+
p subscriber.started_events
|
68
104
|
end
|
69
105
|
|
70
|
-
|
106
|
+
started_event.should_not be nil
|
71
107
|
|
72
108
|
succeeded_event = subscriber.succeeded_events.detect do |event|
|
73
109
|
event.command_name == 'killCursors' && event.request_id == started_event.request_id
|
@@ -77,7 +113,7 @@ describe 'Cursor reaping' do
|
|
77
113
|
|
78
114
|
expect(succeeded_event.reply['ok']).to eq 1
|
79
115
|
|
80
|
-
[
|
116
|
+
[found_cursor_id, succeeded_event]
|
81
117
|
end
|
82
118
|
|
83
119
|
it 'is reaped' do
|
@@ -4,7 +4,14 @@ describe 'aggregation examples in Ruby' do
|
|
4
4
|
before(:all) do
|
5
5
|
# In sharded clusters we need to ensure the database exists before running
|
6
6
|
# the tests in this file.
|
7
|
-
|
7
|
+
begin
|
8
|
+
ClientRegistry.instance.global_client('authorized')['_placeholder'].create
|
9
|
+
rescue Mongo::Error::OperationFailure => e
|
10
|
+
# Collection already exists
|
11
|
+
if e.code != 48
|
12
|
+
raise
|
13
|
+
end
|
14
|
+
end
|
8
15
|
end
|
9
16
|
|
10
17
|
let(:client) do
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe 'fork reconnect' do
|
4
4
|
require_fork
|
5
|
-
|
5
|
+
require_mri
|
6
6
|
|
7
7
|
# On multi-shard sharded clusters a succeeding write request does not
|
8
8
|
# guarantee that the next operation will succeed (since it could be sent to
|
@@ -18,7 +18,10 @@ describe 'fork reconnect' do
|
|
18
18
|
|
19
19
|
describe 'monitoring connection' do
|
20
20
|
let(:monitor) do
|
21
|
-
Mongo::Server::Monitor.new(server, [], Mongo::Monitoring.new, server.options
|
21
|
+
Mongo::Server::Monitor.new(server, [], Mongo::Monitoring.new, server.options.merge(
|
22
|
+
app_metadata: client.cluster.monitor_app_metadata,
|
23
|
+
push_monitor_app_metadata: client.cluster.push_monitor_app_metadata,
|
24
|
+
))
|
22
25
|
end
|
23
26
|
|
24
27
|
it 'reconnects' do
|
@@ -139,5 +142,60 @@ describe 'fork reconnect' do
|
|
139
142
|
# performed by the child is recovered from.
|
140
143
|
client['foo'].find(test: 1)
|
141
144
|
end
|
145
|
+
|
146
|
+
# Test from Driver Sessions Spec
|
147
|
+
# * Create ClientSession
|
148
|
+
# * Record its lsid
|
149
|
+
# * Delete it (so the lsid is pushed into the pool)
|
150
|
+
# * Fork
|
151
|
+
# * In the parent, create a ClientSession and assert its lsid is the same.
|
152
|
+
# * In the child, create a ClientSession and assert its lsid is different.
|
153
|
+
describe 'session pool' do
|
154
|
+
it 'is cleared after fork' do
|
155
|
+
session = client.get_session
|
156
|
+
parent_lsid = session.session_id
|
157
|
+
session.end_session
|
158
|
+
if pid = fork
|
159
|
+
pid, status = Process.wait2(pid)
|
160
|
+
status.exitstatus.should == 0
|
161
|
+
else
|
162
|
+
Utils.wrap_forked_child do
|
163
|
+
client.reconnect
|
164
|
+
child_session = client.get_session
|
165
|
+
child_lsid = child_session.session_id
|
166
|
+
expect(child_lsid).not_to eq(parent_lsid)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
expect(client.get_session.session_id).to eq(parent_lsid)
|
171
|
+
end
|
172
|
+
|
173
|
+
# Test from Driver Sessions Spec
|
174
|
+
# * Create ClientSession
|
175
|
+
# * Record its lsid
|
176
|
+
# * Fork
|
177
|
+
# * In the parent, return the ClientSession to the pool, create a new ClientSession, and assert its lsid is the same.
|
178
|
+
# * In the child, return the ClientSession to the pool, create a new ClientSession, and assert its lsid is different.
|
179
|
+
it 'does not return parent process sessions to child process pool' do
|
180
|
+
session = client.get_session
|
181
|
+
parent_lsid = session.session_id
|
182
|
+
|
183
|
+
if pid = fork
|
184
|
+
pid, status = Process.wait2(pid)
|
185
|
+
status.exitstatus.should == 0
|
186
|
+
else
|
187
|
+
Utils.wrap_forked_child do
|
188
|
+
client.reconnect
|
189
|
+
session.end_session
|
190
|
+
child_session = client.get_session
|
191
|
+
child_lsid = child_session.session_id
|
192
|
+
expect(child_lsid).not_to eq(parent_lsid)
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
session.end_session
|
197
|
+
expect(client.get_session.session_id).to eq(parent_lsid)
|
198
|
+
end
|
199
|
+
end
|
142
200
|
end
|
143
201
|
end
|