Skip to content

Commit e46714d

Browse files
committed
RUBY-932 Cluster tests
1 parent 8bafd33 commit e46714d

File tree

1 file changed

+137
-0
lines changed

1 file changed

+137
-0
lines changed

spec/mongo/cluster_spec.rb

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,4 +209,141 @@
209209
end
210210
end
211211
end
212+
213+
describe '#add_hosts' do
214+
215+
let(:servers) do
216+
[nil]
217+
end
218+
219+
let(:hosts) do
220+
["127.0.0.1:27018"]
221+
end
222+
223+
let(:description) do
224+
Mongo::Server::Description.new(double('address'), { 'hosts' => hosts })
225+
end
226+
227+
before do
228+
cluster.instance_variable_set(:@servers, servers)
229+
cluster.instance_variable_set(:@topology, topology)
230+
end
231+
232+
context 'when the topology allows servers to be added' do
233+
234+
let(:topology) do
235+
double('topology').tap do |t|
236+
allow(t).to receive(:add_hosts?).and_return(true)
237+
end
238+
end
239+
240+
it 'adds the servers' do
241+
expect(cluster).to receive(:add).once
242+
cluster.add_hosts(description)
243+
end
244+
end
245+
246+
context 'when the topology does not allow servers to be added' do
247+
248+
let(:topology) do
249+
double('topology').tap do |t|
250+
allow(t).to receive(:add_hosts?).and_return(false)
251+
end
252+
end
253+
254+
it 'does not add the servers' do
255+
expect(cluster).not_to receive(:add)
256+
cluster.add_hosts(description)
257+
end
258+
end
259+
end
260+
261+
describe '#remove_hosts' do
262+
263+
let(:listeners) do
264+
Mongo::Event::Listeners.new
265+
end
266+
267+
let(:address) do
268+
Mongo::Address.new('127.0.0.1:27017')
269+
end
270+
271+
let(:server) do
272+
Mongo::Server.new(address, listeners)
273+
end
274+
275+
let(:servers) do
276+
[ server ]
277+
end
278+
279+
let(:hosts) do
280+
["127.0.0.1:27018"]
281+
end
282+
283+
let(:description) do
284+
Mongo::Server::Description.new(double('address'), { 'hosts' => hosts })
285+
end
286+
287+
context 'when the topology allows servers to be removed' do
288+
289+
context 'when the topology allows a specific server to be removed' do
290+
291+
let(:topology) do
292+
double('topology').tap do |t|
293+
allow(t).to receive(:remove_hosts?).and_return(true)
294+
allow(t).to receive(:remove_server?).and_return(true)
295+
end
296+
end
297+
298+
before do
299+
cluster.instance_variable_set(:@servers, servers)
300+
cluster.instance_variable_set(:@topology, topology)
301+
end
302+
303+
it 'removes the servers' do
304+
expect(cluster).to receive(:remove).once
305+
cluster.remove_hosts(description)
306+
end
307+
end
308+
309+
context 'when the topology does not allow a specific server to be removed' do
310+
311+
let(:topology) do
312+
double('topology').tap do |t|
313+
allow(t).to receive(:remove_hosts?).and_return(true)
314+
allow(t).to receive(:remove_server?).and_return(false)
315+
end
316+
end
317+
318+
before do
319+
cluster.instance_variable_set(:@servers, servers)
320+
cluster.instance_variable_set(:@topology, topology)
321+
end
322+
323+
it 'removes the servers' do
324+
expect(cluster).not_to receive(:remove)
325+
cluster.remove_hosts(description)
326+
end
327+
end
328+
end
329+
330+
context 'when the topology does not allow servers to be removed' do
331+
332+
let(:topology) do
333+
double('topology').tap do |t|
334+
allow(t).to receive(:remove_hosts?).and_return(false)
335+
end
336+
end
337+
338+
before do
339+
cluster.instance_variable_set(:@servers, servers)
340+
cluster.instance_variable_set(:@topology, topology)
341+
end
342+
343+
it 'does not remove the servers' do
344+
expect(cluster).not_to receive(:remove)
345+
cluster.remove_hosts(description)
346+
end
347+
end
348+
end
212349
end

0 commit comments

Comments
 (0)