mongo 2.0.6 → 2.1.0.beta
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/lib/mongo.rb +2 -0
- data/lib/mongo/bulk_write.rb +1 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +87 -31
- data/lib/mongo/bulk_write/deletable.rb +8 -7
- data/lib/mongo/bulk_write/insertable.rb +4 -3
- data/lib/mongo/bulk_write/ordered_bulk_write.rb +6 -6
- data/lib/mongo/bulk_write/replacable.rb +4 -3
- data/lib/mongo/bulk_write/result.rb +138 -0
- data/lib/mongo/bulk_write/unordered_bulk_write.rb +5 -8
- data/lib/mongo/bulk_write/updatable.rb +8 -7
- data/lib/mongo/client.rb +36 -4
- data/lib/mongo/cluster.rb +39 -4
- data/lib/mongo/cluster/topology/replica_set.rb +20 -4
- data/lib/mongo/cluster/topology/sharded.rb +1 -1
- data/lib/mongo/collection.rb +282 -29
- data/lib/mongo/collection/view/aggregation.rb +32 -4
- data/lib/mongo/collection/view/iterable.rb +2 -1
- data/lib/mongo/collection/view/map_reduce.rb +3 -1
- data/lib/mongo/collection/view/readable.rb +89 -14
- data/lib/mongo/collection/view/writable.rb +11 -5
- data/lib/mongo/cursor.rb +11 -3
- data/lib/mongo/dbref.rb +113 -0
- data/lib/mongo/error.rb +6 -2
- data/lib/mongo/error/parser.rb +1 -1
- data/lib/mongo/event/description_changed.rb +1 -1
- data/lib/mongo/grid/file.rb +1 -1
- data/lib/mongo/grid/fs.rb +2 -5
- data/lib/mongo/monitoring.rb +199 -0
- data/lib/mongo/monitoring/command_log_subscriber.rb +88 -0
- data/lib/mongo/monitoring/event.rb +17 -0
- data/lib/mongo/monitoring/event/command_failed.rb +96 -0
- data/lib/mongo/monitoring/event/command_started.rb +88 -0
- data/lib/mongo/monitoring/event/command_succeeded.rb +96 -0
- data/lib/mongo/monitoring/publishable.rb +96 -0
- data/lib/mongo/operation.rb +1 -0
- data/lib/mongo/operation/executable.rb +1 -1
- data/lib/mongo/operation/parallel_scan.rb +76 -0
- data/lib/mongo/operation/parallel_scan/result.rb +72 -0
- data/lib/mongo/operation/specifiable.rb +18 -0
- data/lib/mongo/operation/write/bulk/bulk_delete.rb +1 -1
- data/lib/mongo/operation/write/bulk/bulk_insert.rb +1 -1
- data/lib/mongo/operation/write/bulk/bulk_mergable.rb +2 -2
- data/lib/mongo/operation/write/bulk/bulk_update.rb +1 -1
- data/lib/mongo/operation/write/bulk/bulk_update/result.rb +13 -1
- data/lib/mongo/protocol/delete.rb +8 -13
- data/lib/mongo/protocol/get_more.rb +13 -13
- data/lib/mongo/protocol/insert.rb +8 -13
- data/lib/mongo/protocol/kill_cursors.rb +7 -11
- data/lib/mongo/protocol/query.rb +58 -20
- data/lib/mongo/protocol/reply.rb +12 -0
- data/lib/mongo/protocol/update.rb +13 -14
- data/lib/mongo/server.rb +23 -2
- data/lib/mongo/server/connectable.rb +0 -22
- data/lib/mongo/server/connection.rb +29 -0
- data/lib/mongo/server/description.rb +23 -1
- data/lib/mongo/server/monitor.rb +17 -1
- data/lib/mongo/server/monitor/connection.rb +24 -0
- data/lib/mongo/socket/ssl.rb +28 -16
- data/lib/mongo/socket/tcp.rb +1 -1
- data/lib/mongo/socket/unix.rb +1 -1
- data/lib/mongo/uri.rb +12 -5
- data/lib/mongo/version.rb +1 -1
- data/spec/mongo/auth/cr_spec.rb +9 -1
- data/spec/mongo/auth/ldap_spec.rb +9 -1
- data/spec/mongo/auth/scram_spec.rb +9 -1
- data/spec/mongo/auth/x509_spec.rb +9 -1
- data/spec/mongo/{bulk/bulk_write_spec.rb → bulk_write_spec.rb} +15 -15
- data/spec/mongo/client_spec.rb +42 -0
- data/spec/mongo/cluster/topology/replica_set_spec.rb +16 -9
- data/spec/mongo/cluster/topology/sharded_spec.rb +11 -3
- data/spec/mongo/cluster/topology/single_spec.rb +12 -4
- data/spec/mongo/cluster_spec.rb +55 -10
- data/spec/mongo/collection/view/aggregation_spec.rb +123 -1
- data/spec/mongo/collection/view/explainable_spec.rb +1 -1
- data/spec/mongo/collection/view/map_reduce_spec.rb +1 -1
- data/spec/mongo/collection/view/readable_spec.rb +251 -6
- data/spec/mongo/collection/view/writable_spec.rb +4 -4
- data/spec/mongo/collection/view_spec.rb +233 -71
- data/spec/mongo/collection_spec.rb +905 -9
- data/spec/mongo/crud_spec.rb +2 -2
- data/spec/mongo/cursor_spec.rb +3 -3
- data/spec/mongo/dbref_spec.rb +149 -0
- data/spec/mongo/monitoring_spec.rb +168 -0
- data/spec/mongo/operation/map_reduce_spec.rb +1 -1
- data/spec/mongo/operation/write/bulk/bulk_delete_spec.rb +1 -1
- data/spec/mongo/operation/write/bulk/bulk_insert_spec.rb +2 -2
- data/spec/mongo/operation/write/bulk/bulk_update_spec.rb +1 -1
- data/spec/mongo/operation/write/delete_spec.rb +1 -1
- data/spec/mongo/operation/write/insert_spec.rb +2 -2
- data/spec/mongo/operation/write/update_spec.rb +1 -1
- data/spec/mongo/protocol/query_spec.rb +0 -29
- data/spec/mongo/server/connection_pool_spec.rb +18 -6
- data/spec/mongo/server/connection_spec.rb +12 -4
- data/spec/mongo/server/description_spec.rb +7 -3
- data/spec/mongo/server/monitor_spec.rb +30 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +11 -4
- data/spec/mongo/server_selection_spec.rb +14 -6
- data/spec/mongo/server_spec.rb +27 -8
- data/spec/mongo/socket/ssl_spec.rb +94 -8
- data/spec/mongo/uri_spec.rb +25 -9
- data/spec/spec_helper.rb +29 -20
- data/spec/support/authorization.rb +19 -4
- data/spec/support/certificates/client.pem +4 -4
- data/spec/support/crud/read.rb +9 -10
- data/spec/support/crud/write.rb +24 -20
- data/spec/support/sdam/rs/equal_electionids.yml +45 -0
- data/spec/support/sdam/rs/new_primary_new_electionid.yml +98 -0
- data/spec/support/sdam/rs/null_election_id.yml +144 -0
- data/spec/support/sdam/rs/primary_disconnect_electionid.yml +124 -0
- data/spec/support/sdam/sharded/mongos_disconnect.yml +104 -0
- data/spec/support/server_discovery_and_monitoring.rb +19 -2
- data/spec/support/shared/bulk_write.rb +26 -22
- data/spec/support/shared/server_selector.rb +2 -1
- metadata +31 -7
- metadata.gz.sig +0 -0
- data/lib/mongo/error/invalid_uri_option.rb +0 -38
@@ -2,14 +2,26 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Mongo::Server::ConnectionPool do
|
4
4
|
|
5
|
+
let(:options) do
|
6
|
+
TEST_OPTIONS.merge(max_pool_size: 2)
|
7
|
+
end
|
8
|
+
|
5
9
|
let(:address) do
|
6
10
|
Mongo::Address.new('127.0.0.1:27017')
|
7
11
|
end
|
8
12
|
|
13
|
+
let(:monitoring) do
|
14
|
+
Mongo::Monitoring.new
|
15
|
+
end
|
16
|
+
|
17
|
+
let(:listeners) do
|
18
|
+
Mongo::Event::Listeners.new
|
19
|
+
end
|
20
|
+
|
9
21
|
describe '#checkin' do
|
10
22
|
|
11
23
|
let(:server) do
|
12
|
-
Mongo::Server.new(address, double('cluster'),
|
24
|
+
Mongo::Server.new(address, double('cluster'), monitoring, listeners, options)
|
13
25
|
end
|
14
26
|
|
15
27
|
let!(:pool) do
|
@@ -39,7 +51,7 @@ describe Mongo::Server::ConnectionPool do
|
|
39
51
|
describe '#checkout' do
|
40
52
|
|
41
53
|
let(:server) do
|
42
|
-
Mongo::Server.new(address, double('cluster'),
|
54
|
+
Mongo::Server.new(address, double('cluster'), monitoring, listeners, options)
|
43
55
|
end
|
44
56
|
|
45
57
|
let!(:pool) do
|
@@ -71,7 +83,7 @@ describe Mongo::Server::ConnectionPool do
|
|
71
83
|
context 'when a connection is checked out on a different thread' do
|
72
84
|
|
73
85
|
let!(:connection) do
|
74
|
-
Thread.new { pool.checkout }.
|
86
|
+
Thread.new { pool.checkout }.join
|
75
87
|
end
|
76
88
|
|
77
89
|
it 'returns a new connection' do
|
@@ -87,7 +99,7 @@ describe Mongo::Server::ConnectionPool do
|
|
87
99
|
describe '.get' do
|
88
100
|
|
89
101
|
let(:server) do
|
90
|
-
Mongo::Server.new(address, double('cluster'),
|
102
|
+
Mongo::Server.new(address, double('cluster'), monitoring, listeners, options)
|
91
103
|
end
|
92
104
|
|
93
105
|
let!(:pool) do
|
@@ -102,7 +114,7 @@ describe Mongo::Server::ConnectionPool do
|
|
102
114
|
describe '#inspect' do
|
103
115
|
|
104
116
|
let(:server) do
|
105
|
-
Mongo::Server.new(address, double('cluster'),
|
117
|
+
Mongo::Server.new(address, double('cluster'), monitoring, listeners, options)
|
106
118
|
end
|
107
119
|
|
108
120
|
let!(:pool) do
|
@@ -121,7 +133,7 @@ describe Mongo::Server::ConnectionPool do
|
|
121
133
|
describe '#with_connection' do
|
122
134
|
|
123
135
|
let(:server) do
|
124
|
-
Mongo::Server.new(address, double('cluster'),
|
136
|
+
Mongo::Server.new(address, double('cluster'), monitoring, listeners, options)
|
125
137
|
end
|
126
138
|
|
127
139
|
let!(:pool) do
|
@@ -6,8 +6,16 @@ describe Mongo::Server::Connection do
|
|
6
6
|
Mongo::Address.new(DEFAULT_ADDRESS)
|
7
7
|
end
|
8
8
|
|
9
|
+
let(:monitoring) do
|
10
|
+
Mongo::Monitoring.new
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:listeners) do
|
14
|
+
Mongo::Event::Listeners.new
|
15
|
+
end
|
16
|
+
|
9
17
|
let(:server) do
|
10
|
-
Mongo::Server.new(address, double('cluster'),
|
18
|
+
Mongo::Server.new(address, double('cluster'), monitoring, listeners, TEST_OPTIONS)
|
11
19
|
end
|
12
20
|
|
13
21
|
describe '#connect!' do
|
@@ -164,7 +172,7 @@ describe Mongo::Server::Connection do
|
|
164
172
|
end
|
165
173
|
|
166
174
|
after do
|
167
|
-
authorized_collection.
|
175
|
+
authorized_collection.delete_many
|
168
176
|
end
|
169
177
|
|
170
178
|
it 'it dispatchs the message to the socket' do
|
@@ -187,7 +195,7 @@ describe Mongo::Server::Connection do
|
|
187
195
|
end
|
188
196
|
|
189
197
|
after do
|
190
|
-
authorized_collection.
|
198
|
+
authorized_collection.delete_many
|
191
199
|
end
|
192
200
|
|
193
201
|
it 'it dispatchs the message to the socket' do
|
@@ -225,7 +233,7 @@ describe Mongo::Server::Connection do
|
|
225
233
|
end
|
226
234
|
|
227
235
|
after do
|
228
|
-
authorized_collection.
|
236
|
+
authorized_collection.delete_many
|
229
237
|
end
|
230
238
|
|
231
239
|
it 'disconnects the connection' do
|
@@ -31,6 +31,10 @@ describe Mongo::Server::Description do
|
|
31
31
|
Mongo::Address.new('127.0.0.1:27017')
|
32
32
|
end
|
33
33
|
|
34
|
+
let(:monitoring) do
|
35
|
+
Mongo::Monitoring.new
|
36
|
+
end
|
37
|
+
|
34
38
|
describe '#arbiter?' do
|
35
39
|
|
36
40
|
context 'when the server is an arbiter' do
|
@@ -583,7 +587,7 @@ describe Mongo::Server::Description do
|
|
583
587
|
end
|
584
588
|
|
585
589
|
let(:server) do
|
586
|
-
Mongo::Server.new(address, double('cluster'), listeners)
|
590
|
+
Mongo::Server.new(address, double('cluster'), monitoring, listeners)
|
587
591
|
end
|
588
592
|
|
589
593
|
let(:description) do
|
@@ -604,7 +608,7 @@ describe Mongo::Server::Description do
|
|
604
608
|
end
|
605
609
|
|
606
610
|
let(:server) do
|
607
|
-
Mongo::Server.new(other_address, double('cluster'), listeners)
|
611
|
+
Mongo::Server.new(other_address, double('cluster'), monitoring, listeners)
|
608
612
|
end
|
609
613
|
|
610
614
|
it 'returns false' do
|
@@ -628,7 +632,7 @@ describe Mongo::Server::Description do
|
|
628
632
|
end
|
629
633
|
|
630
634
|
let(:server) do
|
631
|
-
Mongo::Server.new(server_address, double('cluster'), listeners)
|
635
|
+
Mongo::Server.new(server_address, double('cluster'), monitoring, listeners)
|
632
636
|
end
|
633
637
|
|
634
638
|
context 'when the server is included in the description hosts list' do
|
@@ -141,4 +141,34 @@ describe Mongo::Server::Monitor do
|
|
141
141
|
expect(monitor.description).to_not be_nil
|
142
142
|
end
|
143
143
|
end
|
144
|
+
|
145
|
+
describe '#restart!' do
|
146
|
+
|
147
|
+
let(:monitor) do
|
148
|
+
described_class.new(address, listeners, TEST_OPTIONS)
|
149
|
+
end
|
150
|
+
|
151
|
+
let!(:thread) do
|
152
|
+
monitor.run!
|
153
|
+
end
|
154
|
+
|
155
|
+
context 'when the monitor is already running' do
|
156
|
+
|
157
|
+
it 'does not create a new thread' do
|
158
|
+
expect(monitor.restart!).to be(thread)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
context 'when the monitor is not already running' do
|
163
|
+
|
164
|
+
before do
|
165
|
+
monitor.stop!
|
166
|
+
sleep(1)
|
167
|
+
end
|
168
|
+
|
169
|
+
it 'creates a new thread' do
|
170
|
+
expect(monitor.restart!).not_to be(thread)
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
144
174
|
end
|
@@ -34,9 +34,10 @@ describe 'Server Discovery and Monitoring' do
|
|
34
34
|
|
35
35
|
# The constructor keeps the same API, but does not instantiate a
|
36
36
|
# monitor and run it.
|
37
|
-
def initialize(address, cluster, event_listeners, options = {})
|
37
|
+
def initialize(address, cluster, monitoring, event_listeners, options = {})
|
38
38
|
@address = address
|
39
39
|
@cluster = cluster
|
40
|
+
@monitoring = monitoring
|
40
41
|
@options = options.freeze
|
41
42
|
@monitor = Monitor.new(address, event_listeners, options)
|
42
43
|
end
|
@@ -59,9 +60,10 @@ describe 'Server Discovery and Monitoring' do
|
|
59
60
|
class Mongo::Server
|
60
61
|
|
61
62
|
# Returns the constructor to its original implementation.
|
62
|
-
def initialize(address, cluster, event_listeners, options = {})
|
63
|
+
def initialize(address, cluster, monitoring, event_listeners, options = {})
|
63
64
|
@address = address
|
64
65
|
@cluster = cluster
|
66
|
+
@monitoring = monitoring
|
65
67
|
@options = options.freeze
|
66
68
|
@monitor = Monitor.new(address, event_listeners, options)
|
67
69
|
@monitor.scan!
|
@@ -96,8 +98,13 @@ describe 'Server Discovery and Monitoring' do
|
|
96
98
|
# For each response in the phase, we need to change that server's
|
97
99
|
# description.
|
98
100
|
server = find_server(@client, response.address)
|
99
|
-
server = Mongo::Server.new(
|
100
|
-
|
101
|
+
server = Mongo::Server.new(
|
102
|
+
Mongo::Address.new(response.address),
|
103
|
+
@client.cluster,
|
104
|
+
@client.instance_variable_get(:@monitoring),
|
105
|
+
@client.cluster.send(:event_listeners),
|
106
|
+
@client.cluster.options
|
107
|
+
) unless server
|
101
108
|
monitor = server.instance_variable_get(:@monitor)
|
102
109
|
description = monitor.inspector.run(server.description, response.ismaster, 0.5)
|
103
110
|
monitor.instance_variable_set(:@description, description)
|
@@ -14,6 +14,14 @@ describe 'Server Selection' do
|
|
14
14
|
spec.type.new({})
|
15
15
|
end
|
16
16
|
|
17
|
+
let(:monitoring) do
|
18
|
+
Mongo::Monitoring.new
|
19
|
+
end
|
20
|
+
|
21
|
+
let(:listeners) do
|
22
|
+
Mongo::Event::Listeners.new
|
23
|
+
end
|
24
|
+
|
17
25
|
let(:cluster) do
|
18
26
|
double('cluster').tap do |c|
|
19
27
|
allow(c).to receive(:topology).and_return(topology)
|
@@ -26,7 +34,7 @@ describe 'Server Selection' do
|
|
26
34
|
let(:candidate_servers) do
|
27
35
|
spec.candidate_servers.collect do |server|
|
28
36
|
address = Mongo::Address.new(server['address'])
|
29
|
-
Mongo::Server.new(address, double('cluster'),
|
37
|
+
Mongo::Server.new(address, double('cluster'), monitoring, listeners, TEST_OPTIONS).tap do |s|
|
30
38
|
allow(s).to receive(:average_round_trip_time).and_return(server['avg_rtt_ms'])
|
31
39
|
allow(s).to receive(:tags).and_return(server['tags'])
|
32
40
|
allow(s).to receive(:secondary?).and_return(server['type'] == 'RSSecondary')
|
@@ -38,7 +46,7 @@ describe 'Server Selection' do
|
|
38
46
|
let(:in_latency_window) do
|
39
47
|
spec.in_latency_window.collect do |server|
|
40
48
|
address = Mongo::Address.new(server['address'])
|
41
|
-
Mongo::Server.new(address, double('cluster'),
|
49
|
+
Mongo::Server.new(address, double('cluster'), monitoring, listeners, TEST_OPTIONS).tap do |s|
|
42
50
|
allow(s).to receive(:average_round_trip_time).and_return(server['avg_rtt_ms'])
|
43
51
|
allow(s).to receive(:tags).and_return(server['tags'])
|
44
52
|
end
|
@@ -57,18 +65,18 @@ describe 'Server Selection' do
|
|
57
65
|
end
|
58
66
|
|
59
67
|
context 'Valid read preference and matching server available', if: spec.server_available? do
|
60
|
-
|
68
|
+
|
61
69
|
it 'Finds all suitable servers in the latency window', if: spec.replica_set? do
|
62
|
-
expect(server_selector.send(:select, cluster.servers)).to eq(in_latency_window)
|
70
|
+
expect(server_selector.send(:select, cluster.servers)).to eq(in_latency_window)
|
63
71
|
end
|
64
|
-
|
72
|
+
|
65
73
|
it 'Finds the most suitable server in the latency window' do
|
66
74
|
expect(in_latency_window).to include(server_selector.select_server(cluster))
|
67
75
|
end
|
68
76
|
end
|
69
77
|
|
70
78
|
context 'No matching server available', if: !spec.server_available? do
|
71
|
-
|
79
|
+
|
72
80
|
it 'Raises exception' do
|
73
81
|
expect do
|
74
82
|
server_selector.select_server(cluster)
|
data/spec/mongo/server_spec.rb
CHANGED
@@ -10,6 +10,10 @@ describe Mongo::Server do
|
|
10
10
|
Mongo::Event::Listeners.new
|
11
11
|
end
|
12
12
|
|
13
|
+
let(:monitoring) do
|
14
|
+
Mongo::Monitoring.new
|
15
|
+
end
|
16
|
+
|
13
17
|
let(:address) do
|
14
18
|
Mongo::Address.new('127.0.0.1:27017')
|
15
19
|
end
|
@@ -17,7 +21,7 @@ describe Mongo::Server do
|
|
17
21
|
describe '#==' do
|
18
22
|
|
19
23
|
let(:server) do
|
20
|
-
described_class.new(address, cluster, listeners, TEST_OPTIONS)
|
24
|
+
described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
|
21
25
|
end
|
22
26
|
|
23
27
|
context 'when the other is not a server' do
|
@@ -36,7 +40,7 @@ describe Mongo::Server do
|
|
36
40
|
context 'when the addresses match' do
|
37
41
|
|
38
42
|
let(:other) do
|
39
|
-
described_class.new(address, cluster, listeners, TEST_OPTIONS)
|
43
|
+
described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
|
40
44
|
end
|
41
45
|
|
42
46
|
it 'returns true' do
|
@@ -51,7 +55,7 @@ describe Mongo::Server do
|
|
51
55
|
end
|
52
56
|
|
53
57
|
let(:other) do
|
54
|
-
described_class.new(other_address, cluster, listeners, TEST_OPTIONS)
|
58
|
+
described_class.new(other_address, cluster, monitoring, listeners, TEST_OPTIONS)
|
55
59
|
end
|
56
60
|
|
57
61
|
it 'returns false' do
|
@@ -64,7 +68,7 @@ describe Mongo::Server do
|
|
64
68
|
describe '#context' do
|
65
69
|
|
66
70
|
let(:server) do
|
67
|
-
described_class.new(address, cluster, listeners, TEST_OPTIONS)
|
71
|
+
described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
|
68
72
|
end
|
69
73
|
|
70
74
|
let(:context) do
|
@@ -79,7 +83,7 @@ describe Mongo::Server do
|
|
79
83
|
describe '#disconnect!' do
|
80
84
|
|
81
85
|
let(:server) do
|
82
|
-
described_class.new(address, cluster, listeners, TEST_OPTIONS)
|
86
|
+
described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
|
83
87
|
end
|
84
88
|
|
85
89
|
it 'stops the monitor instance' do
|
@@ -91,7 +95,7 @@ describe Mongo::Server do
|
|
91
95
|
describe '#initialize' do
|
92
96
|
|
93
97
|
let(:server) do
|
94
|
-
described_class.new(address, cluster, listeners, TEST_OPTIONS.merge(:heartbeat_frequency => 5))
|
98
|
+
described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS.merge(:heartbeat_frequency => 5))
|
95
99
|
end
|
96
100
|
|
97
101
|
it 'sets the address host' do
|
@@ -110,7 +114,7 @@ describe Mongo::Server do
|
|
110
114
|
describe '#pool' do
|
111
115
|
|
112
116
|
let(:server) do
|
113
|
-
described_class.new(address, cluster, listeners, TEST_OPTIONS)
|
117
|
+
described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
|
114
118
|
end
|
115
119
|
|
116
120
|
let(:pool) do
|
@@ -125,11 +129,26 @@ describe Mongo::Server do
|
|
125
129
|
describe '#scan!' do
|
126
130
|
|
127
131
|
let(:server) do
|
128
|
-
described_class.new(address, cluster, listeners, TEST_OPTIONS)
|
132
|
+
described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
|
129
133
|
end
|
130
134
|
|
131
135
|
it 'forces a scan on the monitor' do
|
132
136
|
expect(server.scan!).to eq(server.description)
|
133
137
|
end
|
134
138
|
end
|
139
|
+
|
140
|
+
describe '#reconnect!' do
|
141
|
+
|
142
|
+
let(:server) do
|
143
|
+
described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
|
144
|
+
end
|
145
|
+
|
146
|
+
before do
|
147
|
+
expect(server.monitor).to receive(:restart!).and_call_original
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'restarts the monitor and returns true' do
|
151
|
+
expect(server.reconnect!).to be(true)
|
152
|
+
end
|
153
|
+
end
|
135
154
|
end
|
@@ -12,9 +12,10 @@ describe Mongo::Socket::SSL do
|
|
12
12
|
|
13
13
|
let(:options) do
|
14
14
|
{
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
:ssl => true,
|
16
|
+
:ssl_cert => CLIENT_PEM,
|
17
|
+
:ssl_key => CLIENT_PEM,
|
18
|
+
:ssl_verify => false
|
18
19
|
}
|
19
20
|
end
|
20
21
|
|
@@ -31,9 +32,10 @@ describe Mongo::Socket::SSL do
|
|
31
32
|
|
32
33
|
let(:options) do
|
33
34
|
{
|
34
|
-
|
35
|
-
|
36
|
-
|
35
|
+
:ssl => true,
|
36
|
+
:ssl_cert => CLIENT_PEM,
|
37
|
+
:ssl_key => CRL_PEM,
|
38
|
+
:ssl_verify => false
|
37
39
|
}
|
38
40
|
end
|
39
41
|
|
@@ -44,14 +46,15 @@ describe Mongo::Socket::SSL do
|
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
47
|
-
context 'when a CA certificate is provided', if:
|
49
|
+
context 'when a CA certificate is provided', if: testing_ssl_locally? do
|
48
50
|
|
49
51
|
let(:options) do
|
50
52
|
{
|
51
53
|
:ssl => true,
|
52
54
|
:ssl_cert => CLIENT_PEM,
|
53
55
|
:ssl_key => CLIENT_PEM,
|
54
|
-
:ssl_ca_cert => CA_PEM
|
56
|
+
:ssl_ca_cert => CA_PEM,
|
57
|
+
:ssl_verify => true
|
55
58
|
}
|
56
59
|
end
|
57
60
|
|
@@ -63,5 +66,88 @@ describe Mongo::Socket::SSL do
|
|
63
66
|
expect(socket).to be_alive
|
64
67
|
end
|
65
68
|
end
|
69
|
+
|
70
|
+
context 'when a CA certificate is not provided', if: testing_ssl_locally? do
|
71
|
+
|
72
|
+
let(:options) do
|
73
|
+
{
|
74
|
+
:ssl => true,
|
75
|
+
:ssl_cert => CLIENT_PEM,
|
76
|
+
:ssl_key => CLIENT_PEM,
|
77
|
+
:ssl_verify => true
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
before do
|
82
|
+
ENV['SSL_CERT_FILE']= CA_PEM
|
83
|
+
socket.connect!
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'uses the default cert store' do
|
87
|
+
expect(socket).to be_alive
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
context 'when ssl_verify is not specified', if: testing_ssl_locally? do
|
92
|
+
|
93
|
+
let(:options) do
|
94
|
+
{
|
95
|
+
:ssl => true,
|
96
|
+
:ssl_cert => CLIENT_PEM,
|
97
|
+
:ssl_key => CLIENT_PEM,
|
98
|
+
:ssl_ca_cert => CA_PEM
|
99
|
+
}
|
100
|
+
end
|
101
|
+
|
102
|
+
before do
|
103
|
+
socket.connect!
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'verifies the server certificate' do
|
107
|
+
expect(socket).to be_alive
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context 'when ssl_verify is true', if: testing_ssl_locally? do
|
112
|
+
|
113
|
+
let(:options) do
|
114
|
+
{
|
115
|
+
:ssl => true,
|
116
|
+
:ssl_cert => CLIENT_PEM,
|
117
|
+
:ssl_key => CLIENT_PEM,
|
118
|
+
:ssl_ca_cert => CA_PEM,
|
119
|
+
:ssl_verify => true
|
120
|
+
}
|
121
|
+
end
|
122
|
+
|
123
|
+
before do
|
124
|
+
socket.connect!
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'verifies the server certificate' do
|
128
|
+
expect(socket).to be_alive
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context 'when ssl_verify is false' do
|
133
|
+
|
134
|
+
let(:options) do
|
135
|
+
{
|
136
|
+
:ssl => true,
|
137
|
+
:ssl_cert => CLIENT_PEM,
|
138
|
+
:ssl_key => CLIENT_PEM,
|
139
|
+
:ssl_ca_cert => 'invalid',
|
140
|
+
:ssl_verify => false
|
141
|
+
}
|
142
|
+
end
|
143
|
+
|
144
|
+
before do
|
145
|
+
socket.connect!
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'does not verify the server certificate' do
|
149
|
+
expect(socket).to be_alive
|
150
|
+
end
|
151
|
+
end
|
66
152
|
end
|
67
153
|
end
|