mirror of
https://github.com/python/cpython.git
synced 2024-11-26 03:14:27 +08:00
Merged revisions 79954 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r79954 | stefan.krah | 2010-04-11 17:15:54 +0200 (Sun, 11 Apr 2010) | 17 lines Fix for issues #3581, #1481 and #7650: 1. The assumptions in check_node() were too restrictive: - Hardware addresses with universal_local_bit=1 are valid (locally administered). - Many of the tested functions (including uuid.getnode()) may return valid RFC 4122 random node IDs. These are pretty much random 48-bit values with the multicast bit set to 1. 2. _unixdll_getnode() calls _uuid_generate_time(), which may be None on some platforms. The resulting TypeError is now caught. ........
This commit is contained in:
parent
22005fc5ba
commit
6108ea8dad
@ -292,14 +292,8 @@ class TestUUID(TestCase):
|
||||
badtype(lambda: setattr(u, 'node', 0))
|
||||
|
||||
def check_node(self, node, source):
|
||||
individual_group_bit = (node >> 40) & 1
|
||||
universal_local_bit = (node >> 40) & 2
|
||||
message = "%012x doesn't look like a real MAC address" % node
|
||||
self.assertEqual(individual_group_bit, 0, message)
|
||||
self.assertEqual(universal_local_bit, 0, message)
|
||||
self.assertNotEqual(node, 0, message)
|
||||
self.assertNotEqual(node, 0xffffffffffff, message)
|
||||
self.assertTrue(0 <= node, message)
|
||||
message = "%012x is not an RFC 4122 node ID" % node
|
||||
self.assertTrue(0 < node, message)
|
||||
self.assertTrue(node < (1 << 48), message)
|
||||
|
||||
TestUUID.source2node[source] = node
|
||||
@ -318,10 +312,6 @@ class TestUUID(TestCase):
|
||||
|
||||
def test_ifconfig_getnode(self):
|
||||
import sys
|
||||
print(""" WARNING: uuid._ifconfig_getnode is unreliable on many platforms.
|
||||
It is disabled until the code and/or test can be fixed properly.""", file=sys.__stdout__)
|
||||
return
|
||||
|
||||
import os
|
||||
if os.name == 'posix':
|
||||
node = uuid._ifconfig_getnode()
|
||||
@ -341,18 +331,18 @@ class TestUUID(TestCase):
|
||||
|
||||
def test_random_getnode(self):
|
||||
node = uuid._random_getnode()
|
||||
self.assertTrue(0 <= node)
|
||||
# Least significant bit of first octet must be set.
|
||||
self.assertTrue(node & 0x010000000000)
|
||||
self.assertTrue(node < (1 << 48))
|
||||
|
||||
def test_unixdll_getnode(self):
|
||||
import sys
|
||||
print(""" WARNING: uuid._unixdll_getnode is unreliable on many platforms.
|
||||
It is disabled until the code and/or test can be fixed properly.""", file=sys.__stdout__)
|
||||
return
|
||||
|
||||
import os
|
||||
if importable('ctypes') and os.name == 'posix':
|
||||
try: # Issues 1481, 3581: _uuid_generate_time() might be None.
|
||||
self.check_node(uuid._unixdll_getnode(), 'unixdll')
|
||||
except TypeError:
|
||||
pass
|
||||
|
||||
def test_windll_getnode(self):
|
||||
import os
|
||||
@ -361,10 +351,6 @@ class TestUUID(TestCase):
|
||||
|
||||
def test_getnode(self):
|
||||
import sys
|
||||
print(""" WARNING: uuid.getnode is unreliable on many platforms.
|
||||
It is disabled until the code and/or test can be fixed properly.""", file=sys.__stdout__)
|
||||
return
|
||||
|
||||
node1 = uuid.getnode()
|
||||
self.check_node(node1, "getnode1")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user