[Python-checkins] r79961 - in python/branches/release31-maint: Lib/test/test_uuid.py

stefan.krah python-checkins at python.org
Sun Apr 11 18:50:48 CEST 2010


Author: stefan.krah
Date: Sun Apr 11 18:50:48 2010
New Revision: 79961

Log:
Merged revisions 79960 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r79960 | stefan.krah | 2010-04-11 18:49:20 +0200 (Sun, 11 Apr 2010) | 22 lines
  
  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.
  ........
................


Modified:
   python/branches/release31-maint/   (props changed)
   python/branches/release31-maint/Lib/test/test_uuid.py

Modified: python/branches/release31-maint/Lib/test/test_uuid.py
==============================================================================
--- python/branches/release31-maint/Lib/test/test_uuid.py	(original)
+++ python/branches/release31-maint/Lib/test/test_uuid.py	Sun Apr 11 18:50:48 2010
@@ -286,14 +286,8 @@
         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
@@ -312,10 +306,6 @@
 
     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()
@@ -335,18 +325,18 @@
 
     def test_random_getnode(self):
         node = uuid._random_getnode()
-        self.assertTrue(0 <= node)
-        self.assertTrue(node < (1 <<48))
+        # 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':
-            self.check_node(uuid._unixdll_getnode(), 'unixdll')
+            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
@@ -355,10 +345,6 @@
 
     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")
 


More information about the Python-checkins mailing list