Skip to content

Instantly share code, notes, and snippets.

@sunaot
Created July 2, 2012 11:35
Show Gist options
  • Save sunaot/3032789 to your computer and use it in GitHub Desktop.
Save sunaot/3032789 to your computer and use it in GitHub Desktop.
require 'test/unit'
class Test < Test::Unit::TestCase
def test_resolv_error
force_resolv_error do
# do something
end
end
private
def force_resolv_error &block
original_resolver = Resolv::DefaultResolver
replace_resolver ErrorResolv.new
begin
block.call
ensure
replace_resolver original_resolver
end
end
def replace_resolver new_resolver
current = $VERBOSE
$VERBOSE = nil # to ignore const redefined warning
Resolv.const_set(:DefaultResolver, new_resolver)
$VERBOSE = current
end
end
class ErrorResolv
PublicAPIs = [:getaddresses, :getaddress, :each_address, :getname, :getnames, :each_name]
def raise_error *args
raise Resolv::ResolvError
end
PublicAPIs.each {|method| alias_method method, :raise_error }
private :raise_error
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment