| 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 12 matching lines...) Expand all Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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() |
| LEFT | RIGHT |