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.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/CHANGELOG.rdoc +105 -0
- data/LICENSE +20 -0
- data/README.rdoc +965 -0
- data/Rakefile +83 -0
- data/VERSION +1 -0
- data/ipaddress.gemspec +55 -0
- data/lib/ipaddress.rb +306 -0
- data/lib/ipaddress/ipv4.rb +1005 -0
- data/lib/ipaddress/ipv6.rb +1003 -0
- data/lib/ipaddress/prefix.rb +265 -0
- data/test/ipaddress/ipv4_test.rb +555 -0
- data/test/ipaddress/ipv6_test.rb +448 -0
- data/test/ipaddress/prefix_test.rb +159 -0
- data/test/ipaddress_test.rb +119 -0
- data/test/test_helper.rb +28 -0
- metadata +66 -0
@@ -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
|
+
|
data/test/test_helper.rb
ADDED
@@ -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:
|