diff options
author | Andrew M. Kuchling <amk@amk.ca> | 2001-11-02 21:46:17 (GMT) |
---|---|---|
committer | Andrew M. Kuchling <amk@amk.ca> | 2001-11-02 21:46:17 (GMT) |
commit | a0b6035a541840ad0dc14bd5e39e8b88139301a3 (patch) | |
tree | f1e74800c45803abf0c435d1461edbd3c9812b23 | |
parent | a2085cb7f772f4ab40dac5bdeeed68b5eee347ae (diff) | |
download | cpython-a0b6035a541840ad0dc14bd5e39e8b88139301a3.zip cpython-a0b6035a541840ad0dc14bd5e39e8b88139301a3.tar.gz cpython-a0b6035a541840ad0dc14bd5e39e8b88139301a3.tar.bz2 |
[Patch #476612] Add test suite for PEP247 compliance
-rw-r--r-- | Lib/test/test_pep247.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/Lib/test/test_pep247.py b/Lib/test/test_pep247.py new file mode 100644 index 0000000..3a35164 --- /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') |