mirror of
https://github.com/python/cpython.git
synced 2025-07-28 21:55:21 +00:00

concept, and that different ways of trying to find "the hardware address" may return different results. Certainly true on both of my Windows boxes, and in different ways (see whining on python-dev).
416 lines
18 KiB
Python
416 lines
18 KiB
Python
from unittest import TestCase
|
|
from test import test_support
|
|
import uuid
|
|
|
|
def importable(name):
|
|
try:
|
|
__import__(name)
|
|
return True
|
|
except:
|
|
return False
|
|
|
|
class TestUUID(TestCase):
|
|
last_node = None
|
|
source2node = {}
|
|
|
|
def test_UUID(self):
|
|
equal = self.assertEqual
|
|
ascending = []
|
|
for (string, curly, hex, bytes, fields, integer, urn,
|
|
time, clock_seq, variant, version) in [
|
|
('00000000-0000-0000-0000-000000000000',
|
|
'{00000000-0000-0000-0000-000000000000}',
|
|
'00000000000000000000000000000000',
|
|
'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
|
|
(0, 0, 0, 0, 0, 0),
|
|
0,
|
|
'urn:uuid:00000000-0000-0000-0000-000000000000',
|
|
0, 0, uuid.RESERVED_NCS, None),
|
|
('00010203-0405-0607-0809-0a0b0c0d0e0f',
|
|
'{00010203-0405-0607-0809-0a0b0c0d0e0f}',
|
|
'000102030405060708090a0b0c0d0e0f',
|
|
'\0\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\x0d\x0e\x0f',
|
|
(0x00010203L, 0x0405, 0x0607, 8, 9, 0x0a0b0c0d0e0fL),
|
|
0x000102030405060708090a0b0c0d0e0fL,
|
|
'urn:uuid:00010203-0405-0607-0809-0a0b0c0d0e0f',
|
|
0x607040500010203L, 0x809, uuid.RESERVED_NCS, None),
|
|
('02d9e6d5-9467-382e-8f9b-9300a64ac3cd',
|
|
'{02d9e6d5-9467-382e-8f9b-9300a64ac3cd}',
|
|
'02d9e6d59467382e8f9b9300a64ac3cd',
|
|
'\x02\xd9\xe6\xd5\x94\x67\x38\x2e\x8f\x9b\x93\x00\xa6\x4a\xc3\xcd',
|
|
(0x02d9e6d5L, 0x9467, 0x382e, 0x8f, 0x9b, 0x9300a64ac3cdL),
|
|
0x02d9e6d59467382e8f9b9300a64ac3cdL,
|
|
'urn:uuid:02d9e6d5-9467-382e-8f9b-9300a64ac3cd',
|
|
0x82e946702d9e6d5L, 0xf9b, uuid.RFC_4122, 3),
|
|
('12345678-1234-5678-1234-567812345678',
|
|
'{12345678-1234-5678-1234-567812345678}',
|
|
'12345678123456781234567812345678',
|
|
'\x12\x34\x56\x78'*4,
|
|
(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678),
|
|
0x12345678123456781234567812345678,
|
|
'urn:uuid:12345678-1234-5678-1234-567812345678',
|
|
0x678123412345678L, 0x1234, uuid.RESERVED_NCS, None),
|
|
('6ba7b810-9dad-11d1-80b4-00c04fd430c8',
|
|
'{6ba7b810-9dad-11d1-80b4-00c04fd430c8}',
|
|
'6ba7b8109dad11d180b400c04fd430c8',
|
|
'\x6b\xa7\xb8\x10\x9d\xad\x11\xd1\x80\xb4\x00\xc0\x4f\xd4\x30\xc8',
|
|
(0x6ba7b810L, 0x9dad, 0x11d1, 0x80, 0xb4, 0x00c04fd430c8L),
|
|
0x6ba7b8109dad11d180b400c04fd430c8L,
|
|
'urn:uuid:6ba7b810-9dad-11d1-80b4-00c04fd430c8',
|
|
0x1d19dad6ba7b810L, 0xb4, uuid.RFC_4122, 1),
|
|
('6ba7b811-9dad-11d1-80b4-00c04fd430c8',
|
|
'{6ba7b811-9dad-11d1-80b4-00c04fd430c8}',
|
|
'6ba7b8119dad11d180b400c04fd430c8',
|
|
'\x6b\xa7\xb8\x11\x9d\xad\x11\xd1\x80\xb4\x00\xc0\x4f\xd4\x30\xc8',
|
|
(0x6ba7b811L, 0x9dad, 0x11d1, 0x80, 0xb4, 0x00c04fd430c8L),
|
|
0x6ba7b8119dad11d180b400c04fd430c8L,
|
|
'urn:uuid:6ba7b811-9dad-11d1-80b4-00c04fd430c8',
|
|
0x1d19dad6ba7b811L, 0xb4, uuid.RFC_4122, 1),
|
|
('6ba7b812-9dad-11d1-80b4-00c04fd430c8',
|
|
'{6ba7b812-9dad-11d1-80b4-00c04fd430c8}',
|
|
'6ba7b8129dad11d180b400c04fd430c8',
|
|
'\x6b\xa7\xb8\x12\x9d\xad\x11\xd1\x80\xb4\x00\xc0\x4f\xd4\x30\xc8',
|
|
(0x6ba7b812L, 0x9dad, 0x11d1, 0x80, 0xb4, 0x00c04fd430c8L),
|
|
0x6ba7b8129dad11d180b400c04fd430c8L,
|
|
'urn:uuid:6ba7b812-9dad-11d1-80b4-00c04fd430c8',
|
|
0x1d19dad6ba7b812L, 0xb4, uuid.RFC_4122, 1),
|
|
('6ba7b814-9dad-11d1-80b4-00c04fd430c8',
|
|
'{6ba7b814-9dad-11d1-80b4-00c04fd430c8}',
|
|
'6ba7b8149dad11d180b400c04fd430c8',
|
|
'\x6b\xa7\xb8\x14\x9d\xad\x11\xd1\x80\xb4\x00\xc0\x4f\xd4\x30\xc8',
|
|
(0x6ba7b814L, 0x9dad, 0x11d1, 0x80, 0xb4, 0x00c04fd430c8L),
|
|
0x6ba7b8149dad11d180b400c04fd430c8L,
|
|
'urn:uuid:6ba7b814-9dad-11d1-80b4-00c04fd430c8',
|
|
0x1d19dad6ba7b814L, 0xb4, uuid.RFC_4122, 1),
|
|
('7d444840-9dc0-11d1-b245-5ffdce74fad2',
|
|
'{7d444840-9dc0-11d1-b245-5ffdce74fad2}',
|
|
'7d4448409dc011d1b2455ffdce74fad2',
|
|
'\x7d\x44\x48\x40\x9d\xc0\x11\xd1\xb2\x45\x5f\xfd\xce\x74\xfa\xd2',
|
|
(0x7d444840L, 0x9dc0, 0x11d1, 0xb2, 0x45, 0x5ffdce74fad2L),
|
|
0x7d4448409dc011d1b2455ffdce74fad2L,
|
|
'urn:uuid:7d444840-9dc0-11d1-b245-5ffdce74fad2',
|
|
0x1d19dc07d444840L, 0x3245, uuid.RFC_4122, 1),
|
|
('e902893a-9d22-3c7e-a7b8-d6e313b71d9f',
|
|
'{e902893a-9d22-3c7e-a7b8-d6e313b71d9f}',
|
|
'e902893a9d223c7ea7b8d6e313b71d9f',
|
|
'\xe9\x02\x89\x3a\x9d\x22\x3c\x7e\xa7\xb8\xd6\xe3\x13\xb7\x1d\x9f',
|
|
(0xe902893aL, 0x9d22, 0x3c7e, 0xa7, 0xb8, 0xd6e313b71d9fL),
|
|
0xe902893a9d223c7ea7b8d6e313b71d9fL,
|
|
'urn:uuid:e902893a-9d22-3c7e-a7b8-d6e313b71d9f',
|
|
0xc7e9d22e902893aL, 0x27b8, uuid.RFC_4122, 3),
|
|
('eb424026-6f54-4ef8-a4d0-bb658a1fc6cf',
|
|
'{eb424026-6f54-4ef8-a4d0-bb658a1fc6cf}',
|
|
'eb4240266f544ef8a4d0bb658a1fc6cf',
|
|
'\xeb\x42\x40\x26\x6f\x54\x4e\xf8\xa4\xd0\xbb\x65\x8a\x1f\xc6\xcf',
|
|
(0xeb424026L, 0x6f54, 0x4ef8, 0xa4, 0xd0, 0xbb658a1fc6cfL),
|
|
0xeb4240266f544ef8a4d0bb658a1fc6cfL,
|
|
'urn:uuid:eb424026-6f54-4ef8-a4d0-bb658a1fc6cf',
|
|
0xef86f54eb424026L, 0x24d0, uuid.RFC_4122, 4),
|
|
('f81d4fae-7dec-11d0-a765-00a0c91e6bf6',
|
|
'{f81d4fae-7dec-11d0-a765-00a0c91e6bf6}',
|
|
'f81d4fae7dec11d0a76500a0c91e6bf6',
|
|
'\xf8\x1d\x4f\xae\x7d\xec\x11\xd0\xa7\x65\x00\xa0\xc9\x1e\x6b\xf6',
|
|
(0xf81d4faeL, 0x7dec, 0x11d0, 0xa7, 0x65, 0x00a0c91e6bf6L),
|
|
0xf81d4fae7dec11d0a76500a0c91e6bf6L,
|
|
'urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6',
|
|
0x1d07decf81d4faeL, 0x2765, uuid.RFC_4122, 1),
|
|
('fffefdfc-fffe-fffe-fffe-fffefdfcfbfa',
|
|
'{fffefdfc-fffe-fffe-fffe-fffefdfcfbfa}',
|
|
'fffefdfcfffefffefffefffefdfcfbfa',
|
|
'\xff\xfe\xfd\xfc\xff\xfe\xff\xfe\xff\xfe\xff\xfe\xfd\xfc\xfb\xfa',
|
|
(0xfffefdfcL, 0xfffe, 0xfffe, 0xff, 0xfe, 0xfffefdfcfbfaL),
|
|
0xfffefdfcfffefffefffefffefdfcfbfaL,
|
|
'urn:uuid:fffefdfc-fffe-fffe-fffe-fffefdfcfbfa',
|
|
0xffefffefffefdfcL, 0x3ffe, uuid.RESERVED_FUTURE, None),
|
|
('ffffffff-ffff-ffff-ffff-ffffffffffff',
|
|
'{ffffffff-ffff-ffff-ffff-ffffffffffff}',
|
|
'ffffffffffffffffffffffffffffffff',
|
|
'\xff'*16,
|
|
(0xffffffffL, 0xffffL, 0xffffL, 0xff, 0xff, 0xffffffffffffL),
|
|
0xffffffffffffffffffffffffffffffffL,
|
|
'urn:uuid:ffffffff-ffff-ffff-ffff-ffffffffffff',
|
|
0xfffffffffffffffL, 0x3fff, uuid.RESERVED_FUTURE, None),
|
|
]:
|
|
equivalents = []
|
|
# Construct each UUID in several different ways.
|
|
for u in [uuid.UUID(string), uuid.UUID(curly), uuid.UUID(hex),
|
|
uuid.UUID(bytes=bytes), uuid.UUID(fields=fields),
|
|
uuid.UUID(int=integer), uuid.UUID(urn)]:
|
|
# Test all conversions and properties of the UUID object.
|
|
equal(str(u), string)
|
|
equal(int(u), integer)
|
|
equal(u.bytes, bytes)
|
|
equal(u.fields, fields)
|
|
equal(u.time_low, fields[0])
|
|
equal(u.time_mid, fields[1])
|
|
equal(u.time_hi_version, fields[2])
|
|
equal(u.clock_seq_hi_variant, fields[3])
|
|
equal(u.clock_seq_low, fields[4])
|
|
equal(u.node, fields[5])
|
|
equal(u.hex, hex)
|
|
equal(u.int, integer)
|
|
equal(u.urn, urn)
|
|
equal(u.time, time)
|
|
equal(u.clock_seq, clock_seq)
|
|
equal(u.variant, variant)
|
|
equal(u.version, version)
|
|
equivalents.append(u)
|
|
|
|
# Different construction methods should give the same UUID.
|
|
for u in equivalents:
|
|
for v in equivalents:
|
|
equal(u, v)
|
|
ascending.append(u)
|
|
|
|
# Test comparison of UUIDs.
|
|
for i in range(len(ascending)):
|
|
for j in range(len(ascending)):
|
|
equal(cmp(i, j), cmp(ascending[i], ascending[j]))
|
|
|
|
# Test sorting of UUIDs (above list is in ascending order).
|
|
resorted = ascending[:]
|
|
resorted.reverse()
|
|
resorted.sort()
|
|
equal(ascending, resorted)
|
|
|
|
def test_exceptions(self):
|
|
badvalue = lambda f: self.assertRaises(ValueError, f)
|
|
badtype = lambda f: self.assertRaises(TypeError, f)
|
|
|
|
# Badly formed hex strings.
|
|
badvalue(lambda: uuid.UUID(''))
|
|
badvalue(lambda: uuid.UUID('abc'))
|
|
badvalue(lambda: uuid.UUID('1234567812345678123456781234567'))
|
|
badvalue(lambda: uuid.UUID('123456781234567812345678123456789'))
|
|
badvalue(lambda: uuid.UUID('123456781234567812345678z2345678'))
|
|
|
|
# Badly formed bytes.
|
|
badvalue(lambda: uuid.UUID(bytes='abc'))
|
|
badvalue(lambda: uuid.UUID(bytes='\0'*15))
|
|
badvalue(lambda: uuid.UUID(bytes='\0'*17))
|
|
|
|
# Badly formed fields.
|
|
badvalue(lambda: uuid.UUID(fields=(1,)))
|
|
badvalue(lambda: uuid.UUID(fields=(1, 2, 3, 4, 5)))
|
|
badvalue(lambda: uuid.UUID(fields=(1, 2, 3, 4, 5, 6, 7)))
|
|
|
|
# Field values out of range.
|
|
badvalue(lambda: uuid.UUID(fields=(-1, 0, 0, 0, 0, 0)))
|
|
badvalue(lambda: uuid.UUID(fields=(0x100000000L, 0, 0, 0, 0, 0)))
|
|
badvalue(lambda: uuid.UUID(fields=(0, -1, 0, 0, 0, 0)))
|
|
badvalue(lambda: uuid.UUID(fields=(0, 0x10000L, 0, 0, 0, 0)))
|
|
badvalue(lambda: uuid.UUID(fields=(0, 0, -1, 0, 0, 0)))
|
|
badvalue(lambda: uuid.UUID(fields=(0, 0, 0x10000L, 0, 0, 0)))
|
|
badvalue(lambda: uuid.UUID(fields=(0, 0, 0, -1, 0, 0)))
|
|
badvalue(lambda: uuid.UUID(fields=(0, 0, 0, 0x100L, 0, 0)))
|
|
badvalue(lambda: uuid.UUID(fields=(0, 0, 0, 0, -1, 0)))
|
|
badvalue(lambda: uuid.UUID(fields=(0, 0, 0, 0, 0x100L, 0)))
|
|
badvalue(lambda: uuid.UUID(fields=(0, 0, 0, 0, 0, -1)))
|
|
badvalue(lambda: uuid.UUID(fields=(0, 0, 0, 0, 0, 0x1000000000000L)))
|
|
|
|
# Version number out of range.
|
|
badvalue(lambda: uuid.UUID('00'*16, version=0))
|
|
badvalue(lambda: uuid.UUID('00'*16, version=6))
|
|
|
|
# Integer value out of range.
|
|
badvalue(lambda: uuid.UUID(int=-1))
|
|
badvalue(lambda: uuid.UUID(int=1<<128L))
|
|
|
|
# Must supply exactly one of hex, bytes, fields, int.
|
|
h, b, f, i = '00'*16, '\0'*16, (0, 0, 0, 0, 0, 0), 0
|
|
uuid.UUID(h)
|
|
uuid.UUID(hex=h)
|
|
uuid.UUID(bytes=b)
|
|
uuid.UUID(fields=f)
|
|
uuid.UUID(int=i)
|
|
|
|
# Wrong number of arguments (positional).
|
|
badtype(lambda: uuid.UUID())
|
|
badtype(lambda: uuid.UUID(h, b))
|
|
badtype(lambda: uuid.UUID(h, b, f))
|
|
badtype(lambda: uuid.UUID(h, b, f, i))
|
|
|
|
# Duplicate arguments (named).
|
|
badtype(lambda: uuid.UUID(hex=h, bytes=b))
|
|
badtype(lambda: uuid.UUID(hex=h, fields=f))
|
|
badtype(lambda: uuid.UUID(hex=h, int=i))
|
|
badtype(lambda: uuid.UUID(bytes=b, fields=f))
|
|
badtype(lambda: uuid.UUID(bytes=b, int=i))
|
|
badtype(lambda: uuid.UUID(fields=f, int=i))
|
|
badtype(lambda: uuid.UUID(hex=h, bytes=b, fields=f))
|
|
badtype(lambda: uuid.UUID(hex=h, bytes=b, int=i))
|
|
badtype(lambda: uuid.UUID(hex=h, fields=f, int=i))
|
|
badtype(lambda: uuid.UUID(bytes=b, int=i, fields=f))
|
|
badtype(lambda: uuid.UUID(hex=h, bytes=b, int=i, fields=f))
|
|
|
|
# Duplicate arguments (positional and named).
|
|
badtype(lambda: uuid.UUID(h, hex=h))
|
|
badtype(lambda: uuid.UUID(h, bytes=b))
|
|
badtype(lambda: uuid.UUID(h, fields=f))
|
|
badtype(lambda: uuid.UUID(h, int=i))
|
|
badtype(lambda: uuid.UUID(h, hex=h, bytes=b))
|
|
badtype(lambda: uuid.UUID(h, hex=h, fields=f))
|
|
badtype(lambda: uuid.UUID(h, hex=h, int=i))
|
|
badtype(lambda: uuid.UUID(h, bytes=b, fields=f))
|
|
badtype(lambda: uuid.UUID(h, bytes=b, int=i))
|
|
badtype(lambda: uuid.UUID(h, fields=f, int=i))
|
|
badtype(lambda: uuid.UUID(h, hex=h, bytes=b, fields=f))
|
|
badtype(lambda: uuid.UUID(h, hex=h, bytes=b, int=i))
|
|
badtype(lambda: uuid.UUID(h, hex=h, fields=f, int=i))
|
|
badtype(lambda: uuid.UUID(h, bytes=b, int=i, fields=f))
|
|
badtype(lambda: uuid.UUID(h, hex=h, bytes=b, int=i, fields=f))
|
|
|
|
# Immutability.
|
|
u = uuid.UUID(h)
|
|
badtype(lambda: setattr(u, 'hex', h))
|
|
badtype(lambda: setattr(u, 'bytes', b))
|
|
badtype(lambda: setattr(u, 'fields', f))
|
|
badtype(lambda: setattr(u, 'int', i))
|
|
|
|
def check_node(self, node, source):
|
|
individual_group_bit = (node >> 40L) & 1
|
|
universal_local_bit = (node >> 40L) & 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, 0xffffffffffffL, message)
|
|
self.assert_(0 <= node, message)
|
|
self.assert_(node < (1L << 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.iteritems():
|
|
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
|
|
|
|
def test_ifconfig_getnode(self):
|
|
import os
|
|
if os.name == 'posix':
|
|
node = uuid._ifconfig_getnode()
|
|
if node is not None:
|
|
self.check_node(node, 'ifconfig')
|
|
|
|
def test_ipconfig_getnode(self):
|
|
import os
|
|
if os.name == 'nt':
|
|
node = uuid._ipconfig_getnode()
|
|
if node is not None:
|
|
self.check_node(node, 'ipconfig')
|
|
|
|
def test_netbios_getnode(self):
|
|
if importable('win32wnet') and importable('netbios'):
|
|
self.check_node(uuid._netbios_getnode(), 'netbios')
|
|
|
|
def test_random_getnode(self):
|
|
node = uuid._random_getnode()
|
|
self.assert_(0 <= node)
|
|
self.assert_(node < (1L <<48))
|
|
|
|
def test_unixdll_getnode(self):
|
|
import os
|
|
if importable('ctypes') and os.name == 'posix':
|
|
self.check_node(uuid._unixdll_getnode(), 'unixdll')
|
|
|
|
def test_windll_getnode(self):
|
|
import os
|
|
if importable('ctypes') and os.name == 'nt':
|
|
self.check_node(uuid._windll_getnode(), 'windll')
|
|
|
|
def test_getnode(self):
|
|
node1 = uuid.getnode()
|
|
self.check_node(node1, "getnode1")
|
|
|
|
# Test it again to ensure consistency.
|
|
node2 = uuid.getnode()
|
|
self.check_node(node2, "getnode2")
|
|
|
|
self.assertEqual(node1, node2)
|
|
|
|
def test_uuid1(self):
|
|
equal = self.assertEqual
|
|
|
|
# Make sure uuid4() generates UUIDs that are actually version 1.
|
|
for u in [uuid.uuid1() for i in range(10)]:
|
|
equal(u.variant, uuid.RFC_4122)
|
|
equal(u.version, 1)
|
|
|
|
# Make sure the supplied node ID appears in the UUID.
|
|
u = uuid.uuid1(0)
|
|
equal(u.node, 0)
|
|
u = uuid.uuid1(0x123456789abc)
|
|
equal(u.node, 0x123456789abc)
|
|
u = uuid.uuid1(0xffffffffffff)
|
|
equal(u.node, 0xffffffffffff)
|
|
|
|
# Make sure the supplied clock sequence appears in the UUID.
|
|
u = uuid.uuid1(0x123456789abc, 0)
|
|
equal(u.node, 0x123456789abc)
|
|
equal(((u.clock_seq_hi_variant & 0x3f) << 8) | u.clock_seq_low, 0)
|
|
u = uuid.uuid1(0x123456789abc, 0x1234)
|
|
equal(u.node, 0x123456789abc)
|
|
equal(((u.clock_seq_hi_variant & 0x3f) << 8) |
|
|
u.clock_seq_low, 0x1234)
|
|
u = uuid.uuid1(0x123456789abc, 0x3fff)
|
|
equal(u.node, 0x123456789abc)
|
|
equal(((u.clock_seq_hi_variant & 0x3f) << 8) |
|
|
u.clock_seq_low, 0x3fff)
|
|
|
|
def test_uuid3(self):
|
|
equal = self.assertEqual
|
|
|
|
# Test some known version-3 UUIDs.
|
|
for u, v in [(uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org'),
|
|
'6fa459ea-ee8a-3ca4-894e-db77e160355e'),
|
|
(uuid.uuid3(uuid.NAMESPACE_URL, 'http://python.org/'),
|
|
'9fe8e8c4-aaa8-32a9-a55c-4535a88b748d'),
|
|
(uuid.uuid3(uuid.NAMESPACE_OID, '1.3.6.1'),
|
|
'dd1a1cef-13d5-368a-ad82-eca71acd4cd1'),
|
|
(uuid.uuid3(uuid.NAMESPACE_X500, 'c=ca'),
|
|
'658d3002-db6b-3040-a1d1-8ddd7d189a4d'),
|
|
]:
|
|
equal(u.variant, uuid.RFC_4122)
|
|
equal(u.version, 3)
|
|
equal(u, uuid.UUID(v))
|
|
equal(str(u), v)
|
|
|
|
def test_uuid4(self):
|
|
equal = self.assertEqual
|
|
|
|
# Make sure uuid4() generates UUIDs that are actually version 4.
|
|
for u in [uuid.uuid4() for i in range(10)]:
|
|
equal(u.variant, uuid.RFC_4122)
|
|
equal(u.version, 4)
|
|
|
|
def test_uuid5(self):
|
|
equal = self.assertEqual
|
|
|
|
# Test some known version-5 UUIDs.
|
|
for u, v in [(uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org'),
|
|
'886313e1-3b8a-5372-9b90-0c9aee199e5d'),
|
|
(uuid.uuid5(uuid.NAMESPACE_URL, 'http://python.org/'),
|
|
'4c565f0d-3f5a-5890-b41b-20cf47701c5e'),
|
|
(uuid.uuid5(uuid.NAMESPACE_OID, '1.3.6.1'),
|
|
'1447fa61-5277-5fef-a9b3-fbc6e44f4af3'),
|
|
(uuid.uuid5(uuid.NAMESPACE_X500, 'c=ca'),
|
|
'cc957dd1-a972-5349-98cd-874190002798'),
|
|
]:
|
|
equal(u.variant, uuid.RFC_4122)
|
|
equal(u.version, 5)
|
|
equal(u, uuid.UUID(v))
|
|
equal(str(u), v)
|
|
|
|
|
|
def test_main():
|
|
test_support.run_unittest(TestUUID)
|
|
|
|
if __name__ == '__main__':
|
|
test_main()
|