diff options
Diffstat (limited to 'test/ipaddress/ipv4_test.rb')
| -rw-r--r-- | test/ipaddress/ipv4_test.rb | 510 |
1 files changed, 0 insertions, 510 deletions
diff --git a/test/ipaddress/ipv4_test.rb b/test/ipaddress/ipv4_test.rb deleted file mode 100644 index 8cb3b8f..0000000 --- a/test/ipaddress/ipv4_test.rb +++ /dev/null @@ -1,510 +0,0 @@ -require 'test_helper' - -class IPv4Test < Test::Unit::TestCase - - def setup - @klass = IPAddress::IPv4 - - @valid_ipv4 = { - "0.0.0.0/0" => ["0.0.0.0", 0], - "10.0.0.0" => ["10.0.0.0", 32], - "10.0.0.1" => ["10.0.0.1", 32], - "10.0.0.1/24" => ["10.0.0.1", 24], - "10.0.0.1/255.255.255.0" => ["10.0.0.1", 24]} - - @invalid_ipv4 = ["10.0.0.256", - "10.0.0.0.0", - "10.0.0", - "10.0"] - - @valid_ipv4_range = ["10.0.0.1-254", - "10.0.1-254.0", - "10.1-254.0.0"] - - @netmask_values = { - "0.0.0.0/0" => "0.0.0.0", - "10.0.0.0/8" => "255.0.0.0", - "172.16.0.0/16" => "255.255.0.0", - "192.168.0.0/24" => "255.255.255.0", - "192.168.100.4/30" => "255.255.255.252"} - - @decimal_values ={ - "0.0.0.0/0" => 0, - "10.0.0.0/8" => 167772160, - "172.16.0.0/16" => 2886729728, - "192.168.0.0/24" => 3232235520, - "192.168.100.4/30" => 3232261124} - - @ip = @klass.new("172.16.10.1/24") - @network = @klass.new("172.16.10.0/24") - - @broadcast = { - "10.0.0.0/8" => "10.255.255.255/8", - "172.16.0.0/16" => "172.16.255.255/16", - "192.168.0.0/24" => "192.168.0.255/24", - "192.168.100.4/30" => "192.168.100.7/30"} - - @networks = { - "10.5.4.3/8" => "10.0.0.0/8", - "172.16.5.4/16" => "172.16.0.0/16", - "192.168.4.3/24" => "192.168.4.0/24", - "192.168.100.5/30" => "192.168.100.4/30"} - - @class_a = @klass.new("10.0.0.1/8") - @class_b = @klass.new("172.16.0.1/16") - @class_c = @klass.new("192.168.0.1/24") - - @classful = { - "10.1.1.1" => 8, - "150.1.1.1" => 16, - "200.1.1.1" => 24 } - - end - - def test_initialize - @valid_ipv4.keys.each do |i| - ip = @klass.new(i) - assert_instance_of @klass, ip - end - assert_instance_of IPAddress::Prefix32, @ip.prefix - assert_raise (ArgumentError) do - @klass.new - end - assert_nothing_raised do - @klass.new "10.0.0.0/8" - end - end - - def test_initialize_format_error - @invalid_ipv4.each do |i| - assert_raise(ArgumentError) {@klass.new(i)} - end - assert_raise (ArgumentError) {@klass.new("10.0.0.0/asd")} - end - - def test_initialize_without_prefix - assert_nothing_raised do - @klass.new("10.10.0.0") - end - ip = @klass.new("10.10.0.0") - assert_instance_of IPAddress::Prefix32, ip.prefix - assert_equal 32, ip.prefix.to_i - end - - def test_attributes - @valid_ipv4.each do |arg,attr| - ip = @klass.new(arg) - assert_equal attr.first, ip.address - assert_equal attr.last, ip.prefix.to_i - end - end - - def test_octets - ip = @klass.new("10.1.2.3/8") - assert_equal ip.octets, [10,1,2,3] - end - - def test_initialize_should_require_ip - assert_raise(ArgumentError) { @klass.new } - end - - def test_method_data - assert_equal "\254\020\n\001", @ip.data - end - - def test_method_to_string - @valid_ipv4.each do |arg,attr| - ip = @klass.new(arg) - assert_equal attr.join("/"), ip.to_string - end - end - - def test_method_to_s - @valid_ipv4.each do |arg,attr| - ip = @klass.new(arg) - assert_equal attr.first, ip.to_s - end - end - - def test_netmask - @netmask_values.each do |addr,mask| - ip = @klass.new(addr) - assert_equal mask, ip.netmask - end - end - - def test_method_to_u32 - @decimal_values.each do |addr,int| - ip = @klass.new(addr) - assert_equal int, ip.to_u32 - end - end - - def test_method_network? - assert_equal true, @network.network? - assert_equal false, @ip.network? - end - - def test_method_broadcast - @broadcast.each do |addr,bcast| - ip = @klass.new(addr) - assert_instance_of @klass, ip.broadcast - assert_equal bcast, ip.broadcast.to_string - end - end - - def test_method_network - @networks.each do |addr,net| - ip = @klass.new addr - assert_instance_of @klass, ip.network - assert_equal net, ip.network.to_string - end - end - - def test_method_bits - ip = @klass.new("127.0.0.1") - assert_equal "01111111000000000000000000000001", ip.bits - end - - def test_method_first - ip = @klass.new("192.168.100.0/24") - assert_instance_of @klass, ip.first - assert_equal "192.168.100.1", ip.first.to_s - ip = @klass.new("192.168.100.50/24") - assert_instance_of @klass, ip.first - assert_equal "192.168.100.1", ip.first.to_s - end - - def test_method_last - ip = @klass.new("192.168.100.0/24") - assert_instance_of @klass, ip.last - assert_equal "192.168.100.254", ip.last.to_s - ip = @klass.new("192.168.100.50/24") - assert_instance_of @klass, ip.last - assert_equal "192.168.100.254", ip.last.to_s - end - - def test_method_each_host - ip = @klass.new("10.0.0.1/29") - arr = [] - ip.each_host {|i| arr << i.to_s} - expected = ["10.0.0.1","10.0.0.2","10.0.0.3", - "10.0.0.4","10.0.0.5","10.0.0.6"] - assert_equal expected, arr - end - - def test_method_each - ip = @klass.new("10.0.0.1/29") - arr = [] - ip.each {|i| arr << i.to_s} - expected = ["10.0.0.0","10.0.0.1","10.0.0.2", - "10.0.0.3","10.0.0.4","10.0.0.5", - "10.0.0.6","10.0.0.7"] - assert_equal expected, arr - end - - def test_method_size - ip = @klass.new("10.0.0.1/29") - assert_equal 8, ip.size - end - - def test_method_hosts - ip = @klass.new("10.0.0.1/29") - expected = ["10.0.0.1","10.0.0.2","10.0.0.3", - "10.0.0.4","10.0.0.5","10.0.0.6"] - assert_equal expected, ip.hosts.map {|i| i.to_s} - end - - def test_method_network_u32 - assert_equal 2886732288, @ip.network_u32 - end - - def test_method_broadcast_u32 - assert_equal 2886732543, @ip.broadcast_u32 - end - - def test_method_include? - ip = @klass.new("192.168.10.100/24") - addr = @klass.new("192.168.10.102/24") - assert_equal true, ip.include?(addr) - assert_equal false, ip.include?(@klass.new("172.16.0.48")) - ip = @klass.new("10.0.0.0/8") - assert_equal true, ip.include?(@klass.new("10.0.0.0/9")) - assert_equal true, ip.include?(@klass.new("10.1.1.1/32")) - assert_equal true, ip.include?(@klass.new("10.1.1.1/9")) - assert_equal false, ip.include?(@klass.new("172.16.0.0/16")) - assert_equal false, ip.include?(@klass.new("10.0.0.0/7")) - assert_equal false, ip.include?(@klass.new("5.5.5.5/32")) - assert_equal false, ip.include?(@klass.new("11.0.0.0/8")) - ip = @klass.new("13.13.0.0/13") - assert_equal false, ip.include?(@klass.new("13.16.0.0/32")) - end - - def test_method_include_all? - ip = @klass.new("192.168.10.100/24") - addr1 = @klass.new("192.168.10.102/24") - addr2 = @klass.new("192.168.10.103/24") - assert_equal true, ip.include_all?(addr1,addr2) - assert_equal false, ip.include_all?(addr1, @klass.new("13.16.0.0/32")) - end - - def test_method_ipv4? - assert_equal true, @ip.ipv4? - end - - def test_method_ipv6? - assert_equal false, @ip.ipv6? - end - - def test_method_private? - assert_equal true, @klass.new("192.168.10.50/24").private? - assert_equal true, @klass.new("192.168.10.50/16").private? - assert_equal true, @klass.new("172.16.77.40/24").private? - assert_equal true, @klass.new("172.16.10.50/14").private? - assert_equal true, @klass.new("10.10.10.10/10").private? - assert_equal true, @klass.new("10.0.0.0/8").private? - assert_equal false, @klass.new("192.168.10.50/12").private? - assert_equal false, @klass.new("3.3.3.3").private? - assert_equal false, @klass.new("10.0.0.0/7").private? - assert_equal false, @klass.new("172.32.0.0/12").private? - assert_equal false, @klass.new("172.16.0.0/11").private? - assert_equal false, @klass.new("192.0.0.2/24").private? - end - - def test_method_octet - assert_equal 172, @ip[0] - assert_equal 16, @ip[1] - assert_equal 10, @ip[2] - assert_equal 1, @ip[3] - end - - def test_method_a? - assert_equal true, @class_a.a? - assert_equal false, @class_b.a? - assert_equal false, @class_c.a? - end - - def test_method_b? - assert_equal true, @class_b.b? - assert_equal false, @class_a.b? - assert_equal false, @class_c.b? - end - - def test_method_c? - assert_equal true, @class_c.c? - assert_equal false, @class_a.c? - assert_equal false, @class_b.c? - end - - def test_method_to_ipv6 - assert_equal "ac10:0a01", @ip.to_ipv6 - end - - def test_method_reverse - assert_equal "1.10.16.172.in-addr.arpa", @ip.reverse - end - - def test_method_comparabble - ip1 = @klass.new("10.1.1.1/8") - ip2 = @klass.new("10.1.1.1/16") - ip3 = @klass.new("172.16.1.1/14") - ip4 = @klass.new("10.1.1.1/8") - - # ip1 should be major than ip2 - assert_equal true, ip1 > ip2 - assert_equal false, ip1 < ip2 - assert_equal false, ip2 > ip1 - # ip2 should be minor than ip3 - assert_equal true, ip2 < ip3 - assert_equal false, ip2 > ip3 - # ip1 should be minor than ip3 - assert_equal true, ip1 < ip3 - assert_equal false, ip1 > ip3 - assert_equal false, ip3 < ip1 - # ip1 should be equal to itself - assert_equal true, ip1 == ip1 - # ip1 should be equal to ip4 - assert_equal true, ip1 == ip4 - # test sorting - arr = ["10.1.1.1/16","10.1.1.1/8","172.16.1.1/14"] - assert_equal arr, [ip1,ip2,ip3].sort.map{|s| s.to_string} - end - - def test_method_minus - ip1 = @klass.new("10.1.1.1/8") - ip2 = @klass.new("10.1.1.10/8") - assert_equal 9, ip2 - ip1 - assert_equal 9, ip1 - ip2 - end - - def test_method_plus - ip1 = @klass.new("172.16.10.1/24") - ip2 = @klass.new("172.16.11.2/24") - assert_equal ["172.16.10.0/23"], (ip1+ip2).map{|i| i.to_string} - - ip2 = @klass.new("172.16.12.2/24") - assert_equal [ip1.network.to_string, ip2.network.to_string], - (ip1 + ip2).map{|i| i.to_string} - - ip1 = @klass.new("10.0.0.0/23") - ip2 = @klass.new("10.0.2.0/24") - assert_equal ["10.0.0.0/23","10.0.2.0/24"], (ip1+ip2).map{|i| i.to_string} - - ip1 = @klass.new("10.0.0.0/23") - ip2 = @klass.new("10.0.2.0/24") - assert_equal ["10.0.0.0/23","10.0.2.0/24"], (ip2+ip1).map{|i| i.to_string} - - ip1 = @klass.new("10.0.0.0/16") - ip2 = @klass.new("10.0.2.0/24") - assert_equal ["10.0.0.0/16"], (ip1+ip2).map{|i| i.to_string} - - ip1 = @klass.new("10.0.0.0/23") - ip2 = @klass.new("10.1.0.0/24") - assert_equal ["10.0.0.0/23","10.1.0.0/24"], (ip1+ip2).map{|i| i.to_string} - - end - - def test_method_netmask_equal - ip = @klass.new("10.1.1.1/16") - assert_equal 16, ip.prefix.to_i - ip.netmask = "255.255.255.0" - assert_equal 24, ip.prefix.to_i - end - - def test_method_subnet - assert_raise(ArgumentError) {@ip.subnet(0)} - assert_raise(ArgumentError) {@ip.subnet(257)} - - arr = ["172.16.10.0/27", "172.16.10.32/27", "172.16.10.64/27", - "172.16.10.96/27", "172.16.10.128/27", "172.16.10.160/27", - "172.16.10.192/27", "172.16.10.224/27"] - assert_equal arr, @network.subnet(8).map {|s| s.to_string} - arr = ["172.16.10.0/27", "172.16.10.32/27", "172.16.10.64/27", - "172.16.10.96/27", "172.16.10.128/27", "172.16.10.160/27", - "172.16.10.192/26"] - assert_equal arr, @network.subnet(7).map {|s| s.to_string} - arr = ["172.16.10.0/27", "172.16.10.32/27", "172.16.10.64/27", - "172.16.10.96/27", "172.16.10.128/26", "172.16.10.192/26"] - assert_equal arr, @network.subnet(6).map {|s| s.to_string} - arr = ["172.16.10.0/27", "172.16.10.32/27", "172.16.10.64/27", - "172.16.10.96/27", "172.16.10.128/25"] - assert_equal arr, @network.subnet(5).map {|s| s.to_string} - arr = ["172.16.10.0/26", "172.16.10.64/26", "172.16.10.128/26", - "172.16.10.192/26"] - assert_equal arr, @network.subnet(4).map {|s| s.to_string} - arr = ["172.16.10.0/26", "172.16.10.64/26", "172.16.10.128/25"] - assert_equal arr, @network.subnet(3).map {|s| s.to_string} - arr = ["172.16.10.0/25", "172.16.10.128/25"] - assert_equal arr, @network.subnet(2).map {|s| s.to_string} - arr = ["172.16.10.0/24"] - assert_equal arr, @network.subnet(1).map {|s| s.to_string} - end - - def test_method_supernet - assert_raise(ArgumentError) {@ip.supernet(0)} - assert_raise(ArgumentError) {@ip.supernet(24)} - assert_equal "172.16.10.0/23", @ip.supernet(23).to_string - assert_equal "172.16.8.0/22", @ip.supernet(22).to_string - end - - def test_classmethod_parse_u32 - @decimal_values.each do |addr,int| - ip = @klass.parse_u32(int) - ip.prefix = addr.split("/").last.to_i - assert_equal ip.to_string, addr - end - end - - def test_classhmethod_extract - str = "foobar172.16.10.1barbaz" - assert_equal "172.16.10.1", @klass.extract(str).to_s - end - - def test_classmethod_summarize - - # Should return self if only one network given - assert_equal [@ip.network], @klass.summarize(@ip) - - # Summarize homogeneous networks - ip1 = @klass.new("172.16.10.1/24") - ip2 = @klass.new("172.16.11.2/24") - assert_equal ["172.16.10.0/23"], @klass.summarize(ip1,ip2).map{|i| i.to_string} - - ip1 = @klass.new("10.0.0.1/24") - ip2 = @klass.new("10.0.1.1/24") - ip3 = @klass.new("10.0.2.1/24") - ip4 = @klass.new("10.0.3.1/24") - assert_equal ["10.0.0.0/22"], @klass.summarize(ip1,ip2,ip3,ip4).map{|i| i.to_string} - assert_equal ["10.0.0.0/22"], @klass.summarize(ip4,ip3,ip2,ip1).map{|i| i.to_string} - - # Summarize non homogeneous networks - ip1 = @klass.new("10.0.0.0/23") - ip2 = @klass.new("10.0.2.0/24") - assert_equal ["10.0.0.0/23","10.0.2.0/24"], @klass.summarize(ip1,ip2).map{|i| i.to_string} - - ip1 = @klass.new("10.0.0.0/16") - ip2 = @klass.new("10.0.2.0/24") - assert_equal ["10.0.0.0/16"], @klass.summarize(ip1,ip2).map{|i| i.to_string} - - ip1 = @klass.new("10.0.0.0/23") - ip2 = @klass.new("10.1.0.0/24") - assert_equal ["10.0.0.0/23","10.1.0.0/24"], @klass.summarize(ip1,ip2).map{|i| i.to_string} - - ip1 = @klass.new("10.0.0.0/23") - ip2 = @klass.new("10.0.2.0/23") - ip3 = @klass.new("10.0.4.0/24") - ip4 = @klass.new("10.0.6.0/24") - assert_equal ["10.0.0.0/22","10.0.4.0/24","10.0.6.0/24"], - @klass.summarize(ip1,ip2,ip3,ip4).map{|i| i.to_string} - - ip1 = @klass.new("10.0.1.1/24") - ip2 = @klass.new("10.0.2.1/24") - ip3 = @klass.new("10.0.3.1/24") - ip4 = @klass.new("10.0.4.1/24") - result = ["10.0.1.0/24","10.0.2.0/23","10.0.4.0/24"] - assert_equal result, @klass.summarize(ip1,ip2,ip3,ip4).map{|i| i.to_string} - assert_equal result, @klass.summarize(ip4,ip3,ip2,ip1).map{|i| i.to_string} - - ip1 = @klass.new("10.0.1.1/24") - ip2 = @klass.new("10.10.2.1/24") - ip3 = @klass.new("172.16.0.1/24") - ip4 = @klass.new("172.16.1.1/24") - result = ["10.0.1.0/24","10.10.2.0/24","172.16.0.0/23"] - assert_equal result, @klass.summarize(ip1,ip2,ip3,ip4).map{|i| i.to_string} - - ips = [@klass.new("10.0.0.12/30"), - @klass.new("10.0.100.0/24")] - result = ["10.0.0.12/30", "10.0.100.0/24"] - assert_equal result, @klass.summarize(*ips).map{|i| i.to_string} - - ips = [@klass.new("172.16.0.0/31"), - @klass.new("10.10.2.1/32")] - result = ["10.10.2.1/32", "172.16.0.0/31"] - assert_equal result, @klass.summarize(*ips).map{|i| i.to_string} - - ips = [@klass.new("172.16.0.0/32"), - @klass.new("10.10.2.1/32")] - result = ["10.10.2.1/32", "172.16.0.0/32"] - assert_equal result, @klass.summarize(*ips).map{|i| i.to_string} - - end - - def test_classmethod_parse_data - ip = @klass.parse_data "\254\020\n\001" - assert_instance_of @klass, ip - assert_equal "172.16.10.1", ip.address - assert_equal "172.16.10.1/32", ip.to_string - end - - def test_classmethod_parse_classful - @classful.each do |ip,prefix| - res = @klass.parse_classful(ip) - assert_equal prefix, res.prefix - assert_equal "#{ip}/#{prefix}", res.to_string - end - assert_raise(ArgumentError){ @klass.parse_classful("192.168.256.257") } - end - -end # class IPv4Test - - |
