Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(17)

Delta Between Two Patch Sets: ipaddr_test.py

Issue 67107: collapse_address_list is too slow SVN Base: http://ipaddr-py.googlecode.com/svn/trunk/
Left Patch Set: uncommented new code Created 6 months, 1 week ago
Right Patch Set: Fixes for comments on Patch Set 6 Created 3 months, 2 weeks ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
LEFTRIGHT
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # 2 #
3 # Copyright 2007 Google Inc. 3 # Copyright 2007 Google Inc.
4 # Licensed to PSF under a Contributor Agreement. 4 # Licensed to PSF under a Contributor Agreement.
5 # 5 #
6 # Licensed under the Apache License, Version 2.0 (the "License"); 6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License. 7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at 8 # You may obtain a copy of the License at
9 # 9 #
10 # http://www.apache.org/licenses/LICENSE-2.0 10 # http://www.apache.org/licenses/LICENSE-2.0
11 # 11 #
12 # Unless required by applicable law or agreed to in writing, software 12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS, 13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and 15 # See the License for the specific language governing permissions and
16 # limitations under the License. 16 # limitations under the License.
17 17
18 """Unittest for ipaddr module.""" 18 """Unittest for ipaddr module."""
19 19
20 20
21 import unittest 21 import unittest
22 22 import time
23 import ipaddr 23 import ipaddr
24 24
25 # Compatibility function to cast str to bytes objects 25 # Compatibility function to cast str to bytes objects
26 if ipaddr._compat_has_real_bytes: 26 if ipaddr._compat_has_real_bytes:
27 _cb = lambda bytestr: bytes(bytestr, 'charmap') 27 _cb = lambda bytestr: bytes(bytestr, 'charmap')
28 else: 28 else:
29 _cb = str 29 _cb = str
30 30
31 class IpaddrUnitTest(unittest.TestCase): 31 class IpaddrUnitTest(unittest.TestCase):
32 32
33 def setUp(self): 33 def setUp(self):
34 self.ipv4 = ipaddr.IPv4('1.2.3.4/24') 34 self.ipv4 = ipaddr.IPv4('1.2.3.4/24')
35 self.ipv4_hostmask = ipaddr.IPv4('10.0.0.1/0.255.255.255') 35 self.ipv4_hostmask = ipaddr.IPv4('10.0.0.1/0.255.255.255')
36 self.ipv6 = ipaddr.IPv6('2001:658:22a:cafe:200:0:0:1/64') 36 self.ipv6 = ipaddr.IPv6('2001:658:22a:cafe:200:0:0:1/64')
37 37
38 def tearDown(self):
39 del(self.ipv4)
40 del(self.ipv4_hostmask)
41 del(self.ipv6)
42 del(self)
43
38 def testRepr(self): 44 def testRepr(self):
39 self.assertEqual("IPv4('1.2.3.4/32')", repr(ipaddr.IPv4('1.2.3.4'))) 45 self.assertEqual("IPv4Network('1.2.3.4/32')",
40 self.assertEqual("IPv6('::1/128')", repr(ipaddr.IPv6('::1'))) 46 repr(ipaddr.IPv4('1.2.3.4')))
47 self.assertEqual("IPv6Network('::1/128')", repr(ipaddr.IPv6('::1')))
41 48
42 def testInvalidStrings(self): 49 def testInvalidStrings(self):
43 self.assertRaises(ValueError, ipaddr.IP, '') 50 self.assertRaises(ValueError, ipaddr.IP, '')
44 self.assertRaises(ValueError, ipaddr.IP, 'www.google.com') 51 self.assertRaises(ValueError, ipaddr.IP, 'www.google.com')
45 self.assertRaises(ValueError, ipaddr.IP, '1.2.3') 52 self.assertRaises(ValueError, ipaddr.IP, '1.2.3')
46 self.assertRaises(ValueError, ipaddr.IP, '1.2.3.4.5') 53 self.assertRaises(ValueError, ipaddr.IP, '1.2.3.4.5')
47 self.assertRaises(ValueError, ipaddr.IP, '301.2.2.2') 54 self.assertRaises(ValueError, ipaddr.IP, '301.2.2.2')
48 self.assertRaises(ValueError, ipaddr.IP, '1:2:3:4:5:6:7') 55 self.assertRaises(ValueError, ipaddr.IP, '1:2:3:4:5:6:7')
49 self.assertRaises(ValueError, ipaddr.IP, '1:2:3:4:5:6:7:') 56 self.assertRaises(ValueError, ipaddr.IP, '1:2:3:4:5:6:7:')
50 self.assertRaises(ValueError, ipaddr.IP, ':2:3:4:5:6:7:8') 57 self.assertRaises(ValueError, ipaddr.IP, ':2:3:4:5:6:7:8')
(...skipping 13 matching lines...) Expand all
64 'google.com') 71 'google.com')
65 self.assertRaises(ipaddr.IPv4IpValidationError, ipaddr.IPv4, 72 self.assertRaises(ipaddr.IPv4IpValidationError, ipaddr.IPv4,
66 '::1.2.3.4') 73 '::1.2.3.4')
67 self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6, '') 74 self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6, '')
68 self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6, 75 self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6,
69 'google.com') 76 'google.com')
70 self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6, 77 self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6,
71 '1.2.3.4') 78 '1.2.3.4')
72 79
73 def testGetNetwork(self): 80 def testGetNetwork(self):
74 self.assertEqual(self.ipv4.network, 16909056) 81 self.assertEqual(int(self.ipv4.network), 16909056)
75 self.assertEqual(self.ipv4.network_ext, '1.2.3.0') 82 self.assertEqual(str(self.ipv4.network), '1.2.3.0')
76 self.assertEqual(self.ipv4_hostmask.network_ext, '10.0.0.0') 83 self.assertEqual(str(self.ipv4_hostmask.network), '10.0.0.0')
77 84
78 self.assertEqual(self.ipv6.network, 85 self.assertEqual(int(self.ipv6.network),
79 42540616829182469433403647294022090752) 86 42540616829182469433403647294022090752)
80 self.assertEqual(self.ipv6.network_ext, 87 self.assertEqual(str(self.ipv6.network),
81 '2001:658:22a:cafe::') 88 '2001:658:22a:cafe::')
82 self.assertEqual(self.ipv6.hostmask_ext, 89 self.assertEqual(str(self.ipv6.hostmask),
83 '::ffff:ffff:ffff:ffff') 90 '::ffff:ffff:ffff:ffff')
84 91
85 def testIpFromInt(self): 92 def testIpFromInt(self):
86 self.assertEqual(self.ipv4.ip, ipaddr.IPv4(16909060).ip) 93 self.assertEqual(self.ipv4.ip, ipaddr.IPv4(16909060).ip)
87 self.assertRaises(ipaddr.IPv4IpValidationError, 94 self.assertRaises(ipaddr.IPv4IpValidationError,
88 ipaddr.IPv4, 2**32) 95 ipaddr.IPv4, 2**32)
89 self.assertRaises(ipaddr.IPv4IpValidationError, 96 self.assertRaises(ipaddr.IPv4IpValidationError,
90 ipaddr.IPv4, -1) 97 ipaddr.IPv4, -1)
98
99 ipv4 = ipaddr.IP('1.2.3.4')
100 ipv6 = ipaddr.IP('2001:658:22a:cafe:200:0:0:1')
101 self.assertEqual(ipv4, ipaddr.IP(int(ipv4)))
102 self.assertEqual(ipv6, ipaddr.IP(int(ipv6)))
91 103
92 self.assertEqual(self.ipv6.ip, 104 self.assertEqual(self.ipv6.ip,
93 ipaddr.IPv6(42540616829182469433547762482097946625).ip) 105 ipaddr.IPv6(42540616829182469433547762482097946625).ip)
94 self.assertRaises(ipaddr.IPv6IpValidationError, 106 self.assertRaises(ipaddr.IPv6IpValidationError,
95 ipaddr.IPv6, 2**128) 107 ipaddr.IPv6, 2**128)
96 self.assertRaises(ipaddr.IPv6IpValidationError, 108 self.assertRaises(ipaddr.IPv6IpValidationError,
97 ipaddr.IPv6, -1) 109 ipaddr.IPv6, -1)
98 110
99 self.assertEqual(ipaddr.IP(self.ipv4.ip).version, 4) 111 self.assertEqual(ipaddr.IP(self.ipv4.ip).version, 4)
100 self.assertEqual(ipaddr.IP(self.ipv6.ip).version, 6) 112 self.assertEqual(ipaddr.IP(self.ipv6.ip).version, 6)
(...skipping 12 matching lines...) Expand all
113 ip(_cb('\x20\x01\x06\x58\x02\x2a\xca\xfe' 125 ip(_cb('\x20\x01\x06\x58\x02\x2a\xca\xfe'
114 '\x02\x00\x00\x00\x00\x00\x00\x01')).ip) 126 '\x02\x00\x00\x00\x00\x00\x00\x01')).ip)
115 self.assertEqual(ip('ffff:2:3:4:ffff::'), 127 self.assertEqual(ip('ffff:2:3:4:ffff::'),
116 ip(_cb('\xff\xff\x00\x02\x00\x03\x00\x04' + 128 ip(_cb('\xff\xff\x00\x02\x00\x03\x00\x04' +
117 '\xff\xff' + '\x00' * 6))) 129 '\xff\xff' + '\x00' * 6)))
118 self.assertEqual(ip('::'), 130 self.assertEqual(ip('::'),
119 ip(_cb('\x00' * 16))) 131 ip(_cb('\x00' * 16)))
120 self.assertRaises(ValueError, ip, _cb('\x00' * 15)) 132 self.assertRaises(ValueError, ip, _cb('\x00' * 15))
121 self.assertRaises(ValueError, ip, _cb('\x00' * 17)) 133 self.assertRaises(ValueError, ip, _cb('\x00' * 17))
122 134
123 def testIpFromRange(self):
124 ip = ipaddr.IP
125 self.assertEqual(ip('1.1.1.0/24'), ip('1.1.1.0-1.1.1.255'))
126 self.assertEqual(ip('::/126'), ip('::-::3'))
127 self.assertRaises(ipaddr.IPRangeError, ip, '1.1.1.0-1.1.1.4')
128 self.assertRaises(ipaddr.IPRangeError, ip, '::-::4')
129
130 def testGetIp(self): 135 def testGetIp(self):
131 self.assertEqual(self.ipv4.ip, 16909060) 136 self.assertEqual(int(self.ipv4.ip), 16909060)
132 self.assertEqual(self.ipv4.ip_ext, '1.2.3.4') 137 self.assertEqual(str(self.ipv4.ip), '1.2.3.4')
133 self.assertEqual(self.ipv4.ip_ext_full, '1.2.3.4') 138 self.assertEqual(str(self.ipv4_hostmask.ip), '10.0.0.1')
134 self.assertEqual(self.ipv4_hostmask.ip_ext, '10.0.0.1') 139
135 140 self.assertEqual(int(self.ipv6.ip),
136 self.assertEqual(self.ipv6.ip, 42540616829182469433547762482097946625) 141 42540616829182469433547762482097946625)
137 self.assertEqual(self.ipv6.ip_ext, 142 self.assertEqual(str(self.ipv6.ip),
138 '2001:658:22a:cafe:200::1') 143 '2001:658:22a:cafe:200::1')
139 self.assertEqual(self.ipv6.ip_ext_full,
140 '2001:0658:022a:cafe:0200:0000:0000:0001')
141 144
142 def testGetNetmask(self): 145 def testGetNetmask(self):
143 self.assertEqual(self.ipv4.netmask, 4294967040L) 146 self.assertEqual(int(self.ipv4.netmask), 4294967040L)
144 self.assertEqual(self.ipv4.netmask_ext, '255.255.255.0') 147 self.assertEqual(str(self.ipv4.netmask), '255.255.255.0')
145 self.assertEqual(self.ipv4_hostmask.netmask_ext, '255.0.0.0') 148 self.assertEqual(str(self.ipv4_hostmask.netmask), '255.0.0.0')
146 self.assertEqual(self.ipv6.netmask, 149 self.assertEqual(int(self.ipv6.netmask),
147 340282366920938463444927863358058659840) 150 340282366920938463444927863358058659840)
148 self.assertEqual(self.ipv6.netmask_ext, 64) 151 self.assertEqual(self.ipv6.prefixlen, 64)
149 152
150 def testZeroNetmask(self): 153 def testZeroNetmask(self):
151 ipv4_zero_netmask = ipaddr.IPv4('1.2.3.4/0') 154 ipv4_zero_netmask = ipaddr.IPv4('1.2.3.4/0')
152 self.assertEqual(ipv4_zero_netmask.netmask, 0) 155 self.assertEqual(int(ipv4_zero_netmask.netmask), 0)
153 self.assert_(ipv4_zero_netmask._is_valid_netmask(str(0))) 156 self.assert_(ipv4_zero_netmask._is_valid_netmask(str(0)))
154 157
155 ipv6_zero_netmask = ipaddr.IPv6('::1/0') 158 ipv6_zero_netmask = ipaddr.IPv6('::1/0')
156 self.assertEqual(ipv6_zero_netmask.netmask, 0) 159 self.assertEqual(int(ipv6_zero_netmask.netmask), 0)
157 self.assert_(ipv6_zero_netmask._is_valid_netmask(str(0))) 160 self.assert_(ipv6_zero_netmask._is_valid_netmask(str(0)))
158 161
159 def testGetBroadcast(self): 162 def testGetBroadcast(self):
160 self.assertEqual(self.ipv4.broadcast, 16909311L) 163 self.assertEqual(int(self.ipv4.broadcast), 16909311L)
161 self.assertEqual(self.ipv4.broadcast_ext, '1.2.3.255') 164 self.assertEqual(str(self.ipv4.broadcast), '1.2.3.255')
162 165
163 self.assertEqual(self.ipv6.broadcast, 166 self.assertEqual(int(self.ipv6.broadcast),
164 42540616829182469451850391367731642367) 167 42540616829182469451850391367731642367)
165 self.assertEqual(self.ipv6.broadcast_ext, 168 self.assertEqual(str(self.ipv6.broadcast),
166 '2001:658:22a:cafe:ffff:ffff:ffff:ffff') 169 '2001:658:22a:cafe:ffff:ffff:ffff:ffff')
167 170
168 def testGetPrefixlen(self): 171 def testGetPrefixlen(self):
169 self.assertEqual(self.ipv4.prefixlen, 24) 172 self.assertEqual(self.ipv4.prefixlen, 24)
170 173
171 self.assertEqual(self.ipv6.prefixlen, 64) 174 self.assertEqual(self.ipv6.prefixlen, 64)
172 175
173 def testGetSupernet(self): 176 def testGetSupernet(self):
174 self.assertEqual(self.ipv4.supernet().prefixlen, 23) 177 self.assertEqual(self.ipv4.supernet().prefixlen, 23)
175 self.assertEqual(self.ipv4.supernet().network_ext, '1.2.2.0') 178 self.assertEqual(str(self.ipv4.supernet().network), '1.2.2.0')
176 self.assertEqual(ipaddr.IPv4('0.0.0.0/0').supernet(), 179 self.assertEqual(ipaddr.IPv4('0.0.0.0/0').supernet(),
177 ipaddr.IPv4('0.0.0.0/0')) 180 ipaddr.IPv4('0.0.0.0/0'))
178 181
179 self.assertEqual(self.ipv6.supernet().prefixlen, 63) 182 self.assertEqual(self.ipv6.supernet().prefixlen, 63)
180 self.assertEqual(self.ipv6.supernet().network_ext, 183 self.assertEqual(str(self.ipv6.supernet().network),
181 '2001:658:22a:cafe::') 184 '2001:658:22a:cafe::')
182 self.assertEqual(ipaddr.IPv6('::0/0').supernet(), ipaddr.IPv6('::0/0')) 185 self.assertEqual(ipaddr.IPv6('::0/0').supernet(), ipaddr.IPv6('::0/0'))
183 186
184 def testGetSupernet3(self): 187 def testGetSupernet3(self):
185 self.assertEqual(self.ipv4.supernet(3).prefixlen, 21) 188 self.assertEqual(self.ipv4.supernet(3).prefixlen, 21)
186 self.assertEqual(self.ipv4.supernet(3).network_ext, '1.2.0.0') 189 self.assertEqual(str(self.ipv4.supernet(3).network), '1.2.0.0')
187 190
188 self.assertEqual(self.ipv6.supernet(3).prefixlen, 61) 191 self.assertEqual(self.ipv6.supernet(3).prefixlen, 61)
189 self.assertEqual(self.ipv6.supernet(3).network_ext, 192 self.assertEqual(str(self.ipv6.supernet(3).network),
190 '2001:658:22a:caf8::') 193 '2001:658:22a:caf8::')
191 194
192 def testGetSubnet(self): 195 def testGetSubnet(self):
193 self.assertEqual(self.ipv4.subnet()[0].prefixlen, 25) 196 self.assertEqual(self.ipv4.subnet()[0].prefixlen, 25)
194 self.assertEqual(self.ipv4.subnet()[0].network_ext, '1.2.3.0') 197 self.assertEqual(str(self.ipv4.subnet()[0].network), '1.2.3.0')
195 self.assertEqual(self.ipv4.subnet()[1].network_ext, '1.2.3.128') 198 self.assertEqual(str(self.ipv4.subnet()[1].network), '1.2.3.128')
196 199
197 self.assertEqual(self.ipv6.subnet()[0].prefixlen, 65) 200 self.assertEqual(self.ipv6.subnet()[0].prefixlen, 65)
198 201
199 def testGetSubnetForSingle32(self): 202 def testGetSubnetForSingle32(self):
200 ip = ipaddr.IPv4('1.2.3.4/32') 203 ip = ipaddr.IPv4('1.2.3.4/32')
201 subnets1 = [str(x) for x in ip.subnet()] 204 subnets1 = [str(x) for x in ip.subnet()]
202 subnets2 = [str(x) for x in ip.subnet(2)] 205 subnets2 = [str(x) for x in ip.subnet(2)]
203 self.assertEqual(subnets1, ['1.2.3.4/32']) 206 self.assertEqual(subnets1, ['1.2.3.4/32'])
204 self.assertEqual(subnets1, subnets2) 207 self.assertEqual(subnets1, subnets2)
205 208
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 self.assertEqual(self.ipv6.subnet()[0].numhosts, 9223372036854775808) 253 self.assertEqual(self.ipv6.subnet()[0].numhosts, 9223372036854775808)
251 self.assertEqual(self.ipv6.supernet().numhosts, 36893488147419103232) 254 self.assertEqual(self.ipv6.supernet().numhosts, 36893488147419103232)
252 255
253 def testContains(self): 256 def testContains(self):
254 self.assertTrue(ipaddr.IPv4('1.2.3.128/25') in self.ipv4) 257 self.assertTrue(ipaddr.IPv4('1.2.3.128/25') in self.ipv4)
255 self.assertFalse(ipaddr.IPv4('1.2.4.1/24') in self.ipv4) 258 self.assertFalse(ipaddr.IPv4('1.2.4.1/24') in self.ipv4)
256 self.assertFalse(self.ipv4 in self.ipv6) 259 self.assertFalse(self.ipv4 in self.ipv6)
257 self.assertFalse(self.ipv6 in self.ipv4) 260 self.assertFalse(self.ipv6 in self.ipv4)
258 self.assertTrue(self.ipv4 in self.ipv4) 261 self.assertTrue(self.ipv4 in self.ipv4)
259 self.assertTrue(self.ipv6 in self.ipv6) 262 self.assertTrue(self.ipv6 in self.ipv6)
263 # We can test addresses and string as well.
264 addr1str = '1.2.3.37'
265 addr1 = ipaddr.IPv4Address(addr1str)
266 self.assertTrue(addr1 in self.ipv4)
267 self.assertTrue(int(addr1) in self.ipv4)
268 self.assertTrue(addr1str in self.ipv4)
260 269
261 def testBadAddress(self): 270 def testBadAddress(self):
262 self.assertRaises(ipaddr.IPv4IpValidationError, ipaddr.IPv4, 'poop') 271 self.assertRaises(ipaddr.IPv4IpValidationError, ipaddr.IPv4, 'poop')
263 self.assertRaises(ipaddr.IPv4IpValidationError, 272 self.assertRaises(ipaddr.IPv4IpValidationError,
264 ipaddr.IPv4, '1.2.3.256') 273 ipaddr.IPv4, '1.2.3.256')
265 274
266 self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6, 'poopv6') 275 self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6, 'poopv6')
267 self.assertRaises(ipaddr.IPv4IpValidationError, 276 self.assertRaises(ipaddr.IPv4IpValidationError,
268 ipaddr.IPv4, '1.2.3.4/32/24') 277 ipaddr.IPv4, '1.2.3.4/32/24')
269 278
270 def testBadNetMask(self): 279 def testBadNetMask(self):
271 self.assertRaises(ipaddr.IPv4NetmaskValidationError, 280 self.assertRaises(ipaddr.IPv4NetmaskValidationError,
272 ipaddr.IPv4, '1.2.3.4/') 281 ipaddr.IPv4, '1.2.3.4/')
273 self.assertRaises(ipaddr.IPv4NetmaskValidationError, 282 self.assertRaises(ipaddr.IPv4NetmaskValidationError,
274 ipaddr.IPv4, '1.2.3.4/33') 283 ipaddr.IPv4, '1.2.3.4/33')
275 self.assertRaises(ipaddr.IPv4NetmaskValidationError, 284 self.assertRaises(ipaddr.IPv4NetmaskValidationError,
276 ipaddr.IPv4, '1.2.3.4/254.254.255.256') 285 ipaddr.IPv4, '1.2.3.4/254.254.255.256')
277 286
278 self.assertRaises(ipaddr.IPv6NetmaskValidationError, 287 self.assertRaises(ipaddr.IPv6NetmaskValidationError,
279 ipaddr.IPv6, '::1/') 288 ipaddr.IPv6, '::1/')
280 self.assertRaises(ipaddr.IPv6NetmaskValidationError, 289 self.assertRaises(ipaddr.IPv6NetmaskValidationError,
281 ipaddr.IPv6, '::1/129') 290 ipaddr.IPv6, '::1/129')
282 291
283 def testNth(self): 292 def testNth(self):
284 self.assertEqual(self.ipv4[5], '1.2.3.5') 293 self.assertEqual(str(self.ipv4[5]), '1.2.3.5')
285 self.assertRaises(IndexError, self.ipv4.__getitem__, 256) 294 self.assertRaises(IndexError, self.ipv4.__getitem__, 256)
286 295
287 self.assertEqual(self.ipv6[5], 296 self.assertEqual(str(self.ipv6[5]),
288 '2001:658:22a:cafe::5') 297 '2001:658:22a:cafe::5')
289 298
290 def testGetitem(self): 299 def testGetitem(self):
291 # http://code.google.com/p/ipaddr-py/issues/detail?id=15 300 # http://code.google.com/p/ipaddr-py/issues/detail?id=15
292 addr = ipaddr.IPv4('172.31.255.128/255.255.255.240') 301 addr = ipaddr.IPv4('172.31.255.128/255.255.255.240')
293 self.assertEqual(28, addr.prefixlen) 302 self.assertEqual(28, addr.prefixlen)
294 addr_list = list(addr) 303 addr_list = list(addr)
295 self.assertEqual('172.31.255.128', addr_list[0]) 304 self.assertEqual('172.31.255.128', str(addr_list[0]))
296 self.assertEqual('172.31.255.128', addr[0]) 305 self.assertEqual('172.31.255.128', str(addr[0]))
297 self.assertEqual('172.31.255.143', addr_list[-1]) 306 self.assertEqual('172.31.255.143', str(addr_list[-1]))
298 self.assertEqual('172.31.255.143', addr[-1]) 307 self.assertEqual('172.31.255.143', str(addr[-1]))
299 self.assertEqual(addr_list[-1], addr[-1]) 308 self.assertEqual(addr_list[-1], addr[-1])
300 309
301 def testEquals(self): 310 def testEquals(self):
302 self.assertTrue(self.ipv4 == ipaddr.IPv4('1.2.3.4/24')) 311 self.assertTrue(self.ipv4 == ipaddr.IPv4('1.2.3.4/24'))
303 self.assertFalse(self.ipv4 == ipaddr.IPv4('1.2.3.4/23')) 312 self.assertFalse(self.ipv4 == ipaddr.IPv4('1.2.3.4/23'))
304 self.assertFalse(self.ipv4 == ipaddr.IPv4('1.2.3.5/24')) 313 self.assertFalse(self.ipv4 == ipaddr.IPv4('1.2.3.5/24'))
305 self.assertFalse(self.ipv4 == ipaddr.IPv6('::1.2.3.4/24')) 314 self.assertFalse(self.ipv4 == ipaddr.IPv6('::1.2.3.4/24'))
306 self.assertFalse(self.ipv4 == '') 315 self.assertFalse(self.ipv4 == '')
307 self.assertFalse(self.ipv4 == []) 316 self.assertFalse(self.ipv4 == [])
308 self.assertFalse(self.ipv4 == 2) 317 self.assertFalse(self.ipv4 == 2)
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 '1.2.3.4/32') 352 '1.2.3.4/32')
344 353
345 def testSlash128Constructor(self): 354 def testSlash128Constructor(self):
346 self.assertEquals(str(ipaddr.IPv6('::1/128')), 355 self.assertEquals(str(ipaddr.IPv6('::1/128')),
347 '::1/128') 356 '::1/128')
348 357
349 def testSlash0Constructor(self): 358 def testSlash0Constructor(self):
350 self.assertEquals(str(ipaddr.IPv4('1.2.3.4/0.0.0.0')), '1.2.3.4/0') 359 self.assertEquals(str(ipaddr.IPv4('1.2.3.4/0.0.0.0')), '1.2.3.4/0')
351 360
352 def testCollapsing(self): 361 def testCollapsing(self):
362 # test only IP addresses including some duplicates
363 ip1 = ipaddr.IPv4('1.1.1.0', host=True)
364 ip2 = ipaddr.IPv4('1.1.1.1', host=True)
365 ip3 = ipaddr.IPv4('1.1.1.2', host=True)
366 ip4 = ipaddr.IPv4('1.1.1.3', host=True)
367 ip5 = ipaddr.IPv4('1.1.1.4', host=True)
368 ip6 = ipaddr.IPv4('1.1.1.0', host=True)
369 # check that addreses are subsumed properly.
370 collapsed = ipaddr.collapse_address_list([ip1, ip2, ip3, ip4, ip5, ip6])
371 self.assertEqual(collapsed, [ipaddr.IPv4('1.1.1.0/30'),
372 ipaddr.IPv4('1.1.1.4/32')])
373
374 # test a mix of IP addresses and networks including some duplicates
375 ip1 = ipaddr.IPv4('1.1.1.0', host=True)
376 ip2 = ipaddr.IPv4('1.1.1.1', host=True)
377 ip3 = ipaddr.IPv4('1.1.1.2', host=True)
378 ip4 = ipaddr.IPv4('1.1.1.3', host=True)
379 ip5 = ipaddr.IPv4('1.1.1.4/30')
380 ip6 = ipaddr.IPv4('1.1.1.4/30')
381 # check that addreses are subsumed properly.
382 collapsed = ipaddr.collapse_address_list([ip5, ip1, ip2, ip3, ip4, ip6])
383 self.assertEqual(collapsed, [ipaddr.IPv4('1.1.1.0/29')])
384
385 # test only IP networks
353 ip1 = ipaddr.IPv4('1.1.0.0/24') 386 ip1 = ipaddr.IPv4('1.1.0.0/24')
354 ip2 = ipaddr.IPv4('1.1.1.0/24') 387 ip2 = ipaddr.IPv4('1.1.1.0/24')
355 ip3 = ipaddr.IPv4('1.1.2.0/24') 388 ip3 = ipaddr.IPv4('1.1.2.0/24')
356 ip4 = ipaddr.IPv4('1.1.3.0/24') 389 ip4 = ipaddr.IPv4('1.1.3.0/24')
357 ip5 = ipaddr.IPv4('1.1.4.0/24') 390 ip5 = ipaddr.IPv4('1.1.4.0/24')
358 # stored in no particular order b/c we want CollapseAddr to call [].sort 391 # stored in no particular order b/c we want CollapseAddr to call [].sort
359 ip6 = ipaddr.IPv4('1.1.0.0/22') 392 ip6 = ipaddr.IPv4('1.1.0.0/22')
360 # check that addreses are subsumed properlly. 393 # check that addreses are subsumed properly.
361 collapsed = ipaddr.collapse_address_list([ip1, ip2, ip3, ip4, ip5, ip6]) 394 collapsed = ipaddr.collapse_address_list([ip1, ip2, ip3, ip4, ip5, ip6])
362 self.assertEqual(collapsed, [ipaddr.IPv4('1.1.0.0/22'), 395 self.assertEqual(collapsed, [ipaddr.IPv4('1.1.0.0/22'),
363 ipaddr.IPv4('1.1.4.0/24')]) 396 ipaddr.IPv4('1.1.4.0/24')])
364 # test that two addresses are supernet'ed properlly 397
398 # test that two addresses are supernet'ed properly
365 collapsed = ipaddr.collapse_address_list([ip1, ip2]) 399 collapsed = ipaddr.collapse_address_list([ip1, ip2])
366 self.assertEqual(collapsed, [ipaddr.IPv4('1.1.0.0/23')]) 400 self.assertEqual(collapsed, [ipaddr.IPv4('1.1.0.0/23')])
367 401
402 # test same IP networks
368 ip_same1 = ip_same2 = ipaddr.IPv4('1.1.1.1/32') 403 ip_same1 = ip_same2 = ipaddr.IPv4('1.1.1.1/32')
404 self.assertEqual(ipaddr.collapse_address_list([ip_same1, ip_same2]),
405 [ip_same1])
406
407 # test same IP addresses
408 ip_same1 = ip_same2 = ipaddr.IPv4('1.1.1.1', host=True)
369 self.assertEqual(ipaddr.collapse_address_list([ip_same1, ip_same2]), 409 self.assertEqual(ipaddr.collapse_address_list([ip_same1, ip_same2]),
370 [ip_same1]) 410 [ip_same1])
371 ip1 = ipaddr.IPv6('::2001:1/100') 411 ip1 = ipaddr.IPv6('::2001:1/100')
372 ip2 = ipaddr.IPv6('::2002:1/120') 412 ip2 = ipaddr.IPv6('::2002:1/120')
373 ip3 = ipaddr.IPv6('::2001:1/96') 413 ip3 = ipaddr.IPv6('::2001:1/96')
374 # test that ipv6 addresses are subsumed properly. 414 # test that ipv6 addresses are subsumed properly.
375 collapsed = ipaddr.collapse_address_list([ip1, ip2, ip3]) 415 collapsed = ipaddr.collapse_address_list([ip1, ip2, ip3])
376 self.assertEqual(collapsed, [ip3]) 416 self.assertEqual(collapsed, [ip3])
377 417
378 def testSummarizing(self): 418 def testSummarizing(self):
379 ip = ipaddr.IP 419 ip = ipaddr.IP
380 summarize = ipaddr.summarize_address_range 420 summarize = ipaddr.summarize_address_range
381 ip1 = ip('1.1.1.0') 421 ip1 = ip('1.1.1.0', host=True)
382 ip2 = ip('1.1.1.255') 422 ip2 = ip('1.1.1.255', host=True)
383 # test a /24 is sumamrized properly 423 # test a /24 is sumamrized properly
384 self.assertEqual(summarize(ip1, ip2)[0], ip('1.1.1.0/24')) 424 self.assertEqual(summarize(ip1, ip2)[0], ip('1.1.1.0/24'))
385 # test an IPv4 range that isn't on a network byte boundary 425 # test an IPv4 range that isn't on a network byte boundary
386 ip2 = ip('1.1.1.8') 426 ip2 = ip('1.1.1.8', host=True)
387 self.assertEqual(summarize(ip1, ip2), [ip('1.1.1.0/29'), ip('1.1.1.8')]) 427 self.assertEqual(summarize(ip1, ip2), [ip('1.1.1.0/29'), ip('1.1.1.8')])
388 428
389 ip1 = ip('1::') 429 ip1 = ip('1::', host=True)
390 ip2 = ip('1:ffff:ffff:ffff:ffff:ffff:ffff:ffff') 430 ip2 = ip('1:ffff:ffff:ffff:ffff:ffff:ffff:ffff', host=True)
391 # test a IPv6 is sumamrized properly 431 # test a IPv6 is sumamrized properly
392 self.assertEqual(summarize(ip1, ip2)[0], ip('1::/16')) 432 self.assertEqual(summarize(ip1, ip2)[0], ip('1::/16'))
393 # test an IPv6 range that isn't on a network byte boundary 433 # test an IPv6 range that isn't on a network byte boundary
394 ip2 = ip('2::') 434 ip2 = ip('2::', host=True)
395 self.assertEqual(summarize(ip1, ip2), [ip('1::/16'), ip('2::/128')]) 435 self.assertEqual(summarize(ip1, ip2), [ip('1::/16'), ip('2::/128')])
396 436
397 self.assertRaises(ValueError, summarize, ip('1.1.1.0'), ip('1.1.0.0')) 437 # test exception raised when first is greater than last
398 self.assertRaises(ValueError, summarize, ip('::'), ip('1.1.0.0')) 438 self.assertRaises(ValueError, summarize, ip('1.1.1.0', host=True),
439 ip('1.1.0.0', host=True))
440 # test exception raised when first and last aren't IP addresses
441 self.assertRaises(ipaddr.IPTypeError, summarize, ip('1.1.1.0'),
442 ip('1.1.0.0'))
443 self.assertRaises(ipaddr.IPTypeError, summarize,
444 ip('1.1.1.0', host=True), ip('1.1.0.0'))
445 # test exception raised when first and last are not same version
446 self.assertRaises(ipaddr.IPTypeError, summarize, ip('::', host=True),
447 ip('1.1.0.0', host=True))
399 448
400 def testNetworkComparison(self): 449 def testNetworkComparison(self):
401 # ip1 and ip2 have the same network address 450 # ip1 and ip2 have the same network address
402 ip1 = ipaddr.IPv4('1.1.1.0/24') 451 ip1 = ipaddr.IPv4('1.1.1.0/24')
403 ip2 = ipaddr.IPv4('1.1.1.1/24') 452 ip2 = ipaddr.IPv4('1.1.1.1/24')
404 ip3 = ipaddr.IPv4('1.1.2.0/24') 453 ip3 = ipaddr.IPv4('1.1.2.0/24')
405 454
406 self.assertTrue(ip1 < ip3) 455 self.assertTrue(ip1 < ip3)
407 self.assertTrue(ip3 > ip2) 456 self.assertTrue(ip3 > ip2)
408 457
(...skipping 12 matching lines...) Expand all
421 self.assertTrue(ip1._get_networks_key() == ip2._get_networks_key()) 470 self.assertTrue(ip1._get_networks_key() == ip2._get_networks_key())
422 self.assertEquals(ip1.compare_networks(ip3), -1) 471 self.assertEquals(ip1.compare_networks(ip3), -1)
423 self.assertTrue(ip1._get_networks_key() < ip3._get_networks_key()) 472 self.assertTrue(ip1._get_networks_key() < ip3._get_networks_key())
424 473
425 # Test comparing different protocols 474 # Test comparing different protocols
426 ipv6 = ipaddr.IPv6('::/0') 475 ipv6 = ipaddr.IPv6('::/0')
427 ipv4 = ipaddr.IPv4('0.0.0.0/0') 476 ipv4 = ipaddr.IPv4('0.0.0.0/0')
428 self.assertTrue(ipv6 > ipv4) 477 self.assertTrue(ipv6 > ipv4)
429 self.assertTrue(ipv4 < ipv6) 478 self.assertTrue(ipv4 < ipv6)
430 479
480 # Regression test for issue 19.
481 ip1 = ipaddr.IP('10.1.2.128/25')
482 self.assertFalse(ip1 < ip1)
483 self.assertFalse(ip1 > ip1)
484 ip2 = ipaddr.IP('10.1.3.0/24')
485 self.assertTrue(ip1 < ip2)
486 self.assertFalse(ip2 < ip1)
487 self.assertFalse(ip1 > ip2)
488 self.assertTrue(ip2 > ip1)
489 ip3 = ipaddr.IP('10.1.3.0/25')
490 self.assertTrue(ip2 < ip3)
491 self.assertFalse(ip3 < ip2)
492 self.assertFalse(ip2 > ip3)
493 self.assertTrue(ip3 > ip2)
494
431 def testEmbeddedIpv4(self): 495 def testEmbeddedIpv4(self):
432 ipv4_string = '192.168.0.1' 496 ipv4_string = '192.168.0.1'
433 ipv4 = ipaddr.IPv4(ipv4_string) 497 ipv4 = ipaddr.IPv4(ipv4_string)
434 v4compat_ipv6 = ipaddr.IPv6('::%s' % ipv4_string) 498 v4compat_ipv6 = ipaddr.IPv6('::%s' % ipv4_string)
435 self.assertEquals(v4compat_ipv6.ip, ipv4.ip) 499 self.assertEquals(int(v4compat_ipv6.ip), int(ipv4.ip))
436 v4mapped_ipv6 = ipaddr.IPv6('::ffff:%s' % ipv4_string) 500 v4mapped_ipv6 = ipaddr.IPv6('::ffff:%s' % ipv4_string)
437 self.assertNotEquals(v4mapped_ipv6.ip, ipv4.ip) 501 self.assertNotEquals(v4mapped_ipv6.ip, ipv4.ip)
438 self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6, 502 self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6,
439 '2001:1.1.1.1:1.1.1.1') 503 '2001:1.1.1.1:1.1.1.1')
440 504
441 def testIPVersion(self): 505 def testIPVersion(self):
442 self.assertEqual(self.ipv4.version, 4) 506 self.assertEqual(self.ipv4.version, 4)
443 self.assertEqual(self.ipv6.version, 6) 507 self.assertEqual(self.ipv6.version, 6)
444 508
445 def testPacked(self): 509 def testPacked(self):
446 self.assertEqual(self.ipv4.packed, 510 self.assertEqual(self.ipv4.packed,
447 _cb('\x01\x02\x03\x04')) 511 _cb('\x01\x02\x03\x04'))
448 self.assertEqual(ipaddr.IPv4('255.254.253.252').packed, 512 self.assertEqual(ipaddr.IPv4('255.254.253.252').packed,
449 _cb('\xff\xfe\xfd\xfc')) 513 _cb('\xff\xfe\xfd\xfc'))
450 self.assertEqual(self.ipv6.packed, 514 self.assertEqual(self.ipv6.packed,
451 _cb('\x20\x01\x06\x58\x02\x2a\xca\xfe' 515 _cb('\x20\x01\x06\x58\x02\x2a\xca\xfe'
452 '\x02\x00\x00\x00\x00\x00\x00\x01')) 516 '\x02\x00\x00\x00\x00\x00\x00\x01'))
453 self.assertEqual(ipaddr.IPv6('ffff:2:3:4:ffff::').packed, 517 self.assertEqual(ipaddr.IPv6('ffff:2:3:4:ffff::').packed,
454 _cb('\xff\xff\x00\x02\x00\x03\x00\x04\xff\xff' 518 _cb('\xff\xff\x00\x02\x00\x03\x00\x04\xff\xff'
455 + '\x00' * 6)) 519 + '\x00' * 6))
456 self.assertEqual(ipaddr.IPv6('::1:0:0:0:0').packed, 520 self.assertEqual(ipaddr.IPv6('::1:0:0:0:0').packed,
457 _cb('\x00' * 6 + '\x00\x01' + '\x00' * 8)) 521 _cb('\x00' * 6 + '\x00\x01' + '\x00' * 8))
458 522
459 def testIpStrFromPrefixlen(self): 523 def testIpStrFromPrefixlen(self):
460 ipv4 = ipaddr.IPv4('1.2.3.4/24') 524 ipv4 = ipaddr.IPv4('1.2.3.4/24')
461 self.assertEquals(ipv4._ip_string_from_prefix(), '255.255.255.0') 525 self.assertEquals(ipv4._ip_string_from_prefix(), '255.255.255.0')
462 self.assertEquals(ipv4._ip_string_from_prefix(28), '255.255.255.240') 526 self.assertEquals(ipv4._ip_string_from_prefix(28), '255.255.255.240')
463 527
464 def testIpType(self): 528 def testIpType(self):
465 ipv4 = ipaddr.IP('1.2.3.4') 529 ipv4net = ipaddr.IP('1.2.3.4')
466 ipv6 = ipaddr.IP('::1.2.3.4') 530 ipv4addr = ipaddr.IP('1.2.3.4', host=True)
467 self.assertEquals(ipaddr.IPv4, type(ipv4)) 531 ipv6net = ipaddr.IP('::1.2.3.4')
468 self.assertEquals(ipaddr.IPv6, type(ipv6)) 532 ipv6addr = ipaddr.IP('::1.2.3.4', host=True)
533 self.assertEquals(ipaddr.IPv4Network, type(ipv4net))
534 self.assertEquals(ipaddr.IPv4Address, type(ipv4addr))
535 self.assertEquals(ipaddr.IPv6Network, type(ipv6net))
536 self.assertEquals(ipaddr.IPv6Address, type(ipv6addr))
469 537
470 def testReservedIpv4(self): 538 def testReservedIpv4(self):
471 self.assertEquals(True, ipaddr.IP('224.1.1.1/31').is_multicast) 539 self.assertEquals(True, ipaddr.IP('224.1.1.1/31').is_multicast)
472 self.assertEquals(False, ipaddr.IP('240.0.0.0').is_multicast) 540 self.assertEquals(False, ipaddr.IP('240.0.0.0').is_multicast)
473 541
474 self.assertEquals(True, ipaddr.IP('192.168.1.1/17').is_private) 542 self.assertEquals(True, ipaddr.IP('192.168.1.1/17').is_private)
475 self.assertEquals(False, ipaddr.IP('192.169.0.0').is_private) 543 self.assertEquals(False, ipaddr.IP('192.169.0.0').is_private)
476 self.assertEquals(True, ipaddr.IP('10.255.255.255').is_private) 544 self.assertEquals(True, ipaddr.IP('10.255.255.255').is_private)
477 self.assertEquals(False, ipaddr.IP('11.0.0.0').is_private) 545 self.assertEquals(False, ipaddr.IP('11.0.0.0').is_private)
478 self.assertEquals(True, ipaddr.IP('172.31.255.255').is_private) 546 self.assertEquals(True, ipaddr.IP('172.31.255.255').is_private)
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 addr2 = ipaddr.IP('10.1.1.0/26') 590 addr2 = ipaddr.IP('10.1.1.0/26')
523 addr3 = ipaddr.IP('10.2.1.0/24') 591 addr3 = ipaddr.IP('10.2.1.0/24')
524 self.assertEqual(addr1.address_exclude(addr2), 592 self.assertEqual(addr1.address_exclude(addr2),
525 [ipaddr.IP('10.1.1.64/26'), 593 [ipaddr.IP('10.1.1.64/26'),
526 ipaddr.IP('10.1.1.128/25')]) 594 ipaddr.IP('10.1.1.128/25')])
527 self.assertRaises(ValueError, addr1.address_exclude, addr3) 595 self.assertRaises(ValueError, addr1.address_exclude, addr3)
528 596
529 def testHash(self): 597 def testHash(self):
530 self.assertEquals(hash(ipaddr.IP('10.1.1.0/24')), 598 self.assertEquals(hash(ipaddr.IP('10.1.1.0/24')),
531 hash(ipaddr.IP('10.1.1.0/24'))) 599 hash(ipaddr.IP('10.1.1.0/24')))
600 self.assertEquals(hash(ipaddr.IP('10.1.1.0', host=True)),
601 hash(ipaddr.IP('10.1.1.0', host=True)))
602 ip1 = ipaddr.IP('10.1.1.0', host=True)
603 ip2 = ipaddr.IP('1::', host=True)
532 dummy = {} 604 dummy = {}
533 dummy[self.ipv4] = None 605 dummy[self.ipv4] = None
534 dummy[self.ipv6] = None 606 dummy[self.ipv6] = None
607 dummy[ip1] = None
608 dummy[ip2] = None
535 self.assertTrue(self.ipv4 in dummy) 609 self.assertTrue(self.ipv4 in dummy)
610 self.assertTrue(ip2 in dummy)
536 611
537 def testIPv4PrefixFromInt(self): 612 def testIPv4PrefixFromInt(self):
538 addr1 = ipaddr.IP('10.1.1.0/24') 613 addr1 = ipaddr.IP('10.1.1.0/24')
539 addr2 = ipaddr.IPv4(addr1.ip) # clone prefix 614 addr2 = ipaddr.IPv4(int(addr1.ip)) # clone prefix
540 addr2.set_prefix(addr1.prefixlen) 615 addr2.set_prefix(addr1.prefixlen)
541 addr3 = ipaddr.IP(123456) 616 addr3 = ipaddr.IP(123456)
542 617
543 self.assertEqual(123456, addr3.ip) 618 self.assertEqual(123456, int(addr3.ip))
544 self.assertRaises(ipaddr.IPv4NetmaskValidationError, 619 self.assertRaises(ipaddr.IPv4NetmaskValidationError,
545 addr2.set_prefix, -1L) 620 addr2.set_prefix, -1L)
546 self.assertEqual(addr1, addr2) 621 self.assertEqual(addr1, addr2)
547 self.assertEqual(str(addr1), str(addr2)) 622 self.assertEqual(str(addr1), str(addr2))
548 623
549 def testIPv6PrefixFromInt(self): 624 def testIPv6PrefixFromInt(self):
550 addr1 = ipaddr.IP('2001:0658:022a:cafe:0200::1/64') 625 addr1 = ipaddr.IP('2001:0658:022a:cafe:0200::1/64')
551 addr2 = ipaddr.IPv6(addr1.ip) # clone prefix 626 addr2 = ipaddr.IPv6(addr1.ip) # clone prefix
552 addr2.set_prefix(addr1.prefixlen) 627 addr2.set_prefix(addr1.prefixlen)
553 addr3 = ipaddr.IP(123456) 628 addr3 = ipaddr.IP(123456)
554 629
555 self.assertEqual(123456, addr3.ip) 630 self.assertEqual(123456, int(addr3.ip))
556 self.assertRaises(ipaddr.IPv6NetmaskValidationError, 631 self.assertRaises(ipaddr.IPv6NetmaskValidationError,
557 addr2.set_prefix, -1L) 632 addr2.set_prefix, -1L)
558 self.assertEqual(addr1, addr2) 633 self.assertEqual(addr1, addr2)
559 self.assertEqual(str(addr1), str(addr2)) 634 self.assertEqual(str(addr1), str(addr2))
560 635
561 def testCopyConstructor(self): 636 def testCopyConstructor(self):
562 addr1 = ipaddr.IP('10.1.1.0/24') 637 addr1 = ipaddr.IP('10.1.1.0/24')
563 addr2 = ipaddr.IP(addr1) 638 addr2 = ipaddr.IP(addr1)
564 addr3 = ipaddr.IP('2001:658:22a:cafe:200::1/64') 639 addr3 = ipaddr.IP('2001:658:22a:cafe:200::1/64')
565 addr4 = ipaddr.IP(addr3) 640 addr4 = ipaddr.IP(addr3)
(...skipping 17 matching lines...) Expand all
583 '0:0:0:0:0:0:0:1': '::1/128', 658 '0:0:0:0:0:0:0:1': '::1/128',
584 '2001:0658:022a:cafe:0000:0000:0000:0000/66': 659 '2001:0658:022a:cafe:0000:0000:0000:0000/66':
585 '2001:658:22a:cafe::/66', 660 '2001:658:22a:cafe::/66',
586 } 661 }
587 for uncompressed, compressed in test_addresses.items(): 662 for uncompressed, compressed in test_addresses.items():
588 self.assertEquals(compressed, str(ipaddr.IPv6(uncompressed))) 663 self.assertEquals(compressed, str(ipaddr.IPv6(uncompressed)))
589 664
590 def testExplodeShortHandIpStr(self): 665 def testExplodeShortHandIpStr(self):
591 addr1 = ipaddr.IPv6('2001::1') 666 addr1 = ipaddr.IPv6('2001::1')
592 self.assertEqual('2001:0000:0000:0000:0000:0000:0000:0001', 667 self.assertEqual('2001:0000:0000:0000:0000:0000:0000:0001',
593 addr1._explode_shorthand_ip_string(addr1.ip_ext)) 668 addr1._explode_shorthand_ip_string(str(addr1.ip)))
594 669
595 def testIntRepresentation(self): 670 def testIntRepresentation(self):
596 self.assertEqual(16909060, int(self.ipv4)) 671 self.assertEqual(16909060, int(self.ipv4))
597 self.assertEqual(42540616829182469433547762482097946625, int(self.ipv6)) 672 self.assertEqual(42540616829182469433547762482097946625, int(self.ipv6))
598 673
599 def testHexRepresentation(self): 674 def testHexRepresentation(self):
600 self.assertEqual(hex(0x1020304), hex(self.ipv4)) 675 self.assertEqual(hex(0x1020304),
676 hex(self.ipv4))
601 677
602 self.assertEqual(hex(0x20010658022ACAFE0200000000000001), 678 self.assertEqual(hex(0x20010658022ACAFE0200000000000001),
603 hex(self.ipv6)) 679 hex(self.ipv6))
604 680
605 # backwards compatibility 681 # backwards compatibility
606 def testBackwardsCompability(self): 682 def testBackwardsCompability(self):
607 ip = ipaddr.IP 683 ip = ipaddr.IP
608 684
609 self.assertEqual(ipaddr.CollapseAddrList( 685 self.assertEqual(ipaddr.CollapseAddrList(
610 [ip('1.1.0.0/24'), ip('1.1.1.0/24')]), 686 [ip('1.1.0.0/24'), ip('1.1.1.0/24')]),
(...skipping 19 matching lines...) Expand all
630 self.assertEqual(ip('::/127').Subnet(), [ip('::/128'), ip('::1/128')]) 706 self.assertEqual(ip('::/127').Subnet(), [ip('::/128'), ip('::1/128')])
631 707
632 self.assertEqual(ip('1.0.0.0/32').Supernet(), ip('1.0.0.0/31')) 708 self.assertEqual(ip('1.0.0.0/32').Supernet(), ip('1.0.0.0/31'))
633 self.assertEqual(ip('::/121').Supernet(), ip('::/120')) 709 self.assertEqual(ip('::/121').Supernet(), ip('::/120'))
634 710
635 self.assertEqual(ip('10.0.0.02').IsRFC1918(), True) 711 self.assertEqual(ip('10.0.0.02').IsRFC1918(), True)
636 self.assertEqual(ip('10.0.0.0').IsMulticast(), False) 712 self.assertEqual(ip('10.0.0.0').IsMulticast(), False)
637 self.assertEqual(ip('127.255.255.255').IsLoopback(), True) 713 self.assertEqual(ip('127.255.255.255').IsLoopback(), True)
638 self.assertEqual(ip('169.255.255.255').IsLinkLocal(), False) 714 self.assertEqual(ip('169.255.255.255').IsLinkLocal(), False)
639 715
716 def testChangingPrefixlength(self):
717 self.ipv4.prefixlen = 23
718 self.assertEqual(self.ipv4.network,
719 ipaddr.IPv4Address('1.2.2.0'))
720 self.assertEqual(self.ipv4.broadcast,
721 ipaddr.IPv4Address('1.2.3.255'))
722 self.assertEqual(self.ipv4.numhosts, 512)
723
724 #ipaddr.IPv6('2001:658:22a:cafe:200:0:0:1/64')
725 self.ipv6.prefixlen = 32
726 self.assertEqual(self.ipv6.network,
727 ipaddr.IPv6Address('2001:658::'))
728 self.assertEqual(self.ipv6.broadcast,
729 ipaddr.IPv6Address(
730 '2001:658:ffff:ffff:ffff:ffff:ffff:ffff'))
731
732 def testForceVersion(self):
733 self.assertEqual(ipaddr.IP(1).version, 4)
734 self.assertEqual(ipaddr.IP(1, version=6).version, 6)
735
736 def testWithStar(self):
737 self.assertEqual(str(self.ipv4.with_prefixlen), "1.2.3.4/24")
738 self.assertEqual(str(self.ipv4.with_netmask), "1.2.3.4/255.255.255.0")
739 self.assertEqual(str(self.ipv4.with_hostmask), "1.2.3.4/0.0.0.255")
740
741 self.assertEqual(str(self.ipv6.with_prefixlen),
742 '2001:658:22a:cafe:200::1/64')
743 # these two probably don't make much sense, but they're included for
744 # compatability with ipv4
745 self.assertEqual(str(self.ipv6.with_netmask),
746 '2001:658:22a:cafe:200::1/ffff:ffff:ffff:ffff::')
747 self.assertEqual(str(self.ipv6.with_hostmask),
748 '2001:658:22a:cafe:200::1/::ffff:ffff:ffff:ffff')
749
750 def testNetworkElementCaching(self):
751 # V4 - make sure we're empty
752 self.assertFalse(self.ipv4._cache.has_key('network'))
753 self.assertFalse(self.ipv4._cache.has_key('broadcast'))
754 self.assertFalse(self.ipv4._cache.has_key('hostmask'))
755
756 # V4 - populate and test
757 self.assertEqual(self.ipv4.network, ipaddr.IPv4Address('1.2.3.0'))
758 self.assertEqual(self.ipv4.broadcast, ipaddr.IPv4Address('1.2.3.255'))
759 self.assertEqual(self.ipv4.hostmask, ipaddr.IPv4Address('0.0.0.255'))
760
761 # V4 - check we're cached
762 self.assertTrue(self.ipv4._cache.has_key('network'))
763 self.assertTrue(self.ipv4._cache.has_key('broadcast'))
764 self.assertTrue(self.ipv4._cache.has_key('hostmask'))
765
766 # V6 - make sure we're empty
767 self.assertFalse(self.ipv6._cache.has_key('network'))
768 self.assertFalse(self.ipv6._cache.has_key('broadcast'))
769 self.assertFalse(self.ipv6._cache.has_key('hostmask'))
770
771 # V6 - populate and test
772 self.assertEqual(self.ipv6.network,
773 ipaddr.IPv6Address('2001:658:22a:cafe::'))
774 self.assertEqual(self.ipv6.broadcast, ipaddr.IPv6Address(
775 '2001:658:22a:cafe:ffff:ffff:ffff:ffff'))
776 self.assertEqual(self.ipv6.hostmask,
777 ipaddr.IPv6Address('::ffff:ffff:ffff:ffff'))
778
779 # V6 - check we're cached
780 self.assertTrue(self.ipv6._cache.has_key('network'))
781 self.assertTrue(self.ipv6._cache.has_key('broadcast'))
782 self.assertTrue(self.ipv6._cache.has_key('hostmask'))
783
784
640 if __name__ == '__main__': 785 if __name__ == '__main__':
641 unittest.main() 786 unittest.main()
LEFTRIGHT
« ipaddr.py ('k') | no next file » | Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Toggle Comments ('s')

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld r497