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,448 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class IPv6Test < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@klass = IPAddress::IPv6
|
7
|
+
|
8
|
+
@compress_addr = {
|
9
|
+
"2001:db8:0000:0000:0008:0800:200c:417a" => "2001:db8::8:800:200c:417a",
|
10
|
+
"2001:db8:0:0:8:800:200c:417a" => "2001:db8::8:800:200c:417a",
|
11
|
+
"ff01:0:0:0:0:0:0:101" => "ff01::101",
|
12
|
+
"0:0:0:0:0:0:0:1" => "::1",
|
13
|
+
"0:0:0:0:0:0:0:0" => "::"}
|
14
|
+
|
15
|
+
@valid_ipv6 = { # Kindly taken from the python IPy library
|
16
|
+
"FEDC:BA98:7654:3210:FEDC:BA98:7654:3210" => 338770000845734292534325025077361652240,
|
17
|
+
"1080:0000:0000:0000:0008:0800:200C:417A" => 21932261930451111902915077091070067066,
|
18
|
+
"1080:0:0:0:8:800:200C:417A" => 21932261930451111902915077091070067066,
|
19
|
+
"1080:0::8:800:200C:417A" => 21932261930451111902915077091070067066,
|
20
|
+
"1080::8:800:200C:417A" => 21932261930451111902915077091070067066,
|
21
|
+
"FF01:0:0:0:0:0:0:43" => 338958331222012082418099330867817087043,
|
22
|
+
"FF01:0:0::0:0:43" => 338958331222012082418099330867817087043,
|
23
|
+
"FF01::43" => 338958331222012082418099330867817087043,
|
24
|
+
"0:0:0:0:0:0:0:1" => 1,
|
25
|
+
"0:0:0::0:0:1" => 1,
|
26
|
+
"::1" => 1,
|
27
|
+
"0:0:0:0:0:0:0:0" => 0,
|
28
|
+
"0:0:0::0:0:0" => 0,
|
29
|
+
"::" => 0,
|
30
|
+
"::/0" => 0,
|
31
|
+
"1080:0:0:0:8:800:200C:417A" => 21932261930451111902915077091070067066,
|
32
|
+
"1080::8:800:200C:417A" => 21932261930451111902915077091070067066}
|
33
|
+
|
34
|
+
@invalid_ipv6 = [":1:2:3:4:5:6:7",
|
35
|
+
":1:2:3:4:5:6:7",
|
36
|
+
"2002:516:2:200",
|
37
|
+
"dd"]
|
38
|
+
|
39
|
+
@networks = {
|
40
|
+
"2001:db8:1:1:1:1:1:1/32" => "2001:db8::/32",
|
41
|
+
"2001:db8:1:1:1:1:1::/32" => "2001:db8::/32",
|
42
|
+
"2001:db8::1/64" => "2001:db8::/64"}
|
43
|
+
|
44
|
+
@ip = @klass.new "2001:db8::8:800:200c:417a/64"
|
45
|
+
@network = @klass.new "2001:db8:8:800::/64"
|
46
|
+
@arr = [8193,3512,0,0,8,2048,8204,16762]
|
47
|
+
@hex = "20010db80000000000080800200c417a"
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_attribute_address
|
51
|
+
addr = "2001:0db8:0000:0000:0008:0800:200c:417a"
|
52
|
+
assert_equal addr, @ip.address
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_initialize
|
56
|
+
assert_instance_of @klass, @ip
|
57
|
+
@valid_ipv6.keys.each do |ip|
|
58
|
+
assert_nothing_raised {@klass.new ip}
|
59
|
+
end
|
60
|
+
@invalid_ipv6.each do |ip|
|
61
|
+
assert_raise(ArgumentError) {@klass.new ip}
|
62
|
+
end
|
63
|
+
assert_equal 64, @ip.prefix
|
64
|
+
|
65
|
+
assert_raise(ArgumentError) {
|
66
|
+
@klass.new "::10.1.1.1"
|
67
|
+
}
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_attribute_groups
|
71
|
+
assert_equal @arr, @ip.groups
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_method_hexs
|
75
|
+
arr = "2001:0db8:0000:0000:0008:0800:200c:417a".split(":")
|
76
|
+
assert_equal arr, @ip.hexs
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_method_to_i
|
80
|
+
@valid_ipv6.each do |ip,num|
|
81
|
+
assert_equal num, @klass.new(ip).to_i
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_method_bits
|
86
|
+
bits = "0010000000000001000011011011100000000000000000000" +
|
87
|
+
"000000000000000000000000000100000001000000000000010000" +
|
88
|
+
"0000011000100000101111010"
|
89
|
+
assert_equal bits, @ip.bits
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_method_prefix=()
|
93
|
+
ip = @klass.new "2001:db8::8:800:200c:417a"
|
94
|
+
assert_equal 128, ip.prefix
|
95
|
+
ip.prefix = 64
|
96
|
+
assert_equal 64, ip.prefix
|
97
|
+
assert_equal "2001:db8::8:800:200c:417a/64", ip.to_string
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_method_mapped?
|
101
|
+
assert_equal false, @ip.mapped?
|
102
|
+
ip6 = @klass.new "::ffff:1234:5678"
|
103
|
+
assert_equal true, ip6.mapped?
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_method_literal
|
107
|
+
str = "2001-0db8-0000-0000-0008-0800-200c-417a.ipv6-literal.net"
|
108
|
+
assert_equal str, @ip.literal
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_method_group
|
112
|
+
@arr.each_with_index do |val,index|
|
113
|
+
assert_equal val, @ip[index]
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_method_ipv4?
|
118
|
+
assert_equal false, @ip.ipv4?
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_method_ipv6?
|
122
|
+
assert_equal true, @ip.ipv6?
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_method_network?
|
126
|
+
assert_equal true, @network.network?
|
127
|
+
assert_equal false, @ip.network?
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_method_network_u128
|
131
|
+
assert_equal 42540766411282592856903984951653826560, @ip.network_u128
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_method_broadcast_u128
|
135
|
+
assert_equal 42540766411282592875350729025363378175, @ip.broadcast_u128
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_method_size
|
139
|
+
ip = @klass.new("2001:db8::8:800:200c:417a/64")
|
140
|
+
assert_equal 2**64, ip.size
|
141
|
+
ip = @klass.new("2001:db8::8:800:200c:417a/32")
|
142
|
+
assert_equal 2**96, ip.size
|
143
|
+
ip = @klass.new("2001:db8::8:800:200c:417a/120")
|
144
|
+
assert_equal 2**8, ip.size
|
145
|
+
ip = @klass.new("2001:db8::8:800:200c:417a/124")
|
146
|
+
assert_equal 2**4, ip.size
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_method_include?
|
150
|
+
assert_equal true, @ip.include?(@ip)
|
151
|
+
# test prefix on same address
|
152
|
+
included = @klass.new "2001:db8::8:800:200c:417a/128"
|
153
|
+
not_included = @klass.new "2001:db8::8:800:200c:417a/46"
|
154
|
+
assert_equal true, @ip.include?(included)
|
155
|
+
assert_equal false, @ip.include?(not_included)
|
156
|
+
# test address on same prefix
|
157
|
+
included = @klass.new "2001:db8::8:800:200c:0/64"
|
158
|
+
not_included = @klass.new "2001:db8:1::8:800:200c:417a/64"
|
159
|
+
assert_equal true, @ip.include?(included)
|
160
|
+
assert_equal false, @ip.include?(not_included)
|
161
|
+
# general test
|
162
|
+
included = @klass.new "2001:db8::8:800:200c:1/128"
|
163
|
+
not_included = @klass.new "2001:db8:1::8:800:200c:417a/76"
|
164
|
+
assert_equal true, @ip.include?(included)
|
165
|
+
assert_equal false, @ip.include?(not_included)
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_method_to_hex
|
169
|
+
assert_equal @hex, @ip.to_hex
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_method_to_s
|
173
|
+
assert_equal "2001:db8::8:800:200c:417a", @ip.to_s
|
174
|
+
end
|
175
|
+
|
176
|
+
def test_method_to_string
|
177
|
+
assert_equal "2001:db8::8:800:200c:417a/64", @ip.to_string
|
178
|
+
end
|
179
|
+
|
180
|
+
def test_method_to_string_uncompressed
|
181
|
+
str = "2001:0db8:0000:0000:0008:0800:200c:417a/64"
|
182
|
+
assert_equal str, @ip.to_string_uncompressed
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_method_data
|
186
|
+
if RUBY_VERSION < "2.0"
|
187
|
+
str = " \001\r\270\000\000\000\000\000\b\b\000 \fAz"
|
188
|
+
else
|
189
|
+
str = " \x01\r\xB8\x00\x00\x00\x00\x00\b\b\x00 \fAz".b
|
190
|
+
end
|
191
|
+
assert_equal str, @ip.data
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_method_reverse
|
195
|
+
str = "f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.arpa"
|
196
|
+
assert_equal str, @klass.new("3ffe:505:2::f").reverse
|
197
|
+
end
|
198
|
+
|
199
|
+
def test_method_rev_domains
|
200
|
+
assert_equal ["e.ip6.arpa", "f.ip6.arpa"], @klass.new("f000:f100::/3").rev_domains
|
201
|
+
assert_equal ["2.a.e.f.ip6.arpa", "3.a.e.f.ip6.arpa"], @klass.new("fea3:f120::/15").rev_domains
|
202
|
+
assert_equal ["2.2.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.f.0.0.0.f.ip6.arpa",
|
203
|
+
"3.2.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.f.0.0.0.f.ip6.arpa"],
|
204
|
+
@klass.new("f000:f100::1234/125").rev_domains
|
205
|
+
end
|
206
|
+
|
207
|
+
def test_method_compressed
|
208
|
+
assert_equal "1:1:1::1", @klass.new("1:1:1:0:0:0:0:1").compressed
|
209
|
+
assert_equal "1:0:1::1", @klass.new("1:0:1:0:0:0:0:1").compressed
|
210
|
+
assert_equal "1::1:1:1:2:3:1", @klass.new("1:0:1:1:1:2:3:1").compressed
|
211
|
+
assert_equal "1::1:1:0:2:3:1", @klass.new("1:0:1:1::2:3:1").compressed
|
212
|
+
assert_equal "1:0:0:1::1", @klass.new("1:0:0:1:0:0:0:1").compressed
|
213
|
+
assert_equal "1::1:0:0:1", @klass.new("1:0:0:0:1:0:0:1").compressed
|
214
|
+
assert_equal "1::1", @klass.new("1:0:0:0:0:0:0:1").compressed
|
215
|
+
#assert_equal "1:1::1:2:0:0:1", @klass.new("1:1:0:1:2::1").compressed
|
216
|
+
end
|
217
|
+
|
218
|
+
def test_method_unspecified?
|
219
|
+
assert_equal true, @klass.new("::").unspecified?
|
220
|
+
assert_equal false, @ip.unspecified?
|
221
|
+
end
|
222
|
+
|
223
|
+
def test_method_loopback?
|
224
|
+
assert_equal true, @klass.new("::1").loopback?
|
225
|
+
assert_equal false, @ip.loopback?
|
226
|
+
end
|
227
|
+
|
228
|
+
def test_method_network
|
229
|
+
@networks.each do |addr,net|
|
230
|
+
ip = @klass.new addr
|
231
|
+
assert_instance_of @klass, ip.network
|
232
|
+
assert_equal net, ip.network.to_string
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
def test_method_each
|
237
|
+
ip = @klass.new("2001:db8::4/125")
|
238
|
+
arr = []
|
239
|
+
ip.each {|i| arr << i.compressed}
|
240
|
+
expected = ["2001:db8::","2001:db8::1","2001:db8::2",
|
241
|
+
"2001:db8::3","2001:db8::4","2001:db8::5",
|
242
|
+
"2001:db8::6","2001:db8::7"]
|
243
|
+
assert_equal expected, arr
|
244
|
+
end
|
245
|
+
|
246
|
+
def test_method_each_net
|
247
|
+
ip = @klass.new("fd01:db8::4/3")
|
248
|
+
arr = []
|
249
|
+
ip.each_net {|i| arr << i.to_string}
|
250
|
+
expected = ["e000::/3","f000::/3"]
|
251
|
+
assert_equal expected, arr
|
252
|
+
end
|
253
|
+
|
254
|
+
def test_method_compare
|
255
|
+
ip1 = @klass.new("2001:db8:1::1/64")
|
256
|
+
ip2 = @klass.new("2001:db8:2::1/64")
|
257
|
+
ip3 = @klass.new("2001:db8:1::2/64")
|
258
|
+
ip4 = @klass.new("2001:db8:1::1/65")
|
259
|
+
|
260
|
+
# ip2 should be greater than ip1
|
261
|
+
assert_equal true, ip2 > ip1
|
262
|
+
assert_equal false, ip1 > ip2
|
263
|
+
assert_equal false, ip2 < ip1
|
264
|
+
# ip3 should be less than ip2
|
265
|
+
assert_equal true, ip2 > ip3
|
266
|
+
assert_equal false, ip2 < ip3
|
267
|
+
# ip1 should be less than ip3
|
268
|
+
assert_equal true, ip1 < ip3
|
269
|
+
assert_equal false, ip1 > ip3
|
270
|
+
assert_equal false, ip3 < ip1
|
271
|
+
# ip1 should be equal to itself
|
272
|
+
assert_equal true, ip1 == ip1
|
273
|
+
# ip4 should be greater than ip1
|
274
|
+
assert_equal true, ip1 < ip4
|
275
|
+
assert_equal false, ip1 > ip4
|
276
|
+
# test sorting
|
277
|
+
arr = ["2001:db8:1::1/64","2001:db8:1::1/65",
|
278
|
+
"2001:db8:1::2/64","2001:db8:2::1/64"]
|
279
|
+
assert_equal arr, [ip1,ip2,ip3,ip4].sort.map{|s| s.to_string}
|
280
|
+
end
|
281
|
+
|
282
|
+
def test_classmethod_expand
|
283
|
+
compressed = "2001:db8:0:cd30::"
|
284
|
+
expanded = "2001:0db8:0000:cd30:0000:0000:0000:0000"
|
285
|
+
assert_equal expanded, @klass.expand(compressed)
|
286
|
+
assert_not_equal expanded, @klass.expand("2001:0db8:0::cd3")
|
287
|
+
assert_not_equal expanded, @klass.expand("2001:0db8::cd30")
|
288
|
+
assert_not_equal expanded, @klass.expand("2001:0db8::cd3")
|
289
|
+
end
|
290
|
+
|
291
|
+
def test_classmethod_compress
|
292
|
+
compressed = "2001:db8:0:cd30::"
|
293
|
+
expanded = "2001:0db8:0000:cd30:0000:0000:0000:0000"
|
294
|
+
assert_equal compressed, @klass.compress(expanded)
|
295
|
+
assert_not_equal compressed, @klass.compress("2001:0db8:0::cd3")
|
296
|
+
assert_not_equal compressed, @klass.compress("2001:0db8::cd30")
|
297
|
+
assert_not_equal compressed, @klass.compress("2001:0db8::cd3")
|
298
|
+
end
|
299
|
+
|
300
|
+
def test_classmethod_parse_data
|
301
|
+
str = " \001\r\270\000\000\000\000\000\b\b\000 \fAz"
|
302
|
+
ip = @klass.parse_data str
|
303
|
+
assert_instance_of @klass, ip
|
304
|
+
assert_equal "2001:0db8:0000:0000:0008:0800:200c:417a", ip.address
|
305
|
+
assert_equal "2001:db8::8:800:200c:417a/128", ip.to_string
|
306
|
+
end
|
307
|
+
|
308
|
+
def test_classhmethod_parse_u128
|
309
|
+
@valid_ipv6.each do |ip,num|
|
310
|
+
assert_equal @klass.new(ip).to_s, @klass.parse_u128(num).to_s
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
def test_classmethod_parse_hex
|
315
|
+
assert_equal @ip.to_s, @klass.parse_hex(@hex,64).to_s
|
316
|
+
end
|
317
|
+
|
318
|
+
end # class IPv6Test
|
319
|
+
|
320
|
+
class IPv6UnspecifiedTest < Test::Unit::TestCase
|
321
|
+
|
322
|
+
def setup
|
323
|
+
@klass = IPAddress::IPv6::Unspecified
|
324
|
+
@ip = @klass.new
|
325
|
+
@s = "::"
|
326
|
+
@str = "::/128"
|
327
|
+
@string = "0000:0000:0000:0000:0000:0000:0000:0000/128"
|
328
|
+
@u128 = 0
|
329
|
+
@address = "::"
|
330
|
+
end
|
331
|
+
|
332
|
+
def test_initialize
|
333
|
+
assert_nothing_raised {@klass.new}
|
334
|
+
assert_instance_of @klass, @ip
|
335
|
+
end
|
336
|
+
|
337
|
+
def test_attributes
|
338
|
+
assert_equal @address, @ip.compressed
|
339
|
+
assert_equal 128, @ip.prefix
|
340
|
+
assert_equal true, @ip.unspecified?
|
341
|
+
assert_equal @s, @ip.to_s
|
342
|
+
assert_equal @str, @ip.to_string
|
343
|
+
assert_equal @string, @ip.to_string_uncompressed
|
344
|
+
assert_equal @u128, @ip.to_u128
|
345
|
+
end
|
346
|
+
|
347
|
+
def test_method_ipv6?
|
348
|
+
assert_equal true, @ip.ipv6?
|
349
|
+
end
|
350
|
+
|
351
|
+
end # class IPv6UnspecifiedTest
|
352
|
+
|
353
|
+
|
354
|
+
class IPv6LoopbackTest < Test::Unit::TestCase
|
355
|
+
|
356
|
+
def setup
|
357
|
+
@klass = IPAddress::IPv6::Loopback
|
358
|
+
@ip = @klass.new
|
359
|
+
@s = "::1"
|
360
|
+
@str = "::1/128"
|
361
|
+
@string = "0000:0000:0000:0000:0000:0000:0000:0001/128"
|
362
|
+
@u128 = 1
|
363
|
+
@address = "::1"
|
364
|
+
end
|
365
|
+
|
366
|
+
def test_initialize
|
367
|
+
assert_nothing_raised {@klass.new}
|
368
|
+
assert_instance_of @klass, @ip
|
369
|
+
end
|
370
|
+
|
371
|
+
def test_attributes
|
372
|
+
assert_equal @address, @ip.compressed
|
373
|
+
assert_equal 128, @ip.prefix
|
374
|
+
assert_equal true, @ip.loopback?
|
375
|
+
assert_equal @s, @ip.to_s
|
376
|
+
assert_equal @str, @ip.to_string
|
377
|
+
assert_equal @string, @ip.to_string_uncompressed
|
378
|
+
assert_equal @u128, @ip.to_u128
|
379
|
+
end
|
380
|
+
|
381
|
+
def test_method_ipv6?
|
382
|
+
assert_equal true, @ip.ipv6?
|
383
|
+
end
|
384
|
+
|
385
|
+
end # class IPv6LoopbackTest
|
386
|
+
|
387
|
+
class IPv6MappedTest < Test::Unit::TestCase
|
388
|
+
|
389
|
+
def setup
|
390
|
+
@klass = IPAddress::IPv6::Mapped
|
391
|
+
@ip = @klass.new("::172.16.10.1")
|
392
|
+
@s = "::ffff:172.16.10.1"
|
393
|
+
@str = "::ffff:172.16.10.1/128"
|
394
|
+
@string = "0000:0000:0000:0000:0000:ffff:ac10:0a01/128"
|
395
|
+
@u128 = 281473568475649
|
396
|
+
@address = "::ffff:ac10:a01"
|
397
|
+
|
398
|
+
@valid_mapped = {'::13.1.68.3' => 281470899930115,
|
399
|
+
'0:0:0:0:0:ffff:129.144.52.38' => 281472855454758,
|
400
|
+
'::ffff:129.144.52.38' => 281472855454758}
|
401
|
+
|
402
|
+
@valid_mapped_ipv6 = {'::0d01:4403' => 281470899930115,
|
403
|
+
'0:0:0:0:0:ffff:8190:3426' => 281472855454758,
|
404
|
+
'::ffff:8190:3426' => 281472855454758}
|
405
|
+
|
406
|
+
@valid_mapped_ipv6_conversion = {'::0d01:4403' => "13.1.68.3",
|
407
|
+
'0:0:0:0:0:ffff:8190:3426' => "129.144.52.38",
|
408
|
+
'::ffff:8190:3426' => "129.144.52.38"}
|
409
|
+
|
410
|
+
end
|
411
|
+
|
412
|
+
def test_initialize
|
413
|
+
assert_nothing_raised {@klass.new("::172.16.10.1")}
|
414
|
+
assert_instance_of @klass, @ip
|
415
|
+
@valid_mapped.each do |ip, u128|
|
416
|
+
assert_nothing_raised {@klass.new ip}
|
417
|
+
assert_equal u128, @klass.new(ip).to_u128
|
418
|
+
end
|
419
|
+
@valid_mapped_ipv6.each do |ip, u128|
|
420
|
+
assert_nothing_raised {@klass.new ip}
|
421
|
+
assert_equal u128, @klass.new(ip).to_u128
|
422
|
+
end
|
423
|
+
end
|
424
|
+
|
425
|
+
def test_mapped_from_ipv6_conversion
|
426
|
+
@valid_mapped_ipv6_conversion.each do |ip6,ip4|
|
427
|
+
assert_equal ip4, @klass.new(ip6).ipv4.to_s
|
428
|
+
end
|
429
|
+
end
|
430
|
+
|
431
|
+
def test_attributes
|
432
|
+
assert_equal @address, @ip.compressed
|
433
|
+
assert_equal 128, @ip.prefix
|
434
|
+
assert_equal @s, @ip.to_s
|
435
|
+
assert_equal @str, @ip.to_string
|
436
|
+
assert_equal @string, @ip.to_string_uncompressed
|
437
|
+
assert_equal @u128, @ip.to_u128
|
438
|
+
end
|
439
|
+
|
440
|
+
def test_method_ipv6?
|
441
|
+
assert_equal true, @ip.ipv6?
|
442
|
+
end
|
443
|
+
|
444
|
+
def test_mapped?
|
445
|
+
assert_equal true, @ip.mapped?
|
446
|
+
end
|
447
|
+
|
448
|
+
end # class IPv6MappedTest
|
@@ -0,0 +1,159 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Prefix32Test < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@netmask0 = "0.0.0.0"
|
7
|
+
@netmask8 = "255.0.0.0"
|
8
|
+
@netmask16 = "255.255.0.0"
|
9
|
+
@netmask24 = "255.255.255.0"
|
10
|
+
@netmask30 = "255.255.255.252"
|
11
|
+
@netmasks = [@netmask0,@netmask8,@netmask16,@netmask24,@netmask30]
|
12
|
+
|
13
|
+
@prefix_hash = {
|
14
|
+
"0.0.0.0" => 0,
|
15
|
+
"255.0.0.0" => 8,
|
16
|
+
"255.255.0.0" => 16,
|
17
|
+
"255.255.255.0" => 24,
|
18
|
+
"255.255.255.252" => 30}
|
19
|
+
|
20
|
+
@octets_hash = {
|
21
|
+
[0,0,0,0] => 0,
|
22
|
+
[255,0,0,0] => 8,
|
23
|
+
[255,255,0,0] => 16,
|
24
|
+
[255,255,255,0] => 24,
|
25
|
+
[255,255,255,252] => 30}
|
26
|
+
|
27
|
+
@u32_hash = {
|
28
|
+
0 => 0,
|
29
|
+
8 => 4278190080,
|
30
|
+
16 => 4294901760,
|
31
|
+
24 => 4294967040,
|
32
|
+
30 => 4294967292}
|
33
|
+
|
34
|
+
@klass = IPAddress::Prefix32
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_attributes
|
38
|
+
@prefix_hash.values.each do |num|
|
39
|
+
prefix = @klass.new(num)
|
40
|
+
assert_equal num, prefix.prefix
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_parse_netmask
|
45
|
+
@prefix_hash.each do |netmask, num|
|
46
|
+
prefix = @klass.parse_netmask(netmask)
|
47
|
+
assert_equal num, prefix.prefix
|
48
|
+
assert_instance_of @klass, prefix
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_method_to_ip
|
53
|
+
@prefix_hash.each do |netmask, num|
|
54
|
+
prefix = @klass.new(num)
|
55
|
+
assert_equal netmask, prefix.to_ip
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_method_to_s
|
60
|
+
prefix = @klass.new(8)
|
61
|
+
assert_equal "8", prefix.to_s
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_method_bits
|
65
|
+
prefix = @klass.new(16)
|
66
|
+
str = "1"*16 + "0"*16
|
67
|
+
assert_equal str, prefix.bits
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_method_to_u32
|
71
|
+
@u32_hash.each do |num,u32|
|
72
|
+
assert_equal u32, @klass.new(num).to_u32
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_method_plus
|
77
|
+
p1 = @klass.new 8
|
78
|
+
p2 = @klass.new 10
|
79
|
+
assert_equal 18, p1+p2
|
80
|
+
assert_equal 12, p1+4
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_method_minus
|
84
|
+
p1 = @klass.new 8
|
85
|
+
p2 = @klass.new 24
|
86
|
+
assert_equal 16, p1-p2
|
87
|
+
assert_equal 16, p2-p1
|
88
|
+
assert_equal 20, p2-4
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_initialize
|
92
|
+
assert_raise (ArgumentError) do
|
93
|
+
@klass.new 33
|
94
|
+
end
|
95
|
+
assert_nothing_raised do
|
96
|
+
@klass.new 8
|
97
|
+
end
|
98
|
+
assert_instance_of @klass, @klass.new(8)
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_method_octets
|
102
|
+
@octets_hash.each do |arr,pref|
|
103
|
+
prefix = @klass.new(pref)
|
104
|
+
assert_equal prefix.octets, arr
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_method_brackets
|
109
|
+
@octets_hash.each do |arr,pref|
|
110
|
+
prefix = @klass.new(pref)
|
111
|
+
arr.each_with_index do |oct,index|
|
112
|
+
assert_equal prefix[index], oct
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_method_hostmask
|
118
|
+
prefix = @klass.new(8)
|
119
|
+
assert_equal "0.255.255.255", prefix.hostmask
|
120
|
+
end
|
121
|
+
|
122
|
+
end # class Prefix32Test
|
123
|
+
|
124
|
+
|
125
|
+
class Prefix128Test < Test::Unit::TestCase
|
126
|
+
|
127
|
+
def setup
|
128
|
+
@u128_hash = {
|
129
|
+
32 => 340282366841710300949110269838224261120,
|
130
|
+
64 => 340282366920938463444927863358058659840,
|
131
|
+
96 => 340282366920938463463374607427473244160,
|
132
|
+
126 => 340282366920938463463374607431768211452}
|
133
|
+
|
134
|
+
@klass = IPAddress::Prefix128
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_initialize
|
138
|
+
assert_raise (ArgumentError) do
|
139
|
+
@klass.new 129
|
140
|
+
end
|
141
|
+
assert_nothing_raised do
|
142
|
+
@klass.new 64
|
143
|
+
end
|
144
|
+
assert_instance_of @klass, @klass.new(64)
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_method_bits
|
148
|
+
prefix = @klass.new(64)
|
149
|
+
str = "1"*64 + "0"*64
|
150
|
+
assert_equal str, prefix.bits
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_method_to_u32
|
154
|
+
@u128_hash.each do |num,u128|
|
155
|
+
assert_equal u128, @klass.new(num).to_u128
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
end # class Prefix128Test
|