mongo 2.13.0.beta1 → 2.14.0
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 +0 -0
- data.tar.gz.sig +1 -5
- data/Rakefile +50 -9
- data/lib/mongo.rb +13 -2
- 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/request.rb +31 -5
- data/lib/mongo/bulk_write.rb +18 -0
- data/lib/mongo/caching_cursor.rb +74 -0
- data/lib/mongo/client.rb +238 -31
- data/lib/mongo/cluster.rb +56 -20
- data/lib/mongo/cluster/sdam_flow.rb +13 -10
- data/lib/mongo/cluster/topology/replica_set_no_primary.rb +3 -2
- data/lib/mongo/cluster/topology/sharded.rb +1 -1
- data/lib/mongo/cluster/topology/single.rb +2 -2
- data/lib/mongo/collection.rb +66 -24
- data/lib/mongo/collection/view.rb +24 -20
- data/lib/mongo/collection/view/aggregation.rb +25 -4
- data/lib/mongo/collection/view/builder/find_command.rb +38 -18
- data/lib/mongo/collection/view/explainable.rb +27 -8
- data/lib/mongo/collection/view/iterable.rb +72 -12
- data/lib/mongo/collection/view/readable.rb +19 -3
- data/lib/mongo/collection/view/writable.rb +55 -5
- data/lib/mongo/crypt/encryption_io.rb +6 -6
- data/lib/mongo/cursor.rb +16 -3
- data/lib/mongo/database.rb +37 -4
- data/lib/mongo/database/view.rb +18 -3
- data/lib/mongo/distinguishing_semaphore.rb +55 -0
- data/lib/mongo/error.rb +5 -0
- data/lib/mongo/error/invalid_read_concern.rb +28 -0
- data/lib/mongo/error/invalid_server_auth_host.rb +22 -0
- data/lib/mongo/error/invalid_session.rb +2 -1
- data/lib/mongo/error/operation_failure.rb +11 -5
- data/lib/mongo/error/server_certificate_revoked.rb +22 -0
- data/lib/mongo/error/sessions_not_supported.rb +35 -0
- data/lib/mongo/error/unsupported_option.rb +14 -12
- data/lib/mongo/event/base.rb +6 -0
- data/lib/mongo/grid/file.rb +5 -0
- data/lib/mongo/grid/file/chunk.rb +2 -0
- data/lib/mongo/grid/fs_bucket.rb +15 -13
- data/lib/mongo/grid/stream/write.rb +9 -3
- data/lib/mongo/index/view.rb +3 -0
- data/lib/mongo/lint.rb +2 -1
- data/lib/mongo/logger.rb +3 -3
- data/lib/mongo/monitoring.rb +38 -0
- data/lib/mongo/monitoring/command_log_subscriber.rb +10 -2
- data/lib/mongo/monitoring/event/command_failed.rb +11 -0
- data/lib/mongo/monitoring/event/command_started.rb +37 -2
- data/lib/mongo/monitoring/event/command_succeeded.rb +11 -0
- data/lib/mongo/monitoring/event/server_closed.rb +1 -1
- data/lib/mongo/monitoring/event/server_description_changed.rb +27 -4
- data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +9 -2
- data/lib/mongo/monitoring/event/server_heartbeat_started.rb +9 -2
- data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +9 -2
- data/lib/mongo/monitoring/event/server_opening.rb +1 -1
- data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
- data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
- data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
- data/lib/mongo/monitoring/publishable.rb +6 -3
- data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +9 -1
- data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
- data/lib/mongo/operation.rb +2 -0
- data/lib/mongo/operation/aggregate/result.rb +9 -8
- data/lib/mongo/operation/collections_info/command.rb +5 -0
- data/lib/mongo/operation/collections_info/result.rb +18 -1
- 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/result.rb +5 -0
- data/lib/mongo/operation/insert/bulk_result.rb +5 -0
- data/lib/mongo/operation/insert/result.rb +5 -0
- data/lib/mongo/operation/list_collections/result.rb +5 -0
- 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 +35 -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/collections_info_or_list_collections.rb +2 -0
- data/lib/mongo/operation/shared/executable.rb +1 -0
- 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/result/aggregatable.rb +1 -0
- data/lib/mongo/operation/shared/sessions_supported.rb +1 -0
- data/lib/mongo/operation/shared/specifiable.rb +1 -0
- data/lib/mongo/operation/shared/write.rb +1 -0
- 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/message.rb +47 -10
- data/lib/mongo/protocol/msg.rb +34 -1
- data/lib/mongo/protocol/query.rb +36 -0
- data/lib/mongo/protocol/serializers.rb +5 -2
- data/lib/mongo/query_cache.rb +242 -0
- data/lib/mongo/retryable.rb +8 -1
- data/lib/mongo/server.rb +15 -4
- data/lib/mongo/server/app_metadata.rb +27 -3
- data/lib/mongo/server/connection.rb +4 -4
- data/lib/mongo/server/connection_base.rb +38 -12
- data/lib/mongo/server/connection_common.rb +2 -2
- data/lib/mongo/server/connection_pool.rb +3 -0
- data/lib/mongo/server/description.rb +13 -1
- data/lib/mongo/server/monitor.rb +76 -44
- data/lib/mongo/server/monitor/connection.rb +57 -9
- data/lib/mongo/server/pending_connection.rb +14 -4
- data/lib/mongo/server/push_monitor.rb +173 -0
- data/{spec/runners/transactions/context.rb → lib/mongo/server/push_monitor/connection.rb} +9 -14
- data/lib/mongo/server_selector.rb +0 -1
- data/lib/mongo/server_selector/base.rb +583 -1
- data/lib/mongo/server_selector/nearest.rb +1 -6
- data/lib/mongo/server_selector/primary.rb +1 -6
- data/lib/mongo/server_selector/primary_preferred.rb +7 -10
- data/lib/mongo/server_selector/secondary.rb +1 -6
- data/lib/mongo/server_selector/secondary_preferred.rb +1 -7
- data/lib/mongo/session.rb +7 -1
- data/lib/mongo/socket.rb +26 -12
- data/lib/mongo/socket/ocsp_cache.rb +97 -0
- data/lib/mongo/socket/ocsp_verifier.rb +368 -0
- data/lib/mongo/socket/ssl.rb +46 -25
- data/lib/mongo/socket/tcp.rb +1 -1
- data/lib/mongo/srv/monitor.rb +7 -13
- data/lib/mongo/srv/resolver.rb +14 -10
- data/lib/mongo/timeout.rb +2 -0
- data/lib/mongo/topology_version.rb +9 -0
- data/lib/mongo/uri.rb +21 -390
- data/lib/mongo/uri/options_mapper.rb +582 -0
- data/lib/mongo/uri/srv_protocol.rb +3 -2
- data/lib/mongo/utils.rb +73 -0
- data/lib/mongo/version.rb +1 -1
- data/spec/NOTES.aws-auth.md +12 -7
- data/spec/README.aws-auth.md +2 -2
- data/spec/README.md +63 -1
- data/spec/integration/awaited_ismaster_spec.rb +28 -0
- data/spec/integration/bson_symbol_spec.rb +4 -2
- data/spec/integration/bulk_write_spec.rb +67 -0
- data/spec/integration/change_stream_examples_spec.rb +6 -2
- data/spec/integration/change_stream_spec.rb +1 -1
- data/spec/integration/check_clean_slate_spec.rb +16 -0
- data/spec/integration/client_authentication_options_spec.rb +92 -28
- data/spec/integration/client_construction_spec.rb +1 -0
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -5
- data/spec/integration/connect_single_rs_name_spec.rb +5 -2
- data/spec/integration/connection_pool_populator_spec.rb +4 -2
- data/spec/integration/connection_spec.rb +7 -4
- data/spec/integration/crud_spec.rb +4 -4
- data/spec/integration/cursor_reaping_spec.rb +54 -18
- data/spec/integration/docs_examples_spec.rb +6 -0
- data/spec/integration/fork_reconnect_spec.rb +56 -1
- data/spec/integration/grid_fs_bucket_spec.rb +48 -0
- data/spec/integration/heartbeat_events_spec.rb +4 -23
- 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 +334 -0
- data/spec/integration/query_cache_spec.rb +1045 -0
- data/spec/integration/query_cache_transactions_spec.rb +190 -0
- data/spec/integration/read_concern_spec.rb +1 -1
- data/spec/integration/retryable_errors_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 +4 -2
- data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +3 -3
- data/spec/integration/retryable_writes/shared/performs_no_retries.rb +2 -2
- data/spec/integration/sdam_error_handling_spec.rb +122 -15
- data/spec/integration/sdam_events_spec.rb +80 -6
- data/spec/integration/sdam_prose_spec.rb +64 -0
- data/spec/integration/server_monitor_spec.rb +25 -1
- data/spec/integration/server_selection_spec.rb +36 -0
- data/spec/integration/size_limit_spec.rb +23 -5
- data/spec/integration/srv_monitoring_spec.rb +38 -3
- data/spec/integration/srv_spec.rb +56 -0
- data/spec/integration/ssl_uri_options_spec.rb +2 -2
- data/spec/integration/transactions_examples_spec.rb +17 -7
- data/spec/integration/zlib_compression_spec.rb +25 -0
- data/spec/lite_spec_helper.rb +20 -9
- data/spec/mongo/address_spec.rb +1 -1
- data/spec/mongo/auth/aws/request_region_spec.rb +42 -0
- data/spec/mongo/auth/aws/request_spec.rb +76 -0
- data/spec/mongo/auth/scram_spec.rb +1 -1
- data/spec/mongo/auth/user_spec.rb +1 -1
- 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 +386 -3
- data/spec/mongo/client_encryption_spec.rb +16 -10
- data/spec/mongo/client_spec.rb +85 -3
- data/spec/mongo/cluster/topology/replica_set_spec.rb +53 -10
- data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
- data/spec/mongo/cluster/topology/single_spec.rb +19 -8
- 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 +37 -35
- data/spec/mongo/collection/view/change_stream_resume_spec.rb +7 -7
- 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 +36 -0
- data/spec/mongo/collection_spec.rb +572 -0
- 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 +353 -8
- data/spec/mongo/distinguishing_semaphore_spec.rb +63 -0
- data/spec/mongo/error/no_server_available_spec.rb +1 -1
- data/spec/mongo/error/operation_failure_spec.rb +40 -0
- data/spec/mongo/index/view_spec.rb +148 -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_description_changed_spec.rb +1 -4
- 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/delete/op_msg_spec.rb +3 -3
- 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/read_preference_op_msg_spec.rb +1 -1
- data/spec/mongo/operation/update/command_spec.rb +2 -2
- data/spec/mongo/operation/update/op_msg_spec.rb +3 -3
- data/spec/mongo/protocol/msg_spec.rb +10 -0
- data/spec/mongo/query_cache_spec.rb +280 -0
- data/spec/mongo/semaphore_spec.rb +51 -0
- data/spec/mongo/server/app_metadata_shared.rb +82 -2
- data/spec/mongo/server/connection_auth_spec.rb +2 -2
- data/spec/mongo/server/connection_pool_spec.rb +7 -3
- data/spec/mongo/server/connection_spec.rb +15 -8
- data/spec/mongo/server/description_spec.rb +18 -0
- data/spec/mongo/server_selector/nearest_spec.rb +23 -23
- data/spec/mongo/server_selector/primary_preferred_spec.rb +26 -26
- data/spec/mongo/server_selector/primary_spec.rb +9 -9
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +22 -22
- data/spec/mongo/server_selector/secondary_spec.rb +18 -18
- data/spec/mongo/server_selector_spec.rb +6 -6
- data/spec/mongo/session_spec.rb +35 -0
- data/spec/mongo/socket/ssl_spec.rb +4 -4
- data/spec/mongo/socket_spec.rb +1 -1
- 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 +3 -3
- data/spec/runners/cmap.rb +1 -1
- data/spec/runners/command_monitoring.rb +3 -34
- data/spec/runners/connection_string.rb +35 -124
- data/spec/runners/crud/context.rb +9 -5
- data/spec/runners/crud/operation.rb +59 -27
- data/spec/runners/crud/spec.rb +0 -8
- data/spec/runners/crud/test.rb +1 -1
- data/spec/runners/crud/test_base.rb +0 -19
- data/spec/runners/sdam.rb +2 -2
- data/spec/runners/server_selection.rb +242 -28
- data/spec/runners/transactions.rb +12 -12
- data/spec/runners/transactions/operation.rb +151 -25
- data/spec/runners/transactions/test.rb +62 -18
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/constraints.rb +303 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
- data/spec/spec_helper.rb +3 -1
- data/spec/spec_tests/cmap_spec.rb +7 -3
- data/spec/spec_tests/command_monitoring_spec.rb +22 -12
- data/spec/spec_tests/crud_spec.rb +1 -1
- data/spec/spec_tests/data/change_streams/change-streams-errors.yml +4 -9
- data/spec/spec_tests/data/change_streams/change-streams-resume-whitelist.yml +66 -0
- data/spec/spec_tests/data/change_streams/change-streams.yml +0 -1
- 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/max_staleness/ReplicaSetNoPrimary/MaxStalenessTooSmall.yml +15 -0
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml +4 -3
- data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +1 -0
- data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +96 -0
- data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +88 -0
- data/spec/spec_tests/data/sdam_integration/find-network-error.yml +83 -0
- data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +116 -0
- data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +86 -0
- data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +115 -0
- data/spec/spec_tests/data/sdam_integration/isMaster-command-error.yml +168 -0
- data/spec/spec_tests/data/sdam_integration/isMaster-network-error.yml +162 -0
- data/spec/spec_tests/data/sdam_integration/isMaster-timeout.yml +229 -0
- data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +87 -0
- 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/uri_options/auth-options.yml +25 -0
- data/spec/spec_tests/data/uri_options/compression-options.yml +6 -3
- 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/dns_seedlist_discovery_spec.rb +9 -1
- data/spec/spec_tests/max_staleness_spec.rb +4 -142
- data/spec/spec_tests/retryable_reads_spec.rb +2 -2
- data/spec/spec_tests/sdam_integration_spec.rb +13 -0
- data/spec/spec_tests/sdam_monitoring_spec.rb +1 -2
- data/spec/spec_tests/server_selection_spec.rb +4 -116
- data/spec/spec_tests/uri_options_spec.rb +31 -33
- data/spec/stress/cleanup_spec.rb +17 -2
- data/spec/stress/connection_pool_stress_spec.rb +10 -8
- 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.rb +1 -0
- data/spec/support/client_registry_macros.rb +11 -2
- data/spec/support/cluster_config.rb +4 -0
- data/spec/support/common_shortcuts.rb +45 -0
- data/spec/support/constraints.rb +6 -253
- data/spec/support/event_subscriber.rb +123 -33
- data/spec/support/keyword_struct.rb +26 -0
- 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/server_selector.rb +13 -1
- data/spec/support/spec_config.rb +60 -13
- data/spec/support/spec_setup.rb +1 -1
- data/spec/support/utils.rb +84 -1
- metadata +1027 -937
- metadata.gz.sig +0 -0
- data/lib/mongo/server_selector/selectable.rb +0 -560
- data/spec/runners/sdam_monitoring.rb +0 -89
- data/spec/support/lite_constraints.rb +0 -141
@@ -2,7 +2,7 @@ require 'lite_spec_helper'
|
|
2
2
|
|
3
3
|
require 'runners/connection_string'
|
4
4
|
|
5
|
-
describe '
|
5
|
+
describe 'URI options' do
|
6
6
|
include Mongo::ConnectionString
|
7
7
|
|
8
8
|
# Since the tests issue global assertions on Mongo::Logger,
|
@@ -22,39 +22,23 @@ describe 'Uri Options' do
|
|
22
22
|
require_mongo_kerberos
|
23
23
|
end
|
24
24
|
|
25
|
-
|
25
|
+
if test.valid?
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
test.uri
|
41
|
-
}.to raise_exception(Mongo::Error::InvalidURI)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
context 'when the uri should not warn', if: !test.warn? && test.valid? do
|
46
|
-
|
47
|
-
before do
|
48
|
-
expect(Mongo::Logger.logger).not_to receive(:warn)
|
27
|
+
# The warning assertion needs to be first because the test caches
|
28
|
+
# the client instance, and subsequent examples don't instantiate it
|
29
|
+
# again.
|
30
|
+
if test.warn?
|
31
|
+
it 'warns' do
|
32
|
+
expect(Mongo::Logger.logger).to receive(:warn)#.and_call_original
|
33
|
+
expect(test.client).to be_a(Mongo::Client)
|
34
|
+
end
|
35
|
+
else
|
36
|
+
it 'does not warn' do
|
37
|
+
expect(Mongo::Logger.logger).not_to receive(:warn)
|
38
|
+
expect(test.client).to be_a(Mongo::Client)
|
39
|
+
end
|
49
40
|
end
|
50
41
|
|
51
|
-
it 'does not raise an exception or warning' do
|
52
|
-
expect(test.client).to be_a(Mongo::Client)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
context 'when the uri is valid', if: test.valid? do
|
57
|
-
|
58
42
|
if test.hosts
|
59
43
|
it 'creates a client with the correct hosts' do
|
60
44
|
expect(test.client).to have_hosts(test, test.hosts)
|
@@ -65,8 +49,22 @@ describe 'Uri Options' do
|
|
65
49
|
expect(test.client).to match_auth(test)
|
66
50
|
end
|
67
51
|
|
68
|
-
|
69
|
-
|
52
|
+
if test.options
|
53
|
+
it 'creates a client with the correct options' do
|
54
|
+
mapped = Mongo::URI::OptionsMapper.new.ruby_to_smc(test.client.options)
|
55
|
+
expected = Mongo::ConnectionString.adjust_expected_mongo_client_options(
|
56
|
+
test.options,
|
57
|
+
)
|
58
|
+
mapped.should == expected
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
else
|
63
|
+
|
64
|
+
it 'raises an error' do
|
65
|
+
expect{
|
66
|
+
test.uri
|
67
|
+
}.to raise_exception(Mongo::Error::InvalidURI)
|
70
68
|
end
|
71
69
|
end
|
72
70
|
end
|
data/spec/stress/cleanup_spec.rb
CHANGED
@@ -20,17 +20,32 @@ describe 'Cleanup stress test' do
|
|
20
20
|
|
21
21
|
it 'cleans up' do
|
22
22
|
client
|
23
|
+
client.cluster.servers_list.map(&:scan!)
|
24
|
+
|
25
|
+
sleep 1
|
26
|
+
GC.start
|
23
27
|
|
24
28
|
start_resources = resources
|
25
29
|
|
26
|
-
|
30
|
+
500.times do
|
27
31
|
client.close
|
28
32
|
client.reconnect
|
29
33
|
end
|
30
34
|
|
35
|
+
sleep 1
|
36
|
+
GC.start
|
37
|
+
|
31
38
|
end_resources = resources
|
32
39
|
|
33
|
-
|
40
|
+
# There seem to be a temporary file descriptor leak in CI,
|
41
|
+
# where we start with 75 fds and end with 77 fds.
|
42
|
+
# Allow a few to be leaked, run more iterations to ensure the leak
|
43
|
+
# is not a real one.
|
44
|
+
# Sometimes we end with fewer fds than we started with also...
|
45
|
+
end_resources[:open_file_count].should >= start_resources[:open_file_count] - 3
|
46
|
+
end_resources[:open_file_count].should <= start_resources[:open_file_count] + 3
|
47
|
+
|
48
|
+
end_resources[:running_thread_count].should == start_resources[:running_thread_count]
|
34
49
|
end
|
35
50
|
end
|
36
51
|
|
@@ -21,9 +21,9 @@ describe 'Connection pool stress test' do
|
|
21
21
|
[].tap do |threads|
|
22
22
|
thread_count.times do |i|
|
23
23
|
threads << Thread.new do
|
24
|
-
|
24
|
+
100.times do |j|
|
25
25
|
collection.find(a: i+j).to_a
|
26
|
-
sleep 0.
|
26
|
+
sleep 0.1
|
27
27
|
collection.find(a: i+j).to_a
|
28
28
|
end
|
29
29
|
end
|
@@ -132,7 +132,7 @@ describe 'Connection pool stress test' do
|
|
132
132
|
end
|
133
133
|
|
134
134
|
context '25 threads, max pool size 5' do
|
135
|
-
let(:thread_count) {
|
135
|
+
let(:thread_count) { 25 }
|
136
136
|
|
137
137
|
it_behaves_like 'does not raise error'
|
138
138
|
end
|
@@ -183,17 +183,19 @@ describe 'Connection pool stress test' do
|
|
183
183
|
# The populator calls create_and_add_connection, which calls connection.connect!
|
184
184
|
# and raises if an error occurs (eg, an auth error), so in this test we
|
185
185
|
# randomly raise errors on this method.
|
186
|
-
expect(server.pool).to receive(:create_and_add_connection).at_least(:once).and_wrap_original
|
187
|
-
if rand < 0.
|
186
|
+
expect(server.pool).to receive(:create_and_add_connection).at_least(:once).and_wrap_original do |m, *args|
|
187
|
+
if rand < 0.1
|
188
188
|
raise Mongo::Error::SocketError
|
189
189
|
else
|
190
190
|
m.call(*args)
|
191
191
|
end
|
192
|
-
|
192
|
+
end
|
193
193
|
|
194
|
-
|
194
|
+
server.pool.clear(stop_populator: false)
|
195
|
+
|
196
|
+
expect do
|
195
197
|
threads.collect { |t| t.join }
|
196
|
-
|
198
|
+
end.not_to raise_error
|
197
199
|
end
|
198
200
|
end
|
199
201
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIElDCCA3ygAwIBAgIQAf2j627KdciIQ4tyS8+8kTANBgkqhkiG9w0BAQsFADBh
|
3
|
+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
4
|
+
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
|
5
|
+
QTAeFw0xMzAzMDgxMjAwMDBaFw0yMzAzMDgxMjAwMDBaME0xCzAJBgNVBAYTAlVT
|
6
|
+
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxJzAlBgNVBAMTHkRpZ2lDZXJ0IFNIQTIg
|
7
|
+
U2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
8
|
+
ANyuWJBNwcQwFZA1W248ghX1LFy949v/cUP6ZCWA1O4Yok3wZtAKc24RmDYXZK83
|
9
|
+
nf36QYSvx6+M/hpzTc8zl5CilodTgyu5pnVILR1WN3vaMTIa16yrBvSqXUu3R0bd
|
10
|
+
KpPDkC55gIDvEwRqFDu1m5K+wgdlTvza/P96rtxcflUxDOg5B6TXvi/TC2rSsd9f
|
11
|
+
/ld0Uzs1gN2ujkSYs58O09rg1/RrKatEp0tYhG2SS4HD2nOLEpdIkARFdRrdNzGX
|
12
|
+
kujNVA075ME/OV4uuPNcfhCOhkEAjUVmR7ChZc6gqikJTvOX6+guqw9ypzAO+sf0
|
13
|
+
/RR3w6RbKFfCs/mC/bdFWJsCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8C
|
14
|
+
AQAwDgYDVR0PAQH/BAQDAgGGMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYY
|
15
|
+
aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMHsGA1UdHwR0MHIwN6A1oDOGMWh0dHA6
|
16
|
+
Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwN6A1
|
17
|
+
oDOGMWh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RD
|
18
|
+
QS5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
|
19
|
+
d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwHQYDVR0OBBYEFA+AYRyCMWHVLyjnjUY4tCzh
|
20
|
+
xtniMB8GA1UdIwQYMBaAFAPeUDVW0Uy7ZvCj4hsbw5eyPdFVMA0GCSqGSIb3DQEB
|
21
|
+
CwUAA4IBAQAjPt9L0jFCpbZ+QlwaRMxp0Wi0XUvgBCFsS+JtzLHgl4+mUwnNqipl
|
22
|
+
5TlPHoOlblyYoiQm5vuh7ZPHLgLGTUq/sELfeNqzqPlt/yGFUzZgTHbO7Djc1lGA
|
23
|
+
8MXW5dRNJ2Srm8c+cftIl7gzbckTB+6WohsYFfZcTEDts8Ls/3HB40f/1LkAtDdC
|
24
|
+
2iDJ6m6K7hQGrn2iWZiIqBtvLfTyyRRfJs8sjX7tN8Cp1Tm5gr8ZDOo0rwAhaPit
|
25
|
+
c+LJMto4JQtV05od8GiG7S5BNO98pVAdvzr508EIDObtHopYJeS4d60tbvVS3bR0
|
26
|
+
j6tJLp07kzQoH3jOlOrHvdPJbRzeXDLz
|
27
|
+
-----END CERTIFICATE-----
|
28
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
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
|
41
|
+
-----END CERTIFICATE-----
|
@@ -4,8 +4,17 @@ module ClientRegistryMacros
|
|
4
4
|
end
|
5
5
|
|
6
6
|
def new_local_client_nmio(address, options=nil)
|
7
|
-
|
8
|
-
|
7
|
+
# Avoid type converting options.
|
8
|
+
base_options = {monitoring_io: false}
|
9
|
+
if BSON::Document === options || options&.keys&.any? { |key| String === key }
|
10
|
+
base_options = Mongo::Options::Redacted.new(base_options)
|
11
|
+
end
|
12
|
+
options = if options
|
13
|
+
base_options.merge(options)
|
14
|
+
else
|
15
|
+
base_options
|
16
|
+
end
|
17
|
+
new_local_client(address, options)
|
9
18
|
end
|
10
19
|
|
11
20
|
def close_local_clients
|
@@ -38,6 +38,10 @@ class ClusterConfig
|
|
38
38
|
# less than 3.4. This method returns FCV on 3.4+ servers when in single
|
39
39
|
# or RS topologies, and otherwise returns the major.minor server version.
|
40
40
|
def fcv_ish
|
41
|
+
if server_version.nil?
|
42
|
+
raise "Deployment server version not known - check that connection to deployment succeeded"
|
43
|
+
end
|
44
|
+
|
41
45
|
if server_version >= '3.4' && topology != :sharded
|
42
46
|
fcv
|
43
47
|
else
|
@@ -96,6 +96,51 @@ module CommonShortcuts
|
|
96
96
|
end
|
97
97
|
end
|
98
98
|
end
|
99
|
+
|
100
|
+
def clear_ocsp_cache
|
101
|
+
before do
|
102
|
+
Mongo.clear_ocsp_cache
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def with_ocsp_mock(ca_file_path, responder_cert_path, responder_key_path,
|
107
|
+
fault: nil, port: 8100
|
108
|
+
)
|
109
|
+
clear_ocsp_cache
|
110
|
+
|
111
|
+
around do |example|
|
112
|
+
args = [
|
113
|
+
SpecConfig.instance.ocsp_files_dir.join('ocsp_mock.py').to_s,
|
114
|
+
'--ca_file', ca_file_path.to_s,
|
115
|
+
'--ocsp_responder_cert', responder_cert_path.to_s,
|
116
|
+
'--ocsp_responder_key', responder_key_path.to_s,
|
117
|
+
'-p', port.to_s,
|
118
|
+
]
|
119
|
+
if SpecConfig.instance.client_debug?
|
120
|
+
# Use when debugging - tests run faster without -v.
|
121
|
+
args << '-v'
|
122
|
+
end
|
123
|
+
if fault
|
124
|
+
args += ['--fault', fault]
|
125
|
+
end
|
126
|
+
process = ChildProcess.new(*args)
|
127
|
+
|
128
|
+
process.io.inherit!
|
129
|
+
process.start
|
130
|
+
|
131
|
+
begin
|
132
|
+
sleep 0.4
|
133
|
+
example.run
|
134
|
+
ensure
|
135
|
+
if process.exited?
|
136
|
+
raise "Spawned process exited before we stopped it"
|
137
|
+
end
|
138
|
+
|
139
|
+
process.stop
|
140
|
+
process.wait
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
99
144
|
end
|
100
145
|
|
101
146
|
module InstanceMethods
|
data/spec/support/constraints.rb
CHANGED
@@ -1,262 +1,15 @@
|
|
1
1
|
module Constraints
|
2
|
-
def min_server_version(version)
|
3
|
-
unless version =~ /^\d+\.\d+$/
|
4
|
-
raise ArgumentError, "Version can only be major.minor: #{version}"
|
5
|
-
end
|
6
|
-
|
7
|
-
before(:all) do
|
8
|
-
if version > ClusterConfig.instance.server_version
|
9
|
-
skip "Server version #{version} or higher required, we have #{ClusterConfig.instance.server_version}"
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def max_server_version(version)
|
15
|
-
unless version =~ /^\d+\.\d+$/
|
16
|
-
raise ArgumentError, "Version can only be major.minor: #{version}"
|
17
|
-
end
|
18
|
-
|
19
|
-
before(:all) do
|
20
|
-
if version < ClusterConfig.instance.short_server_version
|
21
|
-
skip "Server version #{version} or lower required, we have #{ClusterConfig.instance.server_version}"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def min_server_fcv(version)
|
27
|
-
unless version =~ /^\d+\.\d+$/
|
28
|
-
raise ArgumentError, "FCV can only be major.minor: #{version}"
|
29
|
-
end
|
30
|
-
|
31
|
-
before(:all) do
|
32
|
-
unless ClusterConfig.instance.fcv_ish >= version
|
33
|
-
skip "FCV #{version} or higher required, we have #{ClusterConfig.instance.fcv_ish} (server #{ClusterConfig.instance.server_version})"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def max_server_fcv(version)
|
39
|
-
unless version =~ /^\d+\.\d+$/
|
40
|
-
raise ArgumentError, "Version can only be major.minor: #{version}"
|
41
|
-
end
|
42
|
-
|
43
|
-
before(:all) do
|
44
|
-
if version < ClusterConfig.instance.fcv_ish
|
45
|
-
skip "FCV #{version} or lower required, we have #{ClusterConfig.instance.fcv_ish} (server #{ClusterConfig.instance.server_version})"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def require_topology(*topologies)
|
51
|
-
invalid_topologies = topologies - [:single, :replica_set, :sharded]
|
52
|
-
unless invalid_topologies.empty?
|
53
|
-
raise ArgumentError, "Invalid topologies requested: #{invalid_topologies.join(', ')}"
|
54
|
-
end
|
55
|
-
before(:all) do
|
56
|
-
unless topologies.include?(topology = ClusterConfig.instance.topology)
|
57
|
-
skip "Topology #{topologies.join(' or ')} required, we have #{topology}"
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def max_example_run_time(timeout)
|
63
|
-
around do |example|
|
64
|
-
TimeoutInterrupt.timeout(timeout, TimeoutInterrupt::Error.new("Test execution terminated after #{timeout} seconds")) do
|
65
|
-
example.run
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def require_transaction_support
|
71
|
-
min_server_fcv '4.0'
|
72
|
-
require_topology :replica_set
|
73
|
-
end
|
74
|
-
|
75
|
-
# Fail command fail point was added to mongod in 4.0 and to mongos in 4.2.
|
76
|
-
def require_fail_command
|
77
|
-
min_server_fcv '4.0'
|
78
|
-
|
79
|
-
before(:all) do
|
80
|
-
if ClusterConfig.instance.topology == :sharded
|
81
|
-
unless ClusterConfig.instance.short_server_version >= '4.2'
|
82
|
-
skip 'Test requires failCommand fail point which was added to mongos in 4.2'
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def require_tls
|
89
|
-
before(:all) do
|
90
|
-
unless SpecConfig.instance.ssl?
|
91
|
-
skip "SSL not enabled"
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def require_no_tls
|
97
|
-
before(:all) do
|
98
|
-
if SpecConfig.instance.ssl?
|
99
|
-
skip "SSL enabled"
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
2
|
|
3
|
+
# Some tests hardcode the TLS certificates shipped with the driver's
|
4
|
+
# test suite, and will fail when using TLS connections that use other
|
5
|
+
# certificates.
|
104
6
|
def require_local_tls
|
105
7
|
require_tls
|
106
|
-
end
|
107
|
-
|
108
|
-
def require_no_retry_writes
|
109
|
-
before(:all) do
|
110
|
-
if SpecConfig.instance.retry_writes?
|
111
|
-
skip "Retry writes is enabled"
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
8
|
|
116
|
-
def require_compression
|
117
9
|
before(:all) do
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def require_no_compression
|
125
|
-
before(:all) do
|
126
|
-
if SpecConfig.instance.compressors
|
127
|
-
skip "Compression is enabled"
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
def ruby_version_gte(version)
|
133
|
-
before(:all) do
|
134
|
-
if RUBY_VERSION < version
|
135
|
-
skip "Ruby version #{version} or higher required"
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
def ruby_version_lt(version)
|
141
|
-
before(:all) do
|
142
|
-
if RUBY_VERSION >= version
|
143
|
-
skip "Ruby version less than #{version} required"
|
144
|
-
end
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
def require_auth(*values)
|
149
|
-
before(:all) do
|
150
|
-
if values.any?
|
151
|
-
unless values.include?(ENV['AUTH'])
|
152
|
-
msg = values.map { |v| "AUTH=#{v}" }.join(' or ')
|
153
|
-
skip "This test requires #{msg}"
|
154
|
-
end
|
155
|
-
else
|
156
|
-
unless ENV['AUTH'] == 'auth' || SpecConfig.instance.user || ClusterConfig.instance.auth_enabled?
|
157
|
-
skip "Auth required"
|
158
|
-
end
|
159
|
-
end
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
def require_no_auth
|
164
|
-
before(:all) do
|
165
|
-
if (ENV['AUTH'] && ENV['AUTH'] != 'noauth') || SpecConfig.instance.user || ClusterConfig.instance.auth_enabled?
|
166
|
-
skip "Auth not allowed"
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
def require_x509_auth
|
172
|
-
before(:all) do
|
173
|
-
unless SpecConfig.instance.x509_auth?
|
174
|
-
skip "X.509 auth required"
|
175
|
-
end
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
def require_no_external_user
|
180
|
-
before(:all) do
|
181
|
-
if SpecConfig.instance.external_user?
|
182
|
-
skip "External user configurations are not compatible with this test"
|
183
|
-
end
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
# Can the driver specify a write concern that won't be overridden?
|
188
|
-
# (mongos 4.0+ overrides the write concern)
|
189
|
-
def require_set_write_concern
|
190
|
-
before(:all) do
|
191
|
-
if ClusterConfig.instance.topology == :sharded && ClusterConfig.instance.short_server_version >= '4.0'
|
192
|
-
skip "mongos 4.0+ overrides write concern"
|
193
|
-
end
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
def require_multi_shard
|
198
|
-
before(:all) do
|
199
|
-
if ClusterConfig.instance.topology == :sharded && SpecConfig.instance.addresses.length == 1
|
200
|
-
skip 'Test requires a minimum of two shards if run in sharded topology'
|
201
|
-
end
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
|
-
def require_no_multi_shard
|
206
|
-
before(:all) do
|
207
|
-
if ClusterConfig.instance.topology == :sharded && SpecConfig.instance.addresses.length > 1
|
208
|
-
skip 'Test requires a single shard if run in sharded topology'
|
209
|
-
end
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
def require_wired_tiger
|
214
|
-
before(:all) do
|
215
|
-
if ClusterConfig.instance.storage_engine != :wired_tiger
|
216
|
-
skip 'Test requires WiredTiger storage engine'
|
217
|
-
end
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
def require_wired_tiger_on_36
|
222
|
-
before(:all) do
|
223
|
-
if ClusterConfig.instance.short_server_version >= '3.6'
|
224
|
-
if ClusterConfig.instance.storage_engine != :wired_tiger
|
225
|
-
skip 'Test requires WiredTiger storage engine on 3.6+ servers'
|
226
|
-
end
|
227
|
-
end
|
228
|
-
end
|
229
|
-
end
|
230
|
-
|
231
|
-
def require_mmapv1
|
232
|
-
before(:all) do
|
233
|
-
if ClusterConfig.instance.storage_engine != :mmapv1
|
234
|
-
skip 'Test requires MMAPv1 storage engine'
|
235
|
-
end
|
236
|
-
end
|
237
|
-
end
|
238
|
-
|
239
|
-
def require_enterprise
|
240
|
-
before(:all) do
|
241
|
-
unless ClusterConfig.instance.enterprise?
|
242
|
-
skip 'Test requires enterprise build of MongoDB'
|
243
|
-
end
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
# Integration tests for SRV polling require internet connectivity to
|
248
|
-
# look up SRV records and a sharded cluster configured on default port on
|
249
|
-
# localhost (localhost:27017, localhost:27018).
|
250
|
-
def require_default_port_deployment
|
251
|
-
# Because the DNS records at test1.test.build.10gen.cc point to
|
252
|
-
# localhost:27017 & localhost:27018, the test suite must have been
|
253
|
-
# configured to use these addresses
|
254
|
-
before(:all) do
|
255
|
-
have_default_port = SpecConfig.instance.addresses.any? do |address|
|
256
|
-
%w(127.0.0.1 127.0.0.1:27017 localhost localhost:27017).include?(address)
|
257
|
-
end
|
258
|
-
unless have_default_port
|
259
|
-
skip 'This test requires the test suite to be configured for localhost:27017'
|
10
|
+
# TODO This isn't actually the foolproof check
|
11
|
+
if ENV['OCSP_ALGORITHM']
|
12
|
+
skip 'Driver TLS certificate required, OCSP certificates are not acceptable'
|
260
13
|
end
|
261
14
|
end
|
262
15
|
end
|