mongo 2.14.1 → 2.15.0.alpha
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 +4 -1
- data/Rakefile +8 -15
- data/lib/mongo/auth/aws/conversation.rb +1 -4
- data/lib/mongo/auth/base.rb +13 -7
- data/lib/mongo/auth/conversation_base.rb +32 -0
- data/lib/mongo/auth/cr/conversation.rb +6 -29
- data/lib/mongo/auth/gssapi/conversation.rb +4 -15
- data/lib/mongo/auth/ldap/conversation.rb +3 -14
- data/lib/mongo/auth/sasl_conversation_base.rb +1 -13
- data/lib/mongo/auth/scram_conversation_base.rb +7 -34
- data/lib/mongo/auth/user/view.rb +16 -9
- data/lib/mongo/auth/x509/conversation.rb +4 -25
- data/lib/mongo/bulk_write.rb +21 -18
- data/lib/mongo/client.rb +82 -6
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +6 -2
- data/lib/mongo/cluster.rb +19 -2
- data/lib/mongo/collection/view/aggregation.rb +1 -1
- data/lib/mongo/collection/view/change_stream.rb +1 -1
- data/lib/mongo/collection/view/iterable.rb +7 -17
- data/lib/mongo/collection/view/map_reduce.rb +2 -2
- data/lib/mongo/collection/view/readable.rb +42 -20
- data/lib/mongo/collection/view/writable.rb +14 -14
- data/lib/mongo/collection.rb +6 -6
- data/lib/mongo/cursor.rb +2 -12
- data/lib/mongo/database/view.rb +1 -1
- data/lib/mongo/database.rb +8 -3
- data/lib/mongo/error/bulk_write_error.rb +17 -3
- data/lib/mongo/error/internal_driver_error.rb +22 -0
- data/lib/mongo/error/operation_failure.rb +21 -2
- data/lib/mongo/error/parser.rb +65 -12
- data/lib/mongo/error/server_api_conflict.rb +23 -0
- data/lib/mongo/error/server_api_not_supported.rb +24 -0
- data/lib/mongo/error/unmet_dependency.rb +21 -0
- data/lib/mongo/error.rb +9 -1
- data/lib/mongo/index/view.rb +21 -11
- data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +27 -16
- data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +26 -15
- data/lib/mongo/monitoring.rb +13 -4
- data/lib/mongo/operation/collections_info/command.rb +2 -2
- data/lib/mongo/operation/collections_info.rb +18 -1
- data/lib/mongo/operation/context.rb +99 -0
- data/lib/mongo/operation/indexes.rb +15 -1
- data/lib/mongo/operation/insert/command.rb +2 -2
- data/lib/mongo/operation/insert/legacy.rb +2 -2
- data/lib/mongo/operation/insert/op_msg.rb +2 -2
- data/lib/mongo/operation/list_collections/result.rb +4 -1
- data/lib/mongo/operation/parallel_scan/command.rb +2 -1
- data/lib/mongo/operation/result.rb +2 -0
- data/lib/mongo/operation/shared/executable.rb +24 -14
- data/lib/mongo/operation/shared/executable_no_validate.rb +2 -2
- data/lib/mongo/operation/shared/op_msg_or_command.rb +1 -7
- data/lib/mongo/operation/shared/op_msg_or_find_command.rb +1 -7
- data/lib/mongo/operation/shared/polymorphic_operation.rb +39 -0
- data/lib/mongo/operation/shared/read_preference_supported.rb +36 -38
- data/lib/mongo/operation/shared/response_handling.rb +23 -23
- data/lib/mongo/operation/shared/sessions_supported.rb +15 -5
- data/lib/mongo/operation/shared/write.rb +8 -18
- data/lib/mongo/operation.rb +2 -2
- data/lib/mongo/protocol/compressed.rb +51 -5
- data/lib/mongo/protocol/message.rb +20 -2
- data/lib/mongo/protocol/msg.rb +38 -13
- data/lib/mongo/protocol/query.rb +11 -11
- data/lib/mongo/query_cache.rb +30 -0
- data/lib/mongo/retryable.rb +1 -1
- data/lib/mongo/server/app_metadata.rb +52 -18
- data/lib/mongo/server/connection.rb +5 -0
- data/lib/mongo/server/connection_base.rb +13 -10
- data/lib/mongo/server/connection_pool.rb +6 -2
- data/lib/mongo/server/description/features.rb +9 -8
- data/lib/mongo/server/description.rb +4 -0
- data/lib/mongo/server/monitor/app_metadata.rb +1 -1
- data/lib/mongo/server/monitor/connection.rb +9 -10
- data/lib/mongo/server/monitor.rb +20 -1
- data/lib/mongo/server/pending_connection.rb +24 -6
- data/lib/mongo/server/push_monitor.rb +11 -1
- data/lib/mongo/server.rb +7 -1
- data/lib/mongo/server_selector/secondary_preferred.rb +7 -2
- data/lib/mongo/session/session_pool.rb +4 -2
- data/lib/mongo/session.rb +2 -2
- data/lib/mongo/socket/ssl.rb +8 -0
- data/lib/mongo/socket.rb +29 -4
- data/lib/mongo/uri/options_mapper.rb +38 -0
- data/lib/mongo/utils.rb +15 -0
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo.rb +23 -0
- data/spec/README.md +24 -1
- data/spec/integration/auth_spec.rb +25 -15
- data/spec/integration/bulk_write_error_message_spec.rb +41 -0
- data/spec/integration/change_stream_spec.rb +4 -4
- data/spec/integration/command_monitoring_spec.rb +2 -2
- data/spec/integration/connection_spec.rb +2 -0
- data/spec/integration/docs_examples_spec.rb +8 -1
- data/spec/integration/fork_reconnect_spec.rb +4 -1
- data/spec/integration/ocsp_verifier_spec.rb +13 -7
- data/spec/integration/operation_failure_code_spec.rb +1 -1
- data/spec/integration/operation_failure_message_spec.rb +90 -0
- data/spec/integration/query_cache_spec.rb +0 -45
- data/spec/integration/reconnect_spec.rb +1 -1
- data/spec/integration/snappy_compression_spec.rb +25 -0
- data/spec/integration/srv_monitoring_spec.rb +1 -1
- data/spec/integration/transactions_examples_spec.rb +6 -0
- data/spec/integration/zlib_compression_spec.rb +1 -1
- data/spec/integration/zstd_compression_spec.rb +26 -0
- data/spec/lite_spec_helper.rb +7 -1
- data/spec/mongo/address_spec.rb +15 -11
- data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
- data/spec/mongo/auth/ldap_spec.rb +5 -1
- data/spec/mongo/auth/scram_negotiation_spec.rb +1 -1
- data/spec/mongo/auth/scram_spec.rb +1 -1
- data/spec/mongo/auth/x509/conversation_spec.rb +3 -3
- data/spec/mongo/client_construction_spec.rb +207 -33
- data/spec/mongo/client_spec.rb +17 -0
- data/spec/mongo/cluster_spec.rb +1 -0
- data/spec/mongo/collection/view/explainable_spec.rb +1 -1
- data/spec/mongo/collection/view/readable_spec.rb +33 -19
- data/spec/mongo/collection_crud_spec.rb +4357 -0
- data/spec/mongo/collection_ddl_spec.rb +534 -0
- data/spec/mongo/collection_spec.rb +5 -4859
- data/spec/mongo/database_spec.rb +66 -4
- data/spec/mongo/error/bulk_write_error_spec.rb +3 -3
- data/spec/mongo/error/parser_spec.rb +37 -6
- data/spec/mongo/index/view_spec.rb +4 -0
- data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
- data/spec/mongo/operation/aggregate_spec.rb +2 -1
- data/spec/mongo/operation/collections_info_spec.rb +4 -1
- data/spec/mongo/operation/command_spec.rb +6 -3
- data/spec/mongo/operation/create_index_spec.rb +6 -3
- data/spec/mongo/operation/create_user_spec.rb +6 -3
- data/spec/mongo/operation/delete/bulk_spec.rb +9 -6
- data/spec/mongo/operation/delete_spec.rb +11 -7
- data/spec/mongo/operation/drop_index_spec.rb +6 -2
- data/spec/mongo/operation/find/legacy_spec.rb +3 -1
- data/spec/mongo/operation/get_more_spec.rb +3 -1
- data/spec/mongo/operation/indexes_spec.rb +5 -1
- data/spec/mongo/operation/insert/bulk_spec.rb +10 -7
- data/spec/mongo/operation/insert_spec.rb +15 -12
- data/spec/mongo/operation/map_reduce_spec.rb +5 -2
- data/spec/mongo/operation/read_preference_legacy_spec.rb +19 -9
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +3 -3
- data/spec/mongo/operation/remove_user_spec.rb +6 -3
- data/spec/mongo/operation/result_spec.rb +1 -1
- data/spec/mongo/operation/update/bulk_spec.rb +9 -6
- data/spec/mongo/operation/update_spec.rb +10 -7
- data/spec/mongo/operation/update_user_spec.rb +4 -1
- data/spec/mongo/protocol/compressed_spec.rb +26 -12
- data/spec/mongo/query_cache_middleware_spec.rb +55 -0
- data/spec/mongo/retryable_spec.rb +3 -2
- data/spec/mongo/server/app_metadata_shared.rb +7 -33
- data/spec/mongo/server/app_metadata_spec.rb +2 -0
- data/spec/mongo/server/connection_pool/populator_spec.rb +3 -1
- data/spec/mongo/server/connection_pool_spec.rb +1 -1
- data/spec/mongo/server/connection_spec.rb +24 -17
- data/spec/mongo/server/monitor/connection_spec.rb +17 -7
- data/spec/mongo/server/monitor_spec.rb +9 -1
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +6 -6
- data/spec/mongo/server_spec.rb +15 -2
- data/spec/mongo/socket/ssl_spec.rb +40 -0
- data/spec/mongo/socket_spec.rb +2 -2
- data/spec/mongo/tls_context_hooks_spec.rb +37 -0
- data/spec/runners/connection_string.rb +0 -4
- data/spec/runners/crud/requirement.rb +40 -3
- data/spec/runners/crud/verifier.rb +8 -0
- data/spec/runners/transactions/operation.rb +1 -1
- data/spec/runners/transactions/test.rb +1 -0
- data/spec/runners/unified/assertions.rb +249 -0
- data/spec/runners/unified/change_stream_operations.rb +26 -0
- data/spec/runners/unified/crud_operations.rb +199 -0
- data/spec/runners/unified/ddl_operations.rb +96 -0
- data/spec/runners/unified/entity_map.rb +39 -0
- data/spec/runners/unified/error.rb +25 -0
- data/spec/runners/unified/event_subscriber.rb +91 -0
- data/spec/runners/unified/exceptions.rb +21 -0
- data/spec/runners/unified/grid_fs_operations.rb +55 -0
- data/spec/runners/unified/support_operations.rb +250 -0
- data/spec/runners/unified/test.rb +393 -0
- data/spec/runners/unified/test_group.rb +28 -0
- data/spec/runners/unified/using_hash.rb +31 -0
- data/spec/runners/unified.rb +96 -0
- data/spec/shared/lib/mrss/cluster_config.rb +0 -3
- data/spec/shared/lib/mrss/docker_runner.rb +0 -3
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -16
- data/spec/shared/lib/mrss/server_version_registry.rb +0 -3
- data/spec/shared/lib/mrss/spec_organizer.rb +0 -3
- data/spec/shared/shlib/server.sh +1 -1
- data/spec/spec_helper.rb +4 -1
- data/spec/spec_tests/crud_unified_spec.rb +10 -0
- data/spec/spec_tests/data/change_streams/change-streams.yml +0 -1
- data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +267 -0
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +60 -0
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount.yml → estimatedDocumentCount-pre4.9.yml} +2 -0
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +146 -0
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors.yml → estimatedDocumentCount-serverErrors-pre4.9.yml} +2 -0
- data/spec/spec_tests/data/retryable_reads/listIndexNames.yml +1 -1
- data/spec/spec_tests/data/unified/valid-fail/operation-failure.yml +31 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +220 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +102 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +184 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-gridfs.yml +155 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +193 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +210 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +215 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +235 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +169 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +170 -0
- data/spec/spec_tests/data/uri_options/compression-options.yml +1 -1
- data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +416 -0
- data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +409 -0
- data/spec/spec_tests/data/versioned_api/runcommand-helper-no-api-version-declared.yml +67 -0
- data/spec/spec_tests/data/versioned_api/test-commands-deprecation-errors.yml +47 -0
- data/spec/spec_tests/data/versioned_api/test-commands-strict-mode.yml +44 -0
- data/spec/spec_tests/data/versioned_api/transaction-handling.yml +180 -0
- data/spec/spec_tests/unified_spec.rb +15 -0
- data/spec/spec_tests/uri_options_spec.rb +16 -0
- data/spec/spec_tests/versioned_api_spec.rb +10 -0
- data/spec/support/client_registry.rb +4 -8
- data/spec/support/client_registry_macros.rb +4 -4
- data/spec/support/common_shortcuts.rb +15 -1
- data/spec/support/shared/session.rb +2 -2
- data/spec/support/spec_config.rb +42 -11
- data/spec/support/utils.rb +64 -3
- data.tar.gz.sig +0 -0
- metadata +1005 -915
- metadata.gz.sig +0 -0
- data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +0 -58
- data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +0 -47
- data/spec/integration/secondary_reads_spec.rb +0 -102
- data/spec/support/cluster_config.rb +0 -207
@@ -463,7 +463,56 @@ describe Mongo::Client do
|
|
463
463
|
SpecConfig.instance.all_test_options.merge(options))
|
464
464
|
end
|
465
465
|
|
466
|
-
context 'when the compressor is supported' do
|
466
|
+
context 'when the compressor is not supported by the driver' do
|
467
|
+
require_warning_clean
|
468
|
+
|
469
|
+
let(:options) do
|
470
|
+
{ compressors: ['snoopy'] }
|
471
|
+
end
|
472
|
+
|
473
|
+
it 'does not set the compressor and warns' do
|
474
|
+
expect(Mongo::Logger.logger).to receive(:warn)
|
475
|
+
expect(client.options['compressors']).to be_nil
|
476
|
+
end
|
477
|
+
|
478
|
+
it 'sets the compression key of the handshake document to an empty array' do
|
479
|
+
expect(client.cluster.app_metadata.send(:document)[:compression]).to eq([])
|
480
|
+
end
|
481
|
+
|
482
|
+
context 'when one supported compressor and one unsupported compressor are provided' do
|
483
|
+
require_compression
|
484
|
+
min_server_fcv '3.6'
|
485
|
+
|
486
|
+
let(:options) do
|
487
|
+
{ compressors: ['zlib', 'snoopy'] }
|
488
|
+
end
|
489
|
+
|
490
|
+
it 'does not set the unsupported compressor and warns' do
|
491
|
+
expect(Mongo::Logger.logger).to receive(:warn).at_least(:once)
|
492
|
+
expect(client.options['compressors']).to eq(['zlib'])
|
493
|
+
end
|
494
|
+
|
495
|
+
it 'sets the compression key of the handshake document to the list of supported compressors' do
|
496
|
+
expect(client.cluster.app_metadata.send(:document)[:compression]).to eq(['zlib'])
|
497
|
+
end
|
498
|
+
end
|
499
|
+
end
|
500
|
+
|
501
|
+
context 'when the compressor is not supported by the server' do
|
502
|
+
max_server_version '3.4'
|
503
|
+
|
504
|
+
let(:options) do
|
505
|
+
{ compressors: ['zlib'] }
|
506
|
+
end
|
507
|
+
|
508
|
+
it 'does not set the compressor and warns' do
|
509
|
+
expect(Mongo::Logger.logger).to receive(:warn).at_least(:once)
|
510
|
+
expect(client.cluster.next_primary.monitor.compressor).to be_nil
|
511
|
+
end
|
512
|
+
end
|
513
|
+
|
514
|
+
context 'when zlib compression is requested' do
|
515
|
+
require_zlib_compression
|
467
516
|
|
468
517
|
let(:options) do
|
469
518
|
{ compressors: ['zlib'] }
|
@@ -478,7 +527,6 @@ describe Mongo::Client do
|
|
478
527
|
end
|
479
528
|
|
480
529
|
context 'when server supports compression' do
|
481
|
-
require_compression
|
482
530
|
min_server_fcv '3.6'
|
483
531
|
|
484
532
|
it 'uses compression for messages' do
|
@@ -495,51 +543,55 @@ describe Mongo::Client do
|
|
495
543
|
end
|
496
544
|
end
|
497
545
|
|
498
|
-
context 'when
|
499
|
-
|
546
|
+
context 'when snappy compression is requested and supported by the server' do
|
547
|
+
min_server_version '3.6'
|
500
548
|
|
501
549
|
let(:options) do
|
502
|
-
{ compressors: ['
|
550
|
+
{ compressors: ['snappy'] }
|
503
551
|
end
|
504
552
|
|
505
|
-
|
506
|
-
|
507
|
-
expect(client.options['compressors']).to be_nil
|
508
|
-
end
|
509
|
-
|
510
|
-
it 'sets the compression key of the handshake document to an empty array' do
|
511
|
-
expect(client.cluster.app_metadata.send(:document)[:compression]).to eq([])
|
512
|
-
end
|
553
|
+
context 'when snappy gem is installed' do
|
554
|
+
require_snappy_compression
|
513
555
|
|
514
|
-
|
515
|
-
|
516
|
-
min_server_fcv '3.6'
|
517
|
-
|
518
|
-
let(:options) do
|
519
|
-
{ compressors: ['zlib', 'snoopy'] }
|
556
|
+
it 'creates the client' do
|
557
|
+
expect(client.options['compressors']).to eq(['snappy'])
|
520
558
|
end
|
559
|
+
end
|
521
560
|
|
522
|
-
|
523
|
-
|
524
|
-
expect(client.options['compressors']).to eq(['zlib'])
|
525
|
-
end
|
561
|
+
context 'when snappy gem is not installed' do
|
562
|
+
require_no_snappy_compression
|
526
563
|
|
527
|
-
it '
|
528
|
-
expect
|
564
|
+
it 'raises an exception' do
|
565
|
+
expect do
|
566
|
+
client
|
567
|
+
end.to raise_error(Mongo::Error::UnmetDependency, /Cannot enable snappy compression/)
|
529
568
|
end
|
530
569
|
end
|
531
570
|
end
|
532
571
|
|
533
|
-
context 'when
|
534
|
-
|
572
|
+
context 'when zstd compression is requested and supported by the server' do
|
573
|
+
min_server_version '4.2'
|
535
574
|
|
536
575
|
let(:options) do
|
537
|
-
{ compressors: ['
|
576
|
+
{ compressors: ['zstd'] }
|
538
577
|
end
|
539
578
|
|
540
|
-
|
541
|
-
|
542
|
-
|
579
|
+
context 'when zstd gem is installed' do
|
580
|
+
require_zstd_compression
|
581
|
+
|
582
|
+
it 'creates the client' do
|
583
|
+
expect(client.options['compressors']).to eq(['zstd'])
|
584
|
+
end
|
585
|
+
end
|
586
|
+
|
587
|
+
context 'when zstd gem is not installed' do
|
588
|
+
require_no_zstd_compression
|
589
|
+
|
590
|
+
it 'raises an exception' do
|
591
|
+
expect do
|
592
|
+
client
|
593
|
+
end.to raise_error(Mongo::Error::UnmetDependency, /Cannot enable zstd compression/)
|
594
|
+
end
|
543
595
|
end
|
544
596
|
end
|
545
597
|
end
|
@@ -851,7 +903,8 @@ describe Mongo::Client do
|
|
851
903
|
[
|
852
904
|
"Ruby #{RUBY_VERSION}",
|
853
905
|
RUBY_PLATFORM,
|
854
|
-
RbConfig::CONFIG['build']
|
906
|
+
RbConfig::CONFIG['build'],
|
907
|
+
'A',
|
855
908
|
].join(', ')
|
856
909
|
end
|
857
910
|
|
@@ -869,7 +922,8 @@ describe Mongo::Client do
|
|
869
922
|
"like Ruby #{RUBY_VERSION}",
|
870
923
|
RUBY_PLATFORM,
|
871
924
|
"JVM #{java.lang.System.get_property('java.version')}",
|
872
|
-
RbConfig::CONFIG['build']
|
925
|
+
RbConfig::CONFIG['build'],
|
926
|
+
'A',
|
873
927
|
].join(', ')
|
874
928
|
end
|
875
929
|
|
@@ -1547,6 +1601,95 @@ describe Mongo::Client do
|
|
1547
1601
|
end
|
1548
1602
|
end
|
1549
1603
|
end
|
1604
|
+
|
1605
|
+
context ':server_api parameter' do
|
1606
|
+
context 'is a hash with symbol keys' do
|
1607
|
+
context 'using known keys' do
|
1608
|
+
let(:options) do
|
1609
|
+
{server_api: {
|
1610
|
+
version: '1',
|
1611
|
+
strict: true,
|
1612
|
+
deprecation_errors: false,
|
1613
|
+
}}
|
1614
|
+
end
|
1615
|
+
|
1616
|
+
it 'is accepted' do
|
1617
|
+
client.options[:server_api].should == {
|
1618
|
+
'version' => '1',
|
1619
|
+
'strict' => true,
|
1620
|
+
'deprecation_errors' => false,
|
1621
|
+
}
|
1622
|
+
end
|
1623
|
+
end
|
1624
|
+
|
1625
|
+
context 'using an unknown version' do
|
1626
|
+
let(:options) do
|
1627
|
+
{server_api: {
|
1628
|
+
version: '42',
|
1629
|
+
}}
|
1630
|
+
end
|
1631
|
+
|
1632
|
+
it 'is rejected' do
|
1633
|
+
lambda do
|
1634
|
+
client
|
1635
|
+
end.should raise_error(ArgumentError, 'Unknown server API version: 42')
|
1636
|
+
end
|
1637
|
+
end
|
1638
|
+
|
1639
|
+
context 'using an unknown option' do
|
1640
|
+
let(:options) do
|
1641
|
+
{server_api: {
|
1642
|
+
vversion: '1',
|
1643
|
+
}}
|
1644
|
+
end
|
1645
|
+
|
1646
|
+
it 'is rejected' do
|
1647
|
+
lambda do
|
1648
|
+
client
|
1649
|
+
end.should raise_error(ArgumentError, 'Unknown keys under :server_api: "vversion"')
|
1650
|
+
end
|
1651
|
+
end
|
1652
|
+
|
1653
|
+
context 'using a value which is not a hash' do
|
1654
|
+
let(:options) do
|
1655
|
+
{server_api: 42}
|
1656
|
+
end
|
1657
|
+
|
1658
|
+
it 'is rejected' do
|
1659
|
+
lambda do
|
1660
|
+
client
|
1661
|
+
end.should raise_error(ArgumentError, ':server_api value must be a hash: 42')
|
1662
|
+
end
|
1663
|
+
end
|
1664
|
+
end
|
1665
|
+
|
1666
|
+
context 'when connected to a pre-OP_MSG server' do
|
1667
|
+
max_server_version '3.4'
|
1668
|
+
|
1669
|
+
let(:options) do
|
1670
|
+
{server_api: {version: 1}}
|
1671
|
+
end
|
1672
|
+
|
1673
|
+
let(:client) do
|
1674
|
+
new_local_client(SpecConfig.instance.addresses,
|
1675
|
+
SpecConfig.instance.all_test_options.merge(options))
|
1676
|
+
end
|
1677
|
+
|
1678
|
+
it 'constructs the client' do
|
1679
|
+
client.should be_a(Mongo::Client)
|
1680
|
+
end
|
1681
|
+
|
1682
|
+
it 'discovers servers' do
|
1683
|
+
client.summary.should_not =~ /UNKNOWN/
|
1684
|
+
end
|
1685
|
+
|
1686
|
+
it 'fails operations' do
|
1687
|
+
lambda do
|
1688
|
+
client.command(ping: 1)
|
1689
|
+
end.should raise_error(Mongo::Error::ServerApiNotSupported)
|
1690
|
+
end
|
1691
|
+
end
|
1692
|
+
end
|
1550
1693
|
end
|
1551
1694
|
|
1552
1695
|
context 'when making a block client' do
|
@@ -2187,6 +2330,37 @@ describe Mongo::Client do
|
|
2187
2330
|
new_client.cluster.topology.class.should_not be Mongo::Cluster::Topology::Unknown
|
2188
2331
|
end
|
2189
2332
|
end
|
2333
|
+
|
2334
|
+
context 'when :server_api is changed' do
|
2335
|
+
|
2336
|
+
let(:client) do
|
2337
|
+
new_local_client_nmio(['127.0.0.1:27017'])
|
2338
|
+
end
|
2339
|
+
|
2340
|
+
let(:new_client) do
|
2341
|
+
client.with(server_api: {version: '1'})
|
2342
|
+
end
|
2343
|
+
|
2344
|
+
it 'changes :server_api' do
|
2345
|
+
new_client.options[:server_api].should == {'version' => '1'}
|
2346
|
+
end
|
2347
|
+
end
|
2348
|
+
|
2349
|
+
context 'when :server_api is cleared' do
|
2350
|
+
|
2351
|
+
let(:client) do
|
2352
|
+
new_local_client_nmio(['127.0.0.1:27017'], server_api: {version: '1'})
|
2353
|
+
end
|
2354
|
+
|
2355
|
+
let(:new_client) do
|
2356
|
+
client.with(server_api: nil)
|
2357
|
+
end
|
2358
|
+
|
2359
|
+
it 'clears :server_api' do
|
2360
|
+
new_client.options[:server_api].should be nil
|
2361
|
+
end
|
2362
|
+
end
|
2363
|
+
|
2190
2364
|
end
|
2191
2365
|
|
2192
2366
|
describe '#dup' do
|
data/spec/mongo/client_spec.rb
CHANGED
@@ -538,6 +538,23 @@ describe Mongo::Client do
|
|
538
538
|
end
|
539
539
|
end
|
540
540
|
|
541
|
+
describe '#database' do
|
542
|
+
|
543
|
+
let(:database) { client.database }
|
544
|
+
|
545
|
+
context 'when client has :server_api option' do
|
546
|
+
|
547
|
+
let(:client) do
|
548
|
+
new_local_client_nmio(['localhost'], server_api: {version: '1'})
|
549
|
+
end
|
550
|
+
|
551
|
+
it 'is not transfered to the collection' do
|
552
|
+
database.options[:server_api].should be nil
|
553
|
+
end
|
554
|
+
end
|
555
|
+
|
556
|
+
end
|
557
|
+
|
541
558
|
describe '#database_names' do
|
542
559
|
|
543
560
|
it 'returns a list of database names' do
|
data/spec/mongo/cluster_spec.rb
CHANGED
@@ -82,7 +82,7 @@ describe Mongo::Collection::View::Explainable do
|
|
82
82
|
it 'triggers server error' do
|
83
83
|
lambda do
|
84
84
|
explain
|
85
|
-
end.should raise_error(Mongo::Error::OperationFailure, /verbosity string must be/)
|
85
|
+
end.should raise_error(Mongo::Error::OperationFailure, /verbosity string must be|value .* for field .*verbosity.* is not a valid value/)
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
@@ -604,36 +604,50 @@ describe Mongo::Collection::View::Readable do
|
|
604
604
|
|
605
605
|
describe "#estimated_document_count" do
|
606
606
|
|
607
|
-
let(:documents) do
|
608
|
-
(1..10).map{ |i| { field: "test#{i}" }}
|
609
|
-
end
|
610
|
-
|
611
|
-
before do
|
612
|
-
authorized_collection.delete_many
|
613
|
-
authorized_collection.insert_many(documents)
|
614
|
-
end
|
615
|
-
|
616
607
|
let(:result) do
|
617
608
|
view.estimated_document_count(options)
|
618
609
|
end
|
619
610
|
|
620
|
-
context 'when
|
611
|
+
context 'when collection has documents' do
|
612
|
+
let(:documents) do
|
613
|
+
(1..10).map{ |i| { field: "test#{i}" }}
|
614
|
+
end
|
621
615
|
|
622
|
-
|
623
|
-
|
616
|
+
before do
|
617
|
+
authorized_collection.delete_many
|
618
|
+
authorized_collection.insert_many(documents)
|
624
619
|
end
|
625
620
|
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
621
|
+
context 'when a selector is provided' do
|
622
|
+
|
623
|
+
let(:selector) do
|
624
|
+
{ field: 'test1' }
|
625
|
+
end
|
626
|
+
|
627
|
+
it 'raises an error' do
|
628
|
+
expect {
|
629
|
+
result
|
630
|
+
}.to raise_error(ArgumentError, "Cannot call estimated_document_count when querying with a filter")
|
631
|
+
end
|
632
|
+
end
|
633
|
+
|
634
|
+
context 'when no selector is provided' do
|
635
|
+
|
636
|
+
it 'returns the estimated count of matching documents' do
|
637
|
+
expect(view.estimated_document_count).to eq(10)
|
638
|
+
end
|
630
639
|
end
|
631
640
|
end
|
632
641
|
|
633
|
-
context 'when
|
642
|
+
context 'when collection does not exist' do
|
643
|
+
|
644
|
+
let(:view) do
|
645
|
+
Mongo::Collection::View.new(
|
646
|
+
authorized_client['nonexistent-collection-for-estimated-document-count'], selector, options)
|
647
|
+
end
|
634
648
|
|
635
|
-
it 'returns
|
636
|
-
|
649
|
+
it 'returns 0' do
|
650
|
+
view.estimated_document_count.should == 0
|
637
651
|
end
|
638
652
|
end
|
639
653
|
end
|