correct erratically failing spec

This commit is contained in:
Sam 2017-08-18 15:10:37 -04:00
parent d65570a8a1
commit aeedecd27c
2 changed files with 16 additions and 4 deletions

View File

@ -99,7 +99,7 @@ class DiscourseRedis
@fallback_handler = DiscourseRedis::FallbackHandler.instance
end
def resolve
def resolve(client = nil)
if !@fallback_handler.master
@fallback_handler.verify_master unless @fallback_handler.running?
return @slave_options
@ -108,7 +108,7 @@ class DiscourseRedis
begin
options = @options.dup
options.delete(:connector)
client = Redis::Client.new(options)
client ||= Redis::Client.new(options)
loading = client.call([:info]).split("\r\n").include?("loading:1")
loading ? @slave_options : @options
rescue Redis::ConnectionError, Redis::CannotConnectError, RuntimeError => ex

View File

@ -116,12 +116,24 @@ describe DiscourseRedis do
end
end
class BrokenRedis
def initialize(error)
@error = error
end
def call(*args)
raise @error
end
def disconnect
end
end
it "should return the slave config when master's hostname cannot be resolved" do
begin
error = RuntimeError.new('Name or service not known')
Redis::Client.any_instance.expects(:call).raises(error).once
expect { connector.resolve }.to raise_error(error)
expect { connector.resolve(BrokenRedis.new(error)) }.to raise_error(error)
fallback_handler.instance_variable_get(:@timer_task).shutdown
expect(fallback_handler.running?).to eq(false)