From 591ad0d5fd81fc0ad447b67fb4ec04ec40eddcd5 Mon Sep 17 00:00:00 2001 From: Michael Miller Date: Thu, 3 Nov 2016 15:39:07 -0600 Subject: Add tests for #link_local? --- test/ipaddress/ipv4_test.rb | 25 +++++++++++++++++++++++++ test/ipaddress/ipv6_test.rb | 24 ++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/test/ipaddress/ipv4_test.rb b/test/ipaddress/ipv4_test.rb index 19264e2..f9bbf9e 100644 --- a/test/ipaddress/ipv4_test.rb +++ b/test/ipaddress/ipv4_test.rb @@ -74,6 +74,22 @@ class IPv4Test < Minitest::Test "10.32.0.1" => ["10.32.0.253", 253], "192.0.0.0" => ["192.1.255.255", 131072] } + + @link_local = [ + "169.254.0.0", + "169.254.255.255", + "169.254.12.34", + "169.254.0.0/16", + "169.254.0.0/17"] + + @not_link_local = [ + "127.0.0.1", + "127.0.1.1", + "192.168.0.100", + "169.255.0.0", + "169.254.0.0/15", + "0.0.0.0", + "255.255.255.255"] end @@ -309,6 +325,15 @@ class IPv4Test < Minitest::Test assert_equal false, @klass.new("192.0.0.2/24").private? end + def test_method_link_local? + @link_local.each do |addr| + assert_equal true, @klass.new(addr).link_local? + end + @not_link_local.each do |addr| + assert_equal false, @klass.new(addr).link_local? + end + end + def test_method_octet assert_equal 172, @ip[0] assert_equal 16, @ip[1] diff --git a/test/ipaddress/ipv6_test.rb b/test/ipaddress/ipv6_test.rb index 7eaa765..e29cd40 100644 --- a/test/ipaddress/ipv6_test.rb +++ b/test/ipaddress/ipv6_test.rb @@ -44,6 +44,21 @@ class IPv6Test < Minitest::Test @network = @klass.new "2001:db8:8:800::/64" @arr = [8193,3512,0,0,8,2048,8204,16762] @hex = "20010db80000000000080800200c417a" + + @link_local = [ + "fe80::", + "fe80::1", + "fe80::208:74ff:feda:625c", + "fe80::/64", + "fe80::/65"] + + @not_link_local = [ + "::", + "::1", + "ff80:03:02:01::", + "2001:db8::8:800:200c:417a", + "fe80::/63"] + end def test_attribute_address @@ -216,6 +231,15 @@ class IPv6Test < Minitest::Test assert_equal false, @ip.loopback? end + def test_method_link_local? + @link_local.each do |addr| + assert_equal true, @klass.new(addr).link_local? + end + @not_link_local.each do |addr| + assert_equal false, @klass.new(addr).link_local? + end + end + def test_method_network @networks.each do |addr,net| ip = @klass.new addr -- cgit v1.2.1 From f35aab8e9109864945f606bef3e135be3763b9c4 Mon Sep 17 00:00:00 2001 From: Michael Miller Date: Thu, 3 Nov 2016 15:40:08 -0600 Subject: Implement #link_local? methods --- lib/ipaddress/ipv4.rb | 14 ++++++++++++++ lib/ipaddress/ipv6.rb | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/lib/ipaddress/ipv4.rb b/lib/ipaddress/ipv4.rb index a123e71..a6bea7b 100644 --- a/lib/ipaddress/ipv4.rb +++ b/lib/ipaddress/ipv4.rb @@ -648,6 +648,20 @@ module IPAddress; [self.class.new("127.0.0.0/8")].any? {|i| i.include? self} end + # + # Checks if an IPv4 address objects belongs + # to a link-local network RFC3927 + # + # Example: + # + # ip = IPAddress "169.254.0.1" + # ip.link_local? + # #=> true + # + def link_local? + [self.class.new("169.254.0.0/16")].any? {|i| i.include? self} + end + # # Returns the IP address in in-addr.arpa format # for DNS lookups diff --git a/lib/ipaddress/ipv6.rb b/lib/ipaddress/ipv6.rb index 6ae651d..57ed143 100644 --- a/lib/ipaddress/ipv6.rb +++ b/lib/ipaddress/ipv6.rb @@ -422,6 +422,20 @@ module IPAddress; @prefix == 128 and @compressed == "::1" end + # + # Checks if an IPv4 address objects belongs + # to a link-local network RFC4291 + # + # Example: + # + # ip = IPAddress "fe80::1" + # ip.link_local? + # #=> true + # + def link_local? + [self.class.new("fe80::/64")].any? {|i| i.include? self} + end + # # Returns true if the address is a mapped address # -- cgit v1.2.1 From f131450c187953ff3c4e20c9e7e8c0ce7070e224 Mon Sep 17 00:00:00 2001 From: Michael Miller Date: Mon, 14 Nov 2016 14:32:23 -0700 Subject: Doc fix - copy/paste fail --- lib/ipaddress/ipv6.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ipaddress/ipv6.rb b/lib/ipaddress/ipv6.rb index 57ed143..6850c03 100644 --- a/lib/ipaddress/ipv6.rb +++ b/lib/ipaddress/ipv6.rb @@ -423,7 +423,7 @@ module IPAddress; end # - # Checks if an IPv4 address objects belongs + # Checks if an IPv6 address objects belongs # to a link-local network RFC4291 # # Example: -- cgit v1.2.1 From 5a089bda5a9ff670751162092bd5853c30044d74 Mon Sep 17 00:00:00 2001 From: Michael Miller Date: Mon, 14 Nov 2016 14:33:02 -0700 Subject: Add tests for unique_local? --- test/ipaddress/ipv6_test.rb | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/ipaddress/ipv6_test.rb b/test/ipaddress/ipv6_test.rb index e29cd40..cfff9e7 100644 --- a/test/ipaddress/ipv6_test.rb +++ b/test/ipaddress/ipv6_test.rb @@ -58,6 +58,22 @@ class IPv6Test < Minitest::Test "ff80:03:02:01::", "2001:db8::8:800:200c:417a", "fe80::/63"] + + @unique_local = [ + "fc00::/7", + "fc00::/8", + "fd00::/8", + "fd12:3456:789a:1::1", + "fd12:3456:789a:1::/64", + "fc00::1"] + + @not_unique_local = [ + "fc00::/6", + "::", + "::1", + "fe80::", + "fe80::1", + "fe80::/64"] end @@ -240,6 +256,15 @@ class IPv6Test < Minitest::Test end end + def test_method_unique_local? + @unique_local.each do |addr| + assert_equal true, @klass.new(addr).unique_local? + end + @not_unique_local.each do |addr| + assert_equal false, @klass.new(addr).unique_local? + end + end + def test_method_network @networks.each do |addr,net| ip = @klass.new addr -- cgit v1.2.1 From 548f00716f483876d00532bf76deec6c4171e9d6 Mon Sep 17 00:00:00 2001 From: Michael Miller Date: Mon, 14 Nov 2016 14:33:13 -0700 Subject: Implement unique_local? method --- lib/ipaddress/ipv6.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/ipaddress/ipv6.rb b/lib/ipaddress/ipv6.rb index 6850c03..1012d7d 100644 --- a/lib/ipaddress/ipv6.rb +++ b/lib/ipaddress/ipv6.rb @@ -436,6 +436,20 @@ module IPAddress; [self.class.new("fe80::/64")].any? {|i| i.include? self} end + # + # Checks if an IPv6 address objects belongs + # to a unique-local network RFC4193 + # + # Example: + # + # ip = IPAddress "fc00::1" + # ip.unique_local? + # #=> true + # + def unique_local? + [self.class.new("fc00::/7")].any? {|i| i.include? self} + end + # # Returns true if the address is a mapped address # -- cgit v1.2.1