diff options
Diffstat (limited to 'test/test_ipaddr.rb')
| -rw-r--r-- | test/test_ipaddr.rb | 100 |
1 files changed, 98 insertions, 2 deletions
diff --git a/test/test_ipaddr.rb b/test/test_ipaddr.rb index f2b7ed713f..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 @@ -399,6 +426,46 @@ class TC_Operator < Test::Unit::TestCase assert_equal("::", @in6_addr_any.to_s) end + def test_plus + a = IPAddr.new("192.168.1.10") + assert_equal("192.168.1.20", (a + 10).to_s) + + a = IPAddr.new("0.0.0.0") + assert_equal("0.0.0.10", (a + 10).to_s) + + a = IPAddr.new("255.255.255.255") + assert_raise(IPAddr::InvalidAddressError) { a + 10 } + + a = IPAddr.new("3ffe:505:2::a") + assert_equal("3ffe:505:2::14", (a + 10).to_s) + + a = IPAddr.new("::") + assert_equal("::a", (a + 10).to_s) + + a = IPAddr.new("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff") + assert_raise(IPAddr::InvalidAddressError) { a + 10 } + end + + def test_minus + a = IPAddr.new("192.168.1.10") + assert_equal("192.168.1.0", (a - 10).to_s) + + a = IPAddr.new("0.0.0.0") + assert_raise(IPAddr::InvalidAddressError) { a - 10 } + + a = IPAddr.new("255.255.255.255") + assert_equal("255.255.255.245", (a - 10).to_s) + + a = IPAddr.new("3ffe:505:2::a") + assert_equal("3ffe:505:2::", (a - 10).to_s) + + a = IPAddr.new("::") + assert_raise(IPAddr::InvalidAddressError) { a - 10 } + + a = IPAddr.new("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff") + assert_equal("ffff:ffff:ffff:ffff:ffff:ffff:ffff:fff5", (a - 10).to_s) + end + def test_equal assert_equal(true, @a == IPAddr.new("3FFE:505:2::")) assert_equal(true, @a == IPAddr.new("3ffe:0505:0002::")) @@ -408,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 @@ -466,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? @@ -516,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? @@ -542,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 @@ -571,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 |
