aboutsummaryrefslogtreecommitdiffstats
path: root/test/resolv
diff options
context:
space:
mode:
Diffstat (limited to 'test/resolv')
-rw-r--r--test/resolv/test_dns.rb19
1 files changed, 19 insertions, 0 deletions
diff --git a/test/resolv/test_dns.rb b/test/resolv/test_dns.rb
index 1b44f32807..1ac3aea7b8 100644
--- a/test/resolv/test_dns.rb
+++ b/test/resolv/test_dns.rb
@@ -3,6 +3,7 @@ require 'test/unit'
require 'resolv'
require 'socket'
require 'tempfile'
+require 'minitest/mock'
class TestResolvDNS < Test::Unit::TestCase
def setup
@@ -246,4 +247,22 @@ class TestResolvDNS < Test::Unit::TestCase
}
assert_operator(2**14, :<, m.to_s.length)
end
+
+ def assert_no_fd_leak
+ socket = assert_throw(self) do |tag|
+ Resolv::DNS.stub(:bind_random_port, ->(s, *) {throw(tag, s)}) do
+ yield.getname("8.8.8.8")
+ end
+ end
+
+ assert_predicate(socket, :closed?, "file descriptor leaked")
+ end
+
+ def test_no_fd_leak_connected
+ assert_no_fd_leak {Resolv::DNS.new(nameserver_port: [['127.0.0.1', 53]])}
+ end
+
+ def test_no_fd_leak_unconnected
+ assert_no_fd_leak {Resolv::DNS.new}
+ end
end