aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/test/test_uuid.py
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2017-11-28 17:26:04 -0500
committerGitHub <noreply@github.com>2017-11-28 17:26:04 -0500
commit23df2d1304ece169d7e0dfc843dfb8026b413d9f (patch)
treea7fdbffe4a5dc8e21f5b4a0734e5811451cc2aed /Lib/test/test_uuid.py
parent71bd588646b282c9eebc390b31184a5bdb54e712 (diff)
downloadcpython-23df2d1304ece169d7e0dfc843dfb8026b413d9f.tar.gz
cpython-23df2d1304ece169d7e0dfc843dfb8026b413d9f.zip
bpo-32107 - Improve MAC address calculation and fix test_uuid.py (#4600)
``uuid.getnode()`` now preferentially returns universally administered MAC addresses if available, over locally administered MAC addresses. This makes a better guarantee for global uniqueness of UUIDs returned from ``uuid.uuid1()``. If only locally administered MAC addresses are available, the first such one found is returned. Also improve internal code style by being explicit about ``return None`` rather than falling off the end of the function. Improve the test robustness.
Diffstat (limited to 'Lib/test/test_uuid.py')
-rw-r--r--Lib/test/test_uuid.py26
1 files changed, 12 insertions, 14 deletions
diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py
index 083c2aa8aab..f113c551209 100644
--- a/Lib/test/test_uuid.py
+++ b/Lib/test/test_uuid.py
@@ -512,59 +512,57 @@ eth0 Link encap:Ethernet HWaddr 12:34:56:78:90:ab
self.assertEqual(mac, 0x1234567890ab)
- def check_node(self, node, requires=None, network=False):
+ def check_node(self, node, requires=None):
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 = self.uuid._ifconfig_getnode()
- self.check_node(node, 'ifconfig', True)
+ self.check_node(node, 'ifconfig')
@unittest.skipUnless(os.name == 'posix', 'requires Posix')
def test_ip_getnode(self):
node = self.uuid._ip_getnode()
- self.check_node(node, 'ip', True)
+ self.check_node(node, 'ip')
@unittest.skipUnless(os.name == 'posix', 'requires Posix')
def test_arp_getnode(self):
node = self.uuid._arp_getnode()
- self.check_node(node, 'arp', True)
+ self.check_node(node, 'arp')
@unittest.skipUnless(os.name == 'posix', 'requires Posix')
def test_lanscan_getnode(self):
node = self.uuid._lanscan_getnode()
- self.check_node(node, 'lanscan', True)
+ self.check_node(node, 'lanscan')
@unittest.skipUnless(os.name == 'posix', 'requires Posix')
def test_netstat_getnode(self):
node = self.uuid._netstat_getnode()
- self.check_node(node, 'netstat', True)
+ self.check_node(node, 'netstat')
@unittest.skipUnless(os.name == 'nt', 'requires Windows')
def test_ipconfig_getnode(self):
node = self.uuid._ipconfig_getnode()
- self.check_node(node, 'ipconfig', True)
+ self.check_node(node, 'ipconfig')
@unittest.skipUnless(importable('win32wnet'), 'requires win32wnet')
@unittest.skipUnless(importable('netbios'), 'requires netbios')
def test_netbios_getnode(self):
node = self.uuid._netbios_getnode()
- self.check_node(node, network=True)
+ self.check_node(node)
def test_random_getnode(self):
node = self.uuid._random_getnode()
- # Least significant bit of first octet must be set.
- self.assertTrue(node & 0x010000000000, '%012x' % node)
+ # The multicast bit, i.e. the least significant bit of first octet,
+ # must be set for randomly generated MAC addresses. See RFC 4122,
+ # $4.1.6.
+ self.assertTrue(node & (1 << 40), '%012x' % node)
self.check_node(node)
@unittest.skipUnless(os.name == 'posix', 'requires Posix')