summaryrefslogtreecommitdiff
path: root/test/test_ipaddr.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_ipaddr.rb')
-rw-r--r--test/test_ipaddr.rb60
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