From 432b303c2193e8a87b6577e6bd0f778b76f38fa1 Mon Sep 17 00:00:00 2001 From: Soutaro Matsumoto Date: Wed, 28 Jul 2021 14:29:56 +0900 Subject: [PATCH 1/3] Resolv::DNS::Config#single? may return nil --- test/stdlib/resolv/DNS_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/stdlib/resolv/DNS_test.rb b/test/stdlib/resolv/DNS_test.rb index d542a89ea..0c7c1b99b 100644 --- a/test/stdlib/resolv/DNS_test.rb +++ b/test/stdlib/resolv/DNS_test.rb @@ -196,7 +196,7 @@ def test_resolv end def test_single? - assert_send_type '() -> [String, Integer]', + assert_send_type '() -> [String, Integer]?', dns_config, :single? end From 9b9098b25689c1d88b7e77e9cd06b8c2a80a4426 Mon Sep 17 00:00:00 2001 From: Soutaro Matsumoto Date: Wed, 28 Jul 2021 14:32:15 +0900 Subject: [PATCH 2/3] Change `Resolv::DNS#getnames` type to an array --- stdlib/resolv/0/resolv.rbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/resolv/0/resolv.rbs b/stdlib/resolv/0/resolv.rbs index 7589d9c47..8d6802ca9 100644 --- a/stdlib/resolv/0/resolv.rbs +++ b/stdlib/resolv/0/resolv.rbs @@ -177,7 +177,7 @@ class Resolv::DNS # `address` must be a Resolv::IPv4, Resolv::IPv6 or a String. Retrieved names # will be Resolv::DNS::Name instances. # - def getnames: (ip_address | dns_name address) -> [Resolv::DNS::Name] + def getnames: (ip_address | dns_name address) -> Array[Resolv::DNS::Name] # Look up the `typeclass` DNS resource of `name`. # From 6b2c8126cdb35adada91c1c85190f7cb2648deb3 Mon Sep 17 00:00:00 2001 From: Soutaro Matsumoto Date: Wed, 28 Jul 2021 14:32:35 +0900 Subject: [PATCH 3/3] Allow name resolution errors --- test/stdlib/resolv/DNS_test.rb | 31 ++++++++++++++++++------------- test/stdlib/test_helper.rb | 6 ++++++ 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/test/stdlib/resolv/DNS_test.rb b/test/stdlib/resolv/DNS_test.rb index 0c7c1b99b..5f5628bed 100644 --- a/test/stdlib/resolv/DNS_test.rb +++ b/test/stdlib/resolv/DNS_test.rb @@ -36,7 +36,6 @@ def test_random end end - class ResolvDNSinstanceTest < Test::Unit::TestCase include TypeAssertions library 'resolv' @@ -86,10 +85,12 @@ def test_fetch_resource end def test_getaddress - assert_send_type "(String) -> (Resolv::IPv4 | Resolv::IPv6)", - resolv_dns, :getaddress, "localhost" - assert_send_type "(Resolv::DNS::Name) -> (Resolv::IPv4 | Resolv::IPv6)", - resolv_dns, :getaddress, Resolv::DNS::Name.create("localhost") + allows_error(Resolv::ResolvError) do + assert_send_type "(String) -> (Resolv::IPv4 | Resolv::IPv6)", + resolv_dns, :getaddress, "localhost" + assert_send_type "(Resolv::DNS::Name) -> (Resolv::IPv4 | Resolv::IPv6)", + resolv_dns, :getaddress, Resolv::DNS::Name.create("localhost") + end end def test_getaddresses @@ -100,12 +101,14 @@ def test_getaddresses end def test_getname - assert_send_type "(String) -> Resolv::DNS::Name", - resolv_dns, :getname, "127.0.0.1" - assert_send_type "(Resolv::IPv4) -> Resolv::DNS::Name", - resolv_dns, :getname, Resolv::IPv4.create("127.0.0.1") - assert_send_type "(Resolv::DNS::Name) -> Resolv::DNS::Name", - resolv_dns, :getname, Resolv::IPv4.create("127.0.0.1").to_name + allows_error(Resolv::ResolvError) do + assert_send_type "(String) -> Resolv::DNS::Name", + resolv_dns, :getname, "127.0.0.1" + assert_send_type "(Resolv::IPv4) -> Resolv::DNS::Name", + resolv_dns, :getname, Resolv::IPv4.create("127.0.0.1") + assert_send_type "(Resolv::DNS::Name) -> Resolv::DNS::Name", + resolv_dns, :getname, Resolv::IPv4.create("127.0.0.1").to_name + end end def test_getnames @@ -114,8 +117,10 @@ def test_getnames end def test_getresource - assert_send_type "(String, singleton(Resolv::DNS::Query)) -> Resolv::DNS::Resource", - resolv_dns, :getresource, "localhost", Resolv::DNS::Resource::IN::A + allows_error(Resolv::ResolvError) do + assert_send_type "(String, singleton(Resolv::DNS::Query)) -> Resolv::DNS::Resource", + resolv_dns, :getresource, "localhost", Resolv::DNS::Resource::IN::A + end end def test_getresources diff --git a/test/stdlib/test_helper.rb b/test/stdlib/test_helper.rb index 6c94fb9fd..0f2fc0d94 100644 --- a/test/stdlib/test_helper.rb +++ b/test/stdlib/test_helper.rb @@ -336,6 +336,12 @@ def method_types(method) definition.methods[method].method_types end end + + def allows_error(*errors) + yield + rescue *errors => exn + notify "Error allowed: #{exn.inspect}" + end end class ToInt