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
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'lite_spec_helper'
|
2
|
+
|
3
|
+
describe Mongo::DistinguishingSemaphore do
|
4
|
+
let(:semaphore) do
|
5
|
+
described_class.new
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'waits until signaled' do
|
9
|
+
result = nil
|
10
|
+
|
11
|
+
consumer = Thread.new do
|
12
|
+
result = semaphore.wait(3)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Context switch to start the thread
|
16
|
+
sleep 0.1
|
17
|
+
|
18
|
+
start_time = Time.now
|
19
|
+
semaphore.signal
|
20
|
+
consumer.join
|
21
|
+
|
22
|
+
(Time.now - start_time).should < 1
|
23
|
+
|
24
|
+
result.should be true
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'waits until broadcast' do
|
28
|
+
result = nil
|
29
|
+
|
30
|
+
consumer = Thread.new do
|
31
|
+
result = semaphore.wait(3)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Context switch to start the thread
|
35
|
+
sleep 0.1
|
36
|
+
|
37
|
+
start_time = Time.now
|
38
|
+
semaphore.broadcast
|
39
|
+
consumer.join
|
40
|
+
|
41
|
+
(Time.now - start_time).should < 1
|
42
|
+
|
43
|
+
result.should be true
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'times out' do
|
47
|
+
result = nil
|
48
|
+
|
49
|
+
consumer = Thread.new do
|
50
|
+
result = semaphore.wait(2)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Context switch to start the thread
|
54
|
+
sleep 0.1
|
55
|
+
|
56
|
+
start_time = Time.now
|
57
|
+
consumer.join
|
58
|
+
|
59
|
+
(Time.now - start_time).should > 1
|
60
|
+
|
61
|
+
result.should be false
|
62
|
+
end
|
63
|
+
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
|
@@ -227,6 +227,46 @@ describe Mongo::Error::OperationFailure do
|
|
227
227
|
end
|
228
228
|
end
|
229
229
|
|
230
|
+
context 'when the error code is 43 (CursorNotFound)' do
|
231
|
+
let(:error) { Mongo::Error::OperationFailure.new(nil, result, code: 43, code_name: 'CursorNotFound') }
|
232
|
+
let(:result) do
|
233
|
+
Mongo::Operation::GetMore::Result.new(
|
234
|
+
Mongo::Protocol::Message.new, description)
|
235
|
+
end
|
236
|
+
|
237
|
+
context 'wire protocol < 9' do
|
238
|
+
let(:description) do
|
239
|
+
Mongo::Server::Description.new('',
|
240
|
+
'minWireVersion' => 0,
|
241
|
+
'maxWireVersion' => 8,
|
242
|
+
)
|
243
|
+
end
|
244
|
+
|
245
|
+
it 'returns true' do
|
246
|
+
# CursorNotFound exceptions are resumable even if they don't have
|
247
|
+
# a ResumableChangeStreamError label because the server is not aware
|
248
|
+
# of the cursor id, and thus cannot determine if it is a change stream.
|
249
|
+
expect(error.change_stream_resumable?).to be true
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
context 'wire protocol >= 9' do
|
254
|
+
let(:description) do
|
255
|
+
Mongo::Server::Description.new('',
|
256
|
+
'minWireVersion' => 0,
|
257
|
+
'maxWireVersion' => 9,
|
258
|
+
)
|
259
|
+
end
|
260
|
+
|
261
|
+
it 'returns true' do
|
262
|
+
# CursorNotFound exceptions are resumable even if they don't have
|
263
|
+
# a ResumableChangeStreamError label because the server is not aware
|
264
|
+
# of the cursor id, and thus cannot determine if it is a change stream.
|
265
|
+
expect(error.change_stream_resumable?).to be true
|
266
|
+
end
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
230
270
|
context 'not a getMore response' do
|
231
271
|
let(:result) do
|
232
272
|
Mongo::Operation::Result.new(
|
@@ -261,7 +261,7 @@ describe Mongo::Index::View do
|
|
261
261
|
context 'when commit quorum options are specified' do
|
262
262
|
require_topology :replica_set, :sharded
|
263
263
|
context 'on server versions >= 4.4' do
|
264
|
-
min_server_fcv '4.
|
264
|
+
min_server_fcv '4.4'
|
265
265
|
|
266
266
|
let(:subscriber) { EventSubscriber.new }
|
267
267
|
|
@@ -325,6 +325,81 @@ describe Mongo::Index::View do
|
|
325
325
|
end
|
326
326
|
end
|
327
327
|
|
328
|
+
context 'when hidden is specified' do
|
329
|
+
let(:index) { view.get('with_hidden_1') }
|
330
|
+
|
331
|
+
context 'on server versions <= 3.2' do
|
332
|
+
# DRIVERS-1220 Server versions 3.2 and older do not perform any option
|
333
|
+
# checking on index creation. The server will allow the user to create
|
334
|
+
# the index with the hidden option, but the server does not support this
|
335
|
+
# option and will not use it.
|
336
|
+
max_server_fcv '3.2'
|
337
|
+
|
338
|
+
let!(:result) do
|
339
|
+
view.create_many({ key: { with_hidden: 1 }, hidden: true })
|
340
|
+
end
|
341
|
+
|
342
|
+
it 'returns ok' do
|
343
|
+
expect(result).to be_successful
|
344
|
+
end
|
345
|
+
|
346
|
+
it 'creates an index' do
|
347
|
+
expect(index).to_not be_nil
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
351
|
+
context 'on server versions between 3.4 and 4.2' do
|
352
|
+
max_server_fcv '4.2'
|
353
|
+
min_server_fcv '3.4'
|
354
|
+
|
355
|
+
it 'raises an exception' do
|
356
|
+
expect do
|
357
|
+
view.create_many({ key: { with_hidden: 1 }, hidden: true })
|
358
|
+
end.to raise_error(/The field 'hidden' is not valid for an index specification/)
|
359
|
+
end
|
360
|
+
end
|
361
|
+
|
362
|
+
context 'on server versions >= 4.4' do
|
363
|
+
min_server_fcv '4.4'
|
364
|
+
|
365
|
+
context 'when hidden is true' do
|
366
|
+
let!(:result) do
|
367
|
+
view.create_many({ key: { with_hidden: 1 }, hidden: true })
|
368
|
+
end
|
369
|
+
|
370
|
+
it 'returns ok' do
|
371
|
+
expect(result).to be_successful
|
372
|
+
end
|
373
|
+
|
374
|
+
it 'creates an index' do
|
375
|
+
expect(index).to_not be_nil
|
376
|
+
end
|
377
|
+
|
378
|
+
it 'applies the hidden option to the index' do
|
379
|
+
expect(index['hidden']).to be true
|
380
|
+
end
|
381
|
+
end
|
382
|
+
|
383
|
+
context 'when hidden is false' do
|
384
|
+
let!(:result) do
|
385
|
+
view.create_many({ key: { with_hidden: 1 }, hidden: false })
|
386
|
+
end
|
387
|
+
|
388
|
+
it 'returns ok' do
|
389
|
+
expect(result).to be_successful
|
390
|
+
end
|
391
|
+
|
392
|
+
it 'creates an index' do
|
393
|
+
expect(index).to_not be_nil
|
394
|
+
end
|
395
|
+
|
396
|
+
it 'does not apply the hidden option to the index' do
|
397
|
+
expect(index['hidden']).to be_nil
|
398
|
+
end
|
399
|
+
end
|
400
|
+
end
|
401
|
+
end
|
402
|
+
|
328
403
|
context 'when collation is specified' do
|
329
404
|
min_server_fcv '3.4'
|
330
405
|
|
@@ -773,10 +848,81 @@ describe Mongo::Index::View do
|
|
773
848
|
end
|
774
849
|
end
|
775
850
|
|
851
|
+
context 'when providing hidden option' do
|
852
|
+
let(:index) { view.get('with_hidden_1') }
|
853
|
+
|
854
|
+
context 'on server versions <= 3.2' do
|
855
|
+
# DRIVERS-1220 Server versions 3.2 and older do not perform any option
|
856
|
+
# checking on index creation. The server will allow the user to create
|
857
|
+
# the index with the hidden option, but the server does not support this
|
858
|
+
# option and will not use it.
|
859
|
+
max_server_fcv '3.2'
|
860
|
+
|
861
|
+
let!(:result) do
|
862
|
+
view.create_one({ 'with_hidden' => 1 }, { hidden: true })
|
863
|
+
end
|
864
|
+
|
865
|
+
it 'returns ok' do
|
866
|
+
expect(result).to be_successful
|
867
|
+
end
|
868
|
+
|
869
|
+
it 'creates an index' do
|
870
|
+
expect(index).to_not be_nil
|
871
|
+
end
|
872
|
+
end
|
873
|
+
|
874
|
+
context 'on server versions between 3.4 and 4.2' do
|
875
|
+
max_server_fcv '4.2'
|
876
|
+
min_server_fcv '3.4'
|
877
|
+
|
878
|
+
it 'raises an exception' do
|
879
|
+
expect do
|
880
|
+
view.create_one({ 'with_hidden' => 1 }, { hidden: true })
|
881
|
+
end.to raise_error(/The field 'hidden' is not valid for an index specification/)
|
882
|
+
end
|
883
|
+
end
|
884
|
+
|
885
|
+
context 'on server versions >= 4.4' do
|
886
|
+
min_server_fcv '4.4'
|
887
|
+
|
888
|
+
context 'when hidden is true' do
|
889
|
+
let!(:result) { view.create_one({ 'with_hidden' => 1 }, { hidden: true }) }
|
890
|
+
|
891
|
+
it 'returns ok' do
|
892
|
+
expect(result).to be_successful
|
893
|
+
end
|
894
|
+
|
895
|
+
it 'creates an index' do
|
896
|
+
expect(index).to_not be_nil
|
897
|
+
end
|
898
|
+
|
899
|
+
it 'applies the hidden option to the index' do
|
900
|
+
expect(index['hidden']).to be true
|
901
|
+
end
|
902
|
+
end
|
903
|
+
|
904
|
+
context 'when hidden is false' do
|
905
|
+
let!(:result) { view.create_one({ 'with_hidden' => 1 }, { hidden: false }) }
|
906
|
+
|
907
|
+
it 'returns ok' do
|
908
|
+
expect(result).to be_successful
|
909
|
+
end
|
910
|
+
|
911
|
+
it 'creates an index' do
|
912
|
+
expect(index).to_not be_nil
|
913
|
+
end
|
914
|
+
|
915
|
+
it 'does not apply the hidden option to the index' do
|
916
|
+
expect(index['hidden']).to be_nil
|
917
|
+
end
|
918
|
+
end
|
919
|
+
end
|
920
|
+
end
|
921
|
+
|
776
922
|
context 'when providing commit_quorum option' do
|
777
923
|
require_topology :replica_set, :sharded
|
778
924
|
context 'on server versions >= 4.4' do
|
779
|
-
min_server_fcv '4.
|
925
|
+
min_server_fcv '4.4'
|
780
926
|
|
781
927
|
let(:subscriber) { EventSubscriber.new }
|
782
928
|
|
data/spec/mongo/logger_spec.rb
CHANGED
@@ -6,6 +6,16 @@ describe Mongo::Logger do
|
|
6
6
|
described_class.logger
|
7
7
|
end
|
8
8
|
|
9
|
+
around do |example|
|
10
|
+
saved_logger = Mongo::Logger.logger
|
11
|
+
|
12
|
+
begin
|
13
|
+
example.run
|
14
|
+
ensure
|
15
|
+
Mongo::Logger.logger = saved_logger
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
9
19
|
describe '.logger' do
|
10
20
|
|
11
21
|
context 'when no logger has been set' do
|
@@ -18,25 +28,21 @@ describe Mongo::Logger do
|
|
18
28
|
Mongo::Logger.logger = nil
|
19
29
|
end
|
20
30
|
|
21
|
-
after do
|
22
|
-
Mongo::Logger.logger = test_logger
|
23
|
-
end
|
24
|
-
|
25
31
|
it 'returns the default logger' do
|
26
|
-
expect(logger.level).to eq(Logger::
|
32
|
+
expect(logger.level).to eq(Logger::INFO)
|
27
33
|
end
|
28
34
|
end
|
29
35
|
|
30
36
|
context 'when a logger has been set' do
|
31
37
|
|
32
38
|
let(:info) do
|
33
|
-
Logger.new(
|
39
|
+
Logger.new(STDOUT).tap do |log|
|
34
40
|
log.level = Logger::INFO
|
35
41
|
end
|
36
42
|
end
|
37
43
|
|
38
44
|
let(:debug) do
|
39
|
-
Logger.new(
|
45
|
+
Logger.new(STDOUT).tap do |log|
|
40
46
|
log.level = Logger::DEBUG
|
41
47
|
end
|
42
48
|
end
|
@@ -45,10 +51,6 @@ describe Mongo::Logger do
|
|
45
51
|
described_class.logger = debug
|
46
52
|
end
|
47
53
|
|
48
|
-
after do
|
49
|
-
described_class.logger = info
|
50
|
-
end
|
51
|
-
|
52
54
|
it 'returns the provided logger' do
|
53
55
|
expect(logger.level).to eq(Logger::DEBUG)
|
54
56
|
end
|
@@ -27,12 +27,9 @@ describe Mongo::Monitoring::Event::ServerDescriptionChanged do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
describe '#summary' do
|
30
|
-
skip_if_linting
|
31
30
|
|
32
31
|
it 'renders correctly' do
|
33
|
-
expect(
|
34
|
-
'127.0.0.1:27017' => Mongo::Server::Description.new(Mongo::Address.new('127.0.0.1:27017'))})
|
35
|
-
expect(event.summary).to eq("#<ServerDescriptionChanged address=127.0.0.1:27017 topology=Unknown[127.0.0.1:27017] prev=#{previous_desc.inspect} new=#{updated_desc.inspect}>")
|
32
|
+
expect(event.summary).to eq("#<ServerDescriptionChanged address=127.0.0.1:27017 prev=UNKNOWN new=UNKNOWN>")
|
36
33
|
end
|
37
34
|
end
|
38
35
|
end
|
@@ -72,7 +72,7 @@ describe Mongo::Operation::Delete::OpMsg do
|
|
72
72
|
|
73
73
|
describe 'write concern' do
|
74
74
|
# https://jira.mongodb.org/browse/RUBY-2224
|
75
|
-
|
75
|
+
require_no_linting
|
76
76
|
|
77
77
|
context 'when write concern is not specified' do
|
78
78
|
|
@@ -99,7 +99,7 @@ describe Mongo::Operation::Delete::OpMsg do
|
|
99
99
|
|
100
100
|
describe '#message' do
|
101
101
|
# https://jira.mongodb.org/browse/RUBY-2224
|
102
|
-
|
102
|
+
require_no_linting
|
103
103
|
|
104
104
|
context 'when the server supports OP_MSG' do
|
105
105
|
|
@@ -152,7 +152,7 @@ describe Mongo::Operation::Delete::OpMsg do
|
|
152
152
|
|
153
153
|
context 'when an implicit session is created and the topology is then updated and the server does not support sessions' do
|
154
154
|
# Mocks on features are incompatible with linting
|
155
|
-
|
155
|
+
require_no_linting
|
156
156
|
|
157
157
|
let(:expected_global_args) do
|
158
158
|
global_args.dup.tap do |args|
|
@@ -63,7 +63,7 @@ describe Mongo::Operation::Insert::Command do
|
|
63
63
|
|
64
64
|
describe 'write concern' do
|
65
65
|
# https://jira.mongodb.org/browse/RUBY-2224
|
66
|
-
|
66
|
+
require_no_linting
|
67
67
|
|
68
68
|
context 'when write concern is not specified' do
|
69
69
|
|
@@ -90,7 +90,7 @@ describe Mongo::Operation::Insert::Command do
|
|
90
90
|
|
91
91
|
describe '#message' do
|
92
92
|
# https://jira.mongodb.org/browse/RUBY-2224
|
93
|
-
|
93
|
+
require_no_linting
|
94
94
|
|
95
95
|
context 'when the server does not support OP_MSG' do
|
96
96
|
max_server_version '3.4'
|