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

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: removed range notation 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 13 matching lines...) Expand all
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 testGetIp(self): 135 def testGetIp(self):
124 self.assertEqual(self.ipv4.ip, 16909060) 136 self.assertEqual(int(self.ipv4.ip), 16909060)
125 self.assertEqual(self.ipv4.ip_ext, '1.2.3.4') 137 self.assertEqual(str(self.ipv4.ip), '1.2.3.4')
126 self.assertEqual(self.ipv4.ip_ext_full, '1.2.3.4') 138 self.assertEqual(str(self.ipv4_hostmask.ip), '10.0.0.1')
127 self.assertEqual(self.ipv4_hostmask.ip_ext, '10.0.0.1') 139
128 140 self.assertEqual(int(self.ipv6.ip),
129 self.assertEqual(self.ipv6.ip, 42540616829182469433547762482097946625) 141 42540616829182469433547762482097946625)
130 self.assertEqual(self.ipv6.ip_ext, 142 self.assertEqual(str(self.ipv6.ip),
131 '2001:658:22a:cafe:200::1') 143 '2001:658:22a:cafe:200::1')
132 self.assertEqual(self.ipv6.ip_ext_full,
133 '2001:0658:022a:cafe:0200:0000:0000:0001')
134 144
135 def testGetNetmask(self): 145 def testGetNetmask(self):
136 self.assertEqual(self.ipv4.netmask, 4294967040L) 146 self.assertEqual(int(self.ipv4.netmask), 4294967040L)
137 self.assertEqual(self.ipv4.netmask_ext, '255.255.255.0') 147 self.assertEqual(str(self.ipv4.netmask), '255.255.255.0')
138 self.assertEqual(self.ipv4_hostmask.netmask_ext, '255.0.0.0') 148 self.assertEqual(str(self.ipv4_hostmask.netmask), '255.0.0.0')
139 self.assertEqual(self.ipv6.netmask, 149 self.assertEqual(int(self.ipv6.netmask),
140 340282366920938463444927863358058659840) 150 340282366920938463444927863358058659840)
141 self.assertEqual(self.ipv6.netmask_ext, 64) 151 self.assertEqual(self.ipv6.prefixlen, 64)
142 152
143 def testZeroNetmask(self): 153 def testZeroNetmask(self):
144 ipv4_zero_netmask = ipaddr.IPv4('1.2.3.4/0') 154 ipv4_zero_netmask = ipaddr.IPv4('1.2.3.4/0')
145 self.assertEqual(ipv4_zero_netmask.netmask, 0) 155 self.assertEqual(int(ipv4_zero_netmask.netmask), 0)
146 self.assert_(ipv4_zero_netmask._is_valid_netmask(str(0))) 156 self.assert_(ipv4_zero_netmask._is_valid_netmask(str(0)))
147 157
148 ipv6_zero_netmask = ipaddr.IPv6('::1/0') 158 ipv6_zero_netmask = ipaddr.IPv6('::1/0')
149 self.assertEqual(ipv6_zero_netmask.netmask, 0) 159 self.assertEqual(int(ipv6_zero_netmask.netmask), 0)
150 self.assert_(ipv6_zero_netmask._is_valid_netmask(str(0))) 160 self.assert_(ipv6_zero_netmask._is_valid_netmask(str(0)))
151 161
152 def testGetBroadcast(self): 162 def testGetBroadcast(self):
153 self.assertEqual(self.ipv4.broadcast, 16909311L) 163 self.assertEqual(int(self.ipv4.broadcast), 16909311L)
154 self.assertEqual(self.ipv4.broadcast_ext, '1.2.3.255') 164 self.assertEqual(str(self.ipv4.broadcast), '1.2.3.255')
155 165
156 self.assertEqual(self.ipv6.broadcast, 166 self.assertEqual(int(self.ipv6.broadcast),
157 42540616829182469451850391367731642367) 167 42540616829182469451850391367731642367)
158 self.assertEqual(self.ipv6.broadcast_ext, 168 self.assertEqual(str(self.ipv6.broadcast),
159 '2001:658:22a:cafe:ffff:ffff:ffff:ffff') 169 '2001:658:22a:cafe:ffff:ffff:ffff:ffff')
160 170
161 def testGetPrefixlen(self): 171 def testGetPrefixlen(self):
162 self.assertEqual(self.ipv4.prefixlen, 24) 172 self.assertEqual(self.ipv4.prefixlen, 24)
163 173
164 self.assertEqual(self.ipv6.prefixlen, 64) 174 self.assertEqual(self.ipv6.prefixlen, 64)
165 175
166 def testGetSupernet(self): 176 def testGetSupernet(self):
167 self.assertEqual(self.ipv4.supernet().prefixlen, 23) 177 self.assertEqual(self.ipv4.supernet().prefixlen, 23)
168 self.assertEqual(self.ipv4.supernet().network_ext, '1.2.2.0') 178 self.assertEqual(str(self.ipv4.supernet().network), '1.2.2.0')
169 self.assertEqual(ipaddr.IPv4('0.0.0.0/0').supernet(), 179 self.assertEqual(ipaddr.IPv4('0.0.0.0/0').supernet(),
170 ipaddr.IPv4('0.0.0.0/0')) 180 ipaddr.IPv4('0.0.0.0/0'))
171 181
172 self.assertEqual(self.ipv6.supernet().prefixlen, 63) 182 self.assertEqual(self.ipv6.supernet().prefixlen, 63)
173 self.assertEqual(self.ipv6.supernet().network_ext, 183 self.assertEqual(str(self.ipv6.supernet().network),
174 '2001:658:22a:cafe::') 184 '2001:658:22a:cafe::')
175 self.assertEqual(ipaddr.IPv6('::0/0').supernet(), ipaddr.IPv6('::0/0')) 185 self.assertEqual(ipaddr.IPv6('::0/0').supernet(), ipaddr.IPv6('::0/0'))
176 186
177 def testGetSupernet3(self): 187 def testGetSupernet3(self):
178 self.assertEqual(self.ipv4.supernet(3).prefixlen, 21) 188 self.assertEqual(self.ipv4.supernet(3).prefixlen, 21)
179 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')
180 190
181 self.assertEqual(self.ipv6.supernet(3).prefixlen, 61) 191 self.assertEqual(self.ipv6.supernet(3).prefixlen, 61)
182 self.assertEqual(self.ipv6.supernet(3).network_ext, 192 self.assertEqual(str(self.ipv6.supernet(3).network),
183 '2001:658:22a:caf8::') 193 '2001:658:22a:caf8::')
184 194
185 def testGetSubnet(self): 195 def testGetSubnet(self):
186 self.assertEqual(self.ipv4.subnet()[0].prefixlen, 25) 196 self.assertEqual(self.ipv4.subnet()[0].prefixlen, 25)
187 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')
188 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')
189 199
190 self.assertEqual(self.ipv6.subnet()[0].prefixlen, 65) 200 self.assertEqual(self.ipv6.subnet()[0].prefixlen, 65)
191 201
192 def testGetSubnetForSingle32(self): 202 def testGetSubnetForSingle32(self):
193 ip = ipaddr.IPv4('1.2.3.4/32') 203 ip = ipaddr.IPv4('1.2.3.4/32')
194 subnets1 = [str(x) for x in ip.subnet()] 204 subnets1 = [str(x) for x in ip.subnet()]
195 subnets2 = [str(x) for x in ip.subnet(2)] 205 subnets2 = [str(x) for x in ip.subnet(2)]
196 self.assertEqual(subnets1, ['1.2.3.4/32']) 206 self.assertEqual(subnets1, ['1.2.3.4/32'])
197 self.assertEqual(subnets1, subnets2) 207 self.assertEqual(subnets1, subnets2)
198 208
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 self.assertEqual(self.ipv6.subnet()[0].numhosts, 9223372036854775808) 253 self.assertEqual(self.ipv6.subnet()[0].numhosts, 9223372036854775808)
244 self.assertEqual(self.ipv6.supernet().numhosts, 36893488147419103232) 254 self.assertEqual(self.ipv6.supernet().numhosts, 36893488147419103232)
245 255
246 def testContains(self): 256 def testContains(self):
247 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)
248 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)
249 self.assertFalse(self.ipv4 in self.ipv6) 259 self.assertFalse(self.ipv4 in self.ipv6)
250 self.assertFalse(self.ipv6 in self.ipv4) 260 self.assertFalse(self.ipv6 in self.ipv4)
251 self.assertTrue(self.ipv4 in self.ipv4) 261 self.assertTrue(self.ipv4 in self.ipv4)
252 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)
253 269
254 def testBadAddress(self): 270 def testBadAddress(self):
255 self.assertRaises(ipaddr.IPv4IpValidationError, ipaddr.IPv4, 'poop') 271 self.assertRaises(ipaddr.IPv4IpValidationError, ipaddr.IPv4, 'poop')
256 self.assertRaises(ipaddr.IPv4IpValidationError, 272 self.assertRaises(ipaddr.IPv4IpValidationError,
257 ipaddr.IPv4, '1.2.3.256') 273 ipaddr.IPv4, '1.2.3.256')
258 274
259 self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6, 'poopv6') 275 self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6, 'poopv6')
260 self.assertRaises(ipaddr.IPv4IpValidationError, 276 self.assertRaises(ipaddr.IPv4IpValidationError,
261 ipaddr.IPv4, '1.2.3.4/32/24') 277 ipaddr.IPv4, '1.2.3.4/32/24')
262 278
263 def testBadNetMask(self): 279 def testBadNetMask(self):
264 self.assertRaises(ipaddr.IPv4NetmaskValidationError, 280 self.assertRaises(ipaddr.IPv4NetmaskValidationError,
265 ipaddr.IPv4, '1.2.3.4/') 281 ipaddr.IPv4, '1.2.3.4/')
266 self.assertRaises(ipaddr.IPv4NetmaskValidationError, 282 self.assertRaises(ipaddr.IPv4NetmaskValidationError,
267 ipaddr.IPv4, '1.2.3.4/33') 283 ipaddr.IPv4, '1.2.3.4/33')
268 self.assertRaises(ipaddr.IPv4NetmaskValidationError, 284 self.assertRaises(ipaddr.IPv4NetmaskValidationError,
269 ipaddr.IPv4, '1.2.3.4/254.254.255.256') 285 ipaddr.IPv4, '1.2.3.4/254.254.255.256')
270 286
271 self.assertRaises(ipaddr.IPv6NetmaskValidationError, 287 self.assertRaises(ipaddr.IPv6NetmaskValidationError,
272 ipaddr.IPv6, '::1/') 288 ipaddr.IPv6, '::1/')
273 self.assertRaises(ipaddr.IPv6NetmaskValidationError, 289 self.assertRaises(ipaddr.IPv6NetmaskValidationError,
274 ipaddr.IPv6, '::1/129') 290 ipaddr.IPv6, '::1/129')
275 291
276 def testNth(self): 292 def testNth(self):
277 self.assertEqual(self.ipv4[5], '1.2.3.5') 293 self.assertEqual(str(self.ipv4[5]), '1.2.3.5')
278 self.assertRaises(IndexError, self.ipv4.__getitem__, 256) 294 self.assertRaises(IndexError, self.ipv4.__getitem__, 256)
279 295
280 self.assertEqual(self.ipv6[5], 296 self.assertEqual(str(self.ipv6[5]),
281 '2001:658:22a:cafe::5') 297 '2001:658:22a:cafe::5')
282 298
283 def testGetitem(self): 299 def testGetitem(self):
284 # http://code.google.com/p/ipaddr-py/issues/detail?id=15 300 # http://code.google.com/p/ipaddr-py/issues/detail?id=15
285 addr = ipaddr.IPv4('172.31.255.128/255.255.255.240') 301 addr = ipaddr.IPv4('172.31.255.128/255.255.255.240')
286 self.assertEqual(28, addr.prefixlen) 302 self.assertEqual(28, addr.prefixlen)
287 addr_list = list(addr) 303 addr_list = list(addr)
288 self.assertEqual('172.31.255.128', addr_list[0]) 304 self.assertEqual('172.31.255.128', str(addr_list[0]))
289 self.assertEqual('172.31.255.128', addr[0]) 305 self.assertEqual('172.31.255.128', str(addr[0]))
290 self.assertEqual('172.31.255.143', addr_list[-1]) 306 self.assertEqual('172.31.255.143', str(addr_list[-1]))
291 self.assertEqual('172.31.255.143', addr[-1]) 307 self.assertEqual('172.31.255.143', str(addr[-1]))
292 self.assertEqual(addr_list[-1], addr[-1]) 308 self.assertEqual(addr_list[-1], addr[-1])
293 309
294 def testEquals(self): 310 def testEquals(self):
295 self.assertTrue(self.ipv4 == ipaddr.IPv4('1.2.3.4/24')) 311 self.assertTrue(self.ipv4 == ipaddr.IPv4('1.2.3.4/24'))
296 self.assertFalse(self.ipv4 == ipaddr.IPv4('1.2.3.4/23')) 312 self.assertFalse(self.ipv4 == ipaddr.IPv4('1.2.3.4/23'))
297 self.assertFalse(self.ipv4 == ipaddr.IPv4('1.2.3.5/24')) 313 self.assertFalse(self.ipv4 == ipaddr.IPv4('1.2.3.5/24'))
298 self.assertFalse(self.ipv4 == ipaddr.IPv6('::1.2.3.4/24')) 314 self.assertFalse(self.ipv4 == ipaddr.IPv6('::1.2.3.4/24'))
299 self.assertFalse(self.ipv4 == '') 315 self.assertFalse(self.ipv4 == '')
300 self.assertFalse(self.ipv4 == []) 316 self.assertFalse(self.ipv4 == [])
301 self.assertFalse(self.ipv4 == 2) 317 self.assertFalse(self.ipv4 == 2)
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 '1.2.3.4/32') 352 '1.2.3.4/32')
337 353
338 def testSlash128Constructor(self): 354 def testSlash128Constructor(self):
339 self.assertEquals(str(ipaddr.IPv6('::1/128')), 355 self.assertEquals(str(ipaddr.IPv6('::1/128')),
340 '::1/128') 356 '::1/128')
341 357
342 def testSlash0Constructor(self): 358 def testSlash0Constructor(self):
343 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')
344 360
345 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
346 ip1 = ipaddr.IPv4('1.1.0.0/24') 386 ip1 = ipaddr.IPv4('1.1.0.0/24')
347 ip2 = ipaddr.IPv4('1.1.1.0/24') 387 ip2 = ipaddr.IPv4('1.1.1.0/24')
348 ip3 = ipaddr.IPv4('1.1.2.0/24') 388 ip3 = ipaddr.IPv4('1.1.2.0/24')
349 ip4 = ipaddr.IPv4('1.1.3.0/24') 389 ip4 = ipaddr.IPv4('1.1.3.0/24')
350 ip5 = ipaddr.IPv4('1.1.4.0/24') 390 ip5 = ipaddr.IPv4('1.1.4.0/24')
351 # 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
352 ip6 = ipaddr.IPv4('1.1.0.0/22') 392 ip6 = ipaddr.IPv4('1.1.0.0/22')
353 # check that addreses are subsumed properlly. 393 # check that addreses are subsumed properly.
354 collapsed = ipaddr.collapse_address_list([ip1, ip2, ip3, ip4, ip5, ip6]) 394 collapsed = ipaddr.collapse_address_list([ip1, ip2, ip3, ip4, ip5, ip6])
355 self.assertEqual(collapsed, [ipaddr.IPv4('1.1.0.0/22'), 395 self.assertEqual(collapsed, [ipaddr.IPv4('1.1.0.0/22'),
356 ipaddr.IPv4('1.1.4.0/24')]) 396 ipaddr.IPv4('1.1.4.0/24')])
357 # test that two addresses are supernet'ed properlly 397
398 # test that two addresses are supernet'ed properly
358 collapsed = ipaddr.collapse_address_list([ip1, ip2]) 399 collapsed = ipaddr.collapse_address_list([ip1, ip2])
359 self.assertEqual(collapsed, [ipaddr.IPv4('1.1.0.0/23')]) 400 self.assertEqual(collapsed, [ipaddr.IPv4('1.1.0.0/23')])
360 401
402 # test same IP networks
361 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)
362 self.assertEqual(ipaddr.collapse_address_list([ip_same1, ip_same2]), 409 self.assertEqual(ipaddr.collapse_address_list([ip_same1, ip_same2]),
363 [ip_same1]) 410 [ip_same1])
364 ip1 = ipaddr.IPv6('::2001:1/100') 411 ip1 = ipaddr.IPv6('::2001:1/100')
365 ip2 = ipaddr.IPv6('::2002:1/120') 412 ip2 = ipaddr.IPv6('::2002:1/120')
366 ip3 = ipaddr.IPv6('::2001:1/96') 413 ip3 = ipaddr.IPv6('::2001:1/96')
367 # test that ipv6 addresses are subsumed properly. 414 # test that ipv6 addresses are subsumed properly.
368 collapsed = ipaddr.collapse_address_list([ip1, ip2, ip3]) 415 collapsed = ipaddr.collapse_address_list([ip1, ip2, ip3])
369 self.assertEqual(collapsed, [ip3]) 416 self.assertEqual(collapsed, [ip3])
370 417
371 def testSummarizing(self): 418 def testSummarizing(self):
372 ip = ipaddr.IP 419 ip = ipaddr.IP
373 summarize = ipaddr.summarize_address_range 420 summarize = ipaddr.summarize_address_range
374 ip1 = ip('1.1.1.0') 421 ip1 = ip('1.1.1.0', host=True)
375 ip2 = ip('1.1.1.255') 422 ip2 = ip('1.1.1.255', host=True)
376 # test a /24 is sumamrized properly 423 # test a /24 is sumamrized properly
377 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'))
378 # 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
379 ip2 = ip('1.1.1.8') 426 ip2 = ip('1.1.1.8', host=True)
380 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')])
381 428
382 ip1 = ip('1::') 429 ip1 = ip('1::', host=True)
383 ip2 = ip('1:ffff:ffff:ffff:ffff:ffff:ffff:ffff') 430 ip2 = ip('1:ffff:ffff:ffff:ffff:ffff:ffff:ffff', host=True)
384 # test a IPv6 is sumamrized properly 431 # test a IPv6 is sumamrized properly
385 self.assertEqual(summarize(ip1, ip2)[0], ip('1::/16')) 432 self.assertEqual(summarize(ip1, ip2)[0], ip('1::/16'))
386 # 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
387 ip2 = ip('2::') 434 ip2 = ip('2::', host=True)
388 self.assertEqual(summarize(ip1, ip2), [ip('1::/16'), ip('2::/128')]) 435 self.assertEqual(summarize(ip1, ip2), [ip('1::/16'), ip('2::/128')])
389 436
390 self.assertRaises(ValueError, summarize, ip('1.1.1.0'), ip('1.1.0.0')) 437 # test exception raised when first is greater than last
391 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))
392 448
393 def testNetworkComparison(self): 449 def testNetworkComparison(self):
394 # ip1 and ip2 have the same network address 450 # ip1 and ip2 have the same network address
395 ip1 = ipaddr.IPv4('1.1.1.0/24') 451 ip1 = ipaddr.IPv4('1.1.1.0/24')
396 ip2 = ipaddr.IPv4('1.1.1.1/24') 452 ip2 = ipaddr.IPv4('1.1.1.1/24')
397 ip3 = ipaddr.IPv4('1.1.2.0/24') 453 ip3 = ipaddr.IPv4('1.1.2.0/24')
398 454
399 self.assertTrue(ip1 < ip3) 455 self.assertTrue(ip1 < ip3)
400 self.assertTrue(ip3 > ip2) 456 self.assertTrue(ip3 > ip2)
401 457
(...skipping 12 matching lines...) Expand all
414 self.assertTrue(ip1._get_networks_key() == ip2._get_networks_key()) 470 self.assertTrue(ip1._get_networks_key() == ip2._get_networks_key())
415 self.assertEquals(ip1.compare_networks(ip3), -1) 471 self.assertEquals(ip1.compare_networks(ip3), -1)
416 self.assertTrue(ip1._get_networks_key() < ip3._get_networks_key()) 472 self.assertTrue(ip1._get_networks_key() < ip3._get_networks_key())
417 473
418 # Test comparing different protocols 474 # Test comparing different protocols
419 ipv6 = ipaddr.IPv6('::/0') 475 ipv6 = ipaddr.IPv6('::/0')
420 ipv4 = ipaddr.IPv4('0.0.0.0/0') 476 ipv4 = ipaddr.IPv4('0.0.0.0/0')
421 self.assertTrue(ipv6 > ipv4) 477 self.assertTrue(ipv6 > ipv4)
422 self.assertTrue(ipv4 < ipv6) 478 self.assertTrue(ipv4 < ipv6)
423 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
424 def testEmbeddedIpv4(self): 495 def testEmbeddedIpv4(self):
425 ipv4_string = '192.168.0.1' 496 ipv4_string = '192.168.0.1'
426 ipv4 = ipaddr.IPv4(ipv4_string) 497 ipv4 = ipaddr.IPv4(ipv4_string)
427 v4compat_ipv6 = ipaddr.IPv6('::%s' % ipv4_string) 498 v4compat_ipv6 = ipaddr.IPv6('::%s' % ipv4_string)
428 self.assertEquals(v4compat_ipv6.ip, ipv4.ip) 499 self.assertEquals(int(v4compat_ipv6.ip), int(ipv4.ip))
429 v4mapped_ipv6 = ipaddr.IPv6('::ffff:%s' % ipv4_string) 500 v4mapped_ipv6 = ipaddr.IPv6('::ffff:%s' % ipv4_string)
430 self.assertNotEquals(v4mapped_ipv6.ip, ipv4.ip) 501 self.assertNotEquals(v4mapped_ipv6.ip, ipv4.ip)
431 self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6, 502 self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6,
432 '2001:1.1.1.1:1.1.1.1') 503 '2001:1.1.1.1:1.1.1.1')
433 504
434 def testIPVersion(self): 505 def testIPVersion(self):
435 self.assertEqual(self.ipv4.version, 4) 506 self.assertEqual(self.ipv4.version, 4)
436 self.assertEqual(self.ipv6.version, 6) 507 self.assertEqual(self.ipv6.version, 6)
437 508
438 def testPacked(self): 509 def testPacked(self):
439 self.assertEqual(self.ipv4.packed, 510 self.assertEqual(self.ipv4.packed,
440 _cb('\x01\x02\x03\x04')) 511 _cb('\x01\x02\x03\x04'))
441 self.assertEqual(ipaddr.IPv4('255.254.253.252').packed, 512 self.assertEqual(ipaddr.IPv4('255.254.253.252').packed,
442 _cb('\xff\xfe\xfd\xfc')) 513 _cb('\xff\xfe\xfd\xfc'))
443 self.assertEqual(self.ipv6.packed, 514 self.assertEqual(self.ipv6.packed,
444 _cb('\x20\x01\x06\x58\x02\x2a\xca\xfe' 515 _cb('\x20\x01\x06\x58\x02\x2a\xca\xfe'
445 '\x02\x00\x00\x00\x00\x00\x00\x01')) 516 '\x02\x00\x00\x00\x00\x00\x00\x01'))
446 self.assertEqual(ipaddr.IPv6('ffff:2:3:4:ffff::').packed, 517 self.assertEqual(ipaddr.IPv6('ffff:2:3:4:ffff::').packed,
447 _cb('\xff\xff\x00\x02\x00\x03\x00\x04\xff\xff' 518 _cb('\xff\xff\x00\x02\x00\x03\x00\x04\xff\xff'
448 + '\x00' * 6)) 519 + '\x00' * 6))
449 self.assertEqual(ipaddr.IPv6('::1:0:0:0:0').packed, 520 self.assertEqual(ipaddr.IPv6('::1:0:0:0:0').packed,
450 _cb('\x00' * 6 + '\x00\x01' + '\x00' * 8)) 521 _cb('\x00' * 6 + '\x00\x01' + '\x00' * 8))
451 522
452 def testIpStrFromPrefixlen(self): 523 def testIpStrFromPrefixlen(self):
453 ipv4 = ipaddr.IPv4('1.2.3.4/24') 524 ipv4 = ipaddr.IPv4('1.2.3.4/24')
454 self.assertEquals(ipv4._ip_string_from_prefix(), '255.255.255.0') 525 self.assertEquals(ipv4._ip_string_from_prefix(), '255.255.255.0')
455 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')
456 527
457 def testIpType(self): 528 def testIpType(self):
458 ipv4 = ipaddr.IP('1.2.3.4') 529 ipv4net = ipaddr.IP('1.2.3.4')
459 ipv6 = ipaddr.IP('::1.2.3.4') 530 ipv4addr = ipaddr.IP('1.2.3.4', host=True)
460 self.assertEquals(ipaddr.IPv4, type(ipv4)) 531 ipv6net = ipaddr.IP('::1.2.3.4')
461 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))
462 537
463 def testReservedIpv4(self): 538 def testReservedIpv4(self):
464 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)
465 self.assertEquals(False, ipaddr.IP('240.0.0.0').is_multicast) 540 self.assertEquals(False, ipaddr.IP('240.0.0.0').is_multicast)
466 541
467 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)
468 self.assertEquals(False, ipaddr.IP('192.169.0.0').is_private) 543 self.assertEquals(False, ipaddr.IP('192.169.0.0').is_private)
469 self.assertEquals(True, ipaddr.IP('10.255.255.255').is_private) 544 self.assertEquals(True, ipaddr.IP('10.255.255.255').is_private)
470 self.assertEquals(False, ipaddr.IP('11.0.0.0').is_private) 545 self.assertEquals(False, ipaddr.IP('11.0.0.0').is_private)
471 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
515 addr2 = ipaddr.IP('10.1.1.0/26') 590 addr2 = ipaddr.IP('10.1.1.0/26')
516 addr3 = ipaddr.IP('10.2.1.0/24') 591 addr3 = ipaddr.IP('10.2.1.0/24')
517 self.assertEqual(addr1.address_exclude(addr2), 592 self.assertEqual(addr1.address_exclude(addr2),
518 [ipaddr.IP('10.1.1.64/26'), 593 [ipaddr.IP('10.1.1.64/26'),
519 ipaddr.IP('10.1.1.128/25')]) 594 ipaddr.IP('10.1.1.128/25')])
520 self.assertRaises(ValueError, addr1.address_exclude, addr3) 595 self.assertRaises(ValueError, addr1.address_exclude, addr3)
521 596
522 def testHash(self): 597 def testHash(self):
523 self.assertEquals(hash(ipaddr.IP('10.1.1.0/24')), 598 self.assertEquals(hash(ipaddr.IP('10.1.1.0/24')),
524 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)
525 dummy = {} 604 dummy = {}
526 dummy[self.ipv4] = None 605 dummy[self.ipv4] = None
527 dummy[self.ipv6] = None 606 dummy[self.ipv6] = None
607 dummy[ip1] = None
608 dummy[ip2] = None
528 self.assertTrue(self.ipv4 in dummy) 609 self.assertTrue(self.ipv4 in dummy)
610 self.assertTrue(ip2 in dummy)
529 611
530 def testIPv4PrefixFromInt(self): 612 def testIPv4PrefixFromInt(self):
531 addr1 = ipaddr.IP('10.1.1.0/24') 613 addr1 = ipaddr.IP('10.1.1.0/24')
532 addr2 = ipaddr.IPv4(addr1.ip) # clone prefix 614 addr2 = ipaddr.IPv4(int(addr1.ip)) # clone prefix
533 addr2.set_prefix(addr1.prefixlen) 615 addr2.set_prefix(addr1.prefixlen)
534 addr3 = ipaddr.IP(123456) 616 addr3 = ipaddr.IP(123456)
535 617
536 self.assertEqual(123456, addr3.ip) 618 self.assertEqual(123456, int(addr3.ip))
537 self.assertRaises(ipaddr.IPv4NetmaskValidationError, 619 self.assertRaises(ipaddr.IPv4NetmaskValidationError,
538 addr2.set_prefix, -1L) 620 addr2.set_prefix, -1L)
539 self.assertEqual(addr1, addr2) 621 self.assertEqual(addr1, addr2)
540 self.assertEqual(str(addr1), str(addr2)) 622 self.assertEqual(str(addr1), str(addr2))
541 623
542 def testIPv6PrefixFromInt(self): 624 def testIPv6PrefixFromInt(self):
543 addr1 = ipaddr.IP('2001:0658:022a:cafe:0200::1/64') 625 addr1 = ipaddr.IP('2001:0658:022a:cafe:0200::1/64')
544 addr2 = ipaddr.IPv6(addr1.ip) # clone prefix 626 addr2 = ipaddr.IPv6(addr1.ip) # clone prefix
545 addr2.set_prefix(addr1.prefixlen) 627 addr2.set_prefix(addr1.prefixlen)
546 addr3 = ipaddr.IP(123456) 628 addr3 = ipaddr.IP(123456)
547 629
548 self.assertEqual(123456, addr3.ip) 630 self.assertEqual(123456, int(addr3.ip))
549 self.assertRaises(ipaddr.IPv6NetmaskValidationError, 631 self.assertRaises(ipaddr.IPv6NetmaskValidationError,
550 addr2.set_prefix, -1L) 632 addr2.set_prefix, -1L)
551 self.assertEqual(addr1, addr2) 633 self.assertEqual(addr1, addr2)
552 self.assertEqual(str(addr1), str(addr2)) 634 self.assertEqual(str(addr1), str(addr2))
553 635
554 def testCopyConstructor(self): 636 def testCopyConstructor(self):
555 addr1 = ipaddr.IP('10.1.1.0/24') 637 addr1 = ipaddr.IP('10.1.1.0/24')
556 addr2 = ipaddr.IP(addr1) 638 addr2 = ipaddr.IP(addr1)
557 addr3 = ipaddr.IP('2001:658:22a:cafe:200::1/64') 639 addr3 = ipaddr.IP('2001:658:22a:cafe:200::1/64')
558 addr4 = ipaddr.IP(addr3) 640 addr4 = ipaddr.IP(addr3)
(...skipping 17 matching lines...) Expand all
576 '0:0:0:0:0:0:0:1': '::1/128', 658 '0:0:0:0:0:0:0:1': '::1/128',
577 '2001:0658:022a:cafe:0000:0000:0000:0000/66': 659 '2001:0658:022a:cafe:0000:0000:0000:0000/66':
578 '2001:658:22a:cafe::/66', 660 '2001:658:22a:cafe::/66',
579 } 661 }
580 for uncompressed, compressed in test_addresses.items(): 662 for uncompressed, compressed in test_addresses.items():
581 self.assertEquals(compressed, str(ipaddr.IPv6(uncompressed))) 663 self.assertEquals(compressed, str(ipaddr.IPv6(uncompressed)))
582 664
583 def testExplodeShortHandIpStr(self): 665 def testExplodeShortHandIpStr(self):
584 addr1 = ipaddr.IPv6('2001::1') 666 addr1 = ipaddr.IPv6('2001::1')
585 self.assertEqual('2001:0000:0000:0000:0000:0000:0000:0001', 667 self.assertEqual('2001:0000:0000:0000:0000:0000:0000:0001',
586 addr1._explode_shorthand_ip_string(addr1.ip_ext)) 668 addr1._explode_shorthand_ip_string(str(addr1.ip)))
587 669
588 def testIntRepresentation(self): 670 def testIntRepresentation(self):
589 self.assertEqual(16909060, int(self.ipv4)) 671 self.assertEqual(16909060, int(self.ipv4))
590 self.assertEqual(42540616829182469433547762482097946625, int(self.ipv6)) 672 self.assertEqual(42540616829182469433547762482097946625, int(self.ipv6))
591 673
592 def testHexRepresentation(self): 674 def testHexRepresentation(self):
593 self.assertEqual(hex(0x1020304), hex(self.ipv4)) 675 self.assertEqual(hex(0x1020304),
676 hex(self.ipv4))
594 677
595 self.assertEqual(hex(0x20010658022ACAFE0200000000000001), 678 self.assertEqual(hex(0x20010658022ACAFE0200000000000001),
596 hex(self.ipv6)) 679 hex(self.ipv6))
597 680
598 # backwards compatibility 681 # backwards compatibility
599 def testBackwardsCompability(self): 682 def testBackwardsCompability(self):
600 ip = ipaddr.IP 683 ip = ipaddr.IP
601 684
602 self.assertEqual(ipaddr.CollapseAddrList( 685 self.assertEqual(ipaddr.CollapseAddrList(
603 [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
623 self.assertEqual(ip('::/127').Subnet(), [ip('::/128'), ip('::1/128')]) 706 self.assertEqual(ip('::/127').Subnet(), [ip('::/128'), ip('::1/128')])
624 707
625 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'))
626 self.assertEqual(ip('::/121').Supernet(), ip('::/120')) 709 self.assertEqual(ip('::/121').Supernet(), ip('::/120'))
627 710
628 self.assertEqual(ip('10.0.0.02').IsRFC1918(), True) 711 self.assertEqual(ip('10.0.0.02').IsRFC1918(), True)
629 self.assertEqual(ip('10.0.0.0').IsMulticast(), False) 712 self.assertEqual(ip('10.0.0.0').IsMulticast(), False)
630 self.assertEqual(ip('127.255.255.255').IsLoopback(), True) 713 self.assertEqual(ip('127.255.255.255').IsLoopback(), True)
631 self.assertEqual(ip('169.255.255.255').IsLinkLocal(), False) 714 self.assertEqual(ip('169.255.255.255').IsLinkLocal(), False)
632 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
633 if __name__ == '__main__': 785 if __name__ == '__main__':
634 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