netaddr 1.5.1 → 2.0.4

Sign up to get free protection for your applications and to get access to all the features.
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