DEV: Stablize DiscourseRedis tests.

This commit is contained in:
Guo Xiang Tan 2018-05-30 14:43:30 +08:00
parent 47a9b3427b
commit f623740ffc

View File

@ -97,6 +97,7 @@ describe DiscourseRedis do
$redis.set('test', '1') $redis.set('test', '1')
ensure ensure
fallback_handler.master = true fallback_handler.master = true
$redis.del('test')
end end
end end
end end
@ -104,6 +105,10 @@ describe DiscourseRedis do
describe DiscourseRedis::Connector do describe DiscourseRedis::Connector do
let(:connector) { DiscourseRedis::Connector.new(config) } let(:connector) { DiscourseRedis::Connector.new(config) }
after do
fallback_handler.master = true
end
it 'should return the master config when master is up' do it 'should return the master config when master is up' do
expect(connector.resolve).to eq(config) expect(connector.resolve).to eq(config)
end end
@ -122,24 +127,25 @@ describe DiscourseRedis do
end end
it 'should return the slave config when master is down' do it 'should return the slave config when master is down' do
begin
error = Redis::CannotConnectError error = Redis::CannotConnectError
expect { connector.resolve(BrokenRedis.new(error)) }.to raise_error(Redis::CannotConnectError)
expect do
connector.resolve(BrokenRedis.new(error))
end.to raise_error(Redis::CannotConnectError)
config = connector.resolve config = connector.resolve
expect(config[:host]).to eq(slave_host) expect(config[:host]).to eq(slave_host)
expect(config[:port]).to eq(slave_port) expect(config[:port]).to eq(slave_port)
ensure
fallback_handler.master = true
end
end end
it "should return the slave config when master's hostname cannot be resolved" do it "should return the slave config when master's hostname cannot be resolved" do
begin
error = RuntimeError.new('Name or service not known') error = RuntimeError.new('Name or service not known')
expect { connector.resolve(BrokenRedis.new(error)) }.to raise_error(error) expect do
connector.resolve(BrokenRedis.new(error))
end.to raise_error(error)
expect(fallback_handler.master).to eq(false) expect(fallback_handler.master).to eq(false)
config = connector.resolve config = connector.resolve
@ -147,21 +153,18 @@ describe DiscourseRedis do
expect(config[:host]).to eq(slave_host) expect(config[:host]).to eq(slave_host)
expect(config[:port]).to eq(slave_port) expect(config[:port]).to eq(slave_port)
expect(fallback_handler.master).to eq(false) expect(fallback_handler.master).to eq(false)
ensure
fallback_handler.master = true
end
end end
it "should return the slave config when master is still loading data" do it "should return the slave config when master is still loading data" do
begin Redis::Client.any_instance
Redis::Client.any_instance.expects(:call).with([:info]).returns("someconfig:haha\r\nloading:1") .expects(:call)
.with([:info])
.returns("someconfig:haha\r\nloading:1")
config = connector.resolve config = connector.resolve
expect(config[:host]).to eq(slave_host) expect(config[:host]).to eq(slave_host)
expect(config[:port]).to eq(slave_port) expect(config[:port]).to eq(slave_port)
ensure
fallback_handler.master = true
end
end end
it "should raise the right error" do it "should raise the right error" do
@ -172,9 +175,13 @@ describe DiscourseRedis do
end end
describe DiscourseRedis::FallbackHandler do describe DiscourseRedis::FallbackHandler do
before do
@original_keepalive_interval = MessageBus.keepalive_interval
end
after do after do
fallback_handler.master = true fallback_handler.master = true
MessageBus.keepalive_interval = -1 MessageBus.keepalive_interval = @original_keepalive_interval
end end
describe '#initiate_fallback_to_master' do describe '#initiate_fallback_to_master' do
@ -188,7 +195,7 @@ describe DiscourseRedis do
it 'should fallback to the master server once it is up' do it 'should fallback to the master server once it is up' do
fallback_handler.master = false fallback_handler.master = false
redis_connection = DiscourseRedis.raw_connection._client redis_connection = mock('test')
Redis::Client.expects(:new).with(DiscourseRedis.slave_config).returns(redis_connection) Redis::Client.expects(:new).with(DiscourseRedis.slave_config).returns(redis_connection)
redis_connection.expects(:call).with([:info]).returns(DiscourseRedis::FallbackHandler::MASTER_LINK_STATUS) redis_connection.expects(:call).with([:info]).returns(DiscourseRedis::FallbackHandler::MASTER_LINK_STATUS)
@ -197,6 +204,8 @@ describe DiscourseRedis do
redis_connection.expects(:call).with([:client, [:kill, 'type', connection_type]]) redis_connection.expects(:call).with([:client, [:kill, 'type', connection_type]])
end end
redis_connection.expects(:disconnect)
expect(fallback_handler.initiate_fallback_to_master).to eq(true) expect(fallback_handler.initiate_fallback_to_master).to eq(true)
expect(fallback_handler.master).to eq(true) expect(fallback_handler.master).to eq(true)
expect(Discourse.recently_readonly?).to eq(false) expect(Discourse.recently_readonly?).to eq(false)