160 lines
3.1 KiB
Plaintext
160 lines
3.1 KiB
Plaintext
=IPRange Tests=
|
|
|
|
Copyright (c) 2008-2012, David P. D. Moss. All rights reserved.
|
|
|
|
{{{
|
|
|
|
>>> from netaddr import *
|
|
|
|
}}}
|
|
|
|
Constructor tests.
|
|
|
|
{{{
|
|
|
|
>>> iprange = IPRange('192.0.2.1', '192.0.2.254')
|
|
|
|
>>> iprange
|
|
IPRange('192.0.2.1', '192.0.2.254')
|
|
|
|
>>> '%s' % iprange
|
|
'192.0.2.1-192.0.2.254'
|
|
|
|
>>> IPRange('::ffff:192.0.2.1', '::ffff:192.0.2.254')
|
|
IPRange('::ffff:192.0.2.1', '::ffff:192.0.2.254')
|
|
|
|
>>> IPRange('192.0.2.1', '192.0.2.1')
|
|
IPRange('192.0.2.1', '192.0.2.1')
|
|
|
|
>>> IPRange('208.049.164.000', '208.050.066.255', flags=ZEROFILL)
|
|
IPRange('208.49.164.0', '208.50.66.255')
|
|
|
|
}}}
|
|
|
|
Bad constructor tests.
|
|
|
|
{{{
|
|
|
|
>>> IPRange('192.0.2.2', '192.0.2.1')
|
|
Traceback (most recent call last):
|
|
...
|
|
AddrFormatError: lower bound IP greater than upper bound!
|
|
|
|
>>> IPRange('::', '0.0.0.1')
|
|
Traceback (most recent call last):
|
|
...
|
|
AddrFormatError: base address '0.0.0.1' is not IPv6
|
|
|
|
>>> IPRange('0.0.0.0', '::1')
|
|
Traceback (most recent call last):
|
|
...
|
|
AddrFormatError: base address '::1' is not IPv4
|
|
|
|
}}}
|
|
|
|
Indexing and slicing tests.
|
|
|
|
{{{
|
|
|
|
>>> iprange = IPRange('192.0.2.1', '192.0.2.254')
|
|
|
|
>>> len(iprange)
|
|
254
|
|
|
|
>>> iprange.first == 3221225985
|
|
True
|
|
|
|
>>> iprange.last == 3221226238
|
|
True
|
|
|
|
>>> iprange[0]
|
|
IPAddress('192.0.2.1')
|
|
|
|
>>> iprange[-1]
|
|
IPAddress('192.0.2.254')
|
|
|
|
>>> iprange[512]
|
|
Traceback (most recent call last):
|
|
...
|
|
IndexError: index out range for address range size!
|
|
|
|
>>> list(iprange[0:3])
|
|
[IPAddress('192.0.2.1'), IPAddress('192.0.2.2'), IPAddress('192.0.2.3')]
|
|
|
|
>>> list(iprange[0:10:2])
|
|
[IPAddress('192.0.2.1'), IPAddress('192.0.2.3'), IPAddress('192.0.2.5'), IPAddress('192.0.2.7'), IPAddress('192.0.2.9')]
|
|
|
|
>>> list(iprange[0:1024:512])
|
|
[IPAddress('192.0.2.1')]
|
|
|
|
>>> IPRange('::ffff:192.0.2.1', '::ffff:192.0.2.254')[0:10:2]
|
|
Traceback (most recent call last):
|
|
...
|
|
TypeError: IPv6 slices are not supported!
|
|
|
|
}}}
|
|
|
|
Membership tests.
|
|
|
|
{{{
|
|
|
|
>>> IPRange('192.0.2.5', '192.0.2.10') in IPRange('192.0.2.1', '192.0.2.254')
|
|
True
|
|
|
|
>>> IPRange('fe80::1', 'fe80::fffe') in IPRange('fe80::', 'fe80::ffff:ffff:ffff:ffff')
|
|
True
|
|
|
|
>>> IPRange('192.0.2.5', '192.0.2.10') in IPRange('::', '::255.255.255.255')
|
|
False
|
|
|
|
}}}
|
|
|
|
Sorting tests.
|
|
|
|
{{{
|
|
|
|
>>> ipranges = (IPRange('192.0.2.40', '192.0.2.50'), IPRange('192.0.2.20', '192.0.2.30'), IPRange('192.0.2.1', '192.0.2.254'),)
|
|
|
|
>>> sorted(ipranges)
|
|
[IPRange('192.0.2.1', '192.0.2.254'), IPRange('192.0.2.20', '192.0.2.30'), IPRange('192.0.2.40', '192.0.2.50')]
|
|
|
|
>>> ipranges = list(ipranges)
|
|
|
|
>>> ipranges.append(IPRange('192.0.2.45', '192.0.2.49'))
|
|
|
|
>>> sorted(ipranges)
|
|
[IPRange('192.0.2.1', '192.0.2.254'), IPRange('192.0.2.20', '192.0.2.30'), IPRange('192.0.2.40', '192.0.2.50'), IPRange('192.0.2.45', '192.0.2.49')]
|
|
|
|
}}}
|
|
|
|
CIDR interoperability tests.
|
|
|
|
{{{
|
|
|
|
>>> IPRange('192.0.2.5', '192.0.2.10').cidrs()
|
|
[IPNetwork('192.0.2.5/32'), IPNetwork('192.0.2.6/31'), IPNetwork('192.0.2.8/31'), IPNetwork('192.0.2.10/32')]
|
|
|
|
>>> IPRange('fe80::', 'fe80::ffff:ffff:ffff:ffff').cidrs()
|
|
[IPNetwork('fe80::/64')]
|
|
|
|
}}}
|
|
|
|
Various additional tests.
|
|
|
|
{{{
|
|
|
|
>>> iprange.info
|
|
{'IPv4': [{'date': '1993-05',
|
|
'designation': 'Administered by ARIN',
|
|
'prefix': '192/8',
|
|
'status': 'Legacy',
|
|
'whois': 'whois.arin.net'}]}
|
|
|
|
>>> iprange.is_private()
|
|
True
|
|
|
|
>>> iprange.version
|
|
4
|
|
|
|
}}}
|