summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2014-12-15 10:06:22 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2014-12-15 10:06:22 (GMT)
commit0e32ea1089059a15b04a40c43bfe671e38ae16e7 (patch)
tree47f6b32c6e3fff674f320bd35d98c90768ec5cde /Lib/test
parent7bb7793bc0dbda7ccf3844c9e222408246e374f6 (diff)
parent79b81738ef052e9406adb8e98f0d292928053c01 (diff)
downloadcpython-0e32ea1089059a15b04a40c43bfe671e38ae16e7.zip
cpython-0e32ea1089059a15b04a40c43bfe671e38ae16e7.tar.gz
cpython-0e32ea1089059a15b04a40c43bfe671e38ae16e7.tar.bz2
Issue #23015: Improved testing of the uuid module.
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_uuid.py208
1 files changed, 98 insertions, 110 deletions
diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py
index bc83de2..fcb8454 100644
--- a/Lib/test/test_uuid.py
+++ b/Lib/test/test_uuid.py
@@ -15,9 +15,6 @@ def importable(name):
return False
class TestUUID(unittest.TestCase):
- last_node = None
- source2node = {}
-
def test_UUID(self):
equal = self.assertEqual
ascending = []
@@ -295,118 +292,13 @@ class TestUUID(unittest.TestCase):
badtype(lambda: setattr(u, 'clock_seq_low', 0))
badtype(lambda: setattr(u, 'node', 0))
- def check_node(self, node, source):
- 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
- if TestUUID.last_node:
- if TestUUID.last_node != node:
- msg = "different sources disagree on node:\n"
- for s, n in TestUUID.source2node.items():
- msg += " from source %r, node was %012x\n" % (s, n)
- # There's actually no reason to expect the MAC addresses
- # to agree across various methods -- e.g., a box may have
- # multiple network interfaces, and different ways of getting
- # a MAC address may favor different HW.
- ##self.fail(msg)
- else:
- TestUUID.last_node = node
-
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
- def test_ifconfig_getnode(self):
- node = uuid._ifconfig_getnode()
- if node is not None:
- self.check_node(node, 'ifconfig')
-
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
- def test_ip_getnode(self):
- node = uuid._ip_getnode()
- if node is not None:
- self.check_node(node, 'ip')
-
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
- def test_arp_getnode(self):
- node = uuid._arp_getnode()
- if node is not None:
- self.check_node(node, 'arp')
-
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
- def test_lanscan_getnode(self):
- node = uuid._lanscan_getnode()
- if node is not None:
- self.check_node(node, 'lanscan')
-
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
- def test_netstat_getnode(self):
- node = uuid._netstat_getnode()
- if node is not None:
- self.check_node(node, 'netstat')
-
- @unittest.skipUnless(os.name == 'nt', 'requires Windows')
- def test_ipconfig_getnode(self):
- node = uuid._ipconfig_getnode()
- if node is not None:
- self.check_node(node, 'ipconfig')
-
- @unittest.skipUnless(importable('win32wnet'), 'requires win32wnet')
- @unittest.skipUnless(importable('netbios'), 'requires netbios')
- def test_netbios_getnode(self):
- self.check_node(uuid._netbios_getnode(), 'netbios')
-
- def test_random_getnode(self):
- node = uuid._random_getnode()
- # Least significant bit of first octet must be set.
- self.assertTrue(node & 0x010000000000)
- self.assertTrue(node < (1 << 48))
-
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
- @unittest.skipUnless(importable('ctypes'), 'requires ctypes')
- def test_unixdll_getnode(self):
- try: # Issues 1481, 3581: _uuid_generate_time() might be None.
- self.check_node(uuid._unixdll_getnode(), 'unixdll')
- except TypeError:
- pass
-
- @unittest.skipUnless(os.name == 'nt', 'requires Windows')
- @unittest.skipUnless(importable('ctypes'), 'requires ctypes')
- def test_windll_getnode(self):
- self.check_node(uuid._windll_getnode(), 'windll')
-
def test_getnode(self):
node1 = uuid.getnode()
- self.check_node(node1, "getnode1")
+ self.assertTrue(0 < node1 < (1 << 48), '%012x' % node1)
# Test it again to ensure consistency.
node2 = uuid.getnode()
- self.check_node(node2, "getnode2")
-
- self.assertEqual(node1, node2)
-
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
- def test_find_mac(self):
- data = '''
-fake hwaddr
-cscotun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
-eth0 Link encap:Ethernet HWaddr 12:34:56:78:90:ab
-'''
-
- popen = unittest.mock.MagicMock()
- popen.stdout = io.BytesIO(data.encode())
-
- with unittest.mock.patch.object(shutil, 'which',
- return_value='/sbin/ifconfig'):
- with unittest.mock.patch.object(subprocess, 'Popen',
- return_value=popen):
- mac = uuid._find_mac(
- command='ifconfig',
- args='',
- hw_identifiers=[b'hwaddr'],
- get_index=lambda x: x + 1,
- )
-
- self.assertEqual(mac, 0x1234567890ab)
+ self.assertEqual(node1, node2, '%012x != %012x' % (node1, node2))
@unittest.skipUnless(importable('ctypes'), 'requires ctypes')
def test_uuid1(self):
@@ -518,5 +410,101 @@ eth0 Link encap:Ethernet HWaddr 12:34:56:78:90:ab
self.assertNotEqual(parent_value, child_value)
+class TestInternals(unittest.TestCase):
+ @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ def test_find_mac(self):
+ data = '''
+fake hwaddr
+cscotun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
+eth0 Link encap:Ethernet HWaddr 12:34:56:78:90:ab
+'''
+
+ popen = unittest.mock.MagicMock()
+ popen.stdout = io.BytesIO(data.encode())
+
+ with unittest.mock.patch.object(shutil, 'which',
+ return_value='/sbin/ifconfig'):
+ with unittest.mock.patch.object(subprocess, 'Popen',
+ return_value=popen):
+ mac = uuid._find_mac(
+ command='ifconfig',
+ args='',
+ hw_identifiers=[b'hwaddr'],
+ get_index=lambda x: x + 1,
+ )
+
+ self.assertEqual(mac, 0x1234567890ab)
+
+ def check_node(self, node, requires=None, network=False):
+ if requires and node is None:
+ self.skipTest('requires ' + requires)
+ hex = '%012x' % node
+ if support.verbose >= 2:
+ print(hex, end=' ')
+ if network:
+ # 47 bit will never be set in IEEE 802 addresses obtained
+ # from network cards.
+ self.assertFalse(node & 0x010000000000, hex)
+ self.assertTrue(0 < node < (1 << 48),
+ "%s is not an RFC 4122 node ID" % hex)
+
+ @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ def test_ifconfig_getnode(self):
+ node = uuid._ifconfig_getnode()
+ self.check_node(node, 'ifconfig', True)
+
+ @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ def test_ip_getnode(self):
+ node = uuid._ip_getnode()
+ self.check_node(node, 'ip', True)
+
+ @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ def test_arp_getnode(self):
+ node = uuid._arp_getnode()
+ self.check_node(node, 'arp', True)
+
+ @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ def test_lanscan_getnode(self):
+ node = uuid._lanscan_getnode()
+ self.check_node(node, 'lanscan', True)
+
+ @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ def test_netstat_getnode(self):
+ node = uuid._netstat_getnode()
+ self.check_node(node, 'netstat', True)
+
+ @unittest.skipUnless(os.name == 'nt', 'requires Windows')
+ def test_ipconfig_getnode(self):
+ node = uuid._ipconfig_getnode()
+ self.check_node(node, 'ipconfig', True)
+
+ @unittest.skipUnless(importable('win32wnet'), 'requires win32wnet')
+ @unittest.skipUnless(importable('netbios'), 'requires netbios')
+ def test_netbios_getnode(self):
+ node = uuid._netbios_getnode()
+ self.check_node(node, network=True)
+
+ def test_random_getnode(self):
+ node = uuid._random_getnode()
+ # Least significant bit of first octet must be set.
+ self.assertTrue(node & 0x010000000000, '%012x' % node)
+ self.check_node(node)
+
+ @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ @unittest.skipUnless(importable('ctypes'), 'requires ctypes')
+ def test_unixdll_getnode(self):
+ try: # Issues 1481, 3581: _uuid_generate_time() might be None.
+ node = uuid._unixdll_getnode()
+ except TypeError:
+ self.skipTest('requires uuid_generate_time')
+ self.check_node(node)
+
+ @unittest.skipUnless(os.name == 'nt', 'requires Windows')
+ @unittest.skipUnless(importable('ctypes'), 'requires ctypes')
+ def test_windll_getnode(self):
+ node = uuid._windll_getnode()
+ self.check_node(node)
+
+
if __name__ == '__main__':
unittest.main()