LEFT | RIGHT |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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() |
LEFT | RIGHT |