netaddr 1.5.1 → 2.0.4

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.
data/test/ipv6_test.rb ADDED
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require_relative "../lib/netaddr.rb"
4
+ require 'test/unit'
5
+
6
+ class TestIPv6 < Test::Unit::TestCase
7
+ def test_new
8
+ ip = NetAddr::IPv6.new(1)
9
+ assert_equal(1, ip.addr)
10
+
11
+ assert_raise(NetAddr::ValidationError){ NetAddr::IPv6.new(2**128) }
12
+ assert_raise(NetAddr::ValidationError){ NetAddr::IPv6.new(-1) }
13
+ assert_raise(NetAddr::ValidationError){ NetAddr::IPv6.new("::") } # string
14
+ end
15
+
16
+ def test_parse
17
+ assert_equal(0, NetAddr::IPv6.parse("::").addr)
18
+ assert_equal(1, NetAddr::IPv6.parse("::1").addr)
19
+ assert_equal(0xfe800000000000000000000000000000, NetAddr::IPv6.parse("fe80::").addr)
20
+
21
+ assert_raise(NetAddr::ValidationError){ NetAddr::IPv6.parse("fe80::1::") }
22
+ assert_raise(NetAddr::ValidationError){ NetAddr::IPv6.parse("::fe80::") }
23
+ assert_raise(NetAddr::ValidationError){ NetAddr::IPv6.parse("0:0:0:0:0:0:0:0:1") }
24
+ assert_equal(1, NetAddr::IPv6.parse("::0:0:0:0:0:0:1").addr)
25
+ assert_equal(0x00010002000300040005000600070008, NetAddr::IPv6.parse("1:2:3:4:5:6:7:8").addr)
26
+ assert_equal(0x00010002000300040005000600070000, NetAddr::IPv6.parse("1:2:3:4:5:6:7::").addr)
27
+ assert_equal(0x00010002000300040005000600000000, NetAddr::IPv6.parse("1:2:3:4:5:6::").addr)
28
+ assert_equal(0x00010002000300040005000000000000, NetAddr::IPv6.parse("1:2:3:4:5::").addr)
29
+ assert_equal(0x00010002000300040000000000000000, NetAddr::IPv6.parse("1:2:3:4::").addr)
30
+ assert_equal(0x00010002000300000000000000000000, NetAddr::IPv6.parse("1:2:3::").addr)
31
+ assert_equal(0x00010002000000000000000000000000, NetAddr::IPv6.parse("1:2::").addr)
32
+ assert_equal(0x00010000000000000000000000000000, NetAddr::IPv6.parse("1::").addr)
33
+ assert_equal(0x00000000000000000000000000000001, NetAddr::IPv6.parse("::1").addr)
34
+ assert_equal(0x00000000000000000000000000010002, NetAddr::IPv6.parse("::1:2").addr)
35
+ assert_equal(0x00000000000000000000000100020003, NetAddr::IPv6.parse("::1:2:3").addr)
36
+ assert_equal(0x00000000000000000001000200030004, NetAddr::IPv6.parse("::1:2:3:4").addr)
37
+ assert_equal(0x00000000000000010002000300040005, NetAddr::IPv6.parse("::1:2:3:4:5").addr)
38
+ assert_equal(0x00000000000100020003000400050006, NetAddr::IPv6.parse("::1:2:3:4:5:6").addr)
39
+ assert_equal(0x00000001000200030004000500060007, NetAddr::IPv6.parse("::1:2:3:4:5:6:7").addr)
40
+ assert_raise(NetAddr::ValidationError){ NetAddr::IPv6.parse("fec0") }
41
+ assert_raise(NetAddr::ValidationError){ NetAddr::IPv6.parse("fec0:::1") }
42
+ end
43
+
44
+ def test_cmp
45
+ ip = NetAddr::IPv6.parse("::1")
46
+ ip2 = NetAddr::IPv6.parse("::0")
47
+ ip3 =NetAddr::IPv6.parse("::2")
48
+ ip4 = NetAddr::IPv6.parse("::1")
49
+ assert_equal(1, ip.cmp(ip2))
50
+ assert_equal(-1, ip.cmp(ip3))
51
+ assert_equal(0, ip.cmp(ip4))
52
+ end
53
+
54
+ def test_long
55
+ assert_equal("0000:0000:0000:0000:0000:0000:0000:0000", NetAddr::IPv6.parse("::").long)
56
+ assert_equal("fe80:0000:0000:0000:0000:0000:0000:0001", NetAddr::IPv6.parse("fe80::1").long)
57
+ assert_equal("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", NetAddr::IPv6.new(NetAddr::F128).long)
58
+ end
59
+
60
+ def test_next
61
+ assert_equal(1, NetAddr::IPv6.parse("::").next().addr)
62
+ assert_nil(NetAddr::IPv6.parse("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff").next())
63
+ end
64
+
65
+ def test_prev
66
+ assert_equal("::", NetAddr::IPv6.parse("::1").prev().to_s)
67
+ assert_nil(NetAddr::IPv6.parse("::").prev())
68
+ end
69
+
70
+ def test_to_net
71
+ ip = NetAddr::IPv6.parse("1::")
72
+ net = NetAddr::IPv6Net.parse("1::")
73
+ assert_equal(0, net.cmp(ip.to_net()))
74
+ end
75
+
76
+ def test_to_s
77
+ assert_equal("::", NetAddr::IPv6.parse("0:0:0:0:0:0:0:0").to_s)
78
+ assert_equal("1::", NetAddr::IPv6.parse("1:0:0:0:0:0:0:0").to_s)
79
+ assert_equal("0:1::", NetAddr::IPv6.parse("0:1:0:0:0:0:0:0").to_s)
80
+ assert_equal("0:0:1::", NetAddr::IPv6.parse("0:0:1:0:0:0:0:0").to_s)
81
+ assert_equal("0:0:0:1::", NetAddr::IPv6.parse("0:0:0:1:0:0:0:0").to_s)
82
+ assert_equal("::1:0:0:0", NetAddr::IPv6.parse("0:0:0:0:1:0:0:0").to_s)
83
+ assert_equal("::1:0:0", NetAddr::IPv6.parse("0:0:0:0:0:1:0:0").to_s)
84
+ assert_equal("::1:0", NetAddr::IPv6.parse(":0:0:0:0:0:1:0").to_s)
85
+ assert_equal("::1", NetAddr::IPv6.parse("0:0:0:0:0:0:0:1").to_s)
86
+
87
+ assert_equal("1::1", NetAddr::IPv6.parse("1:0:0:0:0:0:0:1").to_s)
88
+ assert_equal("1:1::1", NetAddr::IPv6.parse("1:1:0:0:0:0:0:1").to_s)
89
+ assert_equal("1:0:1::1", NetAddr::IPv6.parse("1:0:1:0:0:0:0:1").to_s)
90
+ assert_equal("1:0:0:1::1", NetAddr::IPv6.parse("1:0:0:1:0:0:0:1").to_s)
91
+ assert_equal("1::1:0:0:1", NetAddr::IPv6.parse("1:0:0:0:1:0:0:1").to_s)
92
+ assert_equal("1::1:0:1", NetAddr::IPv6.parse("1:0:0:0:0:1:0:1").to_s)
93
+ assert_equal("1::1:1", NetAddr::IPv6.parse("1:0:0:0:0:0:1:1").to_s)
94
+ end
95
+
96
+ end
@@ -0,0 +1,157 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require_relative "../lib/netaddr.rb"
4
+ require 'test/unit'
5
+
6
+ class TestIPv6Net < Test::Unit::TestCase
7
+ def test_new
8
+ ip = NetAddr::IPv6.parse("1::")
9
+ m128 = NetAddr::Mask128.new(24)
10
+ net = NetAddr::IPv6Net.new(ip,m128)
11
+ assert_equal("1::/24", net.to_s)
12
+
13
+ assert_equal("1::/64", NetAddr::IPv6Net.new(ip,nil).to_s)
14
+
15
+ ip = NetAddr::IPv6.parse("::")
16
+ assert_equal("::/128", NetAddr::IPv6Net.new(ip,nil).to_s)
17
+ end
18
+
19
+ def test_parse
20
+ assert_equal("1::/24", NetAddr::IPv6Net.parse("1::1/24").to_s)
21
+ assert_equal("::/128", NetAddr::IPv6Net.parse("::").to_s) # default /128
22
+ assert_equal("1::/64", NetAddr::IPv6Net.parse("1::1").to_s) # default /64
23
+ end
24
+
25
+ def test_cmp
26
+ net1 = NetAddr::IPv6Net.parse("1:1::/32")
27
+ net2 = NetAddr::IPv6Net.parse("1::/32")
28
+ net3 =NetAddr::IPv6Net.parse("1:2::/32")
29
+ net4 = NetAddr::IPv6Net.parse("1:1::/33")
30
+ net5 = NetAddr::IPv6Net.parse("1:1::/32")
31
+
32
+ assert_equal(1, net1.cmp(net2)) # ip less
33
+ assert_equal(-1, net1.cmp(net3))# ip greater
34
+ assert_equal(-1, net4.cmp(net1)) # ip eq, mask less
35
+ assert_equal(1, net1.cmp(net4)) # ip eq, mask greater
36
+ assert_equal(0, net1.cmp(net5)) # eq
37
+ end
38
+
39
+ def test_contains
40
+ net = NetAddr::IPv6Net.parse("1:8::/29")
41
+ ip1 = NetAddr::IPv6.parse("1:f::")
42
+ ip2 = NetAddr::IPv6.parse("1:10::")
43
+ ip3 = NetAddr::IPv6.parse("1:7::")
44
+
45
+ assert_equal(true, net.contains(ip1))
46
+ assert_equal(false, net.contains(ip2))
47
+ assert_equal(false, net.contains(ip3))
48
+ end
49
+
50
+ def test_fill
51
+ parent = NetAddr::IPv6Net.parse("ff00::/8")
52
+ nets = []
53
+ ["ff08::/14", "fe00::/7", "ff20::/11", "ff20::/12"].each do |net|
54
+ nets.push(NetAddr::IPv6Net.parse(net))
55
+ end
56
+ expect = ["ff00::/13", "ff08::/14", "ff0c::/14", "ff10::/12", "ff20::/11", "ff40::/10", "ff80::/9"]
57
+ i = 0
58
+ parent.fill(nets).each do |net|
59
+ assert_equal(expect[i],net.to_s)
60
+ i += 1
61
+ end
62
+
63
+ parent = NetAddr::IPv6Net.parse("ff00::/121")
64
+ nets = []
65
+ ["ff00::/126", "ff00::/120"].each do |net|
66
+ nets.push(NetAddr::IPv6Net.parse(net))
67
+ end
68
+ expect = ["ff00::/126", "ff00::4/126", "ff00::8/125", "ff00::10/124", "ff00::20/123", "ff00::40/122"]
69
+ i = 0
70
+ parent.fill(nets).each do |net|
71
+ assert_equal(expect[i],net.to_s)
72
+ i += 1
73
+ end
74
+ end
75
+
76
+ def test_next
77
+ assert_equal("::2/127", NetAddr::IPv6Net.parse("::/127").next.to_s)
78
+ assert_equal("::8/125", NetAddr::IPv6Net.parse("::4/126").next.to_s)
79
+ assert_equal("0:0:0:2::/63", NetAddr::IPv6Net.parse("::1:8000:0:0:0/65").next.to_s)
80
+ assert_equal("0:0:0:3::/64", NetAddr::IPv6Net.parse("::2:8000:0:0:0/65").next.to_s)
81
+ assert_nil(NetAddr::IPv6Net.parse("ffff::/16").next)
82
+ end
83
+
84
+ def test_next_sib
85
+ assert_equal("0:0:0:2::/65", NetAddr::IPv6Net.parse("::1:8000:0:0:0/65",).next_sib.to_s)
86
+ assert_equal("0:0:0:2::/64", NetAddr::IPv6Net.parse("0:0:0:1::/64",).next_sib.to_s)
87
+ assert_equal("2::/16", NetAddr::IPv6Net.parse("1::/16").next_sib.to_s)
88
+ assert_nil(NetAddr::IPv6Net.parse("ffff::/16").next_sib)
89
+ end
90
+
91
+ def test_nth
92
+ assert_equal("1::", NetAddr::IPv6Net.parse("1::0/64").nth(0).to_s)
93
+ assert_equal("::", NetAddr::IPv6Net.parse("::/127").nth(0).to_s)
94
+ assert_equal("::1", NetAddr::IPv6Net.parse("::/127").nth(1).to_s)
95
+ assert_nil(NetAddr::IPv6Net.parse("::/127").nth(2))
96
+ end
97
+
98
+ def test_nth_subnet
99
+ assert_equal("1::/30", NetAddr::IPv6Net.parse("1::/24").nth_subnet(30,0).to_s)
100
+ assert_nil(NetAddr::IPv6Net.parse("1::").nth_subnet(26,4))
101
+ end
102
+
103
+ def test_prev
104
+ assert_equal("1::/125", NetAddr::IPv6Net.parse("1::8/126").prev.to_s)
105
+ assert_equal("f::/63", NetAddr::IPv6Net.parse("f:0:0:2::/63").prev.to_s)
106
+ assert_equal("e::/16", NetAddr::IPv6Net.parse("f::/63").prev.to_s)
107
+ assert_nil(NetAddr::IPv6Net.parse("::").prev)
108
+ end
109
+
110
+ def test_prev_sib
111
+ assert_equal("0:0:0:1::/64", NetAddr::IPv6Net.parse("0:0:0:2::/64").prev_sib.to_s)
112
+ assert_equal("1::/16", NetAddr::IPv6Net.parse("2::/16").prev_sib.to_s)
113
+ assert_nil(NetAddr::IPv6Net.parse("::/64").prev_sib)
114
+ end
115
+
116
+ def test_rel
117
+ net1 = NetAddr::IPv6Net.parse("1::/63")
118
+ net2 = NetAddr::IPv6Net.parse("1::/64")
119
+ net3 = NetAddr::IPv6Net.parse("1::/60")
120
+ net4 = NetAddr::IPv6Net.parse("1:0:0:1::/64")
121
+ net5 = NetAddr::IPv6Net.parse("2::/64")
122
+ assert_equal(1, net1.rel(net2)) # net eq, supernet
123
+ assert_equal(-1, net2.rel(net1)) # net eq, subnet
124
+ assert_equal(0, net2.rel(net2)) # eq
125
+ assert_equal(1, net3.rel(net4)) # net ne, supernet
126
+ assert_equal(-1, net4.rel(net3)) # net ne, subnet
127
+ assert_nil(net2.rel(net5)) # unrelated
128
+ end
129
+
130
+ def test_resize
131
+ assert_equal("1::/64", NetAddr::IPv6Net.parse("1::/63").resize(64).to_s)
132
+ end
133
+
134
+ def test_subnet_count
135
+ assert_equal(2, NetAddr::IPv6Net.parse("ff::/8").subnet_count(9))
136
+ assert_equal(4, NetAddr::IPv6Net.parse("ff::/8").subnet_count(10))
137
+ assert_equal(0, NetAddr::IPv6Net.parse("ff::/8").subnet_count(8))
138
+ assert_equal(0, NetAddr::IPv6Net.parse("::/0").subnet_count(128))
139
+ end
140
+
141
+ def test_summ
142
+ net1 = NetAddr::IPv6Net.parse("1::/128")
143
+ net2 = NetAddr::IPv6Net.parse("1::1/128")
144
+ net3 = NetAddr::IPv6Net.parse("1::0/128")
145
+ net4 = NetAddr::IPv6Net.parse("1::/16")
146
+ net5 = NetAddr::IPv6Net.parse("2::/16")
147
+ net6 = NetAddr::IPv6Net.parse("10::/12")
148
+ net7 = NetAddr::IPv6Net.parse("20::/12")
149
+ net8 = NetAddr::IPv6Net.parse("8::/17")
150
+ assert_equal("1::/127", net1.summ(net2).to_s) # lesser to greater
151
+ assert_equal("1::/127", net2.summ(net3).to_s) # greater to lesser
152
+ assert_nil(net4.summ(net5)) # different nets
153
+ assert_nil(net6.summ(net7)) # consecutive but not within bit boundary
154
+ assert_nil(net4.summ(net8)) # within bit boundary, but not same size
155
+ end
156
+
157
+ end
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require_relative "../lib/netaddr.rb"
4
+ require 'test/unit'
5
+
6
+ class TestMask128 < Test::Unit::TestCase
7
+ def test_new
8
+ m128 = NetAddr::Mask128.new(24)
9
+ assert_equal("/24", m128.to_s)
10
+ assert_equal(0xffffff00000000000000000000000000, m128.mask)
11
+
12
+ assert_raise(NetAddr::ValidationError){ NetAddr::Mask128.new(-1) }
13
+ assert_raise(NetAddr::ValidationError){ NetAddr::Mask128.new(129) }
14
+ assert_raise(NetAddr::ValidationError){ NetAddr::Mask128.new("/24") }
15
+ end
16
+
17
+ def test_parse
18
+ m128 = NetAddr::Mask128.parse("/24")
19
+ assert_equal("/24", m128.to_s)
20
+
21
+ m128 = NetAddr::Mask128.parse("24")
22
+ assert_equal("/24", m128.to_s)
23
+
24
+ assert_raise(NetAddr::ValidationError){ NetAddr::Mask128.parse("/129") }
25
+ end
26
+
27
+ def test_cmp
28
+ m = NetAddr::Mask128.new(24)
29
+ m2 = NetAddr::Mask128.new(25)
30
+ m3 = NetAddr::Mask128.new(23)
31
+ m4 = NetAddr::Mask128.new(24)
32
+ assert_equal(1, m.cmp(m2))
33
+ assert_equal(-1, m.cmp(m3))
34
+ assert_equal(0, m.cmp(m4))
35
+ end
36
+
37
+ def test_len
38
+ m = NetAddr::Mask128.new(65)
39
+ assert_equal(2**(128-65), m.len())
40
+
41
+ m = NetAddr::Mask128.new(64)
42
+ assert_equal(0, m.len())
43
+ end
44
+
45
+ end
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require_relative "../lib/netaddr.rb"
4
+ require 'test/unit'
5
+
6
+ class TestMask32 < Test::Unit::TestCase
7
+ def test_new
8
+ m32 = NetAddr::Mask32.new(24)
9
+ assert_equal("/24", m32.to_s)
10
+ assert_equal(0xffffff00, m32.mask)
11
+
12
+ assert_raise(NetAddr::ValidationError){ NetAddr::Mask32.new(-1) }
13
+ assert_raise(NetAddr::ValidationError){ NetAddr::Mask32.new(33) }
14
+ assert_raise(NetAddr::ValidationError){ NetAddr::Mask32.new("/24") }
15
+ end
16
+
17
+ def test_parse
18
+ m32 = NetAddr::Mask32.parse("255.255.255.0")
19
+ assert_equal("/24", m32.to_s)
20
+
21
+ m32 = NetAddr::Mask32.parse("/24")
22
+ assert_equal("/24", m32.to_s)
23
+
24
+ assert_raise(NetAddr::ValidationError){ NetAddr::Mask32.parse("255.248.255.0") }
25
+ end
26
+
27
+ def test_cmp
28
+ m = NetAddr::Mask32.new(24)
29
+ m2 = NetAddr::Mask32.new(25)
30
+ m3 = NetAddr::Mask32.new(23)
31
+ m4 = NetAddr::Mask32.new(24)
32
+ assert_equal(1, m.cmp(m2))
33
+ assert_equal(-1, m.cmp(m3))
34
+ assert_equal(0, m.cmp(m4))
35
+ end
36
+
37
+ def test_extended
38
+ m32 = NetAddr::Mask32.new(24)
39
+ assert_equal("255.255.255.0", m32.extended)
40
+ end
41
+
42
+ def test_len
43
+ m = NetAddr::Mask32.new(24)
44
+ assert_equal(256, m.len())
45
+
46
+ m = NetAddr::Mask32.new(26)
47
+ assert_equal(64, m.len())
48
+
49
+ m = NetAddr::Mask32.new(32)
50
+ assert_equal(1, m.len())
51
+
52
+ m = NetAddr::Mask32.new(0)
53
+ assert_equal(0, m.len())
54
+ end
55
+
56
+ end
@@ -0,0 +1,148 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require_relative "../lib/netaddr.rb"
4
+ require 'test/unit'
5
+
6
+ class TestNetAddr < Test::Unit::TestCase
7
+
8
+ def test_parse_ip
9
+ assert_equal("128.0.0.1", NetAddr.parse_ip("128.0.0.1").to_s)
10
+ assert_equal("1::1", NetAddr.parse_ip("1::1").to_s)
11
+ end
12
+
13
+ def test_parse_net
14
+ assert_equal("128.0.0.1/32", NetAddr.parse_net("128.0.0.1/32").to_s)
15
+ assert_equal("1::/24", NetAddr.parse_net("1::1/24").to_s)
16
+ end
17
+
18
+ def test_ipv4_prefix_len
19
+ assert_equal(32,NetAddr.ipv4_prefix_len(1))
20
+ assert_equal(27,NetAddr.ipv4_prefix_len(30))
21
+ assert_equal(24,NetAddr.ipv4_prefix_len(254))
22
+ assert_equal(16,NetAddr.ipv4_prefix_len(0xfffe))
23
+ assert_equal(8,NetAddr.ipv4_prefix_len(0xfffffe))
24
+ assert_equal(0,NetAddr.ipv4_prefix_len(0xffffffff))
25
+ end
26
+
27
+ def test_sort_IPv4
28
+ ips = []
29
+ ["10.0.0.0","1.1.1.1","0.0.0.0","10.1.10.1"].each do |net|
30
+ ips.push(NetAddr::IPv4.parse(net))
31
+ end
32
+ sorted = NetAddr.sort_IPv4(ips)
33
+ expect = [ips[2],ips[1],ips[0],ips[3]]
34
+ assert_equal(expect, sorted)
35
+ end
36
+
37
+ def test_sort_IPv4Net
38
+ nets = []
39
+ ["10.0.0.0/24", "1.0.0.0/24", "10.0.0.0/8", "192.168.1.0/26", "8.8.8.8/32"].each do |net|
40
+ nets.push(NetAddr::IPv4Net.parse(net))
41
+ end
42
+ sorted = NetAddr.sort_IPv4Net(nets)
43
+ expect = [nets[1],nets[4],nets[0],nets[2],nets[3]]
44
+ assert_equal(expect, sorted)
45
+ end
46
+
47
+ def test_summ_IPv4Net
48
+ nets = []
49
+ ["10.0.0.0/29", "10.0.0.8/30", "10.0.0.12/30", "10.0.0.16/28", "10.0.0.32/27", "10.0.0.64/26", "10.0.0.128/25"].each do |net|
50
+ nets.push(NetAddr::IPv4Net.parse(net))
51
+ end
52
+ expect = ["10.0.0.0/24"]
53
+ i = 0
54
+ NetAddr.summ_IPv4Net(nets).each do |net|
55
+ assert_equal(expect[i],net.to_s)
56
+ i += 1
57
+ end
58
+
59
+ nets = []
60
+ ["10.0.0.0/24", "1.0.0.0/8", "3.4.5.6/32", "3.4.5.8/31", "0.0.0.0/0"].each do |net|
61
+ nets.push(NetAddr::IPv4Net.parse(net))
62
+ end
63
+ expect = ["0.0.0.0/0"]
64
+ i = 0
65
+ NetAddr.summ_IPv4Net(nets).each do |net|
66
+ assert_equal(expect[i],net.to_s)
67
+ i += 1
68
+ end
69
+
70
+ nets = []
71
+ ["10.0.1.0/25", "10.0.1.0/26", "10.0.0.16/28", "10.0.0.32/27", "10.0.0.128/26", "10.0.0.192/26", "10.0.0.32/27"].each do |net|
72
+ nets.push(NetAddr::IPv4Net.parse(net))
73
+ end
74
+ expect = ["10.0.0.16/28", "10.0.0.32/27", "10.0.0.128/25", "10.0.1.0/25"]
75
+ i = 0
76
+ NetAddr.summ_IPv4Net(nets).each do |net|
77
+ assert_equal(expect[i],net.to_s)
78
+ i += 1
79
+ end
80
+
81
+ nets = []
82
+ ["10.0.0.0/26","10.0.0.64/26","10.0.0.0/24","10.0.0.192/26","10.0.0.128/26"].each do |net| # test out of order
83
+ nets.push(NetAddr::IPv4Net.parse(net))
84
+ end
85
+ expect = ["10.0.0.0/24"]
86
+ i = 0
87
+ NetAddr.summ_IPv4Net(nets).each do |net|
88
+ assert_equal(expect[i],net.to_s)
89
+ i += 1
90
+ end
91
+ end
92
+
93
+ def test_sort_IPv6
94
+ ips = []
95
+ ["1::", "3::", "2::", "::", "::1"].each do |net|
96
+ ips.push(NetAddr::IPv6.parse(net))
97
+ end
98
+ sorted = NetAddr.sort_IPv6(ips)
99
+ expect = [ips[3],ips[4],ips[0],ips[2],ips[1]]
100
+ assert_equal(expect, sorted)
101
+ end
102
+
103
+ def test_sort_IPv6Net
104
+ nets = []
105
+ ["1::/64", "2::/64", "1::/16", "::", "::1"].each do |net|
106
+ nets.push(NetAddr::IPv6Net.parse(net))
107
+ end
108
+ sorted = NetAddr.sort_IPv6Net(nets)
109
+ expect = [nets[3],nets[4],nets[0],nets[2],nets[1]] # ::/128 ::1/128 1::/64 1::/16 2::/64
110
+ assert_equal(expect, sorted)
111
+ end
112
+
113
+ def test_summ_IPv6Net
114
+ nets = []
115
+ ["ff00::/13", "ff08::/14", "ff0c::/14", "ff10::/12", "ff20::/11", "ff40::/10", "ff80::/9"].each do |net|
116
+ nets.push(NetAddr::IPv6Net.parse(net))
117
+ end
118
+ expect = ["ff00::/8"]
119
+ i = 0
120
+ NetAddr.summ_IPv6Net(nets).each do |net|
121
+ assert_equal(expect[i],net.to_s)
122
+ i += 1
123
+ end
124
+
125
+ nets = []
126
+ ["2::/32", "::1", "fec0::/16", "1::/16", "::/0"].each do |net|
127
+ nets.push(NetAddr::IPv6Net.parse(net))
128
+ end
129
+ expect = ["::/0"]
130
+ i = 0
131
+ NetAddr.summ_IPv6Net(nets).each do |net|
132
+ assert_equal(expect[i],net.to_s)
133
+ i += 1
134
+ end
135
+
136
+ nets = []
137
+ ["ff80::/9", "ff10::/12", "ff80::/10", "ff20::/12", "fff0::/16", "fff1::/16", "ff80::/10"].each do |net|
138
+ nets.push(NetAddr::IPv6Net.parse(net))
139
+ end
140
+ expect = ["ff10::/12", "ff20::/12", "ff80::/9", "fff0::/15"]
141
+ i = 0
142
+ NetAddr.summ_IPv6Net(nets).each do |net|
143
+ assert_equal(expect[i],net.to_s)
144
+ i += 1
145
+ end
146
+ end
147
+
148
+ end