diff options
| author | Tim Peters <tim.peters@gmail.com> | 2006-06-13 00:30:50 (GMT) |
|---|---|---|
| committer | Tim Peters <tim.peters@gmail.com> | 2006-06-13 00:30:50 (GMT) |
| commit | 2adc626bb515be2b6c6c0657d5db48933895593a (patch) | |
| tree | 6c3be37db6a89e28e292a35e5d7e1fd2c79ba7df /Lib/test/test_uuid.py | |
| parent | edd66fa7e922f40b225323c809c0daf46f298a7e (diff) | |
| download | cpython-2adc626bb515be2b6c6c0657d5db48933895593a.zip cpython-2adc626bb515be2b6c6c0657d5db48933895593a.tar.gz cpython-2adc626bb515be2b6c6c0657d5db48933895593a.tar.bz2 | |
Added missing svn:eol-style property to text files.
Diffstat (limited to 'Lib/test/test_uuid.py')
| -rw-r--r-- | Lib/test/test_uuid.py | 792 |
1 files changed, 396 insertions, 396 deletions
diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py index f7c4e8a..9d0d25b 100644 --- a/Lib/test/test_uuid.py +++ b/Lib/test/test_uuid.py @@ -1,396 +1,396 @@ -from unittest import TestCase, main
-import uuid
-
-def importable(name):
- try:
- __import__(name)
- return True
- except:
- return False
-
-class TestUUID(TestCase):
- last_node = None
-
- 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 < 1<<48L, message)
-
- import sys
- if source:
- sys.stderr.write('(%s: %012x)' % (source, node))
- if TestUUID.last_node:
- self.assertEqual(TestUUID.last_node, node, 'inconsistent node IDs')
- else:
- TestUUID.last_node = node
-
- def test_ifconfig_getnode(self):
- import os
- if os.name == 'posix':
- self.check_node(uuid._ifconfig_getnode(), 'ifconfig')
-
- def test_ipconfig_getnode(self):
- import os
- if os.name == 'nt':
- self.check_node(uuid._ipconfig_getnode(), '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 < 1<<48L)
-
- 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):
- self.check_node(uuid.getnode())
-
- # Test it again to ensure consistency.
- self.check_node(uuid.getnode())
-
- 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)
-
-if __name__ == '__main__':
- main()
+from unittest import TestCase, main +import uuid + +def importable(name): + try: + __import__(name) + return True + except: + return False + +class TestUUID(TestCase): + last_node = None + + 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 < 1<<48L, message) + + import sys + if source: + sys.stderr.write('(%s: %012x)' % (source, node)) + if TestUUID.last_node: + self.assertEqual(TestUUID.last_node, node, 'inconsistent node IDs') + else: + TestUUID.last_node = node + + def test_ifconfig_getnode(self): + import os + if os.name == 'posix': + self.check_node(uuid._ifconfig_getnode(), 'ifconfig') + + def test_ipconfig_getnode(self): + import os + if os.name == 'nt': + self.check_node(uuid._ipconfig_getnode(), '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 < 1<<48L) + + 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): + self.check_node(uuid.getnode()) + + # Test it again to ensure consistency. + self.check_node(uuid.getnode()) + + 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) + +if __name__ == '__main__': + main() |
