mongo 2.7.0 → 2.7.1
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 +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
@@ -103,7 +103,8 @@ describe Mongo::Socket::SSL do
|
|
103
103
|
end
|
104
104
|
end
|
105
105
|
|
106
|
-
context 'when certificate and an encrypted key are provided as strings'
|
106
|
+
context 'when certificate and an encrypted key are provided as strings' do
|
107
|
+
require_local_tls
|
107
108
|
|
108
109
|
let(:options) do
|
109
110
|
{
|
@@ -321,7 +322,8 @@ describe Mongo::Socket::SSL do
|
|
321
322
|
end
|
322
323
|
end
|
323
324
|
|
324
|
-
context 'when ruby version is < 2.4.1'
|
325
|
+
context 'when ruby version is < 2.4.1' do
|
326
|
+
ruby_version_lt '2.4.1'
|
325
327
|
|
326
328
|
context 'when a key is passed, but it is not of the right type' do
|
327
329
|
|
@@ -347,7 +349,8 @@ describe Mongo::Socket::SSL do
|
|
347
349
|
# a NoMethodError because #private? is attempted to be called on the key.
|
348
350
|
# In jruby 9.2 a TypeError is raised.
|
349
351
|
# In jruby 9.1 a OpenSSL::PKey::PKeyError is raised.
|
350
|
-
context 'when ruby version is >= 2.4.1'
|
352
|
+
context 'when ruby version is >= 2.4.1' do
|
353
|
+
ruby_version_gte '2.4.1'
|
351
354
|
|
352
355
|
context 'when a key is passed, but it is not of the right type' do
|
353
356
|
|
@@ -415,7 +418,8 @@ describe Mongo::Socket::SSL do
|
|
415
418
|
end
|
416
419
|
end
|
417
420
|
|
418
|
-
context 'when a CA certificate is provided'
|
421
|
+
context 'when a CA certificate is provided' do
|
422
|
+
require_local_tls
|
419
423
|
|
420
424
|
context 'as a path to a file' do
|
421
425
|
|
@@ -531,7 +535,8 @@ describe Mongo::Socket::SSL do
|
|
531
535
|
end
|
532
536
|
end
|
533
537
|
|
534
|
-
context 'when a CA certificate is not provided'
|
538
|
+
context 'when a CA certificate is not provided' do
|
539
|
+
require_local_tls
|
535
540
|
|
536
541
|
let(:options) do
|
537
542
|
super().merge(
|
@@ -549,7 +554,8 @@ describe Mongo::Socket::SSL do
|
|
549
554
|
end
|
550
555
|
end
|
551
556
|
|
552
|
-
context 'when ssl_verify is not specified'
|
557
|
+
context 'when ssl_verify is not specified' do
|
558
|
+
require_local_tls
|
553
559
|
|
554
560
|
let(:options) do
|
555
561
|
super().merge(
|
@@ -566,7 +572,8 @@ describe Mongo::Socket::SSL do
|
|
566
572
|
end
|
567
573
|
end
|
568
574
|
|
569
|
-
context 'when ssl_verify is true'
|
575
|
+
context 'when ssl_verify is true' do
|
576
|
+
require_local_tls
|
570
577
|
|
571
578
|
let(:options) do
|
572
579
|
super().merge(
|
@@ -5,6 +5,17 @@ describe Mongo::URI::SRVProtocol do
|
|
5
5
|
let(:scheme) { 'mongodb+srv://' }
|
6
6
|
let(:uri) { described_class.new(string) }
|
7
7
|
|
8
|
+
before(:all) do
|
9
|
+
# Since these tests assert on warnings being produced,
|
10
|
+
# close clients to ensure background threads do not interfere with
|
11
|
+
# their warnings.
|
12
|
+
ClientRegistry.instance.close_all_clients
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:client) do
|
16
|
+
new_local_client(string, monitoring_io: false)
|
17
|
+
end
|
18
|
+
|
8
19
|
describe 'invalid uris' do
|
9
20
|
|
10
21
|
context 'when there is more than one hostname' do
|
@@ -346,7 +357,7 @@ describe Mongo::URI::SRVProtocol do
|
|
346
357
|
end
|
347
358
|
|
348
359
|
it 'sets the options on a client created with the uri' do
|
349
|
-
expect(
|
360
|
+
expect(client.options[:write]).to eq(concern)
|
350
361
|
end
|
351
362
|
end
|
352
363
|
|
@@ -359,7 +370,7 @@ describe Mongo::URI::SRVProtocol do
|
|
359
370
|
end
|
360
371
|
|
361
372
|
it 'sets the options on a client created with the uri' do
|
362
|
-
expect(
|
373
|
+
expect(client.options[:write]).to eq(concern)
|
363
374
|
end
|
364
375
|
end
|
365
376
|
|
@@ -372,7 +383,7 @@ describe Mongo::URI::SRVProtocol do
|
|
372
383
|
end
|
373
384
|
|
374
385
|
it 'sets the options on a client created with the uri' do
|
375
|
-
expect(
|
386
|
+
expect(client.options[:write]).to eq(concern)
|
376
387
|
end
|
377
388
|
end
|
378
389
|
|
@@ -385,7 +396,7 @@ describe Mongo::URI::SRVProtocol do
|
|
385
396
|
end
|
386
397
|
|
387
398
|
it 'sets the options on a client created with the uri' do
|
388
|
-
expect(
|
399
|
+
expect(client.options[:write]).to eq(concern)
|
389
400
|
end
|
390
401
|
end
|
391
402
|
|
@@ -399,7 +410,7 @@ describe Mongo::URI::SRVProtocol do
|
|
399
410
|
end
|
400
411
|
|
401
412
|
it 'sets the options on a client created with the uri' do
|
402
|
-
expect(
|
413
|
+
expect(client.options[:write]).to eq(concern)
|
403
414
|
end
|
404
415
|
end
|
405
416
|
end
|
@@ -416,7 +427,7 @@ describe Mongo::URI::SRVProtocol do
|
|
416
427
|
end
|
417
428
|
|
418
429
|
it 'sets the options on a client created with the uri' do
|
419
|
-
expect(
|
430
|
+
expect(client.options[:read]).to eq(read)
|
420
431
|
end
|
421
432
|
end
|
422
433
|
|
@@ -429,7 +440,7 @@ describe Mongo::URI::SRVProtocol do
|
|
429
440
|
end
|
430
441
|
|
431
442
|
it 'sets the options on a client created with the uri' do
|
432
|
-
expect(
|
443
|
+
expect(client.options[:read]).to eq(read)
|
433
444
|
end
|
434
445
|
end
|
435
446
|
|
@@ -442,7 +453,7 @@ describe Mongo::URI::SRVProtocol do
|
|
442
453
|
end
|
443
454
|
|
444
455
|
it 'sets the options on a client created with the uri' do
|
445
|
-
expect(
|
456
|
+
expect(client.options[:read]).to eq(read)
|
446
457
|
end
|
447
458
|
end
|
448
459
|
|
@@ -455,7 +466,7 @@ describe Mongo::URI::SRVProtocol do
|
|
455
466
|
end
|
456
467
|
|
457
468
|
it 'sets the options on a client created with the uri' do
|
458
|
-
expect(
|
469
|
+
expect(client.options[:read]).to eq(read)
|
459
470
|
end
|
460
471
|
end
|
461
472
|
|
@@ -468,7 +479,7 @@ describe Mongo::URI::SRVProtocol do
|
|
468
479
|
end
|
469
480
|
|
470
481
|
it 'sets the options on a client created with the uri' do
|
471
|
-
expect(
|
482
|
+
expect(client.options[:read]).to eq(read)
|
472
483
|
end
|
473
484
|
end
|
474
485
|
end
|
@@ -489,7 +500,7 @@ describe Mongo::URI::SRVProtocol do
|
|
489
500
|
end
|
490
501
|
|
491
502
|
it 'sets the options on a client created with the uri' do
|
492
|
-
expect(
|
503
|
+
expect(client.options[:read]).to eq(read)
|
493
504
|
end
|
494
505
|
end
|
495
506
|
|
@@ -507,7 +518,7 @@ describe Mongo::URI::SRVProtocol do
|
|
507
518
|
end
|
508
519
|
|
509
520
|
it 'sets the options on a client created with the uri' do
|
510
|
-
expect(
|
521
|
+
expect(client.options[:read]).to eq(read)
|
511
522
|
end
|
512
523
|
end
|
513
524
|
end
|
@@ -527,7 +538,7 @@ describe Mongo::URI::SRVProtocol do
|
|
527
538
|
end
|
528
539
|
|
529
540
|
it 'sets the options on a client created with the uri' do
|
530
|
-
expect(
|
541
|
+
expect(client.options[:read]).to eq(read)
|
531
542
|
end
|
532
543
|
|
533
544
|
context 'when the read preference and max staleness combination is invalid' do
|
@@ -540,7 +551,7 @@ describe Mongo::URI::SRVProtocol do
|
|
540
551
|
|
541
552
|
it 'raises an exception when read preference is accessed on the client' do
|
542
553
|
expect {
|
543
|
-
|
554
|
+
client.server_selector
|
544
555
|
}.to raise_exception(Mongo::Error::InvalidServerPreference)
|
545
556
|
end
|
546
557
|
end
|
@@ -552,7 +563,7 @@ describe Mongo::URI::SRVProtocol do
|
|
552
563
|
end
|
553
564
|
|
554
565
|
it 'does not raise an exception until the read preference is used' do
|
555
|
-
expect(
|
566
|
+
expect(client.read_preference).to eq(BSON::Document.new(mode: :secondary, max_staleness: 89))
|
556
567
|
end
|
557
568
|
end
|
558
569
|
end
|
@@ -567,7 +578,7 @@ describe Mongo::URI::SRVProtocol do
|
|
567
578
|
end
|
568
579
|
|
569
580
|
it 'sets the options on a client created with the uri' do
|
570
|
-
expect(
|
581
|
+
expect(client.options[:replica_set]).to eq(rs_name)
|
571
582
|
end
|
572
583
|
end
|
573
584
|
|
@@ -583,7 +594,7 @@ describe Mongo::URI::SRVProtocol do
|
|
583
594
|
end
|
584
595
|
|
585
596
|
it 'sets the options on a client created with the uri' do
|
586
|
-
expect(
|
597
|
+
expect(client.options[:auth_mech]).to eq(expected)
|
587
598
|
end
|
588
599
|
|
589
600
|
it 'is case-insensitive' do
|
@@ -600,7 +611,7 @@ describe Mongo::URI::SRVProtocol do
|
|
600
611
|
end
|
601
612
|
|
602
613
|
it 'sets the options on a client created with the uri' do
|
603
|
-
expect(
|
614
|
+
expect(client.options[:auth_mech]).to eq(expected)
|
604
615
|
end
|
605
616
|
|
606
617
|
it 'is case-insensitive' do
|
@@ -617,7 +628,7 @@ describe Mongo::URI::SRVProtocol do
|
|
617
628
|
end
|
618
629
|
|
619
630
|
it 'sets the options on a client created with the uri' do
|
620
|
-
expect(
|
631
|
+
expect(client.options[:auth_mech]).to eq(expected)
|
621
632
|
end
|
622
633
|
|
623
634
|
it 'is case-insensitive' do
|
@@ -634,7 +645,7 @@ describe Mongo::URI::SRVProtocol do
|
|
634
645
|
end
|
635
646
|
|
636
647
|
it 'sets the options on a client created with the uri' do
|
637
|
-
expect(
|
648
|
+
expect(client.options[:auth_mech]).to eq(expected)
|
638
649
|
end
|
639
650
|
|
640
651
|
it 'is case-insensitive' do
|
@@ -651,7 +662,7 @@ describe Mongo::URI::SRVProtocol do
|
|
651
662
|
end
|
652
663
|
|
653
664
|
it 'sets the options on a client created with the uri' do
|
654
|
-
expect(
|
665
|
+
expect(client.options[:auth_mech]).to eq(expected)
|
655
666
|
end
|
656
667
|
|
657
668
|
it 'is case-insensitive' do
|
@@ -679,7 +690,7 @@ describe Mongo::URI::SRVProtocol do
|
|
679
690
|
end
|
680
691
|
|
681
692
|
it 'sets the options on a client created with the uri' do
|
682
|
-
expect(
|
693
|
+
expect(client.options[:auth_source]).to eq(source)
|
683
694
|
end
|
684
695
|
end
|
685
696
|
|
@@ -692,7 +703,7 @@ describe Mongo::URI::SRVProtocol do
|
|
692
703
|
end
|
693
704
|
|
694
705
|
it 'sets the options on a client created with the uri' do
|
695
|
-
expect(
|
706
|
+
expect(client.options[:auth_source]).to eq(expected)
|
696
707
|
end
|
697
708
|
end
|
698
709
|
end
|
@@ -712,7 +723,7 @@ describe Mongo::URI::SRVProtocol do
|
|
712
723
|
end
|
713
724
|
|
714
725
|
it 'sets the options on a client created with the uri' do
|
715
|
-
expect(
|
726
|
+
expect(client.options[:auth_mech_properties]).to eq(expected)
|
716
727
|
end
|
717
728
|
end
|
718
729
|
|
@@ -728,7 +739,7 @@ describe Mongo::URI::SRVProtocol do
|
|
728
739
|
end
|
729
740
|
|
730
741
|
it 'sets the options on a client created with the uri' do
|
731
|
-
expect(
|
742
|
+
expect(client.options[:auth_mech_properties]).to eq(expected)
|
732
743
|
end
|
733
744
|
end
|
734
745
|
|
@@ -746,7 +757,7 @@ describe Mongo::URI::SRVProtocol do
|
|
746
757
|
end
|
747
758
|
|
748
759
|
it 'sets the options on a client created with the uri' do
|
749
|
-
expect(
|
760
|
+
expect(client.options[:auth_mech_properties]).to eq(expected)
|
750
761
|
end
|
751
762
|
end
|
752
763
|
|
@@ -772,7 +783,7 @@ describe Mongo::URI::SRVProtocol do
|
|
772
783
|
end
|
773
784
|
|
774
785
|
it 'sets the options on a client created with the uri' do
|
775
|
-
expect(
|
786
|
+
expect(client.options[:auth_mech_properties]).to eq(expected)
|
776
787
|
end
|
777
788
|
end
|
778
789
|
end
|
@@ -900,7 +911,7 @@ describe Mongo::URI::SRVProtocol do
|
|
900
911
|
let(:options) { "appname=srv_test" }
|
901
912
|
|
902
913
|
it 'sets the app name on the client' do
|
903
|
-
expect(
|
914
|
+
expect(client.options[:app_name]).to eq(:srv_test)
|
904
915
|
end
|
905
916
|
end
|
906
917
|
|
@@ -908,17 +919,13 @@ describe Mongo::URI::SRVProtocol do
|
|
908
919
|
let(:options) { "compressors=zlib" }
|
909
920
|
|
910
921
|
it 'sets the compressors as an array on the client' do
|
911
|
-
expect(
|
922
|
+
expect(client.options[:compressors]).to eq(['zlib'])
|
912
923
|
end
|
913
924
|
end
|
914
925
|
|
915
926
|
context 'when a non-supported compressors option is provided' do
|
916
927
|
let(:options) { "compressors=snoopy" }
|
917
928
|
|
918
|
-
let(:client) do
|
919
|
-
new_local_client(string)
|
920
|
-
end
|
921
|
-
|
922
929
|
it 'sets no compressors on the client and warns' do
|
923
930
|
expect(Mongo::Logger.logger).to receive(:warn)
|
924
931
|
expect(client.options[:compressors]).to be_nil
|
@@ -929,7 +936,7 @@ describe Mongo::URI::SRVProtocol do
|
|
929
936
|
let(:options) { "zlibCompressionLevel=6" }
|
930
937
|
|
931
938
|
it 'sets the zlib compression level on the client' do
|
932
|
-
expect(
|
939
|
+
expect(client.options[:zlib_compression_level]).to eq(6)
|
933
940
|
end
|
934
941
|
end
|
935
942
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,80 +1,3 @@
|
|
1
|
-
# The tests run against a MongoDB cluster which is
|
2
|
-
# configured and started externally to the test suite. This allows
|
3
|
-
# running the entire test suite against, for example, a standalone
|
4
|
-
# mongod as well as a replica set. The flip side to this is the
|
5
|
-
# test suite will not work without a running mongo cluster, and
|
6
|
-
# tests which are not applicable to or cannot be performed on the
|
7
|
-
# running mongo cluster are skipped.
|
8
|
-
#
|
9
|
-
# Not only does the test suite require an externally launched cluster,
|
10
|
-
# the test suite must also be told how the cluster is configured
|
11
|
-
# via MONGODB_URI, TOPOLOGY, MONGODB_ADDRESSES, RS_ENABLED, RS_NAME and
|
12
|
-
# SHARDED_ENABLED environment variables.
|
13
|
-
#
|
14
|
-
# The test suite does not validate that it is able to successfully connect
|
15
|
-
# to the cluster prior to running the tests. If a connection fails entirely,
|
16
|
-
# the clue is generally failures to invoke methods on nil.
|
17
|
-
# However, it is also possible to establish a connection to a cluster which
|
18
|
-
# is not quite correctly configured. The result is usually a mass of test
|
19
|
-
# failures that are indistinguishable from legitimate failures.
|
20
|
-
#
|
21
|
-
# Additionally some of the tests assume that the seed list (given in
|
22
|
-
# MONGODB_URI or MONGODB_ADDRESSES) encompasses all servers in the cluster,
|
23
|
-
# and will fail when MONGODB_URI includes only one host of a replica set.
|
24
|
-
# It is best to include all hosts of the cluster in MONGODB_URI and
|
25
|
-
# MONGODB_ADDRESSES.
|
26
|
-
#
|
27
|
-
# The test suite seems to have issues connecting to a replica set
|
28
|
-
# via IP addresses if the replica set hosts are defined with hostnames
|
29
|
-
# (i.e., 127.0.0.1 vs localhost). Try to exactly match the contents of
|
30
|
-
# MONGODB_URI and `rs.isMaster()` output, either by adjusting MONGODB_URI
|
31
|
-
# or by reconfiguring the replica set.
|
32
|
-
#
|
33
|
-
# In order to run spec tests, the mongo cluster needs to have fail points
|
34
|
-
# enabled. This is accomplished by starting mongod with the following option:
|
35
|
-
# --setParameter enableTestCommands=1
|
36
|
-
#
|
37
|
-
# Use the following environment variables to configure the tests:
|
38
|
-
#
|
39
|
-
# CLIENT_DEBUG: Show debug messages from the client.
|
40
|
-
# CLIENT_DEBUG=1
|
41
|
-
#
|
42
|
-
# MONGODB_URI: Connection string to use. This must be a valid MongoDB URI;
|
43
|
-
# mongodb:// and mongodb+srv:// are both supported.
|
44
|
-
# RS_ENABLED and SHARDED_ENABLED are NOT honored if using MONGODB_URI -
|
45
|
-
# specify replica set name in the URI and to specify a sharded topology
|
46
|
-
# set TOPOLOGY=sharded_cluster environment variable.
|
47
|
-
# MONGODB_URI=mongodb://127.0.0.1:27001/?replicaSet=test
|
48
|
-
# MONGODB_URI=mongodb://127.0.0.1:27001,127.0.0.1:27002/ TOPOLOGY=sharded_cluster
|
49
|
-
#
|
50
|
-
# MONGODB_ADDRESSES: Specify addresses to connect to. Use RS_ENABLED,
|
51
|
-
# RS_NAME and SHARDED_ENABLED to configure the topology.
|
52
|
-
# MONGODB_ADDRESSES=127.0.0.1:27017,127.0.0.1:27018
|
53
|
-
# MONGODB_ADDRESSES=127.0.0.1:27017,127.0.0.1:27018 RS_ENABLED=1
|
54
|
-
# MONGODB_ADDRESSES=127.0.0.1:27017,127.0.0.1:27018 RS_ENABLED=1 RS_NAME=test
|
55
|
-
# MONGODB_ADDRESSES=127.0.0.1:27017,127.0.0.1:27018 SHARDED_ENABLED=1
|
56
|
-
#
|
57
|
-
# RS_ENABLED: Instruct the test suite to connect to a replica set.
|
58
|
-
# RS_ENABLED is only honored when not using MONGODB_URI; to connect to a
|
59
|
-
# replica set with MONGODB_URI, specify the replica set name in the URI
|
60
|
-
# (despite the Ruby driver performing topology discovery by default, it
|
61
|
-
# doesn't do so in the test suite).
|
62
|
-
# RS_NAME can be given to specify the replica set name; the default is
|
63
|
-
# ruby-driver-rs.
|
64
|
-
# RS_ENABLED=1
|
65
|
-
# RS_ENABLED=1 RS_NAME=test
|
66
|
-
#
|
67
|
-
# SHARDED_ENABLED: Instruct the test suite to connect to the sharded cluster.
|
68
|
-
# Set MONGODB_URI appropriately as well.
|
69
|
-
# SHARDED_ENABLED=1
|
70
|
-
#
|
71
|
-
# SSL_ENABLED: Instruct the test suite to connect to the cluster via SSL.
|
72
|
-
# SSL_ENABLED=1
|
73
|
-
# # Also acceptable:
|
74
|
-
# SSL=ssl
|
75
|
-
#
|
76
|
-
# Note: SSL can also be enabled by giving ssl=true in the MONGODB_URI options.
|
77
|
-
|
78
1
|
require 'lite_spec_helper'
|
79
2
|
|
80
3
|
# Replica set name can be overridden via replicaSet parameter in MONGODB_URI
|
@@ -93,29 +16,13 @@ RSpec.configure do |config|
|
|
93
16
|
config.include(Authorization)
|
94
17
|
config.extend(Constraints)
|
95
18
|
|
96
|
-
config.
|
97
|
-
if
|
98
|
-
|
19
|
+
config.before(:all) do
|
20
|
+
if ClusterConfig.instance.fcv_ish >= '3.6'
|
21
|
+
kill_all_server_sessions
|
99
22
|
end
|
100
23
|
end
|
101
24
|
end
|
102
25
|
|
103
|
-
# Determine whether the test clients are connecting to a standalone.
|
104
|
-
#
|
105
|
-
# @since 2.0.0
|
106
|
-
def standalone?
|
107
|
-
$mongo_client ||= initialize_scanned_client!
|
108
|
-
$standalone ||= $mongo_client.cluster.servers.first.standalone?
|
109
|
-
end
|
110
|
-
|
111
|
-
# Determine whether the test clients are connecting to a replica set.
|
112
|
-
#
|
113
|
-
# @since 2.0.0
|
114
|
-
def replica_set?
|
115
|
-
$mongo_client ||= initialize_scanned_client!
|
116
|
-
$replica_set ||= $mongo_client.cluster.replica_set?
|
117
|
-
end
|
118
|
-
|
119
26
|
# Determine whether the test clients are connecting to a sharded cluster
|
120
27
|
# or a single mongos.
|
121
28
|
#
|
@@ -145,41 +52,6 @@ def single_mongos?
|
|
145
52
|
ClusterConfig.instance.single_server? && ClusterConfig.instance.mongos?
|
146
53
|
end
|
147
54
|
|
148
|
-
# For instances where behavior is different on different versions, we need to
|
149
|
-
# determine in the specs if we are 3.6 or higher.
|
150
|
-
#
|
151
|
-
# @since 2.5.0
|
152
|
-
def op_msg_enabled?
|
153
|
-
$op_msg_enabled ||= scanned_client_server!.features.op_msg_enabled?
|
154
|
-
end
|
155
|
-
alias :change_stream_enabled? :op_msg_enabled?
|
156
|
-
alias :sessions_enabled? :op_msg_enabled?
|
157
|
-
|
158
|
-
# Whether change streams can be tested. Change streams are available on server versions 3.6
|
159
|
-
# and higher and when connected to a replica set.
|
160
|
-
#
|
161
|
-
# @since 2.5.0
|
162
|
-
def test_change_streams?
|
163
|
-
!BSON::Environment.jruby? && change_stream_enabled? & replica_set?
|
164
|
-
end
|
165
|
-
|
166
|
-
# For instances where behavior is different on different versions, we need to
|
167
|
-
# determine in the specs if we are 3.6 or higher.
|
168
|
-
#
|
169
|
-
# @since 2.5.0
|
170
|
-
def array_filters_enabled?
|
171
|
-
$array_filters_enabled ||= scanned_client_server!.features.array_filters_enabled?
|
172
|
-
end
|
173
|
-
|
174
|
-
|
175
|
-
# For instances where behavior is different on different versions, we need to
|
176
|
-
# determine in the specs if we are 3.4 or higher.
|
177
|
-
#
|
178
|
-
# @since 2.4.0
|
179
|
-
def collation_enabled?
|
180
|
-
$collation_enabled ||= scanned_client_server!.features.collation_enabled?
|
181
|
-
end
|
182
|
-
|
183
55
|
# For instances where behavior is different on different versions, we need to
|
184
56
|
# determine in the specs if we are 3.2 or higher.
|
185
57
|
#
|
@@ -188,14 +60,6 @@ def find_command_enabled?
|
|
188
60
|
$find_command_enabled ||= scanned_client_server!.features.find_command_enabled?
|
189
61
|
end
|
190
62
|
|
191
|
-
# For instances where behavior is different on different versions, we need to
|
192
|
-
# determine in the specs if we are 2.7 or higher.
|
193
|
-
#
|
194
|
-
# @since 2.0.0
|
195
|
-
def list_command_enabled?
|
196
|
-
$list_command_enabled ||= scanned_client_server!.features.list_indexes_enabled?
|
197
|
-
end
|
198
|
-
|
199
63
|
# For instances where behavior is different on different versions, we need to
|
200
64
|
# determine in the specs if we are 4.0 or higher.
|
201
65
|
#
|
@@ -204,58 +68,6 @@ def scram_sha_256_enabled?
|
|
204
68
|
$scram_sha_256_enabled ||= scanned_client_server!.features.scram_sha_256_enabled?
|
205
69
|
end
|
206
70
|
|
207
|
-
# Is the test suite running locally (not on Travis).
|
208
|
-
#
|
209
|
-
# @since 2.1.0
|
210
|
-
def testing_ssl_locally?
|
211
|
-
SpecConfig.instance.ssl? && !(ENV['CI'])
|
212
|
-
end
|
213
|
-
|
214
|
-
# Is the test suite using compression.
|
215
|
-
#
|
216
|
-
# @since 2.5.0
|
217
|
-
def compression_enabled?
|
218
|
-
!SpecConfig.instance.compressors.nil?
|
219
|
-
end
|
220
|
-
|
221
|
-
# Is the test suite testing compression.
|
222
|
-
# Requires that the server supports compression and compression is used by the test client.
|
223
|
-
#
|
224
|
-
# @since 2.5.0
|
225
|
-
def testing_compression?
|
226
|
-
compression_enabled? && op_msg_enabled?
|
227
|
-
end
|
228
|
-
|
229
|
-
alias :scram_sha_1_enabled? :list_command_enabled?
|
230
|
-
|
231
|
-
# Try running a command on the admin database to see if the mongod was started with auth.
|
232
|
-
#
|
233
|
-
# @since 2.2.0
|
234
|
-
def auth_enabled?
|
235
|
-
if auth = ENV['AUTH']
|
236
|
-
auth == 'auth'
|
237
|
-
else
|
238
|
-
$mongo_client ||= initialize_scanned_client!
|
239
|
-
begin
|
240
|
-
$mongo_client.use(:admin).command(getCmdLineOpts: 1).first["argv"].include?("--auth")
|
241
|
-
rescue => e
|
242
|
-
e.message =~ /(not authorized)|(unauthorized)|(no users authenticated)|(requires authentication)/
|
243
|
-
end
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
def need_to_skip_on_sharded_auth_40?
|
248
|
-
sharded? && auth_enabled? && scram_sha_256_enabled?
|
249
|
-
end
|
250
|
-
|
251
|
-
# Can the driver specify a write concern that won't be overridden? (mongos 4.0+ overrides the write
|
252
|
-
# concern)
|
253
|
-
#
|
254
|
-
# @since 2.6.0
|
255
|
-
def can_set_write_concern?
|
256
|
-
!sharded? || !scram_sha_256_enabled?
|
257
|
-
end
|
258
|
-
|
259
71
|
# Initializes a basic scanned client to do an ismaster check.
|
260
72
|
#
|
261
73
|
# @since 2.0.0
|