arnaucube
arnaucube/socketioMEANseedPublic Self-hosted repository
socketioMEANseed/server/node_modules/ipaddr.js/test/ipaddr.test.coffee
server/node_modules/ipaddr.js/test/ipaddr.test.coffeeRaw
  1ipaddr = require '../lib/ipaddr'
  2
  3module.exports =
  4  'should define main classes': (test) ->
  5    test.ok(ipaddr.IPv4?, 'defines IPv4 class')
  6    test.ok(ipaddr.IPv6?, 'defines IPv6 class')
  7    test.done()
  8
  9  'can construct IPv4 from octets': (test) ->
 10    test.doesNotThrow ->
 11      new ipaddr.IPv4([192, 168, 1, 2])
 12    test.done()
 13
 14  'refuses to construct invalid IPv4': (test) ->
 15    test.throws ->
 16      new ipaddr.IPv4([300, 1, 2, 3])
 17    test.throws ->
 18      new ipaddr.IPv4([8, 8, 8])
 19    test.done()
 20
 21  'converts IPv4 to string correctly': (test) ->
 22    addr = new ipaddr.IPv4([192, 168, 1, 1])
 23    test.equal(addr.toString(), '192.168.1.1')
 24    test.done()
 25
 26  'returns correct kind for IPv4': (test) ->
 27    addr = new ipaddr.IPv4([1, 2, 3, 4])
 28    test.equal(addr.kind(), 'ipv4')
 29    test.done()
 30
 31  'allows to access IPv4 octets': (test) ->
 32    addr = new ipaddr.IPv4([42, 0, 0, 0])
 33    test.equal(addr.octets[0], 42)
 34    test.done()
 35
 36  'checks IPv4 address format': (test) ->
 37    test.equal(ipaddr.IPv4.isIPv4('192.168.007.0xa'), true)
 38    test.equal(ipaddr.IPv4.isIPv4('1024.0.0.1'),      true)
 39    test.equal(ipaddr.IPv4.isIPv4('8.0xa.wtf.6'),     false)
 40    test.done()
 41
 42  'validates IPv4 addresses': (test) ->
 43    test.equal(ipaddr.IPv4.isValid('192.168.007.0xa'), true)
 44    test.equal(ipaddr.IPv4.isValid('1024.0.0.1'),      false)
 45    test.equal(ipaddr.IPv4.isValid('8.0xa.wtf.6'),     false)
 46    test.done()
 47
 48  'parses IPv4 in several weird formats': (test) ->
 49    test.deepEqual(ipaddr.IPv4.parse('192.168.1.1').octets,  [192, 168, 1, 1])
 50    test.deepEqual(ipaddr.IPv4.parse('0xc0.168.1.1').octets, [192, 168, 1, 1])
 51    test.deepEqual(ipaddr.IPv4.parse('192.0250.1.1').octets, [192, 168, 1, 1])
 52    test.deepEqual(ipaddr.IPv4.parse('0xc0a80101').octets,   [192, 168, 1, 1])
 53    test.deepEqual(ipaddr.IPv4.parse('030052000401').octets, [192, 168, 1, 1])
 54    test.deepEqual(ipaddr.IPv4.parse('3232235777').octets,   [192, 168, 1, 1])
 55    test.done()
 56
 57  'barfs at invalid IPv4': (test) ->
 58    test.throws ->
 59      ipaddr.IPv4.parse('10.0.0.wtf')
 60    test.done()
 61
 62  'matches IPv4 CIDR correctly': (test) ->
 63    addr = new ipaddr.IPv4([10, 5, 0, 1])
 64    test.equal(addr.match(ipaddr.IPv4.parse('0.0.0.0'), 0),   true)
 65    test.equal(addr.match(ipaddr.IPv4.parse('11.0.0.0'), 8),  false)
 66    test.equal(addr.match(ipaddr.IPv4.parse('10.0.0.0'), 8),  true)
 67    test.equal(addr.match(ipaddr.IPv4.parse('10.0.0.1'), 8),  true)
 68    test.equal(addr.match(ipaddr.IPv4.parse('10.0.0.10'), 8), true)
 69    test.equal(addr.match(ipaddr.IPv4.parse('10.5.5.0'), 16), true)
 70    test.equal(addr.match(ipaddr.IPv4.parse('10.4.5.0'), 16), false)
 71    test.equal(addr.match(ipaddr.IPv4.parse('10.4.5.0'), 15), true)
 72    test.equal(addr.match(ipaddr.IPv4.parse('10.5.0.2'), 32), false)
 73    test.equal(addr.match(addr, 32), true)
 74    test.done()
 75
 76  'parses IPv4 CIDR correctly': (test) ->
 77    addr = new ipaddr.IPv4([10, 5, 0, 1])
 78    test.equal(addr.match(ipaddr.IPv4.parseCIDR('0.0.0.0/0')),   true)
 79    test.equal(addr.match(ipaddr.IPv4.parseCIDR('11.0.0.0/8')),  false)
 80    test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.0.0.0/8')),  true)
 81    test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.0.0.1/8')),  true)
 82    test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.0.0.10/8')), true)
 83    test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.5.5.0/16')), true)
 84    test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.4.5.0/16')), false)
 85    test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.4.5.0/15')), true)
 86    test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.5.0.2/32')), false)
 87    test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.5.0.1/32')), true)
 88    test.throws ->
 89      ipaddr.IPv4.parseCIDR('10.5.0.1')
 90    test.throws ->
 91      ipaddr.IPv4.parseCIDR('0.0.0.0/-1')
 92    test.throws ->
 93      ipaddr.IPv4.parseCIDR('0.0.0.0/33')
 94    test.done()
 95
 96  'detects reserved IPv4 networks': (test) ->
 97    test.equal(ipaddr.IPv4.parse('0.0.0.0').range(),         'unspecified')
 98    test.equal(ipaddr.IPv4.parse('0.1.0.0').range(),         'unspecified')
 99    test.equal(ipaddr.IPv4.parse('10.1.0.1').range(),        'private')
