From: Andrew M. Kuchling Date: Fri, 2 Nov 2001 21:46:17 +0000 (+0000) Subject: [Patch #476612] Add test suite for PEP247 compliance X-Git-Tag: v2.2.1c1~898 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a0b6035a541840ad0dc14bd5e39e8b88139301a3;p=python [Patch #476612] Add test suite for PEP247 compliance --- diff --git a/Lib/test/test_pep247.py b/Lib/test/test_pep247.py new file mode 100644 index 0000000000..3a35164bd2 --- /dev/null +++ b/Lib/test/test_pep247.py @@ -0,0 +1,50 @@ +# +# Test suite to check compliance with PEP 247, the standard API for +# hashing algorithms. +# + +import md5, sha, hmac + +def check_hash_module(module, key=None): + assert hasattr(module, 'digest_size'), "Must have digest_size" + assert (module.digest_size is None or + module.digest_size > 0), "digest_size must be None or positive" + + if key is not None: + obj1 = module.new(key) + obj2 = module.new(key, "string") + + h1 = module.new(key, "string").digest() + obj3 = module.new(key) ; obj3.update("string") ; h2 = obj3.digest() + assert h1 == h2, "Hashes must match" + + else: + obj1 = module.new() + obj2 = module.new("string") + + h1 = module.new("string").digest() + obj3 = module.new() ; obj3.update("string") ; h2 = obj3.digest() + assert h1 == h2, "Hashes must match" + + assert hasattr(obj1, 'digest_size'), "Objects must have digest_size attr" + if module.digest_size is not None: + assert obj1.digest_size == module.digest_size, "digest_size must match" + assert obj1.digest_size == len(h1), "digest_size must match actual size" + obj1.update("string") + obj_copy = obj1.copy() + assert obj1.digest() == obj_copy.digest(), "Copied objects must match" + assert obj1.hexdigest() == obj_copy.hexdigest(), \ + "Copied objects must match" + digest, hexdigest = obj1.digest(), obj1.hexdigest() + hd2 = "" + for byte in digest: + hd2 += "%02x" % ord(byte) + assert hd2 == hexdigest, "hexdigest doesn't appear correct" + + print 'Module', module.__name__, 'seems to comply with PEP 247' + + +if __name__ == '__main__': + check_hash_module(md5) + check_hash_module(sha) + check_hash_module(hmac, key='abc')