diff options
Diffstat (limited to 'test/test_ipaddr.rb')
| -rw-r--r-- | test/test_ipaddr.rb | 60 |
1 files changed, 58 insertions, 2 deletions
diff --git a/test/test_ipaddr.rb b/test/test_ipaddr.rb index 7ecd37e9a4..9725ab31c1 100644 --- a/test/test_ipaddr.rb +++ b/test/test_ipaddr.rb @@ -196,6 +196,24 @@ class TC_IPAddr < Test::Unit::TestCase } assert_equal("::192.168.1.2", b.to_s) assert_equal(Socket::AF_INET6, b.family) + assert_equal(128, b.prefix) + + a = IPAddr.new("192.168.0.0/16") + assert_warning(/obsolete/) { + b = a.ipv4_compat + } + assert_equal("::192.168.0.0", b.to_s) + assert_equal(Socket::AF_INET6, b.family) + assert_equal(112, b.prefix) + end + + def test_ipv4_compat_with_error_message + e = assert_raise(IPAddr::InvalidAddressError) do + assert_warning(/obsolete/) { + IPAddr.new('2001:db8::').ipv4_compat + } + end + assert_equal('not an IPv4 address: 2001:db8::', e.message) end def test_ipv4_mapped @@ -215,6 +233,13 @@ class TC_IPAddr < Test::Unit::TestCase assert_equal(Socket::AF_INET6, b.family) end + def test_ipv4_mapped_with_error_message + e = assert_raise(IPAddr::InvalidAddressError) do + IPAddr.new('2001:db8::').ipv4_mapped + end + assert_equal('not an IPv4 address: 2001:db8::', e.message) + end + def test_reverse assert_equal("f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.arpa", IPAddr.new("3ffe:505:2::f").reverse) assert_equal("1.2.168.192.in-addr.arpa", IPAddr.new("192.168.2.1").reverse) @@ -222,16 +247,18 @@ class TC_IPAddr < Test::Unit::TestCase def test_ip6_arpa assert_equal("f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.arpa", IPAddr.new("3ffe:505:2::f").ip6_arpa) - assert_raise(IPAddr::InvalidAddressError) { + e = assert_raise(IPAddr::InvalidAddressError) { IPAddr.new("192.168.2.1").ip6_arpa } + assert_equal('not an IPv6 address: 192.168.2.1', e.message) end def test_ip6_int assert_equal("f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.int", IPAddr.new("3ffe:505:2::f").ip6_int) - assert_raise(IPAddr::InvalidAddressError) { + e = assert_raise(IPAddr::InvalidAddressError) { IPAddr.new("192.168.2.1").ip6_int } + assert_equal('not an IPv6 address: 192.168.2.1', e.message) end def test_prefix_writer @@ -448,6 +475,8 @@ class TC_Operator < Test::Unit::TestCase assert_equal(false, @a != IPAddr.new("3ffe:505:2::")) assert_equal(false, @a == @inconvertible_range) assert_equal(false, @a == @inconvertible_string) + assert_equal(false, IPAddr.new("0.0.0.0") == nil) + assert_equal(false, IPAddr.new("::") == nil) end def test_compare @@ -506,6 +535,9 @@ class TC_Operator < Test::Unit::TestCase assert_equal(false, IPAddr.new('::ffff:0.0.0.0').loopback?) assert_equal(false, IPAddr.new('::ffff:192.168.2.0').loopback?) assert_equal(false, IPAddr.new('::ffff:255.0.0.0').loopback?) + + # Global unicast addresses with 0xffff in group 5 must not be mistaken for ::ffff:127.x.x.x + assert_equal(false, IPAddr.new('2001:db8:1:1:0:ffff:7f00:1').loopback?) end def test_private? @@ -556,6 +588,10 @@ class TC_Operator < Test::Unit::TestCase assert_equal(false, IPAddr.new('::ffff:192.169.0.0').private?) assert_equal(false, IPAddr.new('::ffff:169.254.0.1').private?) + + # Global unicast addresses with 0xffff in group 5 must not be mistaken for ::ffff:10/172.16/192.168.x + assert_equal(false, IPAddr.new('2001:718:1404:c8:0:ffff:ac19:c80e').private?) + assert_equal(false, IPAddr.new('2001:db8:1:1:0:ffff:c0a8:1').private?) end def test_link_local? @@ -582,6 +618,9 @@ class TC_Operator < Test::Unit::TestCase assert_equal(true, IPAddr.new('::ffff:169.254.1.1').link_local?) assert_equal(true, IPAddr.new('::ffff:169.254.254.255').link_local?) + + # Global unicast addresses with 0xffff in group 5 must not be mistaken for ::ffff:169.254.x.x + assert_equal(false, IPAddr.new('2001:db8:1:1:0:ffff:a9fe:101').link_local?) end def test_hash @@ -611,4 +650,21 @@ class TC_Operator < Test::Unit::TestCase assert_equal(true, s.include?(a5)) assert_equal(true, s.include?(a6)) end + + def test_raises_invalid_address_error_with_error_message + e = assert_raise(IPAddr::InvalidAddressError) do + IPAddr.new('192.168.0.1000') + end + assert_equal('invalid address: 192.168.0.1000', e.message) + + e = assert_raise(IPAddr::InvalidAddressError) do + IPAddr.new('192.168.01.100') + end + assert_equal('zero-filled number in IPv4 address is ambiguous: 192.168.01.100', e.message) + + e = assert_raise(IPAddr::InvalidAddressError) do + IPAddr.new('INVALID') + end + assert_equal('invalid address: INVALID', e.message) + end end |
