Fixed failing unit tests due to str/bytes mismatch.

Changed "assert isinstance(...)" in hmac.py to raise proper TypeError.
This commit is contained in:
Alexandre Vassalotti 2008-03-03 02:59:49 +00:00
parent 7f757edf15
commit a351f7701a
4 changed files with 22 additions and 19 deletions

View file

@ -39,7 +39,8 @@ def __init__(self, key, msg = None, digestmod = None):
if key is _secret_backdoor_key: # cheap if key is _secret_backdoor_key: # cheap
return return
assert isinstance(key, bytes), repr(key) if not isinstance(key, bytes):
raise TypeError("expected bytes, but got %r" % type(key).__name__)
if digestmod is None: if digestmod is None:
import hashlib import hashlib
@ -84,7 +85,8 @@ def __init__(self, key, msg = None, digestmod = None):
def update(self, msg): def update(self, msg):
"""Update this hashing object with the string msg. """Update this hashing object with the string msg.
""" """
assert isinstance(msg, bytes), repr(msg) if not isinstance(msg, bytes):
raise TypeError("expected bytes, but got %r" % type(msg).__name__)
self.inner.update(msg) self.inner.update(msg)
def copy(self): def copy(self):

View file

@ -31,10 +31,10 @@ def test_seek(self):
print('create large file via seek (may be sparse file) ...') print('create large file via seek (may be sparse file) ...')
f = open(TESTFN, 'wb') f = open(TESTFN, 'wb')
try: try:
f.write('z') f.write(b'z')
f.seek(0) f.seek(0)
f.seek(size) f.seek(size)
f.write('a') f.write(b'a')
f.flush() f.flush()
if verbose: if verbose:
print('check file size with os.fstat') print('check file size with os.fstat')
@ -53,7 +53,7 @@ def test_seek_read(self):
f = open(TESTFN, 'rb') f = open(TESTFN, 'rb')
try: try:
self.assertEqual(f.tell(), 0) self.assertEqual(f.tell(), 0)
self.assertEqual(f.read(1), 'z') self.assertEqual(f.read(1), b'z')
self.assertEqual(f.tell(), 1) self.assertEqual(f.tell(), 1)
f.seek(0) f.seek(0)
self.assertEqual(f.tell(), 0) self.assertEqual(f.tell(), 0)
@ -76,9 +76,9 @@ def test_seek_read(self):
f.seek(size) f.seek(size)
self.assertEqual(f.tell(), size) self.assertEqual(f.tell(), size)
# the 'a' that was written at the end of file above # the 'a' that was written at the end of file above
self.assertEqual(f.read(1), 'a') self.assertEqual(f.read(1), b'a')
f.seek(-size-1, 1) f.seek(-size-1, 1)
self.assertEqual(f.read(1), 'z') self.assertEqual(f.read(1), b'z')
self.assertEqual(f.tell(), 1) self.assertEqual(f.tell(), 1)
finally: finally:
f.close() f.close()
@ -97,7 +97,7 @@ def test_lseek(self):
self.assertEqual(os.lseek(f.fileno(), -size-1, 2), 0) self.assertEqual(os.lseek(f.fileno(), -size-1, 2), 0)
self.assertEqual(os.lseek(f.fileno(), size, 0), size) self.assertEqual(os.lseek(f.fileno(), size, 0), size)
# the 'a' that was written at the end of file above # the 'a' that was written at the end of file above
self.assertEqual(f.read(1), 'a') self.assertEqual(f.read(1), b'a')
finally: finally:
f.close() f.close()
@ -155,7 +155,7 @@ def main_test():
f.seek(2147483649) f.seek(2147483649)
# Seeking is not enough of a test: you must write and # Seeking is not enough of a test: you must write and
# flush, too! # flush, too!
f.write("x") f.write(b'x')
f.flush() f.flush()
except (IOError, OverflowError): except (IOError, OverflowError):
f.close() f.close()

View file

@ -12,25 +12,25 @@ def check_hash_module(module, key=None):
if key is not None: if key is not None:
obj1 = module.new(key) obj1 = module.new(key)
obj2 = module.new(key, "string") obj2 = module.new(key, b"string")
h1 = module.new(key, "string").digest() h1 = module.new(key, b"string").digest()
obj3 = module.new(key) ; obj3.update("string") ; h2 = obj3.digest() obj3 = module.new(key) ; obj3.update(b"string") ; h2 = obj3.digest()
assert h1 == h2, "Hashes must match" assert h1 == h2, "Hashes must match"
else: else:
obj1 = module.new() obj1 = module.new()
obj2 = module.new("string") obj2 = module.new(b"string")
h1 = module.new("string").digest() h1 = module.new(b"string").digest()
obj3 = module.new() ; obj3.update("string") ; h2 = obj3.digest() obj3 = module.new() ; obj3.update(b"string") ; h2 = obj3.digest()
assert h1 == h2, "Hashes must match" assert h1 == h2, "Hashes must match"
assert hasattr(obj1, 'digest_size'), "Objects must have digest_size attr" assert hasattr(obj1, 'digest_size'), "Objects must have digest_size attr"
if module.digest_size is not None: if module.digest_size is not None:
assert obj1.digest_size == module.digest_size, "digest_size must match" assert obj1.digest_size == module.digest_size, "digest_size must match"
assert obj1.digest_size == len(h1), "digest_size must match actual size" assert obj1.digest_size == len(h1), "digest_size must match actual size"
obj1.update("string") obj1.update(b"string")
obj_copy = obj1.copy() obj_copy = obj1.copy()
assert obj1.digest() == obj_copy.digest(), "Copied objects must match" assert obj1.digest() == obj_copy.digest(), "Copied objects must match"
assert obj1.hexdigest() == obj_copy.hexdigest(), \ assert obj1.hexdigest() == obj_copy.hexdigest(), \
@ -38,11 +38,11 @@ def check_hash_module(module, key=None):
digest, hexdigest = obj1.digest(), obj1.hexdigest() digest, hexdigest = obj1.digest(), obj1.hexdigest()
hd2 = "" hd2 = ""
for byte in digest: for byte in digest:
hd2 += "%02x" % ord(byte) hd2 += "%02x" % byte
assert hd2 == hexdigest, "hexdigest doesn't appear correct" assert hd2 == hexdigest, "hexdigest doesn't appear correct"
print('Module', module.__name__, 'seems to comply with PEP 247') print('Module', module.__name__, 'seems to comply with PEP 247')
if __name__ == '__main__': if __name__ == '__main__':
check_hash_module(hmac, key='abc') check_hash_module(hmac, key=b'abc')

View file

@ -157,7 +157,8 @@ def test_fork(self):
break break
if not data: if not data:
break break
sys.stdout.write(data.replace('\r\n', '\n').decode('ascii')) sys.stdout.write(str(data.replace(b'\r\n', b'\n'),
encoding='ascii'))
##line = os.read(master_fd, 80) ##line = os.read(master_fd, 80)
##lines = line.replace('\r\n', '\n').split('\n') ##lines = line.replace('\r\n', '\n').split('\n')