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

View File

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