construqt-ipaddress 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,119 @@
1
+ require 'test_helper'
2
+
3
+ require 'benchmark'
4
+
5
+ class IPAddressTest < Test::Unit::TestCase
6
+
7
+ def setup
8
+ @valid_ipv4 = "172.16.10.1/24"
9
+ @valid_ipv6 = "2001:db8::8:800:200c:417a/64"
10
+ @valid_mapped = "::13.1.68.3"
11
+
12
+ @invalid_ipv4 = "10.0.0.256"
13
+ @invalid_ipv6 = ":1:2:3:4:5:6:7"
14
+ @invalid_mapped = "::1:2.3.4"
15
+
16
+ @ipv4class = IPAddress::IPv4
17
+ @ipv6class = IPAddress::IPv6
18
+ @mappedclass = IPAddress::IPv6::Mapped
19
+
20
+ @method = Module.method("IPAddress")
21
+ end
22
+
23
+ def test_method_IPAddress
24
+ assert_nothing_raised {@method.call(@valid_ipv4)}
25
+ assert_nothing_raised {@method.call(@valid_ipv6)}
26
+ assert_nothing_raised {@method.call(@valid_mapped)}
27
+
28
+ assert_instance_of @ipv4class, @method.call(@valid_ipv4)
29
+ assert_instance_of @ipv6class, @method.call(@valid_ipv6)
30
+ assert_instance_of @mappedclass, @method.call(@valid_mapped)
31
+
32
+ assert_raise(ArgumentError) {@method.call(@invalid_ipv4)}
33
+ assert_raise(ArgumentError) {@method.call(@invalid_ipv6)}
34
+ assert_raise(ArgumentError) {@method.call(@invalid_mapped)}
35
+
36
+ end
37
+
38
+ def test_module_method_valid?
39
+ assert_equal true, IPAddress::valid?("10.0.0.1")
40
+ assert_equal true, IPAddress::valid?("10.0.0.0")
41
+ assert_equal true, IPAddress::valid?("2002::1")
42
+ assert_equal true, IPAddress::valid?("dead:beef:cafe:babe::f0ad")
43
+ assert_equal false, IPAddress::valid?("10.0.0.256")
44
+ assert_equal false, IPAddress::valid?("10.0.0.0.0")
45
+ assert_equal false, IPAddress::valid?("10.0.0")
46
+ assert_equal false, IPAddress::valid?("10.0")
47
+ assert_equal false, IPAddress::valid?("2002:::1")
48
+ assert_equal false, IPAddress::valid?("2002:516:2:200")
49
+
50
+ end
51
+
52
+ def test_module_method_valid_ipv4_netmark?
53
+ assert_equal true, IPAddress::valid_ipv4_netmask?("255.255.255.0")
54
+ assert_equal false, IPAddress::valid_ipv4_netmask?("10.0.0.1")
55
+ end
56
+
57
+ def test_summarize
58
+ nets = [(1..9),(11..126),(128..168),(170..171),(173..191),(193..223)].map do |range|
59
+ range.to_a.map{|i| "#{i}.0.0.0/8"}
60
+ end.flatten
61
+ nets += (0..255).to_a.select{|i| i!=254}.map{|i| "169.#{i}.0.0/16" }
62
+ nets += (0..255).to_a.select{|i| !(16<=i&&i<31)}.map{|i| "172.#{i}.0.0/16" }
63
+ nets += (0..255).to_a.select{|i| i!=168}.map{|i| "192.#{i}.0.0/16" }
64
+
65
+ nets = nets.map{|i| IPAddress::IPv4.new(i) }
66
+
67
+ assert_equal [], IPAddress::summarize([]), []
68
+ assert_equal ["10.1.0.0/24"], IPAddress::summarize(["10.1.0.4/24"]).map{|i| i.to_string}
69
+ assert_equal ["2000:1::/32"], IPAddress::summarize(["2000:1::4711/32"]).map{|i| i.to_string}
70
+
71
+ assert_equal ["0.0.0.0/0"], IPAddress::summarize(["10.1.0.4/24","7.0.0.0/0", "1.2.3.4/4"]).map{|i| i.to_string}
72
+
73
+ networks = ["2000:1::/32", "3000:1::/32", "2000:2::/32", "2000:3::/32", "2000:4::/32", "2000:5::/32", "2000:6::/32", "2000:7::/32", "2000:8::/32"]
74
+ assert_equal ["2000:1::/32", "2000:2::/31", "2000:4::/30", "2000:8::/32", "3000:1::/32"], IPAddress::summarize(networks).map{|i| i.to_string}
75
+
76
+
77
+ networks = ["10.0.1.1/24", "30.0.1.0/16", "10.0.2.0/24", "10.0.3.0/24", "10.0.4.0/24", "10.0.5.0/24", "10.0.6.0/24", "10.0.7.0/24", "10.0.8.0/24"]
78
+ assert_equal ["10.0.1.0/24", "10.0.2.0/23", "10.0.4.0/22", "10.0.8.0/24", "30.0.0.0/16"], IPAddress::summarize(networks).map{|i| i.to_string}
79
+
80
+ networks = ["10.0.0.0/23", "10.0.2.0/24"]
81
+ assert_equal ["10.0.0.0/23", "10.0.2.0/24"], IPAddress::summarize(networks).map{|i| i.to_string}
82
+ networks = ["10.0.0.0/24", "10.0.1.0/24", "10.0.2.0/23"]
83
+ assert_equal ["10.0.0.0/22"], IPAddress::summarize(networks).map{|i| i.to_string}
84
+
85
+
86
+ assert_equal ["10.0.0.0/16"], IPAddress::summarize(["10.0.0.0/16", "10.0.2.0/24"]).map{|i| i.to_string}
87
+
88
+ puts ""
89
+ #require 'ruby-prof'
90
+ #result = RubyProf.profile do
91
+ Benchmark.bm do |x|
92
+ x.report do
93
+ 25.times do
94
+ assert_equal ["1.0.0.0/8", "2.0.0.0/7", "4.0.0.0/6", "8.0.0.0/7", "11.0.0.0/8", "12.0.0.0/6",
95
+ "16.0.0.0/4", "32.0.0.0/3", "64.0.0.0/3", "96.0.0.0/4", "112.0.0.0/5", "120.0.0.0/6",
96
+ "124.0.0.0/7", "126.0.0.0/8", "128.0.0.0/3", "160.0.0.0/5", "168.0.0.0/8", "169.0.0.0/9",
97
+ "169.128.0.0/10", "169.192.0.0/11", "169.224.0.0/12", "169.240.0.0/13", "169.248.0.0/14",
98
+ "169.252.0.0/15", "169.255.0.0/16", "170.0.0.0/7", "172.0.0.0/12", "172.31.0.0/16",
99
+ "172.32.0.0/11", "172.64.0.0/10", "172.128.0.0/9", "173.0.0.0/8", "174.0.0.0/7", "176.0.0.0/4",
100
+ "192.0.0.0/9", "192.128.0.0/11", "192.160.0.0/13", "192.169.0.0/16", "192.170.0.0/15",
101
+ "192.172.0.0/14", "192.176.0.0/12", "192.192.0.0/10", "193.0.0.0/8", "194.0.0.0/7",
102
+ "196.0.0.0/6", "200.0.0.0/5", "208.0.0.0/4"], IPAddress::summarize(nets).map{|i| i.to_string}
103
+ end
104
+ end
105
+ end
106
+ #end
107
+ #printer = RubyProf::GraphPrinter.new(result)
108
+ #printer.print(STDOUT, {})
109
+ # test imutable input parameters
110
+ a1 = IPAddress.parse("10.0.0.1/24")
111
+ a2 = IPAddress.parse("10.0.1.1/24")
112
+ assert_equal ["10.0.0.0/23"], IPAddress::summarize([a1,a2]).map{|i| i.to_string}
113
+ assert_equal "10.0.0.1/24", a1.to_string
114
+ assert_equal "10.0.1.1/24", a2.to_string
115
+ end
116
+
117
+ end
118
+
119
+
@@ -0,0 +1,28 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+
4
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ require 'ipaddress'
7
+
8
+ module Test::Unit
9
+
10
+ class TestCase
11
+
12
+ def self.must(name, &block)
13
+ test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
14
+ defined = instance_method(test_name) rescue false
15
+ raise "#{test_name} is already defined in #{self}" if defined
16
+ if block_given?
17
+ define_method(test_name, &block)
18
+ else
19
+ define_method(test_name) do
20
+ flunk "No implementation provided for #{name}"
21
+ end
22
+ end
23
+ end
24
+
25
+ end
26
+ end
27
+
28
+
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: construqt-ipaddress
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.1
5
+ platform: ruby
6
+ authors:
7
+ - Marco Ceresa
8
+ - Meno Abels
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-11-29 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: |2
15
+ IPAddress is a Ruby library designed to make manipulation
16
+ of IPv4 and IPv6 addresses both powerful and simple. It mantains
17
+ a layer of compatibility with Ruby's own IPAddr, while
18
+ addressing many of its issues.
19
+ email: meno.abels@construqt.me
20
+ executables: []
21
+ extensions: []
22
+ extra_rdoc_files:
23
+ - LICENSE
24
+ - README.rdoc
25
+ files:
26
+ - .document
27
+ - CHANGELOG.rdoc
28
+ - LICENSE
29
+ - README.rdoc
30
+ - Rakefile
31
+ - VERSION
32
+ - ipaddress.gemspec
33
+ - lib/ipaddress.rb
34
+ - lib/ipaddress/ipv4.rb
35
+ - lib/ipaddress/ipv6.rb
36
+ - lib/ipaddress/prefix.rb
37
+ - test/ipaddress/ipv4_test.rb
38
+ - test/ipaddress/ipv6_test.rb
39
+ - test/ipaddress/prefix_test.rb
40
+ - test/ipaddress_test.rb
41
+ - test/test_helper.rb
42
+ homepage: http://github.com/bluemonk/ipaddress
43
+ licenses: []
44
+ metadata: {}
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubyforge_project:
61
+ rubygems_version: 2.0.14
62
+ signing_key:
63
+ specification_version: 3
64
+ summary: IPv4/IPv6 addresses manipulation library
65
+ test_files: []
66
+ has_rdoc: