ipadmin 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +228 -0
- data/lib/ip_admin.rb +2317 -0
- data/tests/cidr_table_test.rb +177 -0
- data/tests/cidr_test.rb +96 -0
- data/tests/functions_test.rb +154 -0
- data/tests/ipaddr_test.rb +53 -0
- metadata +45 -0
@@ -0,0 +1,177 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require '../lib/ip_admin.rb'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
class TestCIDR < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def test_new
|
11
|
+
assert_not_nil(IPAdmin::CIDRTable.new(4) )
|
12
|
+
assert_not_nil(IPAdmin::CIDRTable.new(6) )
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_add_cidr
|
17
|
+
cidr4_1 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24')
|
18
|
+
cidr4_2 = IPAdmin::CIDR.new(:CIDR => '10.1.0.0/24')
|
19
|
+
cidr4_3 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/26')
|
20
|
+
cidr4_4 =IPAdmin::CIDR.new(:CIDR => '192.168.1.0/30')
|
21
|
+
|
22
|
+
cidr6_1 = IPAdmin::CIDR.new(:CIDR => 'fec0::/10')
|
23
|
+
cidr6_2 = IPAdmin::CIDR.new(:CIDR => 'fe80::/10')
|
24
|
+
cidr6_3 = IPAdmin::CIDR.new(:CIDR => 'fec0::/64')
|
25
|
+
cidr6_4 =IPAdmin::CIDR.new(:CIDR => 'fec0::/126')
|
26
|
+
|
27
|
+
table4 = IPAdmin::CIDRTable.new(4)
|
28
|
+
table6 = IPAdmin::CIDRTable.new(6)
|
29
|
+
|
30
|
+
assert_raise(RuntimeError){table4.add_cidr(cidr6_1)}
|
31
|
+
assert_raise(RuntimeError){table6.add_cidr(cidr4_1)}
|
32
|
+
|
33
|
+
assert_nothing_raised(RuntimeError){table4.add_cidr(cidr4_1)}
|
34
|
+
assert_nothing_raised(RuntimeError){table4.add_cidr(cidr4_2)}
|
35
|
+
assert_nothing_raised(RuntimeError){table4.add_cidr(cidr4_3)}
|
36
|
+
assert_nothing_raised(RuntimeError){table4.add_cidr(cidr4_4)}
|
37
|
+
assert_nothing_raised(RuntimeError){table6.add_cidr(cidr6_1)}
|
38
|
+
assert_nothing_raised(RuntimeError){table6.add_cidr(cidr6_2)}
|
39
|
+
assert_nothing_raised(RuntimeError){table6.add_cidr(cidr6_3)}
|
40
|
+
assert_nothing_raised(RuntimeError){table6.add_cidr(cidr6_4)}
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_find_ip
|
45
|
+
ip4_1 = IPAdmin::IPAddr.new(:IPAddr => '192.168.1.1')
|
46
|
+
ip4_2 = IPAdmin::IPAddr.new(:IPAddr => '10.1.0.1')
|
47
|
+
ip4_3 = IPAdmin::IPAddr.new(:IPAddr => '10.2.0.1')
|
48
|
+
cidr4_1 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24')
|
49
|
+
cidr4_2 = IPAdmin::CIDR.new(:CIDR => '10.1.0.0/24')
|
50
|
+
cidr4_3 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/26')
|
51
|
+
cidr4_4 =IPAdmin::CIDR.new(:CIDR => '192.168.1.0/30')
|
52
|
+
|
53
|
+
ip6_1 = IPAdmin::IPAddr.new(:IPAddr => 'fec0::1')
|
54
|
+
ip6_2 = IPAdmin::IPAddr.new(:IPAddr => 'fe80::1')
|
55
|
+
cidr6_1 = IPAdmin::CIDR.new(:CIDR => 'fec0::/10')
|
56
|
+
cidr6_2 = IPAdmin::CIDR.new(:CIDR => 'fe80::/10')
|
57
|
+
cidr6_3 = IPAdmin::CIDR.new(:CIDR => 'fec0::/64')
|
58
|
+
cidr6_4 =IPAdmin::CIDR.new(:CIDR => 'fec0::/126')
|
59
|
+
|
60
|
+
table4 = IPAdmin::CIDRTable.new(4)
|
61
|
+
table6 = IPAdmin::CIDRTable.new(6)
|
62
|
+
|
63
|
+
table4.add_cidr(cidr4_1)
|
64
|
+
table4.add_cidr(cidr4_2)
|
65
|
+
table4.add_cidr(cidr4_3)
|
66
|
+
table4.add_cidr(cidr4_4)
|
67
|
+
table6.add_cidr(cidr6_1)
|
68
|
+
table6.add_cidr(cidr6_2)
|
69
|
+
table6.add_cidr(cidr6_3)
|
70
|
+
table6.add_cidr(cidr6_4)
|
71
|
+
|
72
|
+
assert_equal('192.168.1.0/30', table4.find_ip(ip4_1).desc)
|
73
|
+
assert_equal('10.1.0.0/24', table4.find_ip(ip4_2).desc)
|
74
|
+
assert_equal(nil, table4.find_ip(ip4_3) )
|
75
|
+
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0000/126', table6.find_ip(ip6_1).desc)
|
76
|
+
assert_equal('fe80:0000:0000:0000:0000:0000:0000:0000/10', table6.find_ip(ip6_2).desc)
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_dump
|
81
|
+
ip4_1 = IPAdmin::IPAddr.new(:IPAddr => '192.168.1.1')
|
82
|
+
ip4_2 = IPAdmin::IPAddr.new(:IPAddr => '10.1.0.1')
|
83
|
+
ip4_3 = IPAdmin::IPAddr.new(:IPAddr => '10.2.0.1')
|
84
|
+
cidr4_1 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24')
|
85
|
+
cidr4_2 = IPAdmin::CIDR.new(:CIDR => '10.1.0.0/24')
|
86
|
+
cidr4_3 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/26')
|
87
|
+
cidr4_4 =IPAdmin::CIDR.new(:CIDR => '192.168.1.0/30')
|
88
|
+
|
89
|
+
ip6_1 = IPAdmin::IPAddr.new(:IPAddr => 'fec0::1')
|
90
|
+
ip6_2 = IPAdmin::IPAddr.new(:IPAddr => 'fe80::1')
|
91
|
+
cidr6_1 = IPAdmin::CIDR.new(:CIDR => 'fec0::/10')
|
92
|
+
cidr6_2 = IPAdmin::CIDR.new(:CIDR => 'fe80::/10')
|
93
|
+
cidr6_3 = IPAdmin::CIDR.new(:CIDR => 'fec0::/64')
|
94
|
+
cidr6_4 =IPAdmin::CIDR.new(:CIDR => 'fec0::/126')
|
95
|
+
|
96
|
+
table4 = IPAdmin::CIDRTable.new(4)
|
97
|
+
table6 = IPAdmin::CIDRTable.new(6)
|
98
|
+
|
99
|
+
table4.add_cidr(cidr4_1)
|
100
|
+
table4.add_cidr(cidr4_2)
|
101
|
+
table4.add_cidr(cidr4_3)
|
102
|
+
table4.add_cidr(cidr4_4)
|
103
|
+
table6.add_cidr(cidr6_1)
|
104
|
+
table6.add_cidr(cidr6_2)
|
105
|
+
table6.add_cidr(cidr6_3)
|
106
|
+
table6.add_cidr(cidr6_4)
|
107
|
+
|
108
|
+
dump4 = table4.dump()
|
109
|
+
dump6 = table6.dump()
|
110
|
+
assert_equal('10.1.0.0/24', dump4[0].desc)
|
111
|
+
assert_equal('192.168.1.0/24', dump4[1].desc)
|
112
|
+
assert_equal('192.168.1.0/30', dump4[3].desc)
|
113
|
+
assert_equal('fe80:0000:0000:0000:0000:0000:0000:0000/10', dump6[0].desc)
|
114
|
+
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0000/10', dump6[1].desc)
|
115
|
+
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0000/126', dump6[3].desc)
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_find_space
|
120
|
+
cidr4_1 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24')
|
121
|
+
cidr4_2 = IPAdmin::CIDR.new(:CIDR => '10.1.0.0/24')
|
122
|
+
cidr4_3 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/26')
|
123
|
+
cidr4_4 =IPAdmin::CIDR.new(:CIDR => '192.168.1.0/30')
|
124
|
+
cidr4_5 =IPAdmin::CIDR.new(:CIDR => '192.168.1.64/26')
|
125
|
+
cidr4_6 =IPAdmin::CIDR.new(:CIDR => '192.168.1.128/26')
|
126
|
+
cidr4_7 =IPAdmin::CIDR.new(:CIDR => '192.168.1.224/27')
|
127
|
+
cidr4_8 = IPAdmin::CIDR.new(:CIDR => '10.1.0.0/25')
|
128
|
+
|
129
|
+
|
130
|
+
cidr6_1 = IPAdmin::CIDR.new(:CIDR => 'fec0::/10')
|
131
|
+
cidr6_2 = IPAdmin::CIDR.new(:CIDR => 'fe80::/10')
|
132
|
+
cidr6_3 = IPAdmin::CIDR.new(:CIDR => 'fec0::/64')
|
133
|
+
cidr6_4 =IPAdmin::CIDR.new(:CIDR => 'fec0::/126')
|
134
|
+
cidr6_5 = IPAdmin::CIDR.new(:CIDR => 'fec0::/96')
|
135
|
+
cidr6_6 = IPAdmin::CIDR.new(:CIDR => 'fec0:2000::/64')
|
136
|
+
cidr6_7 = IPAdmin::CIDR.new(:CIDR => 'fec0:3000::/96')
|
137
|
+
|
138
|
+
|
139
|
+
table4 = IPAdmin::CIDRTable.new(4)
|
140
|
+
table6 = IPAdmin::CIDRTable.new(6)
|
141
|
+
|
142
|
+
table4.add_cidr(cidr4_1)
|
143
|
+
table4.add_cidr(cidr4_2)
|
144
|
+
table4.add_cidr(cidr4_3)
|
145
|
+
table4.add_cidr(cidr4_4)
|
146
|
+
table4.add_cidr(cidr4_5)
|
147
|
+
table4.add_cidr(cidr4_6)
|
148
|
+
table4.add_cidr(cidr4_7)
|
149
|
+
table4.add_cidr(cidr4_8)
|
150
|
+
|
151
|
+
table6.add_cidr(cidr6_1)
|
152
|
+
table6.add_cidr(cidr6_2)
|
153
|
+
table6.add_cidr(cidr6_3)
|
154
|
+
table6.add_cidr(cidr6_4)
|
155
|
+
table6.add_cidr(cidr6_5)
|
156
|
+
table6.add_cidr(cidr6_6)
|
157
|
+
table6.add_cidr(cidr6_7)
|
158
|
+
|
159
|
+
|
160
|
+
list4 = table4.find_space(:Size => 27, :Limit => 2)
|
161
|
+
assert_equal('10.1.0.0/25', list4[0].desc)
|
162
|
+
assert_equal('192.168.1.64/26', list4[1].desc)
|
163
|
+
|
164
|
+
list6 = table6.find_space(:Size => 98)
|
165
|
+
assert_equal('fe80:0000:0000:0000:0000:0000:0000:0000/10', list6[0].desc)
|
166
|
+
assert_equal('fec0:2000:0000:0000:0000:0000:0000:0000/64', list6[1].desc)
|
167
|
+
assert_equal('fec0:3000:0000:0000:0000:0000:0000:0000/96', list6[2].desc)
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
end
|
174
|
+
|
175
|
+
|
176
|
+
|
177
|
+
|
data/tests/cidr_test.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require '../lib/ip_admin.rb'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
class TestCIDR < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def test_new
|
11
|
+
assert_not_nil(IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24') )
|
12
|
+
assert_not_nil(IPAdmin::CIDR.new(:CIDR => '192.168.1.0', :Netmask => '255.255.255.0') )
|
13
|
+
assert_not_nil(IPAdmin::CIDR.new(:CIDR => 'fec0::/64') )
|
14
|
+
assert_raise(RuntimeError){ IPAdmin::CIDR.new(:CIDR => '192.168.1.1/24') }
|
15
|
+
assert_raise(RuntimeError){ IPAdmin::CIDR.new(:CIDR => '192.168.1.0') }
|
16
|
+
assert_raise(RuntimeError){ IPAdmin::CIDR.new(:CIDR => 'fec0::1/64') }
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_simple_methods
|
20
|
+
ip4 = IPAdmin::IPAddr.new(:IPAddr => '192.168.1.1')
|
21
|
+
ip6 = IPAdmin::IPAddr.new(:IPAddr => 'fec0::1')
|
22
|
+
cidr4 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24')
|
23
|
+
cidr6 = IPAdmin::CIDR.new(:CIDR => 'fec0::/64')
|
24
|
+
|
25
|
+
assert_equal(1,cidr4.contains(ip4) )
|
26
|
+
assert_equal(1,cidr6.contains(ip6) )
|
27
|
+
|
28
|
+
assert_equal('192.168.1.0/24',cidr4.desc() )
|
29
|
+
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0000/64',cidr6.desc() )
|
30
|
+
|
31
|
+
assert_equal('0.0.0.255',cidr4.hostmask_ext() )
|
32
|
+
|
33
|
+
assert_equal(24,cidr4.netmask() )
|
34
|
+
assert_equal(64,cidr6.netmask() )
|
35
|
+
|
36
|
+
assert_equal('255.255.255.0',cidr4.netmask_ext() )
|
37
|
+
|
38
|
+
assert_equal('192.168.1.0',cidr4.network() )
|
39
|
+
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0000',cidr6.network() )
|
40
|
+
|
41
|
+
assert_equal('192.168.1.1',cidr4.nth(:Index => 1) )
|
42
|
+
assert_kind_of(IPAdmin::IPAddr,cidr4.nth(:Index => 1, :Objectify => 1) )
|
43
|
+
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0001',cidr6.nth(:Index => 1) )
|
44
|
+
|
45
|
+
assert_equal(256,cidr4.size() )
|
46
|
+
assert_equal(2**64,cidr6.size() )
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_enumerate
|
50
|
+
cidr4 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24')
|
51
|
+
cidr6 = IPAdmin::CIDR.new(:CIDR => 'fec0::/64')
|
52
|
+
|
53
|
+
assert_equal(['192.168.1.0'],cidr4.enumerate(:Limit => 1) )
|
54
|
+
assert_equal(['fec0:0000:0000:0000:0000:0000:0000:0000'],cidr6.enumerate(:Limit => 1) )
|
55
|
+
|
56
|
+
|
57
|
+
enums4 = cidr4.enumerate(:Limit => 2, :BitStep => 5)
|
58
|
+
enums6 = cidr6.enumerate(:Limit => 2, :BitStep => 5)
|
59
|
+
assert_equal('192.168.1.5', enums4[1] )
|
60
|
+
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0005', enums6[1] )
|
61
|
+
|
62
|
+
enums4 = cidr4.enumerate(:Objectify => 1,:Limit => 1)
|
63
|
+
assert_kind_of(IPAdmin::IPAddr, enums4[0] )
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_subnet
|
68
|
+
cidr4 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24')
|
69
|
+
cidr6 = IPAdmin::CIDR.new(:CIDR => 'fec0::/64')
|
70
|
+
|
71
|
+
subnet4 = cidr4.subnet(:Subnet => 26, :MinCount => 4)
|
72
|
+
subnet6 = cidr6.subnet(:Subnet => 66, :MinCount => 4)
|
73
|
+
assert_equal('192.168.1.0/26', subnet4[0].desc)
|
74
|
+
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0000/66', subnet6[0].desc)
|
75
|
+
|
76
|
+
subnet4 = cidr4.subnet(:Subnet => 26, :MinCount => 1)
|
77
|
+
assert_equal('192.168.1.0/26', subnet4[0].desc)
|
78
|
+
assert_equal('192.168.1.64/26', subnet4[1].desc)
|
79
|
+
assert_equal('192.168.1.128/25', subnet4[2].desc)
|
80
|
+
|
81
|
+
subnet4 = cidr4.subnet(:Subnet => 28, :MinCount => 3)
|
82
|
+
assert_equal('192.168.1.0/28', subnet4[0].desc)
|
83
|
+
assert_equal('192.168.1.16/28', subnet4[1].desc)
|
84
|
+
assert_equal('192.168.1.32/28', subnet4[2].desc)
|
85
|
+
assert_equal('192.168.1.48/28', subnet4[3].desc)
|
86
|
+
assert_equal('192.168.1.64/26', subnet4[4].desc)
|
87
|
+
assert_equal('192.168.1.128/25', subnet4[5].desc)
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
@@ -0,0 +1,154 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require '../lib/ip_admin.rb'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
class TestIPAdmin < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def test_pack_ipv4_addr
|
11
|
+
assert_equal(2**32-1, IPAdmin.pack_ipv4_addr('255.255.255.255') )
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
def test_pack_ipv4_netmask
|
16
|
+
assert_equal([2**32-1,0], IPAdmin.pack_ipv4_netmask('255.255.255.255') )
|
17
|
+
assert_equal([2**32-1,0], IPAdmin.pack_ipv4_netmask('32') )
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def test_pack_ipv6_addr
|
22
|
+
assert_equal(2**128-1, IPAdmin.pack_ipv6_addr('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff') )
|
23
|
+
assert_equal(1, IPAdmin.pack_ipv6_addr('::1') )
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
def test_pack_ipv6_netmask
|
28
|
+
assert_equal([2**128-1,0], IPAdmin.pack_ipv6_netmask('128') )
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def test_unpack_ipv4_addr
|
33
|
+
assert_equal('255.255.255.255', IPAdmin.unpack_ipv4_addr(2**32-1) )
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def test_unpack_ipv4_netmask
|
38
|
+
assert_equal(32, IPAdmin.unpack_ipv4_netmask(2**32-1) )
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
def test_unpack_ipv6_addr
|
43
|
+
assert_equal('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', IPAdmin.unpack_ipv6_addr(2**128-1) )
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
def test_unpack_ipv6_netmask
|
48
|
+
assert_equal(128, IPAdmin.unpack_ipv6_netmask(2**128-1) )
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
def test_validate_ipv4_addr
|
53
|
+
assert_equal(1, IPAdmin.validate_ipv4_addr('192.168.1.0') )
|
54
|
+
assert_equal(1, IPAdmin.validate_ipv4_addr('255.255.255.255') )
|
55
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv4_addr('192.168.1.256') }
|
56
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv4_addr('192..168.1.1') }
|
57
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv4_addr('0.168.1.1') }
|
58
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv4_addr('192.168.1z.255') }
|
59
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv4_addr('192.168.1.1.1') }
|
60
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv4_addr('ffff::1111:1111') }
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
def test_validate_ipv4_netmask
|
65
|
+
assert_equal(1, IPAdmin.validate_ipv4_netmask('255.255.255.0') )
|
66
|
+
assert_equal(1, IPAdmin.validate_ipv4_netmask('128.0.0.0') )
|
67
|
+
assert_equal(1, IPAdmin.validate_ipv4_netmask('32') )
|
68
|
+
assert_equal(1, IPAdmin.validate_ipv4_netmask(32) )
|
69
|
+
assert_equal(1, IPAdmin.validate_ipv4_netmask('1') )
|
70
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv4_netmask('192.255.255.0') }
|
71
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv4_netmask('255.255.255.194') }
|
72
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv4_netmask('256.255.255.0') }
|
73
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv4_netmask('0') }
|
74
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv4_netmask('33') }
|
75
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv4_netmask('32z') }
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
def test_validate_ipv6_addr
|
80
|
+
assert_equal(1, IPAdmin.validate_ipv6_addr('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff') )
|
81
|
+
assert_equal(1, IPAdmin.validate_ipv6_addr('ffff::1') )
|
82
|
+
assert_equal(1, IPAdmin.validate_ipv6_addr('1234:5678:9abc:def0:1234:5678:9abc:def0') )
|
83
|
+
assert_equal(1, IPAdmin.validate_ipv6_addr('::1') )
|
84
|
+
assert_equal(1, IPAdmin.validate_ipv6_addr('ffff::') )
|
85
|
+
assert_equal(1, IPAdmin.validate_ipv6_addr('0001::1') )
|
86
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv6_addr('ffff::1111::1111') }
|
87
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv6_addr('abcd:efgh::1') }
|
88
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv6_addr('fffff::1') }
|
89
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv6_addr(':::1') }
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
def test_validate_ipv6_netmask
|
94
|
+
assert_equal(1, IPAdmin.validate_ipv6_netmask('1') )
|
95
|
+
assert_equal(1, IPAdmin.validate_ipv6_netmask('128') )
|
96
|
+
assert_equal(1, IPAdmin.validate_ipv6_netmask(128) )
|
97
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv6_netmask('0') }
|
98
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv6_netmask('129') }
|
99
|
+
assert_raise(RuntimeError){ IPAdmin.validate_ipv6_netmask('128z') }
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
def test_compare_cidr
|
104
|
+
cidr4_1 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24')
|
105
|
+
cidr4_2 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/25')
|
106
|
+
cidr4_3 = IPAdmin::CIDR.new(:CIDR => '192.168.2.0/24')
|
107
|
+
cidr4_4 = IPAdmin::CIDR.new(:CIDR => '192.168.2.64/26')
|
108
|
+
|
109
|
+
cidr6_1 = IPAdmin::CIDR.new(:CIDR => 'fec0::0/10')
|
110
|
+
cidr6_2 = IPAdmin::CIDR.new(:CIDR => 'fec0::0/64')
|
111
|
+
cidr6_3 = IPAdmin::CIDR.new(:CIDR => 'fe80::0/10')
|
112
|
+
cidr6_4 = IPAdmin::CIDR.new(:CIDR => 'fe80::0/11')
|
113
|
+
|
114
|
+
comp1 = IPAdmin.compare_cidr(cidr4_1,cidr4_2)
|
115
|
+
comp2 = IPAdmin.compare_cidr(cidr4_4,cidr4_3)
|
116
|
+
comp3 = IPAdmin.compare_cidr(cidr4_1,cidr4_1)
|
117
|
+
comp4 = IPAdmin.compare_cidr(cidr4_1,cidr4_3)
|
118
|
+
|
119
|
+
comp5 = IPAdmin.compare_cidr(cidr6_1,cidr6_2)
|
120
|
+
comp6 = IPAdmin.compare_cidr(cidr6_4,cidr6_3)
|
121
|
+
comp7 = IPAdmin.compare_cidr(cidr6_1,cidr6_1)
|
122
|
+
comp8 = IPAdmin.compare_cidr(cidr6_1,cidr6_3)
|
123
|
+
|
124
|
+
assert_equal([cidr4_1,cidr4_2],comp1)
|
125
|
+
assert_equal([cidr4_3,cidr4_4],comp2)
|
126
|
+
assert_equal(1,comp3)
|
127
|
+
assert_nil(comp4)
|
128
|
+
assert_equal([cidr6_1,cidr6_2],comp5)
|
129
|
+
assert_equal([cidr6_3,cidr6_4],comp6)
|
130
|
+
assert_equal(1,comp7)
|
131
|
+
assert_nil(comp8)
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
def test_merge_cidr
|
136
|
+
cidr4_1 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24')
|
137
|
+
cidr4_2 = IPAdmin::CIDR.new(:CIDR => '192.168.0.0/24')
|
138
|
+
cidr4_3 = IPAdmin::CIDR.new(:CIDR => '192.168.2.0/24')
|
139
|
+
|
140
|
+
cidr6_1 = IPAdmin::CIDR.new(:CIDR => 'fec0::0/128')
|
141
|
+
cidr6_2 = IPAdmin::CIDR.new(:CIDR => 'fec0::1/128')
|
142
|
+
cidr6_3 = IPAdmin::CIDR.new(:CIDR => 'fe80::0/10')
|
143
|
+
|
144
|
+
assert_equal('192.168.0.0/23', IPAdmin.merge_cidr([cidr4_1,cidr4_2]).desc)
|
145
|
+
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0000/127', IPAdmin.merge_cidr([cidr6_1,cidr6_2]).desc)
|
146
|
+
assert_raise(RuntimeError){ IPAdmin.merge_cidr([cidr4_1,cidr4_3]) }
|
147
|
+
assert_raise(RuntimeError){ IPAdmin.merge_cidr([cidr6_1,cidr6_3]) }
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
151
|
+
|
152
|
+
|
153
|
+
|
154
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require '../lib/ip_admin.rb'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
class TestCIDR < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def test_new
|
11
|
+
assert_not_nil(IPAdmin::IPAddr.new(:IPAddr => '192.168.1.0/24') )
|
12
|
+
assert_not_nil(IPAdmin::IPAddr.new(:IPAddr => '192.168.1.0', :Netmask => '255.255.255.0') )
|
13
|
+
assert_not_nil(IPAdmin::IPAddr.new(:IPAddr => 'fec0::/64') )
|
14
|
+
assert_raise(RuntimeError){ IPAdmin::IPAddr.new(:IPAddr => '192.168.1.256/24') }
|
15
|
+
assert_raise(RuntimeError){ IPAdmin::IPAddr.new(:IPAddr => '192.168.1.1/33') }
|
16
|
+
assert_raise(RuntimeError){ IPAdmin::IPAddr.new(:IPAddr => 'fec0::1/129') }
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_simple_methods
|
20
|
+
ip4 = IPAdmin::IPAddr.new(:IPAddr => '192.168.1.1/24')
|
21
|
+
ip6 = IPAdmin::IPAddr.new(:IPAddr => 'fec0::1/64')
|
22
|
+
|
23
|
+
assert_equal('192.168.1.0',ip4.base() )
|
24
|
+
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0000',ip6.base() )
|
25
|
+
|
26
|
+
assert_equal('192.168.1.255',ip4.broadcast() )
|
27
|
+
assert_raise(RuntimeError){ip6.broadcast()}
|
28
|
+
|
29
|
+
assert_equal('192.168.1.1/24',ip4.desc() )
|
30
|
+
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0001/64',ip6.desc() )
|
31
|
+
|
32
|
+
assert_equal('0.0.0.255',ip4.hostmask_ext() )
|
33
|
+
assert_raise(RuntimeError){ip6.hostmask_ext()}
|
34
|
+
|
35
|
+
assert_equal('192.168.1.1',ip4.ip() )
|
36
|
+
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0001',ip6.ip() )
|
37
|
+
|
38
|
+
assert_equal(24,ip4.netmask() )
|
39
|
+
assert_equal(64,ip6.netmask() )
|
40
|
+
|
41
|
+
assert_equal('255.255.255.0',ip4.netmask_ext() )
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
|