ipaddress_link_local 0.8.3

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