mongo 2.7.0 → 2.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +39 -14
- data/Rakefile +1 -0
- data/lib/mongo/auth.rb +4 -1
- data/lib/mongo/client.rb +4 -3
- data/lib/mongo/cluster.rb +1 -1
- data/lib/mongo/collection/view/readable.rb +5 -2
- data/lib/mongo/database.rb +1 -0
- data/lib/mongo/error/invalid_server_preference.rb +1 -0
- data/lib/mongo/error/operation_failure.rb +10 -0
- data/lib/mongo/error/parser.rb +10 -0
- data/lib/mongo/event.rb +1 -2
- data/lib/mongo/operation/result.rb +4 -1
- data/lib/mongo/operation/shared/executable_transaction_label.rb +3 -1
- data/lib/mongo/operation/shared/sessions_supported.rb +1 -1
- data/lib/mongo/protocol/msg.rb +1 -1
- data/lib/mongo/protocol/query.rb +2 -2
- data/lib/mongo/retryable.rb +20 -6
- data/lib/mongo/server.rb +6 -0
- data/lib/mongo/server/connection.rb +4 -4
- data/lib/mongo/server/monitor/connection.rb +9 -5
- data/lib/mongo/server_selector/selectable.rb +86 -32
- data/lib/mongo/session.rb +98 -15
- data/lib/mongo/version.rb +1 -1
- data/spec/README.md +85 -0
- data/spec/integration/bulk_insert_spec.rb +1 -1
- data/spec/integration/change_stream_examples_spec.rb +3 -1
- data/spec/integration/change_stream_spec.rb +10 -14
- data/spec/integration/client_construction_spec.rb +1 -0
- data/spec/integration/command_monitoring_spec.rb +37 -1
- data/spec/integration/command_spec.rb +141 -0
- data/spec/integration/connection_spec.rb +4 -2
- data/spec/integration/cursor_reaping_spec.rb +1 -1
- data/spec/integration/docs_examples_spec.rb +1 -1
- data/spec/integration/retryable_writes_spec.rb +33 -42
- data/spec/integration/server_description_spec.rb +3 -3
- data/spec/integration/server_selector_spec.rb +79 -0
- data/spec/lite_spec_helper.rb +4 -2
- data/spec/mongo/address_spec.rb +8 -0
- data/spec/mongo/auth/cr_spec.rb +5 -2
- data/spec/mongo/auth/invalid_mechanism_spec.rb +11 -0
- data/spec/mongo/auth/scram/conversation_spec.rb +3 -2
- data/spec/mongo/auth/scram/negotiation_spec.rb +1 -2
- data/spec/mongo/auth/scram_spec.rb +11 -6
- data/spec/mongo/auth/user/view_spec.rb +13 -6
- data/spec/mongo/bulk_write_spec.rb +81 -104
- data/spec/mongo/client_construction_spec.rb +18 -7
- data/spec/mongo/client_spec.rb +11 -7
- data/spec/mongo/cluster_spec.rb +30 -1
- data/spec/mongo/collection/view/aggregation_spec.rb +18 -10
- data/spec/mongo/collection/view/change_stream_spec.rb +28 -8
- data/spec/mongo/collection/view/map_reduce_spec.rb +24 -10
- data/spec/mongo/collection/view/readable_spec.rb +37 -19
- data/spec/mongo/collection/view/writable_spec.rb +64 -32
- data/spec/mongo/collection/view_spec.rb +4 -2
- data/spec/mongo/collection_spec.rb +163 -73
- data/spec/mongo/cursor_spec.rb +5 -2
- data/spec/mongo/database_spec.rb +41 -19
- data/spec/mongo/error/no_server_available_spec.rb +1 -1
- data/spec/mongo/error/parser_spec.rb +29 -0
- data/spec/mongo/grid/stream/write_spec.rb +2 -1
- data/spec/mongo/index/view_spec.rb +42 -24
- data/spec/mongo/operation/delete/op_msg_spec.rb +11 -7
- data/spec/mongo/operation/insert/op_msg_spec.rb +10 -6
- data/spec/mongo/operation/update/op_msg_spec.rb +10 -6
- data/spec/mongo/protocol/compressed_spec.rb +1 -1
- data/spec/mongo/protocol/msg_spec.rb +1 -1
- data/spec/mongo/server/app_metadata_spec.rb +2 -1
- data/spec/mongo/server/connection_auth_spec.rb +1 -1
- data/spec/mongo/server/monitor/connection_spec.rb +42 -0
- data/spec/mongo/server_selector_spec.rb +17 -0
- data/spec/mongo/server_spec.rb +110 -0
- data/spec/mongo/session/session_pool_spec.rb +1 -1
- data/spec/mongo/session_spec.rb +1 -1
- data/spec/mongo/session_transaction_spec.rb +162 -1
- data/spec/mongo/socket/ssl_spec.rb +14 -7
- data/spec/mongo/uri/srv_protocol_spec.rb +41 -34
- data/spec/spec_helper.rb +3 -191
- data/spec/spec_tests/change_streams_spec.rb +3 -6
- data/spec/spec_tests/data/transactions/abort.yml +3 -1
- data/spec/spec_tests/data/transactions/commit.yml +4 -3
- data/spec/spec_tests/data/transactions/error-labels.yml +17 -13
- data/spec/spec_tests/data/transactions/read-concern.yml +611 -0
- data/spec/spec_tests/data/transactions/retryable-commit.yml +126 -21
- data/spec/spec_tests/data/transactions_api/callback-aborts.yml +42 -39
- data/spec/spec_tests/data/transactions_api/callback-commits.yml +52 -50
- data/spec/spec_tests/data/transactions_api/callback-retry.yml +33 -31
- data/spec/spec_tests/data/transactions_api/commit-retry.yml +42 -39
- data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror-4.2.yml +13 -12
- data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror.yml +15 -26
- data/spec/spec_tests/data/transactions_api/commit-writeconcernerror.yml +25 -33
- data/spec/spec_tests/data/transactions_api/commit.yml +44 -42
- data/spec/spec_tests/data/transactions_api/transaction-options.yml +25 -23
- data/spec/spec_tests/max_staleness_spec.rb +2 -0
- data/spec/spec_tests/retryable_writes_spec.rb +2 -6
- data/spec/spec_tests/sdam_spec.rb +2 -0
- data/spec/spec_tests/server_selection_spec.rb +3 -0
- data/spec/spec_tests/transactions_api_spec.rb +7 -1
- data/spec/spec_tests/transactions_spec.rb +6 -0
- data/spec/spec_tests/uri_options_spec.rb +4 -26
- data/spec/support/certificates/ca.pem +21 -16
- data/spec/support/certificates/client.pem +90 -90
- data/spec/support/certificates/client_cert.pem +21 -20
- data/spec/support/certificates/client_key.pem +27 -28
- data/spec/support/certificates/client_key_encrypted.pem +26 -26
- data/spec/support/certificates/crl.pem +10 -8
- data/spec/support/certificates/crl_client_revoked.pem +11 -10
- data/spec/support/certificates/server.pem +48 -33
- data/spec/support/change_streams.rb +12 -32
- data/spec/support/client_registry.rb +12 -1
- data/spec/support/cluster_config.rb +48 -2
- data/spec/support/common_shortcuts.rb +73 -7
- data/spec/support/connection_string.rb +0 -3
- data/spec/support/constraints.rb +87 -22
- data/spec/support/crud.rb +2 -1
- data/spec/support/shared/server_selector.rb +0 -28
- data/spec/support/shared/session.rb +25 -14
- data/spec/support/transactions.rb +4 -8
- data/spec/support/transactions/operation.rb +26 -4
- data/spec/support/transactions/verifier.rb +5 -2
- metadata +496 -488
- metadata.gz.sig +5 -2
- data/spec/support/certificates/password_protected.pem +0 -51
@@ -190,9 +190,14 @@ describe Mongo::Client do
|
|
190
190
|
expect(client.cluster.app_metadata.send(:document)[:compression]).to eq(options[:compressors])
|
191
191
|
end
|
192
192
|
|
193
|
-
|
194
|
-
|
195
|
-
|
193
|
+
context 'when server supports compression' do
|
194
|
+
require_compression
|
195
|
+
min_server_fcv '3.6'
|
196
|
+
|
197
|
+
it 'uses compression for messages' do
|
198
|
+
expect(Mongo::Protocol::Compressed).to receive(:new).and_call_original
|
199
|
+
client[TEST_COLL].find({}, limit: 1).first
|
200
|
+
end
|
196
201
|
end
|
197
202
|
|
198
203
|
it 'does not use compression for authentication messages' do
|
@@ -218,7 +223,9 @@ describe Mongo::Client do
|
|
218
223
|
expect(client.cluster.app_metadata.send(:document)[:compression]).to eq([])
|
219
224
|
end
|
220
225
|
|
221
|
-
context 'when one supported compressor and one unsupported compressor are provided'
|
226
|
+
context 'when one supported compressor and one unsupported compressor are provided' do
|
227
|
+
require_compression
|
228
|
+
min_server_fcv '3.6'
|
222
229
|
|
223
230
|
let(:options) do
|
224
231
|
{ compressors: ['zlib', 'snoopy'] }
|
@@ -235,7 +242,8 @@ describe Mongo::Client do
|
|
235
242
|
end
|
236
243
|
end
|
237
244
|
|
238
|
-
context 'when the compressor is not supported by the server'
|
245
|
+
context 'when the compressor is not supported by the server' do
|
246
|
+
max_server_version '3.4'
|
239
247
|
|
240
248
|
let(:options) do
|
241
249
|
{ compressors: ['zlib'] }
|
@@ -248,7 +256,8 @@ describe Mongo::Client do
|
|
248
256
|
end
|
249
257
|
end
|
250
258
|
|
251
|
-
context 'when compressors are not provided'
|
259
|
+
context 'when compressors are not provided' do
|
260
|
+
require_no_compression
|
252
261
|
|
253
262
|
let(:client) do
|
254
263
|
authorized_client
|
@@ -268,7 +277,9 @@ describe Mongo::Client do
|
|
268
277
|
end
|
269
278
|
end
|
270
279
|
|
271
|
-
context 'when a zlib_compression_level option is provided'
|
280
|
+
context 'when a zlib_compression_level option is provided' do
|
281
|
+
require_compression
|
282
|
+
min_server_fcv '3.6'
|
272
283
|
|
273
284
|
let(:client) do
|
274
285
|
new_local_client_nmio(SpecConfig.instance.addresses, SpecConfig.instance.test_options.merge(zlib_compression_level: 1))
|
data/spec/mongo/client_spec.rb
CHANGED
@@ -502,7 +502,8 @@ describe Mongo::Client do
|
|
502
502
|
)
|
503
503
|
end
|
504
504
|
|
505
|
-
context 'when filter criteria is present'
|
505
|
+
context 'when filter criteria is present' do
|
506
|
+
min_server_fcv '3.6'
|
506
507
|
|
507
508
|
let(:result) do
|
508
509
|
root_authorized_client.database_names(filter)
|
@@ -528,7 +529,8 @@ describe Mongo::Client do
|
|
528
529
|
end).to include('admin')
|
529
530
|
end
|
530
531
|
|
531
|
-
context 'when filter criteria is present'
|
532
|
+
context 'when filter criteria is present' do
|
533
|
+
min_server_fcv '3.6'
|
532
534
|
|
533
535
|
let(:result) do
|
534
536
|
root_authorized_client.list_databases(filter)
|
@@ -592,7 +594,8 @@ describe Mongo::Client do
|
|
592
594
|
expect(result.first.options[:read]).to eq(BSON::Document.new(options)[:read])
|
593
595
|
end
|
594
596
|
|
595
|
-
context 'when filter criteria is present'
|
597
|
+
context 'when filter criteria is present' do
|
598
|
+
min_server_fcv '3.6'
|
596
599
|
|
597
600
|
let(:result) do
|
598
601
|
client.list_mongo_databases(filter)
|
@@ -663,7 +666,7 @@ describe Mongo::Client do
|
|
663
666
|
end
|
664
667
|
|
665
668
|
context 'when sessions are supported' do
|
666
|
-
|
669
|
+
min_server_fcv '3.6'
|
667
670
|
require_topology :replica_set, :sharded
|
668
671
|
|
669
672
|
it 'creates a session' do
|
@@ -756,7 +759,7 @@ describe Mongo::Client do
|
|
756
759
|
end
|
757
760
|
|
758
761
|
context 'when two clients have the same cluster' do
|
759
|
-
|
762
|
+
min_server_fcv '3.6'
|
760
763
|
require_topology :replica_set, :sharded
|
761
764
|
|
762
765
|
let(:client) do
|
@@ -773,7 +776,7 @@ describe Mongo::Client do
|
|
773
776
|
end
|
774
777
|
|
775
778
|
context 'when two clients have different clusters' do
|
776
|
-
|
779
|
+
min_server_fcv '3.6'
|
777
780
|
require_topology :replica_set, :sharded
|
778
781
|
|
779
782
|
let(:client) do
|
@@ -791,7 +794,8 @@ describe Mongo::Client do
|
|
791
794
|
end
|
792
795
|
end
|
793
796
|
|
794
|
-
context 'when sessions are not supported'
|
797
|
+
context 'when sessions are not supported' do
|
798
|
+
max_server_version '3.4'
|
795
799
|
|
796
800
|
it 'raises an exception' do
|
797
801
|
expect {
|
data/spec/mongo/cluster_spec.rb
CHANGED
@@ -589,7 +589,7 @@ describe Mongo::Cluster do
|
|
589
589
|
end
|
590
590
|
|
591
591
|
context 'in server 3.6+' do
|
592
|
-
|
592
|
+
min_server_fcv '3.6'
|
593
593
|
|
594
594
|
context 'in single topology' do
|
595
595
|
require_topology :single
|
@@ -639,4 +639,33 @@ describe Mongo::Cluster do
|
|
639
639
|
end
|
640
640
|
end
|
641
641
|
end
|
642
|
+
|
643
|
+
describe '#summary' do
|
644
|
+
context 'cluster has unknown servers' do
|
645
|
+
it 'includes unknown servers' do
|
646
|
+
cluster.servers_list.each do |server|
|
647
|
+
expect(server).to be_unknown
|
648
|
+
end
|
649
|
+
|
650
|
+
expect(cluster.summary).to match(/Server address=localhost/)
|
651
|
+
end
|
652
|
+
end
|
653
|
+
|
654
|
+
context 'cluster has known servers' do
|
655
|
+
let(:client) { ClientRegistry.instance.global_client('authorized') }
|
656
|
+
let(:cluster) { client.cluster }
|
657
|
+
|
658
|
+
before do
|
659
|
+
wait_for_all_servers(cluster)
|
660
|
+
end
|
661
|
+
|
662
|
+
it 'includes known servers' do
|
663
|
+
cluster.servers_list.each do |server|
|
664
|
+
expect(server).not_to be_unknown
|
665
|
+
end
|
666
|
+
|
667
|
+
expect(cluster.summary).to match(/Server address=localhost/)
|
668
|
+
end
|
669
|
+
end
|
670
|
+
end
|
642
671
|
end
|
@@ -145,7 +145,7 @@ describe Mongo::Collection::View::Aggregation do
|
|
145
145
|
end
|
146
146
|
|
147
147
|
context 'when the initial response has no results but an active cursor' do
|
148
|
-
|
148
|
+
min_server_fcv '3.2'
|
149
149
|
|
150
150
|
let(:documents) do
|
151
151
|
[
|
@@ -177,14 +177,16 @@ describe Mongo::Collection::View::Aggregation do
|
|
177
177
|
Mongo::Collection::View.new(collection, selector, view_options)
|
178
178
|
end
|
179
179
|
|
180
|
-
context 'when the server supports write concern on the aggregate command'
|
180
|
+
context 'when the server supports write concern on the aggregate command' do
|
181
|
+
min_server_fcv '3.4'
|
181
182
|
|
182
183
|
it 'does not apply the write concern' do
|
183
184
|
expect(aggregation.to_a.size).to eq(2)
|
184
185
|
end
|
185
186
|
end
|
186
187
|
|
187
|
-
context 'when the server does not support write concern on the aggregation command'
|
188
|
+
context 'when the server does not support write concern on the aggregation command' do
|
189
|
+
max_server_version '3.2'
|
188
190
|
|
189
191
|
it 'does not apply the write concern' do
|
190
192
|
expect(aggregation.to_a.size).to eq(2)
|
@@ -223,7 +225,7 @@ describe Mongo::Collection::View::Aggregation do
|
|
223
225
|
end
|
224
226
|
|
225
227
|
context 'session id' do
|
226
|
-
|
228
|
+
min_server_fcv '3.6'
|
227
229
|
require_topology :replica_set, :sharded
|
228
230
|
|
229
231
|
let(:options) do
|
@@ -266,7 +268,8 @@ describe Mongo::Collection::View::Aggregation do
|
|
266
268
|
aggregation.explain['$cursor']['queryPlanner']['collation']['locale']
|
267
269
|
end
|
268
270
|
|
269
|
-
context 'when the server selected supports collations'
|
271
|
+
context 'when the server selected supports collations' do
|
272
|
+
min_server_fcv '3.4'
|
270
273
|
|
271
274
|
context 'when the collation key is a String' do
|
272
275
|
|
@@ -291,7 +294,8 @@ describe Mongo::Collection::View::Aggregation do
|
|
291
294
|
end
|
292
295
|
end
|
293
296
|
|
294
|
-
context 'when the server selected does not support collations'
|
297
|
+
context 'when the server selected does not support collations' do
|
298
|
+
max_server_version '3.2'
|
295
299
|
|
296
300
|
let(:options) do
|
297
301
|
{ collation: { locale: 'en_US', strength: 2 } }
|
@@ -507,14 +511,16 @@ describe Mongo::Collection::View::Aggregation do
|
|
507
511
|
aggregation.collect { |doc| doc['name']}
|
508
512
|
end
|
509
513
|
|
510
|
-
context 'when the server selected supports collations'
|
514
|
+
context 'when the server selected supports collations' do
|
515
|
+
min_server_fcv '3.4'
|
511
516
|
|
512
517
|
it 'applies the collation' do
|
513
518
|
expect(result).to eq(['bang', 'bang'])
|
514
519
|
end
|
515
520
|
end
|
516
521
|
|
517
|
-
context 'when the server selected does not support collations'
|
522
|
+
context 'when the server selected does not support collations' do
|
523
|
+
max_server_version '3.2'
|
518
524
|
|
519
525
|
it 'raises an exception' do
|
520
526
|
expect {
|
@@ -610,7 +616,8 @@ describe Mongo::Collection::View::Aggregation do
|
|
610
616
|
Mongo::Collection::View.new(collection, selector, view_options)
|
611
617
|
end
|
612
618
|
|
613
|
-
context 'when the server supports write concern on the aggregate command'
|
619
|
+
context 'when the server supports write concern on the aggregate command' do
|
620
|
+
min_server_fcv '3.4'
|
614
621
|
|
615
622
|
it 'uses the write concern' do
|
616
623
|
expect {
|
@@ -619,7 +626,8 @@ describe Mongo::Collection::View::Aggregation do
|
|
619
626
|
end
|
620
627
|
end
|
621
628
|
|
622
|
-
context 'when the server does not support write concern on the aggregation command'
|
629
|
+
context 'when the server does not support write concern on the aggregation command' do
|
630
|
+
max_server_version '3.2'
|
623
631
|
|
624
632
|
let(:documents) do
|
625
633
|
[
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Mongo::Collection::View::ChangeStream
|
3
|
+
describe Mongo::Collection::View::ChangeStream do
|
4
|
+
min_server_fcv '3.6'
|
5
|
+
require_topology :replica_set
|
4
6
|
|
5
7
|
let(:pipeline) do
|
6
8
|
[]
|
@@ -214,7 +216,7 @@ describe Mongo::Collection::View::ChangeStream, if: test_change_streams? do
|
|
214
216
|
}.to raise_exception(Mongo::Error::OperationFailure)
|
215
217
|
end
|
216
218
|
|
217
|
-
context 'when the operation fails'
|
219
|
+
context 'when the operation fails' do
|
218
220
|
|
219
221
|
let!(:before_last_use) do
|
220
222
|
session.instance_variable_get(:@server_session).last_use
|
@@ -270,7 +272,8 @@ describe Mongo::Collection::View::ChangeStream, if: test_change_streams? do
|
|
270
272
|
end
|
271
273
|
end
|
272
274
|
|
273
|
-
context 'when provided a session'
|
275
|
+
context 'when provided a session' do
|
276
|
+
min_server_fcv '3.6'
|
274
277
|
|
275
278
|
let(:options) do
|
276
279
|
{ session: session }
|
@@ -383,6 +386,7 @@ describe Mongo::Collection::View::ChangeStream, if: test_change_streams? do
|
|
383
386
|
end
|
384
387
|
|
385
388
|
context 'when some documents have been retrieved and the stream is closed before sending getMore' do
|
389
|
+
fails_on_jruby
|
386
390
|
|
387
391
|
before do
|
388
392
|
change_stream
|
@@ -437,11 +441,26 @@ describe Mongo::Collection::View::ChangeStream, if: test_change_streams? do
|
|
437
441
|
authorized_collection.insert_one(a: 1)
|
438
442
|
end
|
439
443
|
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
444
|
+
context 'pre-4.1 server' do
|
445
|
+
max_server_version '4.0'
|
446
|
+
|
447
|
+
it 'driver raises an exception and closes the cursor' do
|
448
|
+
expect(cursor).to receive(:kill_cursors).and_call_original
|
449
|
+
expect {
|
450
|
+
change_stream.to_enum.next
|
451
|
+
}.to raise_exception(Mongo::Error::MissingResumeToken)
|
452
|
+
end
|
453
|
+
end
|
454
|
+
|
455
|
+
context '4.1+ server' do
|
456
|
+
min_server_fcv '4.2'
|
457
|
+
|
458
|
+
it 'server errors, driver closes the cursor' do
|
459
|
+
expect(cursor).to receive(:kill_cursors).and_call_original
|
460
|
+
expect {
|
461
|
+
change_stream.to_enum.next
|
462
|
+
}.to raise_exception(Mongo::Error::OperationFailure, /Encountered an event whose _id field, which contains the resume token, was modified by the pipeline. Modifying the _id field of an event makes it impossible to resume the stream from that point. Only transformations that retain the unmodified _id field are allowed./)
|
463
|
+
end
|
445
464
|
end
|
446
465
|
end
|
447
466
|
|
@@ -574,6 +593,7 @@ describe Mongo::Collection::View::ChangeStream, if: test_change_streams? do
|
|
574
593
|
end
|
575
594
|
|
576
595
|
context 'when a server error is encountered during a getMore' do
|
596
|
+
fails_on_jruby
|
577
597
|
|
578
598
|
context 'when the error is a resumable error' do
|
579
599
|
|
@@ -223,7 +223,7 @@ describe Mongo::Collection::View::MapReduce do
|
|
223
223
|
end
|
224
224
|
|
225
225
|
context 'when the output collection is iterated' do
|
226
|
-
|
226
|
+
min_server_fcv '3.6'
|
227
227
|
require_topology :replica_set, :sharded
|
228
228
|
|
229
229
|
let(:options) do
|
@@ -257,19 +257,22 @@ describe Mongo::Collection::View::MapReduce do
|
|
257
257
|
end
|
258
258
|
end
|
259
259
|
|
260
|
-
context 'when another db is specified'
|
260
|
+
context 'when another db is specified' do
|
261
|
+
min_server_fcv '3.6'
|
262
|
+
require_topology :single, :replica_set
|
263
|
+
require_no_auth
|
261
264
|
|
262
265
|
let(:new_map_reduce) do
|
263
266
|
map_reduce.out(db: 'another-db', replace: 'output_collection')
|
264
267
|
end
|
265
268
|
|
266
|
-
it 'iterates over the documents in the result'
|
269
|
+
it 'iterates over the documents in the result' do
|
267
270
|
new_map_reduce.each do |document|
|
268
271
|
expect(document[:value]).to_not be_nil
|
269
272
|
end
|
270
273
|
end
|
271
274
|
|
272
|
-
it 'fetches the results from the collection'
|
275
|
+
it 'fetches the results from the collection' do
|
273
276
|
expect(new_map_reduce.count).to eq(2)
|
274
277
|
end
|
275
278
|
end
|
@@ -291,7 +294,10 @@ describe Mongo::Collection::View::MapReduce do
|
|
291
294
|
expect(new_map_reduce.count).to eq(2)
|
292
295
|
end
|
293
296
|
|
294
|
-
context 'when another db is specified'
|
297
|
+
context 'when another db is specified' do
|
298
|
+
min_server_fcv '3.0'
|
299
|
+
require_topology :single, :replica_set
|
300
|
+
require_no_auth
|
295
301
|
|
296
302
|
let(:new_map_reduce) do
|
297
303
|
map_reduce.out(db: 'another-db', merge: 'output_collection')
|
@@ -325,7 +331,10 @@ describe Mongo::Collection::View::MapReduce do
|
|
325
331
|
expect(new_map_reduce.count).to eq(2)
|
326
332
|
end
|
327
333
|
|
328
|
-
context 'when another db is specified'
|
334
|
+
context 'when another db is specified' do
|
335
|
+
min_server_fcv '3.0'
|
336
|
+
require_topology :single, :replica_set
|
337
|
+
require_no_auth
|
329
338
|
|
330
339
|
let(:new_map_reduce) do
|
331
340
|
map_reduce.out(db: 'another-db', reduce: 'output_collection')
|
@@ -585,7 +594,9 @@ describe Mongo::Collection::View::MapReduce do
|
|
585
594
|
|
586
595
|
shared_examples_for 'map reduce that writes accepting write concern' do
|
587
596
|
|
588
|
-
context 'when the server supports write concern on the mapReduce command'
|
597
|
+
context 'when the server supports write concern on the mapReduce command' do
|
598
|
+
min_server_fcv '3.4'
|
599
|
+
require_topology :single
|
589
600
|
|
590
601
|
it 'uses the write concern' do
|
591
602
|
expect {
|
@@ -594,7 +605,8 @@ describe Mongo::Collection::View::MapReduce do
|
|
594
605
|
end
|
595
606
|
end
|
596
607
|
|
597
|
-
context 'when the server does not support write concern on the mapReduce command'
|
608
|
+
context 'when the server does not support write concern on the mapReduce command' do
|
609
|
+
max_server_version '3.2'
|
598
610
|
|
599
611
|
it 'does not apply the write concern' do
|
600
612
|
expect(map_reduce.to_a.size).to eq(2)
|
@@ -747,7 +759,8 @@ describe Mongo::Collection::View::MapReduce do
|
|
747
759
|
{ name: 'BANG' }
|
748
760
|
end
|
749
761
|
|
750
|
-
context 'when the server selected supports collations'
|
762
|
+
context 'when the server selected supports collations' do
|
763
|
+
min_server_fcv '3.4'
|
751
764
|
|
752
765
|
context 'when the collation key is a String' do
|
753
766
|
|
@@ -772,7 +785,8 @@ describe Mongo::Collection::View::MapReduce do
|
|
772
785
|
end
|
773
786
|
end
|
774
787
|
|
775
|
-
context 'when the server selected does not support collations'
|
788
|
+
context 'when the server selected does not support collations' do
|
789
|
+
max_server_version '3.2'
|
776
790
|
|
777
791
|
context 'when the map reduce has collation specified in its options' do
|
778
792
|
|
@@ -21,7 +21,7 @@ describe Mongo::Collection::View::Readable do
|
|
21
21
|
shared_examples_for 'a read concern aware operation' do
|
22
22
|
|
23
23
|
context 'when a read concern is provided' do
|
24
|
-
|
24
|
+
min_server_fcv '3.2'
|
25
25
|
|
26
26
|
let(:new_view) do
|
27
27
|
Mongo::Collection::View.new(new_collection, selector, options)
|
@@ -321,13 +321,18 @@ describe Mongo::Collection::View::Readable do
|
|
321
321
|
end
|
322
322
|
end
|
323
323
|
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
324
|
+
context 'not sharded' do
|
325
|
+
require_topology :single, :replica_set
|
326
|
+
|
327
|
+
it 'takes a read preference option' do
|
328
|
+
# Secondary may be delayed, since this tests wants 10 documents
|
329
|
+
# it must query the primary
|
330
|
+
expect(view.count(read: { mode: :primary })).to eq(10)
|
331
|
+
end
|
328
332
|
end
|
329
333
|
|
330
|
-
context 'when a read preference is set on the view'
|
334
|
+
context 'when a read preference is set on the view' do
|
335
|
+
require_topology :single, :replica_set
|
331
336
|
|
332
337
|
let(:client) do
|
333
338
|
# Set a timeout otherwise, the test will hang for 30 seconds.
|
@@ -411,7 +416,8 @@ describe Mongo::Collection::View::Readable do
|
|
411
416
|
end
|
412
417
|
end
|
413
418
|
|
414
|
-
context 'when no read preference argument is provided'
|
419
|
+
context 'when no read preference argument is provided' do
|
420
|
+
require_topology :single, :replica_set
|
415
421
|
|
416
422
|
before do
|
417
423
|
allow(view.collection.client.cluster).to receive(:single?).and_return(false)
|
@@ -428,7 +434,8 @@ describe Mongo::Collection::View::Readable do
|
|
428
434
|
end
|
429
435
|
end
|
430
436
|
|
431
|
-
context 'when the collection does not have a read preference set'
|
437
|
+
context 'when the collection does not have a read preference set' do
|
438
|
+
require_topology :single, :replica_set
|
432
439
|
|
433
440
|
after do
|
434
441
|
client.close
|
@@ -506,14 +513,16 @@ describe Mongo::Collection::View::Readable do
|
|
506
513
|
{ collation: { locale: 'en_US', strength: 2 } }
|
507
514
|
end
|
508
515
|
|
509
|
-
context 'when the server selected supports collations'
|
516
|
+
context 'when the server selected supports collations' do
|
517
|
+
min_server_fcv '3.4'
|
510
518
|
|
511
519
|
it 'applies the collation to the count' do
|
512
520
|
expect(result).to eq(1)
|
513
521
|
end
|
514
522
|
end
|
515
523
|
|
516
|
-
context 'when the server selected does not support collations'
|
524
|
+
context 'when the server selected does not support collations' do
|
525
|
+
max_server_version '3.2'
|
517
526
|
|
518
527
|
it 'raises an exception' do
|
519
528
|
expect {
|
@@ -554,14 +563,16 @@ describe Mongo::Collection::View::Readable do
|
|
554
563
|
{ collation: { locale: 'en_US', strength: 2 } }
|
555
564
|
end
|
556
565
|
|
557
|
-
context 'when the server selected supports collations'
|
566
|
+
context 'when the server selected supports collations' do
|
567
|
+
min_server_fcv '3.4'
|
558
568
|
|
559
569
|
it 'applies the collation to the count' do
|
560
570
|
expect(result).to eq(1)
|
561
571
|
end
|
562
572
|
end
|
563
573
|
|
564
|
-
context 'when the server selected does not support collations'
|
574
|
+
context 'when the server selected does not support collations' do
|
575
|
+
max_server_version '3.2'
|
565
576
|
|
566
577
|
it 'raises an exception' do
|
567
578
|
expect {
|
@@ -699,7 +710,8 @@ describe Mongo::Collection::View::Readable do
|
|
699
710
|
end
|
700
711
|
end
|
701
712
|
|
702
|
-
context 'when a read preference is set on the view'
|
713
|
+
context 'when a read preference is set on the view' do
|
714
|
+
require_topology :single, :replica_set
|
703
715
|
|
704
716
|
let(:client) do
|
705
717
|
# Set a timeout otherwise, the test will hang for 30 seconds.
|
@@ -776,7 +788,8 @@ describe Mongo::Collection::View::Readable do
|
|
776
788
|
end
|
777
789
|
end
|
778
790
|
|
779
|
-
context 'when no read preference argument is provided'
|
791
|
+
context 'when no read preference argument is provided' do
|
792
|
+
require_topology :single, :replica_set
|
780
793
|
|
781
794
|
before do
|
782
795
|
allow(view.collection.client.cluster).to receive(:single?).and_return(false)
|
@@ -793,7 +806,8 @@ describe Mongo::Collection::View::Readable do
|
|
793
806
|
end
|
794
807
|
end
|
795
808
|
|
796
|
-
context 'when the collection does not have a read preference set'
|
809
|
+
context 'when the collection does not have a read preference set' do
|
810
|
+
require_topology :single, :replica_set
|
797
811
|
|
798
812
|
let(:documents) do
|
799
813
|
(1..3).map{ |i| { field: "test#{i}" }}
|
@@ -891,14 +905,16 @@ describe Mongo::Collection::View::Readable do
|
|
891
905
|
{ collation: { locale: 'en_US', strength: 2 } }
|
892
906
|
end
|
893
907
|
|
894
|
-
context 'when the server selected supports collations'
|
908
|
+
context 'when the server selected supports collations' do
|
909
|
+
min_server_fcv '3.4'
|
895
910
|
|
896
911
|
it 'applies the collation to the distinct' do
|
897
912
|
expect(result).to eq(['bang'])
|
898
913
|
end
|
899
914
|
end
|
900
915
|
|
901
|
-
context 'when the server selected does not support collations'
|
916
|
+
context 'when the server selected does not support collations' do
|
917
|
+
max_server_version '3.2'
|
902
918
|
|
903
919
|
it 'raises an exception' do
|
904
920
|
expect {
|
@@ -936,14 +952,16 @@ describe Mongo::Collection::View::Readable do
|
|
936
952
|
{ collation: { locale: 'en_US', strength: 2 } }
|
937
953
|
end
|
938
954
|
|
939
|
-
context 'when the server selected supports collations'
|
955
|
+
context 'when the server selected supports collations' do
|
956
|
+
min_server_fcv '3.4'
|
940
957
|
|
941
958
|
it 'applies the collation to the distinct' do
|
942
959
|
expect(result).to eq(['bang'])
|
943
960
|
end
|
944
961
|
end
|
945
962
|
|
946
|
-
context 'when the server selected does not support collations'
|
963
|
+
context 'when the server selected does not support collations' do
|
964
|
+
max_server_version '3.2'
|
947
965
|
|
948
966
|
it 'raises an exception' do
|
949
967
|
expect {
|