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