100    test.equal(ipaddr.IPv4.parse('192.168.2.1').range(),     'private')
101    test.equal(ipaddr.IPv4.parse('224.100.0.1').range(),     'multicast')
102    test.equal(ipaddr.IPv4.parse('169.254.15.0').range(),    'linkLocal')
103    test.equal(ipaddr.IPv4.parse('127.1.1.1').range(),       'loopback')
104    test.equal(ipaddr.IPv4.parse('255.255.255.255').range(), 'broadcast')
105    test.equal(ipaddr.IPv4.parse('240.1.2.3').range(),       'reserved')
106    test.equal(ipaddr.IPv4.parse('8.8.8.8').range(),         'unicast')
107    test.done()
108
109  'can construct IPv6 from parts': (test) ->
110    test.doesNotThrow ->
111      new ipaddr.IPv6([0x2001, 0xdb8, 0xf53a, 0, 0, 0, 0, 1])
112    test.done()
113
114  'refuses to construct invalid IPv6': (test) ->
115    test.throws ->
116      new ipaddr.IPv6([0xfffff, 0, 0, 0, 0, 0, 0, 1])
117    test.throws ->
118      new ipaddr.IPv6([0xfffff, 0, 0, 0, 0, 0, 1])
119    test.done()
120
121  'converts IPv6 to string correctly': (test) ->
122    addr = new ipaddr.IPv6([0x2001, 0xdb8, 0xf53a, 0, 0, 0, 0, 1])
123    test.equal(addr.toNormalizedString(), '2001:db8:f53a:0:0:0:0:1')
124    test.equal(addr.toString(), '2001:db8:f53a::1')
125    test.equal(new ipaddr.IPv6([0, 0, 0, 0, 0, 0, 0, 1]).toString(), '::1')
126    test.equal(new ipaddr.IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]).toString(), '2001:db8::')
127    test.done()
128
129  'returns correct kind for IPv6': (test) ->
130    addr = new ipaddr.IPv6([0x2001, 0xdb8, 0xf53a, 0, 0, 0, 0, 1])
131    test.equal(addr.kind(), 'ipv6')
132    test.done()
133
134  'allows to access IPv6 address parts': (test) ->
135    addr = new ipaddr.IPv6([0x2001, 0xdb8, 0xf53a, 0, 0, 42, 0, 1])
136    test.equal(addr.parts[5], 42)
137    test.done()
138
139  'checks IPv6 address format': (test) ->
140    test.equal(ipaddr.IPv6.isIPv6('2001:db8:F53A::1'),     true)
141    test.equal(ipaddr.IPv6.isIPv6('200001::1'),            true)
142    test.equal(ipaddr.IPv6.isIPv6('::ffff:192.168.1.1'),   true)
143    test.equal(ipaddr.IPv6.isIPv6('::ffff:300.168.1.1'),   true)
144    test.equal(ipaddr.IPv6.isIPv6('::ffff:300.168.1.1:0'), false)
145    test.equal(ipaddr.IPv6.isIPv6('fe80::wtf'),            false)
146    test.done()
147
148  'validates IPv6 addresses': (test) ->
149    test.equal(ipaddr.IPv6.isValid('2001:db8:F53A::1'),     true)
150    test.equal(ipaddr.IPv6.isValid('200001::1'),            false)
151    test.equal(ipaddr.IPv6.isValid('::ffff:192.168.1.1'),   true)
152    test.equal(ipaddr.IPv6.isValid('::ffff:300.168.1.1'),   false)
153    test.equal(ipaddr.IPv6.isValid('::ffff:300.168.1.1:0'), false)
154    test.equal(ipaddr.IPv6.isValid('2001:db8::F53A::1'),    false)
155    test.equal(ipaddr.IPv6.isValid('fe80::wtf'),            false)
156    test.equal(ipaddr.IPv6.isValid('2002::2:'),             false)
157    test.equal(ipaddr.IPv6.isValid(undefined),              false)
158    test.done()
159
160  'parses IPv6 in different formats': (test) ->
161    test.deepEqual(ipaddr.IPv6.parse('2001:db8:F53A:0:0:0:0:1').parts, [0x2001, 0xdb8, 0xf53a, 0, 0, 0, 0, 1])
162    test.deepEqual(ipaddr.IPv6.parse('fe80::10').parts, [0xfe80, 0, 0, 0, 0, 0, 0, 0x10])
163    test.deepEqual(ipaddr.IPv6.parse('2001:db8:F53A::').parts, [0x2001, 0xdb8, 0xf53a, 0, 0, 0, 0, 0])
164    test.deepEqual(ipaddr.IPv6.parse('::1').parts, [0, 0, 0, 0, 0, 0, 0, 1])
165    test.deepEqual(ipaddr.IPv6.parse('::').parts, [0, 0, 0, 0, 0, 0, 0, 0])
166    test.done()
167
168  'barfs at invalid IPv6': (test) ->
169    test.throws ->
170      ipaddr.IPv6.parse('fe80::0::1')
171    test.done()
172
173  'matches IPv6 CIDR correctly': (test) ->
174    addr = ipaddr.IPv6.parse('2001:db8:f53a::1')
175    test.equal(addr.match(ipaddr.IPv6.parse('::'), 0),                  true)
176    test.equal(addr.match(ipaddr.IPv6.parse('2001:db8:f53a::1:1'), 64), true)
177    test.equal(addr.match(ipaddr.IPv6.parse('2001:db8:f53b::1:1'), 48), false)
178    test.equal(addr.match(ipaddr.IPv6.parse('2001:db8:f531::1:1'), 44), true)
179    test.equal(addr.match(ipaddr.IPv6.parse('2001:db8:f500::1'), 40),   true)
180    test.equal(addr.match(ipaddr.IPv6.parse('2001:db9:f500::1'), 40),   false)
181    test.equal(addr.match(addr, 128), true)
182    test.done()
183
184  'parses IPv6 CIDR correctly': (test) ->
185    addr = ipaddr.IPv6.parse('2001:db8:f53a::1')
186    test.equal(addr.match(ipaddr.IPv6.parseCIDR('::/0')),                  true)
187    test.equal(addr.match(ipaddr.IPv6.parseCIDR('2001:db8:f53a::1:1/64')), true)
188    test.equal(addr.match(ipaddr.IPv6.parseCIDR('2001:db8:f53b::1:1/48')), false)
189    test.equal(addr.match(ipaddr.IPv6.parseCIDR('2001:db8:f531::1:1/44')), true)
190    test.equal(addr.match(ipaddr.IPv6.parseCIDR('2001:db8:f500::1/40')),   true)
191    test.equal(addr.match(ipaddr.IPv6.parseCIDR('2001:db9:f500::1/40')),   false)
192    test.equal(addr.match(ipaddr.IPv6.parseCIDR('2001:db8:f53a::1/128')),  true)
193    test.throws ->
194      ipaddr.IPv6.parseCIDR('2001:db8:f53a::1')
195    test.throws ->
196      ipaddr.IPv6.parseCIDR('2001:db8:f53a::1/-1')
197    test.throws ->
198      ipaddr.IPv6.parseCIDR('2001:db8:f53a::1/129')
199    test.done()
200
201  'converts between IPv4-mapped IPv6 addresses and IPv4 addresses': (test) ->
202    addr = ipaddr.IPv4.parse('77.88.21.11')
203    mapped = addr.toIPv4MappedAddress()
204    test.deepEqual(mapped.parts, [0, 0, 0, 0, 0, 0xffff, 0x4d58, 0x150b])
205    test.deepEqual(mapped.toIPv4Address().octets, addr.octets)
206    test.done()
207
208  'refuses to convert non-IPv4-mapped IPv6 address to IPv4 address': (test) ->
209    test.throws ->
210      ipaddr.IPv6.parse('2001:db8::1').toIPv4Address()
211    test.done()
212
213  'detects reserved IPv6 networks': (test) ->
214    test.equal(ipaddr.IPv6.parse('::').range(),                        'unspecified')
215    test.equal(ipaddr.IPv6.parse('fe80::1234:5678:abcd:0123').range(), 'linkLocal')
216    test.equal(ipaddr.IPv6.parse('ff00::1234').range(),                'multicast')
217    test.equal(ipaddr.IPv6.parse('::1').range(),                       'loopback')
218    test.equal(ipaddr.IPv6.parse('fc00::').range(),                    'uniqueLocal')
219    test.equal(ipaddr.IPv6.parse('::ffff:192.168.1.10').range(),       'ipv4Mapped')
220    test.equal(ipaddr.IPv6.parse('::ffff:0:192.168.1.10').range(),     'rfc6145')
221    test.equal(ipaddr.IPv6.parse('64:ff9b::1234').range(),             'rfc6052')
222    test.equal(ipaddr.IPv6.parse('2002:1f63:45e8::1').range(),         '6to4')
223    test.equal(ipaddr.IPv6.parse('2001::4242').range(),                'teredo')
224    test.equal(ipaddr.IPv6.parse('2001:db8::3210').range(),            'reserved')
225    test.equal(ipaddr.IPv6.parse('2001:470:8:66::1').range(),          'unicast')
226    test.done()
227
228  'is able to determine IP address type': (test) ->
229    test.equal(ipaddr.parse('8.8.8.8').kind(), 'ipv4')
230    test.equal(ipaddr.parse('2001:db8:3312::1').kind(), 'ipv6')
231    test.done()
232
233  'throws an error if tried to parse an invalid address': (test) ->
234    test.throws ->
235      ipaddr.parse('::some.nonsense')
236    test.done()
237
238  'correctly processes IPv4-mapped addresses': (test) ->
239    test.equal(ipaddr.process('8.8.8.8').kind(), 'ipv4')
240    test.equal(ipaddr.process('2001:db8:3312::1').kind(), 'ipv6')
241    test.equal(ipaddr.process('::ffff:192.168.1.1').kind(), 'ipv4')
242    test.done()
243
244  'correctly converts IPv6 and IPv4 addresses to byte arrays': (test) ->
245    test.deepEqual(ipaddr.parse('1.2.3.4').toByteArray(),
246          [0x1, 0x2, 0x3, 0x4]);
247    # Fuck yeah. The first byte of Google's IPv6 address is 42. 42!
248    test.deepEqual(ipaddr.parse('2a00:1450:8007::68').toByteArray(),
249          [42, 0x00, 0x14, 0x50, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68 ])
250    test.done()
251
252  'correctly parses 1 as an IPv4 address': (test) ->
253    test.equal(ipaddr.IPv6.isValid('1'), false)
254    test.equal(ipaddr.IPv4.isValid('1'), true)
255    test.deepEqual(new ipaddr.IPv4([0, 0, 0, 1]), ipaddr.parse('1'))
256    test.done()
257
258  'correctly detects IPv4 and IPv6 CIDR addresses': (test) ->
259    test.deepEqual([ipaddr.IPv6.parse('fc00::'), 64],
260                   ipaddr.parseCIDR('fc00::/64'))
261    test.deepEqual([ipaddr.IPv4.parse('1.2.3.4'), 5],
262                   ipaddr.parseCIDR('1.2.3.4/5'))
263    test.done()
264
265  'does not consider a very large or very small number a valid IP address': (test) ->
266    test.equal(ipaddr.isValid('4999999999'), false)
267    test.equal(ipaddr.isValid('-1'), false)
268    test.done()
269
270  'does not hang on ::8:8:8:8:8:8:8:8:8': (test) ->
271    test.equal(ipaddr.IPv6.isValid('::8:8:8:8:8:8:8:8:8'), false)
272    test.done()
273
274  'subnetMatch does not fail on empty range': (test) ->
275    ipaddr.subnetMatch(new ipaddr.IPv4([1,2,3,4]), {}, false)
276    ipaddr.subnetMatch(new ipaddr.IPv4([1,2,3,4]), {subnet: []}, false)
277    test.done()
278
279  'subnetMatch returns default subnet on empty range': (test) ->
280    test.equal(ipaddr.subnetMatch(new ipaddr.IPv4([1,2,3,4]), {}, false), false)
281    test.equal(ipaddr.subnetMatch(new ipaddr.IPv4([1,2,3,4]), {subnet: []}, false), false)
282    test.done()