mongo 2.11.0.rc0 → 2.11.0
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/Rakefile +2 -0
- data/lib/mongo/auth.rb +11 -2
- data/lib/mongo/auth/cr/conversation.rb +1 -1
- data/lib/mongo/auth/ldap/conversation.rb +1 -1
- data/lib/mongo/auth/scram/conversation.rb +4 -1
- data/lib/mongo/auth/user.rb +15 -1
- data/lib/mongo/auth/user/view.rb +10 -4
- data/lib/mongo/auth/x509.rb +11 -1
- data/lib/mongo/auth/x509/conversation.rb +15 -6
- data/lib/mongo/background_thread.rb +28 -13
- data/lib/mongo/client.rb +23 -15
- data/lib/mongo/collection/view/change_stream.rb +5 -1
- data/lib/mongo/collection/view/readable.rb +5 -2
- data/lib/mongo/collection/view/writable.rb +3 -1
- data/lib/mongo/cursor/builder/get_more_command.rb +4 -1
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +16 -5
- data/lib/mongo/cursor/builder/op_get_more.rb +2 -2
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +17 -5
- data/lib/mongo/error/operation_failure.rb +3 -3
- data/lib/mongo/monitoring/command_log_subscriber.rb +5 -3
- data/lib/mongo/monitoring/event/command_started.rb +13 -3
- data/lib/mongo/monitoring/publishable.rb +4 -2
- data/lib/mongo/operation/create_user/command.rb +1 -0
- data/lib/mongo/operation/remove_user/command.rb +1 -0
- data/lib/mongo/operation/update_user/command.rb +1 -0
- data/lib/mongo/protocol/get_more.rb +2 -1
- data/lib/mongo/protocol/kill_cursors.rb +6 -13
- data/lib/mongo/protocol/serializers.rb +10 -4
- data/lib/mongo/retryable.rb +1 -1
- data/lib/mongo/server/connection.rb +6 -2
- data/lib/mongo/server/connection_base.rb +2 -1
- data/lib/mongo/server/monitor.rb +1 -1
- data/lib/mongo/server/pending_connection.rb +6 -0
- data/lib/mongo/socket/ssl.rb +1 -1
- data/lib/mongo/uri.rb +5 -41
- data/lib/mongo/version.rb +1 -1
- data/mongo.gemspec +11 -2
- data/spec/README.md +105 -9
- data/spec/USERS.md +72 -0
- data/spec/integration/auth_spec.rb +20 -6
- data/spec/integration/client_construction_spec.rb +3 -1
- data/spec/integration/client_options_spec.rb +437 -0
- data/spec/integration/command_monitoring_spec.rb +4 -1
- data/spec/integration/connection_pool_populator_spec.rb +4 -0
- data/spec/integration/connection_spec.rb +4 -2
- data/spec/integration/cursor_reaping_spec.rb +1 -1
- data/spec/integration/get_more_spec.rb +32 -0
- data/spec/integration/retryable_errors_spec.rb +99 -0
- data/spec/integration/retryable_writes_errors_spec.rb +11 -10
- data/spec/lite_spec_helper.rb +2 -1
- data/spec/mongo/auth/scram_spec.rb +1 -0
- data/spec/mongo/auth/user/view_spec.rb +102 -1
- data/spec/mongo/auth/user_spec.rb +56 -15
- data/spec/mongo/auth/x509_spec.rb +31 -1
- data/spec/mongo/bulk_write_spec.rb +2 -2
- data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
- data/spec/mongo/collection/view/readable_spec.rb +8 -4
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +4 -2
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +4 -2
- data/spec/mongo/cursor_spec.rb +3 -3
- data/spec/mongo/retryable_spec.rb +31 -52
- data/spec/mongo/server/connection_auth_spec.rb +3 -0
- data/spec/mongo/server/connection_pool_spec.rb +4 -0
- data/spec/mongo/server/connection_spec.rb +12 -4
- data/spec/mongo/server/monitor_spec.rb +19 -1
- data/spec/mongo/socket/ssl_spec.rb +1 -1
- data/spec/mongo/uri/srv_protocol_spec.rb +0 -13
- data/spec/mongo/uri_option_parsing_spec.rb +0 -8
- data/spec/mongo/uri_spec.rb +6 -20
- data/spec/runners/connection_string.rb +116 -0
- data/spec/runners/read_write_concern_document.rb +67 -0
- data/spec/spec_tests/change_streams_spec.rb +17 -2
- data/spec/spec_tests/connection_string_spec.rb +2 -59
- data/spec/spec_tests/data/change_streams/change-streams-errors.yml +3 -3
- data/spec/spec_tests/data/change_streams/change-streams.yml +88 -20
- data/spec/spec_tests/data/cmap/connection-must-have-id.yml +6 -0
- data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +6 -0
- data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +3 -0
- data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +3 -0
- data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +3 -0
- data/spec/spec_tests/data/cmap/pool-checkin.yml +1 -0
- data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +5 -0
- data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +3 -0
- data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +4 -0
- data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +4 -0
- data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-create-max-size.yml +15 -0
- data/spec/spec_tests/data/cmap/pool-create-min-size.yml +4 -0
- data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +31 -1
- data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +5 -0
- data/spec/spec_tests/data/read_write_concern/connection-string/read-concern.yml +32 -0
- data/spec/spec_tests/data/read_write_concern/connection-string/write-concern.yml +82 -0
- data/spec/spec_tests/data/read_write_concern/document/read-concern.yml +37 -0
- data/spec/spec_tests/data/read_write_concern/document/write-concern.yml +100 -0
- data/spec/spec_tests/data/retryable_reads/aggregate-merge.yml +39 -0
- data/spec/spec_tests/data/retryable_reads/aggregate-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch-serverErrors.yml +2 -2
- data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch-serverErrors.yml +2 -2
- data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch-serverErrors.yml +2 -2
- data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/count-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/countDocuments-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/distinct-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/find-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/findOne-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/gridfs-download-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/gridfs-downloadByName-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/listCollectionNames-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/listCollectionObjects-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/listCollections-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/listDatabaseNames-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/listDatabaseObjects-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/listDatabases-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/listIndexNames-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/listIndexes-serverErrors.yml +1 -1
- data/spec/spec_tests/data/transactions/read-concern.yml +6 -6
- data/spec/spec_tests/data/transactions/transaction-options-repl.yml +117 -0
- data/spec/spec_tests/data/transactions/transaction-options.yml +14 -121
- data/spec/spec_tests/data/transactions/write-concern.yml +3 -0
- data/spec/spec_tests/data/transactions_api/transaction-options.yml +11 -12
- data/spec/spec_tests/dns_seedlist_discovery_spec.rb +17 -7
- data/spec/spec_tests/read_write_concern_connection_string_spec.rb +8 -0
- data/spec/spec_tests/read_write_concern_document_spec.rb +74 -0
- data/spec/spec_tests/retryable_reads_spec.rb +32 -1
- data/spec/spec_tests/uri_options_spec.rb +4 -2
- data/spec/support/auth.rb +5 -14
- data/spec/support/certificates/client-x509.crt +78 -0
- data/spec/support/certificates/client-x509.key +27 -0
- data/spec/support/certificates/client-x509.pem +105 -0
- data/spec/support/change_streams.rb +8 -11
- data/spec/support/client_registry.rb +26 -12
- data/spec/support/cluster_tools.rb +2 -2
- data/spec/support/cmap.rb +11 -7
- data/spec/support/command_monitoring.rb +8 -8
- data/spec/support/connection_string.rb +56 -28
- data/spec/support/constraints.rb +8 -0
- data/spec/support/crud/spec.rb +5 -8
- data/spec/support/event_subscriber.rb +7 -0
- data/spec/support/gridfs.rb +4 -7
- data/spec/support/server_discovery_and_monitoring.rb +3 -8
- data/spec/support/server_selection.rb +4 -9
- data/spec/support/server_selection_rtt.rb +4 -7
- data/spec/support/spec_config.rb +47 -19
- data/spec/support/spec_setup.rb +5 -0
- data/spec/support/utils.rb +46 -8
- metadata +637 -597
- metadata.gz.sig +0 -0
@@ -0,0 +1,8 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
READ_WRITE_CONCERN_CONNECTION_STRING_TESTS =
|
4
|
+
Dir.glob("#{CURRENT_PATH}/spec_tests/data/read_write_concern/connection-string/*.yml").sort
|
5
|
+
|
6
|
+
describe 'Connection String' do
|
7
|
+
define_connection_string_spec_tests(READ_WRITE_CONCERN_CONNECTION_STRING_TESTS)
|
8
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'runners/read_write_concern_document'
|
3
|
+
|
4
|
+
READ_WRITE_CONCERN_DOCUMENT_TESTS =
|
5
|
+
Dir.glob("#{CURRENT_PATH}/spec_tests/data/read_write_concern/document/*.yml").sort
|
6
|
+
|
7
|
+
describe 'Connection String' do
|
8
|
+
READ_WRITE_CONCERN_DOCUMENT_TESTS.each do |test_path|
|
9
|
+
spec = ReadWriteConcernDocument::Spec.new(test_path)
|
10
|
+
|
11
|
+
context(spec.description) do
|
12
|
+
|
13
|
+
spec.tests.each_with_index do |test, index|
|
14
|
+
|
15
|
+
context test.description do
|
16
|
+
|
17
|
+
let(:actual) do
|
18
|
+
Mongo::WriteConcern.get(test.input_document)
|
19
|
+
end
|
20
|
+
|
21
|
+
let(:actual_server_document) do
|
22
|
+
Utils.camelize_hash(actual.options)
|
23
|
+
end
|
24
|
+
|
25
|
+
if test.valid?
|
26
|
+
|
27
|
+
it 'parses successfully' do
|
28
|
+
expect do
|
29
|
+
actual
|
30
|
+
end.not_to raise_error
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'has expected server document' do
|
34
|
+
expect(actual_server_document).to eq(test.server_document)
|
35
|
+
end
|
36
|
+
|
37
|
+
if test.server_default?
|
38
|
+
it 'is server default' do
|
39
|
+
expect(actual.options).to eq({})
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
if test.server_default? == false
|
44
|
+
it 'is not server default' do
|
45
|
+
expect(actual.options).not_to eq({})
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
if test.acknowledged?
|
50
|
+
it 'is acknowledged' do
|
51
|
+
expect(actual.acknowledged?).to be true
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
if test.acknowledged? == false
|
56
|
+
it 'is not acknowledged' do
|
57
|
+
expect(actual.acknowledged?).to be false
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
else
|
62
|
+
|
63
|
+
it 'is invalid' do
|
64
|
+
expect do
|
65
|
+
actual
|
66
|
+
end.to raise_error(Mongo::Error::InvalidWriteConcern)
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -6,9 +6,40 @@ describe 'Retryable reads spec tests' do
|
|
6
6
|
|
7
7
|
define_crud_spec_tests(RETRYABLE_READS_TESTS) do |spec, req, test|
|
8
8
|
let(:client) do
|
9
|
-
|
9
|
+
authorized_client.with({max_read_retries: 0}.update(test.client_options)).tap do |client|
|
10
10
|
client.subscribe(Mongo::Monitoring::COMMAND, event_subscriber)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
15
|
+
|
16
|
+
describe 'Retryable reads spec tests - legacy' do
|
17
|
+
require_no_multi_shard
|
18
|
+
|
19
|
+
define_crud_spec_tests(RETRYABLE_READS_TESTS) do |spec, req, test|
|
20
|
+
let(:client_options) do
|
21
|
+
{
|
22
|
+
max_read_retries: 1,
|
23
|
+
read_retry_interval: 0,
|
24
|
+
retry_reads: false,
|
25
|
+
}.update(test.client_options)
|
26
|
+
end
|
27
|
+
|
28
|
+
let(:client) do
|
29
|
+
authorized_client.with(client_options).tap do |client|
|
30
|
+
client.subscribe(Mongo::Monitoring::COMMAND, event_subscriber)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
around do |example|
|
35
|
+
desc = example.full_description
|
36
|
+
# Skip tests that disable modern retryable reads because they expect
|
37
|
+
# no retries - and since legacy retryable reads are used, the tests
|
38
|
+
# will fail.
|
39
|
+
if desc =~/retryReads is false|fails on first attempt/
|
40
|
+
skip 'Test not applicable to legacy read retries'
|
41
|
+
end
|
42
|
+
example.run
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -55,8 +55,10 @@ describe 'Uri Options' do
|
|
55
55
|
|
56
56
|
context 'when the uri is valid', if: test.valid? do
|
57
57
|
|
58
|
-
|
59
|
-
|
58
|
+
if test.hosts
|
59
|
+
it 'creates a client with the correct hosts' do
|
60
|
+
expect(test.client).to have_hosts(test, test.hosts)
|
61
|
+
end
|
60
62
|
end
|
61
63
|
|
62
64
|
it 'creates a client with the correct authentication properties' do
|
data/spec/support/auth.rb
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
|
-
RSpec::Matchers.define :have_blank_credentials do
|
14
|
+
RSpec::Matchers.define :have_blank_credentials do
|
15
15
|
match do |client|
|
16
16
|
%i(auth_mech auth_mech_properties auth_source password user).all? do |key|
|
17
17
|
client.options[key].nil?
|
@@ -31,11 +31,9 @@ module Mongo
|
|
31
31
|
attr_reader :description
|
32
32
|
attr_reader :tests
|
33
33
|
|
34
|
-
def initialize(
|
35
|
-
|
36
|
-
@
|
37
|
-
file.close
|
38
|
-
@description = File.basename(file)
|
34
|
+
def initialize(test_path)
|
35
|
+
@spec = YAML.load(File.read(test_path))
|
36
|
+
@description = File.basename(test_path)
|
39
37
|
end
|
40
38
|
|
41
39
|
def tests
|
@@ -68,9 +66,7 @@ module Mongo
|
|
68
66
|
end
|
69
67
|
|
70
68
|
def expected_credential
|
71
|
-
expected_credential = {
|
72
|
-
'auth_source' => expected_auth_source,
|
73
|
-
}
|
69
|
+
expected_credential = { 'auth_source' => credential['source'] }
|
74
70
|
|
75
71
|
if credential['username']
|
76
72
|
expected_credential['user'] = credential['username']
|
@@ -103,11 +99,6 @@ module Mongo
|
|
103
99
|
def expected_auth_mech_properties
|
104
100
|
credential['mechanism_properties'].keys.map(&:downcase)
|
105
101
|
end
|
106
|
-
|
107
|
-
def expected_auth_source
|
108
|
-
return :external if credential['source'] == '$external'
|
109
|
-
credential['source']
|
110
|
-
end
|
111
102
|
end
|
112
103
|
end
|
113
104
|
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
Certificate:
|
2
|
+
Data:
|
3
|
+
Version: 3 (0x2)
|
4
|
+
Serial Number: 602210 (0x93062)
|
5
|
+
Signature Algorithm: sha256WithRSAEncryption
|
6
|
+
Issuer: CN = Ruby Driver CA, OU = Drivers, O = MongoDB, L = New York City, ST = New York, C = US
|
7
|
+
Validity
|
8
|
+
Not Before: Sep 4 21:17:42 2019 GMT
|
9
|
+
Not After : Sep 4 21:17:42 2039 GMT
|
10
|
+
Subject: CN = localhost, OU = x509, O = MongoDB, L = New York City, ST = New York, C = US
|
11
|
+
Subject Public Key Info:
|
12
|
+
Public Key Algorithm: rsaEncryption
|
13
|
+
RSA Public-Key: (2048 bit)
|
14
|
+
Modulus:
|
15
|
+
00:c4:e6:20:8f:58:42:53:51:24:64:b4:d0:25:cf:
|
16
|
+
79:e0:71:f8:9e:97:35:a8:df:fa:d9:63:eb:63:b2:
|
17
|
+
b4:77:60:af:8e:09:6d:72:50:bc:ea:7c:57:3f:17:
|
18
|
+
51:b0:05:85:e8:3b:67:4b:97:84:61:bb:68:09:b4:
|
19
|
+
96:da:c8:3b:7d:53:b8:10:fe:0d:71:2f:b8:5d:83:
|
20
|
+
86:3f:06:57:e2:6c:d5:2f:c8:6c:74:fb:d8:6f:77:
|
21
|
+
df:ba:6d:52:61:3c:33:76:a5:5f:62:68:af:a4:e8:
|
22
|
+
dc:36:2a:b9:54:47:91:ec:4f:09:b9:2e:ef:37:4d:
|
23
|
+
d7:04:db:48:fc:8d:c2:44:f1:9f:79:21:f0:06:fe:
|
24
|
+
b4:e5:50:3c:cf:d1:3f:59:b5:8d:dc:d0:39:31:53:
|
25
|
+
95:42:d7:92:c3:c9:d5:93:48:e8:dc:16:ce:61:ec:
|
26
|
+
6f:ce:91:5c:91:2e:59:18:1f:fc:a8:ff:52:51:cf:
|
27
|
+
10:c0:be:a0:ad:cb:63:98:30:66:0e:42:e3:ca:6b:
|
28
|
+
2d:f8:92:c7:24:a7:03:65:96:0a:9c:ce:09:e7:ae:
|
29
|
+
c2:a7:ea:6c:54:bb:e8:24:62:31:48:fb:d0:df:e1:
|
30
|
+
a2:3c:5f:d2:89:29:de:4f:6b:73:88:2a:68:57:08:
|
31
|
+
7a:1e:aa:bd:70:79:e7:dc:f5:e1:9f:39:83:7b:70:
|
32
|
+
55:bb
|
33
|
+
Exponent: 65537 (0x10001)
|
34
|
+
X509v3 extensions:
|
35
|
+
X509v3 Key Usage:
|
36
|
+
Digital Signature
|
37
|
+
X509v3 Extended Key Usage:
|
38
|
+
TLS Web Client Authentication
|
39
|
+
X509v3 Subject Alternative Name:
|
40
|
+
DNS:localhost, IP Address:127.0.0.1
|
41
|
+
Signature Algorithm: sha256WithRSAEncryption
|
42
|
+
92:04:8c:a5:56:c0:01:37:65:ff:d2:0e:5b:be:dd:78:9c:e2:
|
43
|
+
45:3d:fc:34:e5:23:f3:75:fb:70:3b:06:9f:e9:63:e9:f0:8a:
|
44
|
+
14:54:3d:d9:6a:22:af:04:00:25:95:80:e8:83:0b:c7:6f:f0:
|
45
|
+
f1:58:2b:07:86:6b:e3:eb:b0:ea:09:b2:5e:15:05:14:89:2b:
|
46
|
+
02:99:09:97:6d:49:19:ac:c2:50:91:2b:03:e6:75:ce:27:9d:
|
47
|
+
8f:c0:b5:cd:b2:1f:7d:66:75:c7:d1:a7:16:b3:cf:8b:1e:9b:
|
48
|
+
e4:46:da:e2:02:2c:55:74:56:8c:e6:d9:27:53:9f:b2:f5:09:
|
49
|
+
ba:fe:df:e2:e1:b7:7d:43:8a:9d:bb:f0:3d:b9:d4:ce:26:8f:
|
50
|
+
d9:cc:e6:2e:1c:81:fc:6e:a0:5f:01:23:68:9d:fe:1b:ee:03:
|
51
|
+
69:f1:10:af:5a:0e:dc:96:e2:56:ae:ca:35:b3:08:61:34:37:
|
52
|
+
e1:e6:53:ef:68:84:87:f4:56:c5:49:45:08:90:46:3e:1c:b5:
|
53
|
+
40:08:f7:09:51:d7:24:53:49:b5:b1:2f:85:39:b9:0b:0e:f9:
|
54
|
+
05:ea:a3:d0:47:6d:69:6b:9c:25:8e:ad:61:01:86:96:28:3b:
|
55
|
+
fd:6f:78:79:66:b1:cc:de:fc:18:45:cf:84:f1:d0:e2:46:4f:
|
56
|
+
f8:9d:95:a4
|
57
|
+
-----BEGIN CERTIFICATE-----
|
58
|
+
MIIDnzCCAoegAwIBAgIDCTBiMA0GCSqGSIb3DQEBCwUAMHUxFzAVBgNVBAMTDlJ1
|
59
|
+
YnkgRHJpdmVyIENBMRAwDgYDVQQLEwdEcml2ZXJzMRAwDgYDVQQKEwdNb25nb0RC
|
60
|
+
MRYwFAYDVQQHEw1OZXcgWW9yayBDaXR5MREwDwYDVQQIEwhOZXcgWW9yazELMAkG
|
61
|
+
A1UEBhMCVVMwHhcNMTkwOTA0MjExNzQyWhcNMzkwOTA0MjExNzQyWjBtMRIwEAYD
|
62
|
+
VQQDEwlsb2NhbGhvc3QxDTALBgNVBAsTBHg1MDkxEDAOBgNVBAoTB01vbmdvREIx
|
63
|
+
FjAUBgNVBAcTDU5ldyBZb3JrIENpdHkxETAPBgNVBAgTCE5ldyBZb3JrMQswCQYD
|
64
|
+
VQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMTmII9YQlNR
|
65
|
+
JGS00CXPeeBx+J6XNajf+tlj62OytHdgr44JbXJQvOp8Vz8XUbAFheg7Z0uXhGG7
|
66
|
+
aAm0ltrIO31TuBD+DXEvuF2Dhj8GV+Js1S/IbHT72G9337ptUmE8M3alX2Jor6To
|
67
|
+
3DYquVRHkexPCbku7zdN1wTbSPyNwkTxn3kh8Ab+tOVQPM/RP1m1jdzQOTFTlULX
|
68
|
+
ksPJ1ZNI6NwWzmHsb86RXJEuWRgf/Kj/UlHPEMC+oK3LY5gwZg5C48prLfiSxySn
|
69
|
+
A2WWCpzOCeeuwqfqbFS76CRiMUj70N/hojxf0okp3k9rc4gqaFcIeh6qvXB559z1
|
70
|
+
4Z85g3twVbsCAwEAAaNAMD4wCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUF
|
71
|
+
BwMCMBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0BAQsFAAOC
|
72
|
+
AQEAkgSMpVbAATdl/9IOW77deJziRT38NOUj83X7cDsGn+lj6fCKFFQ92WoirwQA
|
73
|
+
JZWA6IMLx2/w8VgrB4Zr4+uw6gmyXhUFFIkrApkJl21JGazCUJErA+Z1ziedj8C1
|
74
|
+
zbIffWZ1x9GnFrPPix6b5Eba4gIsVXRWjObZJ1OfsvUJuv7f4uG3fUOKnbvwPbnU
|
75
|
+
ziaP2czmLhyB/G6gXwEjaJ3+G+4DafEQr1oO3JbiVq7KNbMIYTQ34eZT72iEh/RW
|
76
|
+
xUlFCJBGPhy1QAj3CVHXJFNJtbEvhTm5Cw75Beqj0EdtaWucJY6tYQGGlig7/W94
|
77
|
+
eWaxzN78GEXPhPHQ4kZP+J2VpA==
|
78
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEpQIBAAKCAQEAxOYgj1hCU1EkZLTQJc954HH4npc1qN/62WPrY7K0d2Cvjglt
|
3
|
+
clC86nxXPxdRsAWF6DtnS5eEYbtoCbSW2sg7fVO4EP4NcS+4XYOGPwZX4mzVL8hs
|
4
|
+
dPvYb3ffum1SYTwzdqVfYmivpOjcNiq5VEeR7E8JuS7vN03XBNtI/I3CRPGfeSHw
|
5
|
+
Bv605VA8z9E/WbWN3NA5MVOVQteSw8nVk0jo3BbOYexvzpFckS5ZGB/8qP9SUc8Q
|
6
|
+
wL6grctjmDBmDkLjymst+JLHJKcDZZYKnM4J567Cp+psVLvoJGIxSPvQ3+GiPF/S
|
7
|
+
iSneT2tziCpoVwh6Hqq9cHnn3PXhnzmDe3BVuwIDAQABAoIBAD9rdC9XmT1m1FcP
|
8
|
+
mj+jfTka3J6QS7tSMWUV9vqM0+3jmYghZzw73y2T0TJEG46bqM7tW08QxZYJG/CM
|
9
|
+
V06u0eKDNbVbbw729OZB99qS+3m13lDeuHhRqhv1O327up4RGu5rQ7bZy0FNs6hK
|
10
|
+
yJjp2ImJx7L6+BgTHV+2FeMq8djsffJDvsLn65W2Fw0pBw+1pFYJMMLodNrSXkGi
|
11
|
+
FaE+XLO/FMmFfI6fc4uqMgXd+RLmGC3DY4lnbZMf14nlNn+SNMr08v+wipJNqE3K
|
12
|
+
OERRkgm/uXIbo+a275suUZ8kVRlVMtIXVYrwMj1JQY7YJ2uiOy91QoWvzPu6wUGH
|
13
|
+
g/ehttECgYEA4yuEU4rdJs/roEy+rY6bEjgcvN6uzoEjv4z4MLLHk61p88RDykYZ
|
14
|
+
C0crmwiXItWPZ6rm458+TwIqawrLQAmJU6iSSmVy/ed/5C3vKDyEq84N3eglac/U
|
15
|
+
yj6kk5vztCtUrr8Z2dnrBAz1LuAYUqPs8fVmYGYiPfM0+jLaZK2L+uMCgYEA3eMj
|
16
|
+
xANChhiTCdaw3hEL57c2pbZ/xBwGi8VWZqJvxdJNbZgc+RDw4ytz1d3DZCRWfxIF
|
17
|
+
w4n69wjiakZ9DA5YdzIvplv8YfZ1bAo0JSGyybERXKTVUj3AqBCf4bGRZJCgD+/g
|
18
|
+
aGZpJrfD+7ho8FyOvt9LvLos8UPaJD1Llse1+UkCgYEAyyNi1QHb+JT88v8tky1u
|
19
|
+
ZcBfklTepDK+sM9yMLnt1ZTApgbfR8WfJ4Kg76Wi4Ldv4RfmF62SnjwlikrArabZ
|
20
|
+
ckHPb0+AoKOerYCV17kmOiusIr8wlYoPkjqqGITgTEBjHVAt4a0Ihzq/FQe3OE71
|
21
|
+
1vfGcHVkMVmGCiXnPRgjkFkCgYEAu0TJGtXlf2eeMd+Qxtt8QMTQymuMyecdXzne
|
22
|
+
AiF2VG96CdUoHs29gP1bdlUEY7CHkBeV5cK+nWBSN3/mahZxc6hXrwBTshpgYB78
|
23
|
+
g5o9WxymmppDsHWN9EqTpdhH7ahibxD1RSep95OBRSIO704u68lqEo7O/5FUuuFA
|
24
|
+
urEzVIECgYEAyX44ZLYW7c68fS2zTvnGBBINgntookhRK0sMUwuYvDL5RobnKusP
|
25
|
+
2Fz4gZtTmpRfgxcglih+EJPUhqqn6UteXG/TNatrf27DOuQgJHliQa/GDcANkEkT
|
26
|
+
UtGu2aCxd0Na9lPvEzor37PPzLKdkaiAmAnyLmTpn5whGFgpXa32Ups=
|
27
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1,105 @@
|
|
1
|
+
Certificate:
|
2
|
+
Data:
|
3
|
+
Version: 3 (0x2)
|
4
|
+
Serial Number: 602210 (0x93062)
|
5
|
+
Signature Algorithm: sha256WithRSAEncryption
|
6
|
+
Issuer: CN = Ruby Driver CA, OU = Drivers, O = MongoDB, L = New York City, ST = New York, C = US
|
7
|
+
Validity
|
8
|
+
Not Before: Sep 4 21:17:42 2019 GMT
|
9
|
+
Not After : Sep 4 21:17:42 2039 GMT
|
10
|
+
Subject: CN = localhost, OU = x509, O = MongoDB, L = New York City, ST = New York, C = US
|
11
|
+
Subject Public Key Info:
|
12
|
+
Public Key Algorithm: rsaEncryption
|
13
|
+
RSA Public-Key: (2048 bit)
|
14
|
+
Modulus:
|
15
|
+
00:c4:e6:20:8f:58:42:53:51:24:64:b4:d0:25:cf:
|
16
|
+
79:e0:71:f8:9e:97:35:a8:df:fa:d9:63:eb:63:b2:
|
17
|
+
b4:77:60:af:8e:09:6d:72:50:bc:ea:7c:57:3f:17:
|
18
|
+
51:b0:05:85:e8:3b:67:4b:97:84:61:bb:68:09:b4:
|
19
|
+
96:da:c8:3b:7d:53:b8:10:fe:0d:71:2f:b8:5d:83:
|
20
|
+
86:3f:06:57:e2:6c:d5:2f:c8:6c:74:fb:d8:6f:77:
|
21
|
+
df:ba:6d:52:61:3c:33:76:a5:5f:62:68:af:a4:e8:
|
22
|
+
dc:36:2a:b9:54:47:91:ec:4f:09:b9:2e:ef:37:4d:
|
23
|
+
d7:04:db:48:fc:8d:c2:44:f1:9f:79:21:f0:06:fe:
|
24
|
+
b4:e5:50:3c:cf:d1:3f:59:b5:8d:dc:d0:39:31:53:
|
25
|
+
95:42:d7:92:c3:c9:d5:93:48:e8:dc:16:ce:61:ec:
|
26
|
+
6f:ce:91:5c:91:2e:59:18:1f:fc:a8:ff:52:51:cf:
|
27
|
+
10:c0:be:a0:ad:cb:63:98:30:66:0e:42:e3:ca:6b:
|
28
|
+
2d:f8:92:c7:24:a7:03:65:96:0a:9c:ce:09:e7:ae:
|
29
|
+
c2:a7:ea:6c:54:bb:e8:24:62:31:48:fb:d0:df:e1:
|
30
|
+
a2:3c:5f:d2:89:29:de:4f:6b:73:88:2a:68:57:08:
|
31
|
+
7a:1e:aa:bd:70:79:e7:dc:f5:e1:9f:39:83:7b:70:
|
32
|
+
55:bb
|
33
|
+
Exponent: 65537 (0x10001)
|
34
|
+
X509v3 extensions:
|
35
|
+
X509v3 Key Usage:
|
36
|
+
Digital Signature
|
37
|
+
X509v3 Extended Key Usage:
|
38
|
+
TLS Web Client Authentication
|
39
|
+
X509v3 Subject Alternative Name:
|
40
|
+
DNS:localhost, IP Address:127.0.0.1
|
41
|
+
Signature Algorithm: sha256WithRSAEncryption
|
42
|
+
92:04:8c:a5:56:c0:01:37:65:ff:d2:0e:5b:be:dd:78:9c:e2:
|
43
|
+
45:3d:fc:34:e5:23:f3:75:fb:70:3b:06:9f:e9:63:e9:f0:8a:
|
44
|
+
14:54:3d:d9:6a:22:af:04:00:25:95:80:e8:83:0b:c7:6f:f0:
|
45
|
+
f1:58:2b:07:86:6b:e3:eb:b0:ea:09:b2:5e:15:05:14:89:2b:
|
46
|
+
02:99:09:97:6d:49:19:ac:c2:50:91:2b:03:e6:75:ce:27:9d:
|
47
|
+
8f:c0:b5:cd:b2:1f:7d:66:75:c7:d1:a7:16:b3:cf:8b:1e:9b:
|
48
|
+
e4:46:da:e2:02:2c:55:74:56:8c:e6:d9:27:53:9f:b2:f5:09:
|
49
|
+
ba:fe:df:e2:e1:b7:7d:43:8a:9d:bb:f0:3d:b9:d4:ce:26:8f:
|
50
|
+
d9:cc:e6:2e:1c:81:fc:6e:a0:5f:01:23:68:9d:fe:1b:ee:03:
|
51
|
+
69:f1:10:af:5a:0e:dc:96:e2:56:ae:ca:35:b3:08:61:34:37:
|
52
|
+
e1:e6:53:ef:68:84:87:f4:56:c5:49:45:08:90:46:3e:1c:b5:
|
53
|
+
40:08:f7:09:51:d7:24:53:49:b5:b1:2f:85:39:b9:0b:0e:f9:
|
54
|
+
05:ea:a3:d0:47:6d:69:6b:9c:25:8e:ad:61:01:86:96:28:3b:
|
55
|
+
fd:6f:78:79:66:b1:cc:de:fc:18:45:cf:84:f1:d0:e2:46:4f:
|
56
|
+
f8:9d:95:a4
|
57
|
+
-----BEGIN CERTIFICATE-----
|
58
|
+
MIIDnzCCAoegAwIBAgIDCTBiMA0GCSqGSIb3DQEBCwUAMHUxFzAVBgNVBAMTDlJ1
|
59
|
+
YnkgRHJpdmVyIENBMRAwDgYDVQQLEwdEcml2ZXJzMRAwDgYDVQQKEwdNb25nb0RC
|
60
|
+
MRYwFAYDVQQHEw1OZXcgWW9yayBDaXR5MREwDwYDVQQIEwhOZXcgWW9yazELMAkG
|
61
|
+
A1UEBhMCVVMwHhcNMTkwOTA0MjExNzQyWhcNMzkwOTA0MjExNzQyWjBtMRIwEAYD
|
62
|
+
VQQDEwlsb2NhbGhvc3QxDTALBgNVBAsTBHg1MDkxEDAOBgNVBAoTB01vbmdvREIx
|
63
|
+
FjAUBgNVBAcTDU5ldyBZb3JrIENpdHkxETAPBgNVBAgTCE5ldyBZb3JrMQswCQYD
|
64
|
+
VQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMTmII9YQlNR
|
65
|
+
JGS00CXPeeBx+J6XNajf+tlj62OytHdgr44JbXJQvOp8Vz8XUbAFheg7Z0uXhGG7
|
66
|
+
aAm0ltrIO31TuBD+DXEvuF2Dhj8GV+Js1S/IbHT72G9337ptUmE8M3alX2Jor6To
|
67
|
+
3DYquVRHkexPCbku7zdN1wTbSPyNwkTxn3kh8Ab+tOVQPM/RP1m1jdzQOTFTlULX
|
68
|
+
ksPJ1ZNI6NwWzmHsb86RXJEuWRgf/Kj/UlHPEMC+oK3LY5gwZg5C48prLfiSxySn
|
69
|
+
A2WWCpzOCeeuwqfqbFS76CRiMUj70N/hojxf0okp3k9rc4gqaFcIeh6qvXB559z1
|
70
|
+
4Z85g3twVbsCAwEAAaNAMD4wCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUF
|
71
|
+
BwMCMBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0BAQsFAAOC
|
72
|
+
AQEAkgSMpVbAATdl/9IOW77deJziRT38NOUj83X7cDsGn+lj6fCKFFQ92WoirwQA
|
73
|
+
JZWA6IMLx2/w8VgrB4Zr4+uw6gmyXhUFFIkrApkJl21JGazCUJErA+Z1ziedj8C1
|
74
|
+
zbIffWZ1x9GnFrPPix6b5Eba4gIsVXRWjObZJ1OfsvUJuv7f4uG3fUOKnbvwPbnU
|
75
|
+
ziaP2czmLhyB/G6gXwEjaJ3+G+4DafEQr1oO3JbiVq7KNbMIYTQ34eZT72iEh/RW
|
76
|
+
xUlFCJBGPhy1QAj3CVHXJFNJtbEvhTm5Cw75Beqj0EdtaWucJY6tYQGGlig7/W94
|
77
|
+
eWaxzN78GEXPhPHQ4kZP+J2VpA==
|
78
|
+
-----END CERTIFICATE-----
|
79
|
+
-----BEGIN RSA PRIVATE KEY-----
|
80
|
+
MIIEpQIBAAKCAQEAxOYgj1hCU1EkZLTQJc954HH4npc1qN/62WPrY7K0d2Cvjglt
|
81
|
+
clC86nxXPxdRsAWF6DtnS5eEYbtoCbSW2sg7fVO4EP4NcS+4XYOGPwZX4mzVL8hs
|
82
|
+
dPvYb3ffum1SYTwzdqVfYmivpOjcNiq5VEeR7E8JuS7vN03XBNtI/I3CRPGfeSHw
|
83
|
+
Bv605VA8z9E/WbWN3NA5MVOVQteSw8nVk0jo3BbOYexvzpFckS5ZGB/8qP9SUc8Q
|
84
|
+
wL6grctjmDBmDkLjymst+JLHJKcDZZYKnM4J567Cp+psVLvoJGIxSPvQ3+GiPF/S
|
85
|
+
iSneT2tziCpoVwh6Hqq9cHnn3PXhnzmDe3BVuwIDAQABAoIBAD9rdC9XmT1m1FcP
|
86
|
+
mj+jfTka3J6QS7tSMWUV9vqM0+3jmYghZzw73y2T0TJEG46bqM7tW08QxZYJG/CM
|
87
|
+
V06u0eKDNbVbbw729OZB99qS+3m13lDeuHhRqhv1O327up4RGu5rQ7bZy0FNs6hK
|
88
|
+
yJjp2ImJx7L6+BgTHV+2FeMq8djsffJDvsLn65W2Fw0pBw+1pFYJMMLodNrSXkGi
|
89
|
+
FaE+XLO/FMmFfI6fc4uqMgXd+RLmGC3DY4lnbZMf14nlNn+SNMr08v+wipJNqE3K
|
90
|
+
OERRkgm/uXIbo+a275suUZ8kVRlVMtIXVYrwMj1JQY7YJ2uiOy91QoWvzPu6wUGH
|
91
|
+
g/ehttECgYEA4yuEU4rdJs/roEy+rY6bEjgcvN6uzoEjv4z4MLLHk61p88RDykYZ
|
92
|
+
C0crmwiXItWPZ6rm458+TwIqawrLQAmJU6iSSmVy/ed/5C3vKDyEq84N3eglac/U
|
93
|
+
yj6kk5vztCtUrr8Z2dnrBAz1LuAYUqPs8fVmYGYiPfM0+jLaZK2L+uMCgYEA3eMj
|
94
|
+
xANChhiTCdaw3hEL57c2pbZ/xBwGi8VWZqJvxdJNbZgc+RDw4ytz1d3DZCRWfxIF
|
95
|
+
w4n69wjiakZ9DA5YdzIvplv8YfZ1bAo0JSGyybERXKTVUj3AqBCf4bGRZJCgD+/g
|
96
|
+
aGZpJrfD+7ho8FyOvt9LvLos8UPaJD1Llse1+UkCgYEAyyNi1QHb+JT88v8tky1u
|
97
|
+
ZcBfklTepDK+sM9yMLnt1ZTApgbfR8WfJ4Kg76Wi4Ldv4RfmF62SnjwlikrArabZ
|
98
|
+
ckHPb0+AoKOerYCV17kmOiusIr8wlYoPkjqqGITgTEBjHVAt4a0Ihzq/FQe3OE71
|
99
|
+
1vfGcHVkMVmGCiXnPRgjkFkCgYEAu0TJGtXlf2eeMd+Qxtt8QMTQymuMyecdXzne
|
100
|
+
AiF2VG96CdUoHs29gP1bdlUEY7CHkBeV5cK+nWBSN3/mahZxc6hXrwBTshpgYB78
|
101
|
+
g5o9WxymmppDsHWN9EqTpdhH7ahibxD1RSep95OBRSIO704u68lqEo7O/5FUuuFA
|
102
|
+
urEzVIECgYEAyX44ZLYW7c68fS2zTvnGBBINgntookhRK0sMUwuYvDL5RobnKusP
|
103
|
+
2Fz4gZtTmpRfgxcglih+EJPUhqqn6UteXG/TNatrf27DOuQgJHliQa/GDcANkEkT
|
104
|
+
UtGu2aCxd0Na9lPvEzor37PPzLKdkaiAmAnyLmTpn5whGFgpXa32Ups=
|
105
|
+
-----END RSA PRIVATE KEY-----
|
@@ -37,17 +37,12 @@ module Mongo
|
|
37
37
|
|
38
38
|
# Instantiate the new spec.
|
39
39
|
#
|
40
|
-
# @
|
41
|
-
# Spec.new(file)
|
42
|
-
#
|
43
|
-
# @param [ String ] file The name of the file.
|
40
|
+
# @param [ String ] test_path The path to the file.
|
44
41
|
#
|
45
42
|
# @since 2.6.0
|
46
|
-
def initialize(
|
47
|
-
|
48
|
-
@
|
49
|
-
file.close
|
50
|
-
@description = File.basename(file)
|
43
|
+
def initialize(test_path)
|
44
|
+
@spec = YAML.load(File.read(test_path))
|
45
|
+
@description = File.basename(test_path)
|
51
46
|
@spec_tests = @spec['tests']
|
52
47
|
@coll1 = @spec['collection_name']
|
53
48
|
@coll2 = @spec['collection2_name']
|
@@ -129,7 +124,7 @@ module Mongo
|
|
129
124
|
|
130
125
|
def run
|
131
126
|
change_stream = begin
|
132
|
-
@target.watch(@pipeline, @options)
|
127
|
+
@target.watch(@pipeline, Utils.snakeize_hash(@options))
|
133
128
|
rescue Mongo::Error::OperationFailure => e
|
134
129
|
return {
|
135
130
|
result: { 'error' => { 'code' => e.code } },
|
@@ -195,9 +190,11 @@ module Mongo
|
|
195
190
|
|
196
191
|
private
|
197
192
|
|
193
|
+
IGNORE_COMMANDS = %w(saslStart saslContinue killCursors getMore)
|
194
|
+
|
198
195
|
def events
|
199
196
|
EventSubscriber.started_events.reduce([]) do |evs, e|
|
200
|
-
next evs if
|
197
|
+
next evs if IGNORE_COMMANDS.include?(e.command_name)
|
201
198
|
|
202
199
|
evs << {
|
203
200
|
'command_started_event' => {
|
@@ -95,17 +95,21 @@ class ClientRegistry
|
|
95
95
|
when 'unauthorized'
|
96
96
|
Mongo::Client.new(
|
97
97
|
SpecConfig.instance.addresses,
|
98
|
-
SpecConfig.instance.test_options.merge(database: SpecConfig.instance.test_db
|
98
|
+
SpecConfig.instance.test_options.merge(database: SpecConfig.instance.test_db),
|
99
99
|
)
|
100
100
|
# Provides an authorized mongo client on the default test database for the
|
101
101
|
# default test user.
|
102
102
|
when 'authorized'
|
103
|
+
client_options = {
|
104
|
+
database: SpecConfig.instance.test_db,
|
105
|
+
}.update(SpecConfig.instance.credentials_or_x509(
|
106
|
+
user: SpecConfig.instance.test_user.name,
|
107
|
+
password: SpecConfig.instance.test_user.password,
|
108
|
+
))
|
109
|
+
|
103
110
|
Mongo::Client.new(
|
104
111
|
SpecConfig.instance.addresses,
|
105
|
-
SpecConfig.instance.test_options.merge(
|
106
|
-
database: SpecConfig.instance.test_db,
|
107
|
-
user: SpecConfig.instance.test_user.name,
|
108
|
-
password: SpecConfig.instance.test_user.password),
|
112
|
+
SpecConfig.instance.test_options.merge(client_options)
|
109
113
|
)
|
110
114
|
# Provides an authorized mongo client that retries writes.
|
111
115
|
when 'authorized_with_retry_writes'
|
@@ -165,15 +169,23 @@ class ClientRegistry
|
|
165
169
|
# Get an authorized client on the test database logged in as the admin
|
166
170
|
# root user.
|
167
171
|
when 'root_authorized'
|
168
|
-
|
169
|
-
SpecConfig.instance.
|
170
|
-
|
172
|
+
if SpecConfig.instance.x509_auth?
|
173
|
+
client_options = SpecConfig.instance.auth_options.merge(
|
174
|
+
database: SpecConfig.instance.test_db,
|
175
|
+
)
|
176
|
+
else
|
177
|
+
client_options = {
|
178
|
+
database: SpecConfig.instance.test_db,
|
179
|
+
}.update(SpecConfig.instance.credentials_or_x509(
|
171
180
|
user: SpecConfig.instance.root_user.name,
|
172
181
|
password: SpecConfig.instance.root_user.password,
|
173
|
-
database: SpecConfig.instance.test_db,
|
174
182
|
auth_source: SpecConfig.instance.auth_source || Mongo::Database::ADMIN,
|
175
|
-
|
176
|
-
|
183
|
+
))
|
184
|
+
end
|
185
|
+
|
186
|
+
Mongo::Client.new(
|
187
|
+
SpecConfig.instance.addresses,
|
188
|
+
SpecConfig.instance.test_options.merge(client_options),
|
177
189
|
)
|
178
190
|
# A client that has an event subscriber for commands.
|
179
191
|
when 'subscribed'
|
@@ -181,8 +193,10 @@ class ClientRegistry
|
|
181
193
|
SpecConfig.instance.addresses,
|
182
194
|
SpecConfig.instance.test_options.merge(
|
183
195
|
database: SpecConfig.instance.test_db,
|
196
|
+
).merge(SpecConfig.instance.credentials_or_x509(
|
184
197
|
user: SpecConfig.instance.test_user.name,
|
185
|
-
password: SpecConfig.instance.test_user.password
|
198
|
+
password: SpecConfig.instance.test_user.password,
|
199
|
+
))
|
186
200
|
).tap do |client|
|
187
201
|
client.subscribe(Mongo::Monitoring::COMMAND, EventSubscriber)
|
188
202
|
end
|