spec/mongo/server/monitor_spec.rb in mongo-2.6.4 vs spec/mongo/server/monitor_spec.rb in mongo-2.7.0.rc0
- old
+ new
@@ -1,8 +1,11 @@
require 'spec_helper'
describe Mongo::Server::Monitor do
+ before(:all) do
+ ClientRegistry.instance.close_all_clients
+ end
let(:address) do
default_address
end
@@ -13,11 +16,12 @@
describe '#scan!' do
context 'when calling multiple times in succession' do
let(:monitor) do
- described_class.new(address, listeners, TEST_OPTIONS)
+ described_class.new(address, listeners, Mongo::Monitoring.new,
+ SpecConfig.instance.test_options)
end
it 'throttles the scans to minimum 500ms' do
start = Time.now
monitor.scan!
@@ -27,11 +31,12 @@
end
context 'when the ismaster fails the first time' do
let(:monitor) do
- described_class.new(address, listeners, TEST_OPTIONS)
+ described_class.new(address, listeners, Mongo::Monitoring.new,
+ SpecConfig.instance.test_options.merge(monitoring_io: false))
end
let(:socket) do
monitor.connection.connect!
monitor.connection.__send__(:socket)
@@ -41,43 +46,68 @@
expect(socket).to receive(:write).once.and_raise(Mongo::Error::SocketError)
expect(socket).to receive(:write).and_call_original
monitor.scan!
end
- it 'retries the ismaster', if: standalone? do
- expect(monitor.description).to be_standalone
+ context 'in single topology' do
+ require_topology :single
+
+ it 'retries the ismaster' do
+ expect(monitor.description).to be_standalone
+ end
end
- it 'retries the ismaster', if: replica_set? do
- expect(monitor.description).to be_primary
+ context 'in replica set topology' do
+ require_topology :replica_set
+
+ it 'retries the ismaster' do
+ expect(monitor.description).to be_primary
+ end
end
- it 'retries the ismaster', if: sharded? do
- expect(monitor.description).to be_mongos
+ context 'in sharded topology' do
+ require_topology :sharded
+
+ it 'retries the ismaster' do
+ expect(monitor.description).to be_mongos
+ end
end
end
context 'when the ismaster command succeeds' do
let(:monitor) do
- described_class.new(address, listeners, TEST_OPTIONS)
+ described_class.new(address, listeners, Mongo::Monitoring.new,
+ SpecConfig.instance.test_options)
end
before do
monitor.scan!
end
- it 'updates the server description', if: standalone? do
- expect(monitor.description).to be_standalone
+ context 'in single topology' do
+ require_topology :single
+
+ it 'updates the server description' do
+ expect(monitor.description).to be_standalone
+ end
end
- it 'updates the server description', if: replica_set? do
- expect(monitor.description).to be_primary
+ context 'in replica set topology' do
+ require_topology :replica_set
+
+ it 'updates the server description' do
+ expect(monitor.description).to be_primary
+ end
end
- it 'updates the server description', if: sharded? do
- expect(monitor.description).to be_mongos
+ context 'in sharded topology' do
+ require_topology :sharded
+
+ it 'updates the server description' do
+ expect(monitor.description).to be_mongos
+ end
end
end
context 'when the ismaster command fails' do
@@ -86,11 +116,11 @@
let(:bad_address) do
Mongo::Address.new('127.0.0.1:27050')
end
let(:monitor) do
- described_class.new(bad_address, listeners)
+ described_class.new(bad_address, listeners, Mongo::Monitoring.new)
end
before do
monitor.scan!
end
@@ -105,11 +135,11 @@
let(:bad_address) do
default_address
end
let(:monitor) do
- described_class.new(bad_address, listeners)
+ described_class.new(bad_address, listeners, Mongo::Monitoring.new)
end
let(:socket) do
monitor.connection.connect!
monitor.connection.__send__(:socket)
@@ -134,22 +164,22 @@
describe '#heartbeat_frequency' do
context 'when an option is provided' do
let(:monitor) do
- described_class.new(address, listeners, :heartbeat_frequency => 5)
+ described_class.new(address, listeners, Mongo::Monitoring.new, :heartbeat_frequency => 5)
end
it 'returns the option' do
expect(monitor.heartbeat_frequency).to eq(5)
end
end
context 'when no option is provided' do
let(:monitor) do
- described_class.new(address, listeners)
+ described_class.new(address, listeners, Mongo::Monitoring.new)
end
it 'defaults to 10' do
expect(monitor.heartbeat_frequency).to eq(10)
end
@@ -157,11 +187,11 @@
end
describe '#run!' do
let(:monitor) do
- described_class.new(address, listeners, :heartbeat_frequency => 1)
+ described_class.new(address, listeners, Mongo::Monitoring.new, :heartbeat_frequency => 1)
end
before do
monitor.run!
sleep(1)
@@ -173,11 +203,11 @@
end
describe '#restart!' do
let(:monitor) do
- described_class.new(address, listeners, TEST_OPTIONS)
+ described_class.new(address, listeners, Mongo::Monitoring.new, SpecConfig.instance.test_options)
end
let!(:thread) do
monitor.run!
end
@@ -201,28 +231,27 @@
end
end
end
describe '#stop' do
-
let(:monitor) do
- described_class.new(address, listeners, TEST_OPTIONS)
+ described_class.new(address, listeners, Mongo::Monitoring.new,
+ SpecConfig.instance.test_options)
end
- let!(:thread) do
+ let(:thread) do
monitor.run!
end
- before do
+ it 'kills the monitor thread' do
+ ClientRegistry.instance.close_all_clients
+ thread
+ sleep 1
expect(monitor.connection).to receive(:disconnect!).and_call_original
- monitor.stop!
- sleep(1)
+ monitor.stop!(true)
+ expect(thread.alive?).to be(false)
end
-
- it 'kills the monitor thread' do
- expect(thread.stop?).to be(true)
- end
end
describe '#connection' do
context 'when there is a connect_timeout option set' do
@@ -230,10 +259,10 @@
let(:connect_timeout) do
1
end
let(:monitor) do
- described_class.new(address, listeners, TEST_OPTIONS.merge(connect_timeout: connect_timeout))
+ described_class.new(address, listeners, Mongo::Monitoring.new, SpecConfig.instance.test_options.merge(connect_timeout: connect_timeout))
end
it 'sets the value as the timeout on the connection' do
expect(monitor.connection.timeout).to eq(connect_timeout)
end