construqt-ipaddress 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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: