mongo 2.1.0.beta → 2.2.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/README.md +10 -3
- data/Rakefile +1 -7
- data/lib/mongo/address/ipv4.rb +6 -1
- data/lib/mongo/address/unix.rb +2 -2
- data/lib/mongo/address.rb +32 -10
- data/lib/mongo/auth/cr/conversation.rb +1 -1
- data/lib/mongo/auth/ldap/conversation.rb +7 -3
- data/lib/mongo/auth/scram/conversation.rb +9 -3
- data/lib/mongo/auth/user/view.rb +23 -2
- data/lib/mongo/auth/x509/conversation.rb +1 -1
- data/lib/mongo/bulk_write/combineable.rb +51 -0
- data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
- data/lib/mongo/bulk_write/result.rb +61 -8
- data/lib/mongo/bulk_write/result_combiner.rb +117 -0
- data/lib/mongo/bulk_write/transformable.rb +132 -0
- data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
- data/lib/mongo/bulk_write/validatable.rb +62 -0
- data/lib/mongo/bulk_write.rb +164 -23
- data/lib/mongo/client.rb +75 -18
- data/lib/mongo/cluster/topology/replica_set.rb +8 -6
- data/lib/mongo/cluster/topology/unknown.rb +5 -2
- data/lib/mongo/cluster.rb +85 -5
- data/lib/mongo/collection/view/aggregation.rb +19 -45
- data/lib/mongo/collection/view/builder/aggregation.rb +98 -0
- data/lib/mongo/collection/view/builder/find_command.rb +111 -0
- data/lib/mongo/collection/view/builder/flags.rb +62 -0
- data/lib/mongo/collection/view/builder/map_reduce.rb +134 -0
- data/lib/mongo/collection/view/builder/modifiers.rb +80 -0
- data/lib/mongo/collection/view/builder/op_query.rb +83 -0
- data/lib/mongo/collection/view/builder.rb +20 -0
- data/lib/mongo/collection/view/explainable.rb +15 -0
- data/lib/mongo/collection/view/immutable.rb +4 -11
- data/lib/mongo/collection/view/iterable.rb +40 -5
- data/lib/mongo/collection/view/map_reduce.rb +67 -37
- data/lib/mongo/collection/view/readable.rb +114 -100
- data/lib/mongo/collection/view/writable.rb +46 -22
- data/lib/mongo/collection/view.rb +25 -22
- data/lib/mongo/collection.rb +130 -12
- data/lib/mongo/cursor/builder/get_more_command.rb +71 -0
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +62 -0
- data/lib/mongo/cursor/builder/op_get_more.rb +61 -0
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +56 -0
- data/lib/mongo/cursor/builder.rb +18 -0
- data/lib/mongo/cursor.rb +76 -21
- data/lib/mongo/database/view.rb +11 -6
- data/lib/mongo/database.rb +16 -6
- data/lib/mongo/dbref.rb +9 -9
- data/lib/mongo/{bulk_write/unordered_bulk_write.rb → error/closed_stream.rb} +12 -21
- data/lib/mongo/{bulk_write/ordered_bulk_write.rb → error/extra_file_chunk.rb} +13 -27
- data/lib/mongo/error/file_not_found.rb +37 -0
- data/lib/mongo/error/invalid_file.rb +2 -2
- data/lib/mongo/error/invalid_file_revision.rb +37 -0
- data/lib/mongo/error/invalid_uri.rb +5 -4
- data/lib/mongo/error/invalid_write_concern.rb +35 -0
- data/lib/mongo/error/missing_file_chunk.rb +38 -0
- data/lib/mongo/error/operation_failure.rb +33 -2
- data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
- data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
- data/lib/mongo/error.rb +8 -0
- data/lib/mongo/grid/file/chunk.rb +9 -9
- data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
- data/lib/mongo/grid/file.rb +12 -9
- data/lib/mongo/grid/fs_bucket.rb +448 -0
- data/lib/mongo/grid/stream/read.rb +208 -0
- data/lib/mongo/grid/stream/write.rb +187 -0
- data/lib/mongo/grid/stream.rb +64 -0
- data/lib/mongo/grid.rb +2 -1
- data/lib/mongo/index/view.rb +7 -4
- data/lib/mongo/index.rb +5 -0
- data/lib/mongo/loggable.rb +34 -57
- data/lib/mongo/logger.rb +16 -78
- data/lib/mongo/monitoring/command_log_subscriber.rb +38 -14
- data/lib/mongo/monitoring/event/command_started.rb +2 -1
- data/lib/mongo/monitoring/event/command_succeeded.rb +24 -2
- data/lib/mongo/monitoring/event/secure.rb +58 -0
- data/lib/mongo/monitoring/event.rb +1 -0
- data/lib/mongo/monitoring/publishable.rb +22 -12
- data/lib/mongo/monitoring.rb +1 -5
- data/lib/mongo/operation/commands/aggregate/result.rb +89 -0
- data/lib/mongo/operation/commands/aggregate.rb +64 -0
- data/lib/mongo/operation/commands/collections_info/result.rb +41 -0
- data/lib/mongo/operation/{read → commands}/collections_info.rb +5 -3
- data/lib/mongo/operation/commands/command.rb +47 -0
- data/lib/mongo/operation/commands/find/result.rb +62 -0
- data/lib/mongo/operation/commands/find.rb +27 -0
- data/lib/mongo/operation/commands/get_more/result.rb +62 -0
- data/lib/mongo/operation/commands/get_more.rb +27 -0
- data/lib/mongo/operation/{read → commands}/indexes.rb +9 -6
- data/lib/mongo/operation/{list_collections → commands/list_collections}/result.rb +1 -21
- data/lib/mongo/operation/{read → commands}/list_collections.rb +4 -32
- data/lib/mongo/operation/{list_indexes → commands/list_indexes}/result.rb +1 -21
- data/lib/mongo/operation/{read → commands}/list_indexes.rb +3 -33
- data/lib/mongo/operation/commands/map_reduce/result.rb +119 -0
- data/lib/mongo/operation/commands/map_reduce.rb +49 -0
- data/lib/mongo/operation/commands/parallel_scan/result.rb +64 -0
- data/lib/mongo/operation/commands/parallel_scan.rb +52 -0
- data/lib/mongo/operation/commands/user_query.rb +71 -0
- data/lib/mongo/operation/commands/users_info/result.rb +38 -0
- data/lib/mongo/operation/commands/users_info.rb +48 -0
- data/lib/mongo/operation/commands.rb +26 -0
- data/lib/mongo/operation/executable.rb +4 -68
- data/lib/mongo/operation/kill_cursors.rb +3 -3
- data/lib/mongo/operation/object_id_generator.rb +36 -0
- data/lib/mongo/operation/read/get_more.rb +2 -22
- data/lib/mongo/operation/read/query/result.rb +40 -0
- data/lib/mongo/operation/read/query.rb +4 -21
- data/lib/mongo/operation/read.rb +0 -4
- data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
- data/lib/mongo/operation/result.rb +43 -1
- data/lib/mongo/operation/specifiable.rb +59 -1
- data/lib/mongo/operation/write/bulk/bulkable.rb +83 -0
- data/lib/mongo/operation/write/bulk/delete/result.rb +67 -0
- data/lib/mongo/operation/write/bulk/delete.rb +71 -0
- data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
- data/lib/mongo/operation/write/bulk/insert.rb +96 -0
- data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
- data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
- data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
- data/lib/mongo/operation/write/bulk/update.rb +81 -0
- data/lib/mongo/operation/write/bulk.rb +6 -3
- data/lib/mongo/operation/write/command/create_index.rb +0 -1
- data/lib/mongo/operation/write/command/create_user.rb +0 -1
- data/lib/mongo/operation/write/command/delete.rb +3 -3
- data/lib/mongo/operation/write/command/drop_index.rb +0 -1
- data/lib/mongo/operation/write/command/insert.rb +4 -3
- data/lib/mongo/operation/write/command/remove_user.rb +0 -1
- data/lib/mongo/operation/write/command/update.rb +6 -4
- data/lib/mongo/operation/write/command/update_user.rb +0 -1
- data/lib/mongo/operation/write/command/writable.rb +13 -18
- data/lib/mongo/operation/write/create_index.rb +4 -27
- data/lib/mongo/operation/write/create_user.rb +4 -30
- data/lib/mongo/operation/write/delete.rb +6 -29
- data/lib/mongo/operation/write/drop_index.rb +3 -3
- data/lib/mongo/operation/write/gle.rb +49 -0
- data/lib/mongo/operation/write/idable.rb +24 -2
- data/lib/mongo/operation/write/insert.rb +2 -24
- data/lib/mongo/operation/write/remove_user.rb +4 -27
- data/lib/mongo/operation/write/update.rb +13 -36
- data/lib/mongo/operation/write/update_user.rb +4 -30
- data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
- data/lib/mongo/operation/write.rb +2 -0
- data/lib/mongo/operation.rb +33 -5
- data/lib/mongo/options/mapper.rb +26 -2
- data/lib/mongo/options/redacted.rb +156 -0
- data/lib/mongo/options.rb +1 -0
- data/lib/mongo/protocol/bit_vector.rb +11 -9
- data/lib/mongo/protocol/delete.rb +78 -3
- data/lib/mongo/protocol/get_more.rb +59 -2
- data/lib/mongo/protocol/insert.rb +73 -1
- data/lib/mongo/protocol/kill_cursors.rb +66 -4
- data/lib/mongo/protocol/message.rb +44 -20
- data/lib/mongo/protocol/query.rb +153 -65
- data/lib/mongo/protocol/reply.rb +92 -1
- data/lib/mongo/protocol/serializers.rb +49 -40
- data/lib/mongo/protocol/update.rb +93 -1
- data/lib/mongo/retryable.rb +101 -0
- data/lib/mongo/server/connectable.rb +28 -8
- data/lib/mongo/server/connection.rb +52 -10
- data/lib/mongo/server/connection_pool/queue.rb +15 -0
- data/lib/mongo/server/connection_pool.rb +12 -15
- data/lib/mongo/server/description/features.rb +4 -2
- data/lib/mongo/server/description.rb +39 -3
- data/lib/mongo/server/monitor/connection.rb +49 -28
- data/lib/mongo/server/monitor.rb +3 -14
- data/lib/mongo/server.rb +31 -4
- data/lib/mongo/server_selector/selectable.rb +58 -32
- data/lib/mongo/server_selector.rb +19 -10
- data/lib/mongo/socket/ssl.rb +4 -1
- data/lib/mongo/socket/tcp.rb +2 -2
- data/lib/mongo/socket/unix.rb +5 -8
- data/lib/mongo/socket.rb +11 -4
- data/lib/mongo/uri.rb +245 -139
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo/write_concern.rb +21 -6
- data/lib/mongo.rb +4 -4
- data/mongo.gemspec +1 -2
- data/spec/mongo/address/unix_spec.rb +1 -1
- data/spec/mongo/address_spec.rb +25 -0
- data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
- data/spec/mongo/auth/user/view_spec.rb +26 -1
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +284 -0
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
- data/spec/mongo/bulk_write_spec.rb +385 -161
- data/spec/mongo/client_spec.rb +193 -23
- data/spec/mongo/cluster/topology/replica_set_spec.rb +2 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +65 -0
- data/spec/mongo/collection/view/builder/find_command_spec.rb +167 -0
- data/spec/mongo/collection/view/builder/flags_spec.rb +106 -0
- data/spec/mongo/collection/view/builder/modifiers_spec.rb +210 -0
- data/spec/mongo/collection/view/builder/op_query_spec.rb +154 -0
- data/spec/mongo/collection/view/explainable_spec.rb +1 -2
- data/spec/mongo/collection/view/immutable_spec.rb +54 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +104 -9
- data/spec/mongo/collection/view/readable_spec.rb +109 -112
- data/spec/mongo/collection/view_spec.rb +119 -487
- data/spec/mongo/collection_spec.rb +1002 -33
- data/spec/mongo/command_monitoring_spec.rb +64 -0
- data/spec/mongo/connection_string_spec.rb +115 -0
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +160 -0
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +52 -0
- data/spec/mongo/cursor_spec.rb +10 -60
- data/spec/mongo/database_spec.rb +81 -12
- data/spec/mongo/dbref_spec.rb +4 -4
- data/spec/mongo/grid/file/chunk_spec.rb +6 -6
- data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
- data/spec/mongo/grid/file_spec.rb +8 -8
- data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
- data/spec/mongo/grid/stream/read_spec.rb +275 -0
- data/spec/mongo/grid/stream/write_spec.rb +440 -0
- data/spec/mongo/grid/stream_spec.rb +48 -0
- data/spec/mongo/gridfs_spec.rb +50 -0
- data/spec/mongo/index/view_spec.rb +41 -0
- data/spec/mongo/logger_spec.rb +0 -40
- data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
- data/spec/mongo/monitoring/event/command_started_spec.rb +26 -0
- data/spec/mongo/monitoring/event/command_succeeded_spec.rb +26 -0
- data/spec/mongo/monitoring/event/secure_spec.rb +57 -0
- data/spec/mongo/operation/{aggregate → commands/aggregate}/result_spec.rb +1 -1
- data/spec/mongo/operation/commands/aggregate_spec.rb +69 -0
- data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
- data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +1 -19
- data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
- data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +1 -19
- data/spec/mongo/operation/kill_cursors_spec.rb +1 -17
- data/spec/mongo/operation/read/get_more_spec.rb +0 -16
- data/spec/mongo/operation/read/query_spec.rb +19 -16
- data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
- data/spec/mongo/operation/result_spec.rb +19 -0
- data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +17 -28
- data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +1 -12
- data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +7 -18
- data/spec/mongo/operation/write/command/delete_spec.rb +18 -9
- data/spec/mongo/operation/write/command/insert_spec.rb +18 -9
- data/spec/mongo/operation/write/command/update_spec.rb +18 -9
- data/spec/mongo/operation/write/delete_spec.rb +3 -3
- data/spec/mongo/operation/write/insert_spec.rb +0 -11
- data/spec/mongo/operation/write/update_spec.rb +6 -6
- data/spec/mongo/options/redacted_spec.rb +350 -0
- data/spec/mongo/protocol/delete_spec.rb +4 -4
- data/spec/mongo/protocol/get_more_spec.rb +4 -4
- data/spec/mongo/protocol/insert_spec.rb +3 -3
- data/spec/mongo/protocol/kill_cursors_spec.rb +8 -6
- data/spec/mongo/protocol/query_spec.rb +21 -7
- data/spec/mongo/protocol/update_spec.rb +5 -5
- data/spec/mongo/retryable_spec.rb +221 -0
- data/spec/mongo/server/connection_pool/queue_spec.rb +16 -0
- data/spec/mongo/server/connection_pool_spec.rb +42 -6
- data/spec/mongo/server/connection_spec.rb +86 -1
- data/spec/mongo/server/description/features_spec.rb +25 -0
- data/spec/mongo/server/description_spec.rb +42 -0
- data/spec/mongo/server/monitor_spec.rb +44 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +25 -59
- data/spec/mongo/server_selection_rtt_spec.rb +37 -57
- data/spec/mongo/server_selection_spec.rb +5 -3
- data/spec/mongo/server_selector/nearest_spec.rb +35 -27
- data/spec/mongo/server_selector/primary_preferred_spec.rb +32 -30
- data/spec/mongo/server_selector/primary_spec.rb +21 -14
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +28 -26
- data/spec/mongo/server_selector/secondary_spec.rb +24 -22
- data/spec/mongo/server_selector_spec.rb +87 -24
- data/spec/mongo/server_spec.rb +78 -15
- data/spec/mongo/socket/ssl_spec.rb +101 -57
- data/spec/mongo/socket/unix_spec.rb +52 -0
- data/spec/mongo/uri_spec.rb +271 -59
- data/spec/mongo/write_concern_spec.rb +126 -0
- data/spec/spec_helper.rb +29 -23
- data/spec/support/authorization.rb +4 -5
- data/spec/support/command_monitoring/bulkWrite.yml +73 -0
- data/spec/support/command_monitoring/command.yml +42 -0
- data/spec/support/command_monitoring/deleteMany.yml +55 -0
- data/spec/support/command_monitoring/deleteOne.yml +55 -0
- data/spec/support/command_monitoring/find.yml +268 -0
- data/spec/support/command_monitoring/insertMany.yml +81 -0
- data/spec/support/command_monitoring/insertOne.yml +51 -0
- data/spec/support/command_monitoring/updateMany.yml +67 -0
- data/spec/support/command_monitoring/updateOne.yml +95 -0
- data/spec/support/command_monitoring.rb +373 -0
- data/spec/support/connection_string.rb +228 -0
- data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
- data/spec/support/connection_string_tests/valid-auth.yml +256 -0
- data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
- data/spec/support/connection_string_tests/valid-options.yml +30 -0
- data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
- data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
- data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
- data/spec/support/crud/read.rb +14 -10
- data/spec/support/crud/write.rb +36 -9
- data/spec/support/crud.rb +10 -2
- data/spec/support/gridfs.rb +637 -0
- data/spec/support/gridfs_tests/delete.yml +157 -0
- data/spec/support/gridfs_tests/download.yml +210 -0
- data/spec/support/gridfs_tests/download_by_name.yml +113 -0
- data/spec/support/gridfs_tests/upload.yml +158 -0
- data/spec/support/matchers.rb +2 -2
- data/spec/support/sdam/rs/equal_electionids.yml +1 -2
- data/spec/support/sdam/rs/new_primary_new_electionid.yml +0 -3
- data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
- data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
- data/spec/support/sdam/rs/rsother_discovered.yml +24 -3
- data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
- data/spec/support/sdam/rs/stepdown_change_set_name.yml +59 -0
- data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
- data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
- data/spec/support/sdam/single/not_ok_response.yml +0 -1
- data/spec/support/server_discovery_and_monitoring.rb +3 -1
- data/spec/support/server_selection.rb +3 -1
- data/spec/support/shared/bulk_write.rb +192 -0
- data/spec/support/shared/protocol.rb +5 -5
- data/spec/support/shared/server_selector.rb +78 -13
- data/spec/support/travis.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +211 -72
- metadata.gz.sig +0 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +0 -252
- data/lib/mongo/bulk_write/deletable.rb +0 -57
- data/lib/mongo/bulk_write/insertable.rb +0 -49
- data/lib/mongo/bulk_write/replacable.rb +0 -58
- data/lib/mongo/bulk_write/updatable.rb +0 -69
- data/lib/mongo/grid/fs.rb +0 -146
- data/lib/mongo/operation/aggregate/result.rb +0 -103
- data/lib/mongo/operation/aggregate.rb +0 -108
- data/lib/mongo/operation/command.rb +0 -61
- data/lib/mongo/operation/map_reduce/result.rb +0 -122
- data/lib/mongo/operation/map_reduce.rb +0 -95
- data/lib/mongo/operation/parallel_scan/result.rb +0 -72
- data/lib/mongo/operation/parallel_scan.rb +0 -76
- data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
- data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
- data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
- data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
- data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
- data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -174
- data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
- data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
- data/spec/mongo/grid/fs_spec.rb +0 -160
- data/spec/mongo/loggable_spec.rb +0 -63
- data/spec/mongo/operation/aggregate_spec.rb +0 -127
data/spec/mongo/client_spec.rb
CHANGED
@@ -20,6 +20,10 @@ describe Mongo::Client do
|
|
20
20
|
)
|
21
21
|
end
|
22
22
|
|
23
|
+
after do
|
24
|
+
client.close
|
25
|
+
end
|
26
|
+
|
23
27
|
context 'when the other is a client' do
|
24
28
|
|
25
29
|
context 'when the options and cluster are equal' do
|
@@ -162,17 +166,21 @@ describe Mongo::Client do
|
|
162
166
|
described_class.new(
|
163
167
|
['127.0.0.1:27017'],
|
164
168
|
:read => { :mode => :primary },
|
165
|
-
:
|
166
|
-
:
|
169
|
+
:local_threshold => 10,
|
170
|
+
:server_selection_timeout => 10000,
|
167
171
|
:database => TEST_DB
|
168
172
|
)
|
169
173
|
end
|
170
174
|
|
175
|
+
let(:options) do
|
176
|
+
Mongo::Options::Redacted.new(:read => { :mode => :primary },
|
177
|
+
:local_threshold => 10,
|
178
|
+
:server_selection_timeout => 10000,
|
179
|
+
:database => TEST_DB)
|
180
|
+
end
|
181
|
+
|
171
182
|
let(:expected) do
|
172
|
-
[client.cluster,
|
173
|
-
:local_threshold_ms => 10,
|
174
|
-
:server_selection_timeout_ms => 10000,
|
175
|
-
:database => TEST_DB }].hash
|
183
|
+
[client.cluster, options].hash
|
176
184
|
end
|
177
185
|
|
178
186
|
it 'returns a hash of the cluster and options' do
|
@@ -195,6 +203,23 @@ describe Mongo::Client do
|
|
195
203
|
"<Mongo::Client:0x#{client.object_id} cluster=127.0.0.1:27017"
|
196
204
|
)
|
197
205
|
end
|
206
|
+
|
207
|
+
context 'when there is sensitive data in the options' do
|
208
|
+
|
209
|
+
let(:client) do
|
210
|
+
described_class.new(
|
211
|
+
['127.0.0.1:27017'],
|
212
|
+
:read => { :mode => :primary },
|
213
|
+
:database => TEST_DB,
|
214
|
+
:password => 'some_password',
|
215
|
+
:user => 'emily'
|
216
|
+
)
|
217
|
+
end
|
218
|
+
|
219
|
+
it 'does not print out sensitive data' do
|
220
|
+
expect(client.inspect).not_to match('some_password')
|
221
|
+
end
|
222
|
+
end
|
198
223
|
end
|
199
224
|
|
200
225
|
describe '#initialize' do
|
@@ -222,6 +247,27 @@ describe Mongo::Client do
|
|
222
247
|
expect(client[:users].name).to eq('users')
|
223
248
|
end
|
224
249
|
end
|
250
|
+
|
251
|
+
context 'when providing a custom logger' do
|
252
|
+
|
253
|
+
let(:logger) do
|
254
|
+
Logger.new($stdout).tap do |l|
|
255
|
+
l.level = Logger::FATAL
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
let(:client) do
|
260
|
+
authorized_client.with(logger: logger)
|
261
|
+
end
|
262
|
+
|
263
|
+
after do
|
264
|
+
client.close
|
265
|
+
end
|
266
|
+
|
267
|
+
it 'does not use the global logger' do
|
268
|
+
expect(client.cluster.logger).to_not eq(Mongo::Logger.logger)
|
269
|
+
end
|
270
|
+
end
|
225
271
|
end
|
226
272
|
|
227
273
|
context 'when providing a connection string' do
|
@@ -266,8 +312,12 @@ describe Mongo::Client do
|
|
266
312
|
described_class.new(uri)
|
267
313
|
end
|
268
314
|
|
315
|
+
let(:expected_options) do
|
316
|
+
Mongo::Options::Redacted.new(:write => { :w => 3 }, :database => 'testdb')
|
317
|
+
end
|
318
|
+
|
269
319
|
it 'sets the options' do
|
270
|
-
expect(client.options).to eq(
|
320
|
+
expect(client.options).to eq(expected_options)
|
271
321
|
end
|
272
322
|
end
|
273
323
|
|
@@ -281,8 +331,12 @@ describe Mongo::Client do
|
|
281
331
|
described_class.new(uri, :write => { :w => 3 })
|
282
332
|
end
|
283
333
|
|
334
|
+
let(:expected_options) do
|
335
|
+
Mongo::Options::Redacted.new(:write => { :w => 3 }, :database => 'testdb')
|
336
|
+
end
|
337
|
+
|
284
338
|
it 'sets the options' do
|
285
|
-
expect(client.options).to eq(
|
339
|
+
expect(client.options).to eq(expected_options)
|
286
340
|
end
|
287
341
|
end
|
288
342
|
|
@@ -296,8 +350,12 @@ describe Mongo::Client do
|
|
296
350
|
described_class.new(uri, :write => { :w => 4 })
|
297
351
|
end
|
298
352
|
|
353
|
+
let(:expected_options) do
|
354
|
+
Mongo::Options::Redacted.new(:write => { :w => 4 }, :database => 'testdb')
|
355
|
+
end
|
356
|
+
|
299
357
|
it 'allows explicit options to take preference' do
|
300
|
-
expect(client.options).to eq(
|
358
|
+
expect(client.options).to eq(expected_options)
|
301
359
|
end
|
302
360
|
end
|
303
361
|
|
@@ -315,6 +373,26 @@ describe Mongo::Client do
|
|
315
373
|
expect(client.cluster.topology).to be_a(Mongo::Cluster::Topology::ReplicaSet)
|
316
374
|
end
|
317
375
|
end
|
376
|
+
|
377
|
+
context 'when an invalid option is provided' do
|
378
|
+
|
379
|
+
let(:client) do
|
380
|
+
described_class.new(['127.0.0.1:27017'], :ssl => false, :invalid => :test)
|
381
|
+
end
|
382
|
+
|
383
|
+
it 'does not set the option' do
|
384
|
+
expect(client.options.keys).not_to include('invalid')
|
385
|
+
end
|
386
|
+
|
387
|
+
it 'sets the valid options' do
|
388
|
+
expect(client.options.keys).to include('ssl')
|
389
|
+
end
|
390
|
+
|
391
|
+
it 'warns that an invalid option has been specified' do
|
392
|
+
expect(Mongo::Logger.logger).to receive(:warn)
|
393
|
+
expect(client.options.keys).not_to include('invalid')
|
394
|
+
end
|
395
|
+
end
|
318
396
|
end
|
319
397
|
end
|
320
398
|
|
@@ -323,7 +401,8 @@ describe Mongo::Client do
|
|
323
401
|
let(:client) do
|
324
402
|
described_class.new(['127.0.0.1:27017'],
|
325
403
|
:database => TEST_DB,
|
326
|
-
:read => mode
|
404
|
+
:read => mode,
|
405
|
+
:server_selection_timeout => 2)
|
327
406
|
end
|
328
407
|
|
329
408
|
let(:preference) do
|
@@ -341,7 +420,7 @@ describe Mongo::Client do
|
|
341
420
|
end
|
342
421
|
|
343
422
|
it 'passes the options to the read preference' do
|
344
|
-
expect(preference.options[:
|
423
|
+
expect(preference.options[:server_selection_timeout]).to eq(2)
|
345
424
|
end
|
346
425
|
end
|
347
426
|
|
@@ -399,6 +478,33 @@ describe Mongo::Client do
|
|
399
478
|
expect(preference).to be_a(Mongo::ServerSelector::Primary)
|
400
479
|
end
|
401
480
|
end
|
481
|
+
|
482
|
+
context 'when the read preference is printed' do
|
483
|
+
|
484
|
+
let(:client) do
|
485
|
+
described_class.new([ DEFAULT_ADDRESS ], options)
|
486
|
+
end
|
487
|
+
|
488
|
+
let(:options) do
|
489
|
+
{ user: 'Emily', password: 'sensitive_data', server_selection_timeout: 0.1 }
|
490
|
+
end
|
491
|
+
|
492
|
+
before do
|
493
|
+
allow(client.database.cluster).to receive(:single?).and_return(false)
|
494
|
+
end
|
495
|
+
|
496
|
+
let(:error) do
|
497
|
+
begin
|
498
|
+
client.database.command(ping: 1)
|
499
|
+
rescue => e
|
500
|
+
e
|
501
|
+
end
|
502
|
+
end
|
503
|
+
|
504
|
+
it 'redacts sensitive client options' do
|
505
|
+
expect(error.message).not_to match(options[:password])
|
506
|
+
end
|
507
|
+
end
|
402
508
|
end
|
403
509
|
|
404
510
|
describe '#use' do
|
@@ -472,20 +578,28 @@ describe Mongo::Client do
|
|
472
578
|
client.with(:read => { :mode => :primary })
|
473
579
|
end
|
474
580
|
|
581
|
+
let(:new_options) do
|
582
|
+
Mongo::Options::Redacted.new(:read => { :mode => :primary },
|
583
|
+
:write => { :w => 1 },
|
584
|
+
:database => TEST_DB)
|
585
|
+
end
|
586
|
+
|
587
|
+
let(:original_options) do
|
588
|
+
Mongo::Options::Redacted.new(:read => { :mode => :secondary },
|
589
|
+
:write => { :w => 1 },
|
590
|
+
:database => TEST_DB)
|
591
|
+
end
|
592
|
+
|
475
593
|
it 'returns a new client' do
|
476
594
|
expect(new_client).not_to equal(client)
|
477
595
|
end
|
478
596
|
|
479
597
|
it 'replaces the existing options' do
|
480
|
-
expect(new_client.options).to eq(
|
481
|
-
:read => { :mode => :primary }, :write => { :w => 1 }, :database => TEST_DB
|
482
|
-
})
|
598
|
+
expect(new_client.options).to eq(new_options)
|
483
599
|
end
|
484
600
|
|
485
601
|
it 'does not modify the original client' do
|
486
|
-
expect(client.options).to eq(
|
487
|
-
:read => { :mode => :secondary }, :write => { :w => 1 }, :database => TEST_DB
|
488
|
-
})
|
602
|
+
expect(client.options).to eq(original_options)
|
489
603
|
end
|
490
604
|
|
491
605
|
it 'keeps the same cluster' do
|
@@ -530,6 +644,26 @@ describe Mongo::Client do
|
|
530
644
|
end
|
531
645
|
end
|
532
646
|
end
|
647
|
+
|
648
|
+
context 'when an invalid option is provided' do
|
649
|
+
|
650
|
+
let(:new_client) do
|
651
|
+
client.with(invalid: :option, ssl: false)
|
652
|
+
end
|
653
|
+
|
654
|
+
it 'does not set the invalid option' do
|
655
|
+
expect(new_client.options.keys).not_to include('invalid')
|
656
|
+
end
|
657
|
+
|
658
|
+
it 'sets the valid options' do
|
659
|
+
expect(new_client.options.keys).to include('ssl')
|
660
|
+
end
|
661
|
+
|
662
|
+
it 'warns that an invalid option has been specified' do
|
663
|
+
expect(Mongo::Logger.logger).to receive(:warn)
|
664
|
+
expect(new_client.options.keys).not_to include('invalid')
|
665
|
+
end
|
666
|
+
end
|
533
667
|
end
|
534
668
|
|
535
669
|
describe '#write_concern' do
|
@@ -540,8 +674,8 @@ describe Mongo::Client do
|
|
540
674
|
|
541
675
|
let(:client) { described_class.new(['127.0.0.1:27017'], :database => TEST_DB) }
|
542
676
|
|
543
|
-
it '
|
544
|
-
expect(concern
|
677
|
+
it 'does not set the write concern' do
|
678
|
+
expect(concern).to be_nil
|
545
679
|
end
|
546
680
|
end
|
547
681
|
|
@@ -554,7 +688,7 @@ describe Mongo::Client do
|
|
554
688
|
end
|
555
689
|
|
556
690
|
it 'returns a acknowledged write concern' do
|
557
|
-
expect(concern.get_last_error).to eq(:getlasterror => 1,
|
691
|
+
expect(concern.get_last_error).to eq(:getlasterror => 1, 'j' => true)
|
558
692
|
end
|
559
693
|
end
|
560
694
|
|
@@ -577,8 +711,10 @@ describe Mongo::Client do
|
|
577
711
|
described_class.new(['127.0.0.1:27017'], :write => { :w => -1 }, :database => TEST_DB)
|
578
712
|
end
|
579
713
|
|
580
|
-
it '
|
581
|
-
expect
|
714
|
+
it 'raises an error' do
|
715
|
+
expect {
|
716
|
+
concern
|
717
|
+
}.to raise_error(Mongo::Error::InvalidWriteConcern)
|
582
718
|
end
|
583
719
|
end
|
584
720
|
end
|
@@ -631,7 +767,41 @@ describe Mongo::Client do
|
|
631
767
|
|
632
768
|
it 'reconnects the cluster and returns true' do
|
633
769
|
expect(client.reconnect).to be(true)
|
634
|
-
|
770
|
+
end
|
771
|
+
end
|
772
|
+
|
773
|
+
describe '#dup' do
|
774
|
+
|
775
|
+
let(:client) do
|
776
|
+
described_class.new(
|
777
|
+
['127.0.0.1:27017'],
|
778
|
+
:read => { :mode => :primary },
|
779
|
+
:database => TEST_DB
|
780
|
+
)
|
781
|
+
end
|
782
|
+
|
783
|
+
it 'creates a client with Redacted options' do
|
784
|
+
expect(client.dup.options).to be_a(Mongo::Options::Redacted)
|
785
|
+
end
|
786
|
+
end
|
787
|
+
|
788
|
+
describe '#collections' do
|
789
|
+
|
790
|
+
before do
|
791
|
+
authorized_client.database[:users].create
|
792
|
+
end
|
793
|
+
|
794
|
+
after do
|
795
|
+
authorized_client.database[:users].drop
|
796
|
+
end
|
797
|
+
|
798
|
+
let(:collection) do
|
799
|
+
Mongo::Collection.new(authorized_client.database, 'users')
|
800
|
+
end
|
801
|
+
|
802
|
+
it 'refers the current database collections' do
|
803
|
+
expect(authorized_client.collections).to include(collection)
|
804
|
+
expect(authorized_client.collections).to all(be_a(Mongo::Collection))
|
635
805
|
end
|
636
806
|
end
|
637
807
|
end
|
@@ -239,6 +239,7 @@ describe Mongo::Cluster::Topology::ReplicaSet do
|
|
239
239
|
double('description').tap do |d|
|
240
240
|
allow(d).to receive(:config).and_return({ 'ismaster' => true })
|
241
241
|
allow(d).to receive(:primary?).and_return(false)
|
242
|
+
allow(d).to receive(:me_mismatch?).and_return(false)
|
242
243
|
allow(d).to receive(:hosts).and_return([])
|
243
244
|
end
|
244
245
|
end
|
@@ -257,6 +258,7 @@ describe Mongo::Cluster::Topology::ReplicaSet do
|
|
257
258
|
allow(d).to receive(:hosts).and_return([ primary ])
|
258
259
|
allow(d).to receive(:replica_set_name).and_return('test')
|
259
260
|
allow(d).to receive(:replica_set_member?).and_return(true)
|
261
|
+
allow(d).to receive(:me_mismatch?).and_return(false)
|
260
262
|
end
|
261
263
|
end
|
262
264
|
|
@@ -300,4 +300,69 @@ describe Mongo::Collection::View::Aggregation do
|
|
300
300
|
end
|
301
301
|
end
|
302
302
|
end
|
303
|
+
|
304
|
+
context 'when $out is in the pipeline', if: write_command_enabled? do
|
305
|
+
|
306
|
+
let(:pipeline) do
|
307
|
+
[{
|
308
|
+
"$group" => {
|
309
|
+
"_id" => "$city",
|
310
|
+
"totalpop" => { "$sum" => "$pop" }
|
311
|
+
}
|
312
|
+
},
|
313
|
+
{
|
314
|
+
'$out' => 'output_collection'
|
315
|
+
}
|
316
|
+
]
|
317
|
+
end
|
318
|
+
|
319
|
+
after do
|
320
|
+
authorized_client['output_collection'].delete_many
|
321
|
+
end
|
322
|
+
|
323
|
+
context 'when $out is a string' do
|
324
|
+
|
325
|
+
it 'does not allow the operation on a secondary' do
|
326
|
+
expect(aggregation.send(:secondary_ok?)).to be(false)
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
context 'when $out is a symbol' do
|
331
|
+
|
332
|
+
let(:pipeline) do
|
333
|
+
[{
|
334
|
+
"$group" => {
|
335
|
+
"_id" => "$city",
|
336
|
+
"totalpop" => { "$sum" => "$pop" }
|
337
|
+
}
|
338
|
+
},
|
339
|
+
{
|
340
|
+
:$out => 'output_collection'
|
341
|
+
}
|
342
|
+
]
|
343
|
+
end
|
344
|
+
|
345
|
+
it 'does not allow the operation on a secondary' do
|
346
|
+
expect(aggregation.send(:secondary_ok?)).to be(false)
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
|
351
|
+
context 'when the context is not a valid server for writing' do
|
352
|
+
|
353
|
+
it 'reroutes the operation to a primary' do
|
354
|
+
allow(aggregation).to receive(:valid_server?).and_return(false)
|
355
|
+
expect(Mongo::Logger.logger).to receive(:warn?).and_call_original
|
356
|
+
aggregation.to_a
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
context 'when the context is a valid server for writing' do
|
361
|
+
|
362
|
+
it 'does not reroute the operation to a primary' do
|
363
|
+
expect(Mongo::Logger.logger).not_to receive(:warn?)
|
364
|
+
aggregation.to_a
|
365
|
+
end
|
366
|
+
end
|
367
|
+
end
|
303
368
|
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mongo::Collection::View::Builder::FindCommand do
|
4
|
+
|
5
|
+
describe '#specification' do
|
6
|
+
|
7
|
+
let(:view) do
|
8
|
+
Mongo::Collection::View.new(authorized_collection, filter, options)
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:builder) do
|
12
|
+
described_class.new(view)
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:specification) do
|
16
|
+
builder.specification
|
17
|
+
end
|
18
|
+
|
19
|
+
let(:selector) do
|
20
|
+
specification[:selector]
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'when the options are standard' do
|
24
|
+
|
25
|
+
let(:filter) do
|
26
|
+
{ 'name' => 'test' }
|
27
|
+
end
|
28
|
+
|
29
|
+
let(:options) do
|
30
|
+
{
|
31
|
+
sort: { _id: 1 },
|
32
|
+
projection: { name: 1 },
|
33
|
+
hint: { name: 1 },
|
34
|
+
skip: 10,
|
35
|
+
limit: 20,
|
36
|
+
batch_size: 5,
|
37
|
+
single_batch: false,
|
38
|
+
comment: "testing",
|
39
|
+
max_scan: 200,
|
40
|
+
max_time_ms: 40,
|
41
|
+
max_value: { name: 'joe' },
|
42
|
+
min_value: { name: 'albert' },
|
43
|
+
return_key: true,
|
44
|
+
show_disk_loc: true,
|
45
|
+
snapshot: true,
|
46
|
+
tailable: true,
|
47
|
+
oplog_replay: true,
|
48
|
+
no_cursor_timeout: true,
|
49
|
+
await_data: true,
|
50
|
+
allow_partial_results: true,
|
51
|
+
read_concern: { level: 'local' }
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'maps the collection name' do
|
56
|
+
expect(selector['find']).to eq(authorized_collection.name)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'maps the filter' do
|
60
|
+
expect(selector['filter']).to eq(filter)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'maps sort' do
|
64
|
+
expect(selector['sort']).to eq('_id' => 1)
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'maps projection' do
|
68
|
+
expect(selector['projection']).to eq('name' => 1)
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'maps hint' do
|
72
|
+
expect(selector['hint']).to eq('name' => 1)
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'maps skip' do
|
76
|
+
expect(selector['skip']).to eq(10)
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'maps limit' do
|
80
|
+
expect(selector['limit']).to eq(20)
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'maps batch size' do
|
84
|
+
expect(selector['batchSize']).to eq(5)
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'maps single batch' do
|
88
|
+
expect(selector['singleBatch']).to be false
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'maps comment' do
|
92
|
+
expect(selector['comment']).to eq('testing')
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'maps max scan' do
|
96
|
+
expect(selector['maxScan']).to eq(200)
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'maps max time ms' do
|
100
|
+
expect(selector['maxTimeMS']).to eq(40)
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'maps max' do
|
104
|
+
expect(selector['max']).to eq('name' => 'joe')
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'maps min' do
|
108
|
+
expect(selector['min']).to eq('name' => 'albert')
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'maps read concern' do
|
112
|
+
expect(selector['readConcern']).to eq('level' => 'local')
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'maps return key' do
|
116
|
+
expect(selector['returnKey']).to be true
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'maps show record id' do
|
120
|
+
expect(selector['showRecordId']).to be true
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'maps snapshot' do
|
124
|
+
expect(selector['snapshot']).to be true
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'maps tailable' do
|
128
|
+
expect(selector['tailable']).to be true
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'maps oplog replay' do
|
132
|
+
expect(selector['oplogReplay']).to be true
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'maps no cursor timeout' do
|
136
|
+
expect(selector['noCursorTimeout']).to be true
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'maps await data' do
|
140
|
+
expect(selector['awaitData']).to be true
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'maps allow partial results' do
|
144
|
+
expect(selector['allowPartialResults']).to be true
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
context 'when limit is negative' do
|
149
|
+
|
150
|
+
let(:filter) do
|
151
|
+
{ 'name' => 'test' }
|
152
|
+
end
|
153
|
+
|
154
|
+
let(:options) do
|
155
|
+
{ limit: -1 }
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'sets single batch to true' do
|
159
|
+
expect(selector['singleBatch']).to be true
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'removes the limit from the command' do
|
163
|
+
expect(selector['limit']).to be_nil
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mongo::Collection::View::Builder::Flags do
|
4
|
+
|
5
|
+
describe '.map_flags' do
|
6
|
+
|
7
|
+
shared_examples_for 'a flag mapper' do
|
8
|
+
|
9
|
+
let(:flags) do
|
10
|
+
described_class.map_flags(options)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'maps allow partial results' do
|
14
|
+
expect(flags).to include(:partial)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'maps oplog replay' do
|
18
|
+
expect(flags).to include(:oplog_replay)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'maps no cursor timeout' do
|
22
|
+
expect(flags).to include(:no_cursor_timeout)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'maps tailable' do
|
26
|
+
expect(flags).to include(:tailable_cursor)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'maps await data' do
|
30
|
+
expect(flags).to include(:await_data)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'maps exhaust' do
|
34
|
+
expect(flags).to include(:exhaust)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'when the options are standard' do
|
39
|
+
|
40
|
+
let(:options) do
|
41
|
+
{
|
42
|
+
:allow_partial_results => true,
|
43
|
+
:oplog_replay => true,
|
44
|
+
:no_cursor_timeout => true,
|
45
|
+
:tailable => true,
|
46
|
+
:await_data => true,
|
47
|
+
:exhaust => true
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
it_behaves_like 'a flag mapper'
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'when the options already have flags' do
|
55
|
+
|
56
|
+
let(:options) do
|
57
|
+
{
|
58
|
+
:flags => [
|
59
|
+
:partial,
|
60
|
+
:oplog_replay,
|
61
|
+
:no_cursor_timeout,
|
62
|
+
:tailable_cursor,
|
63
|
+
:await_data,
|
64
|
+
:exhaust
|
65
|
+
]
|
66
|
+
}
|
67
|
+
end
|
68
|
+
|
69
|
+
it_behaves_like 'a flag mapper'
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'when the options include tailable_await' do
|
73
|
+
|
74
|
+
let(:options) do
|
75
|
+
{ :tailable_await => true }
|
76
|
+
end
|
77
|
+
|
78
|
+
let(:flags) do
|
79
|
+
described_class.map_flags(options)
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'maps the await data option' do
|
83
|
+
expect(flags).to include(:await_data)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'maps the tailable option' do
|
87
|
+
expect(flags).to include(:tailable_cursor)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
context 'when the options provide a cursor type' do
|
92
|
+
|
93
|
+
let(:options) do
|
94
|
+
{ :cursor_type => :await_data }
|
95
|
+
end
|
96
|
+
|
97
|
+
let(:flags) do
|
98
|
+
described_class.map_flags(options)
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'maps the cursor type to a flag' do
|
102
|
+
expect(flags).to include(:await_data)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|