import unittest from digest.digest_tools import Digest, content_path, InvalidDigestException class TestParseDigest(unittest.TestCase): def test_parse_good(self): examples = [ ('tarsum.v123123+sha1:123deadbeef', ('tarsum.v123123+sha1', '123deadbeef')), ('tarsum.v1+sha256:123123', ('tarsum.v1+sha256', '123123')), ('tarsum.v0+md5:abc', ('tarsum.v0+md5', 'abc')), ('tarsum+sha1:abc', ('tarsum+sha1', 'abc')), ('sha1:123deadbeef', ('sha1', '123deadbeef')), ('sha256:123123', ('sha256', '123123')), ('md5:abc', ('md5', 'abc')), ] for digest, output_args in examples: self.assertEquals(Digest.parse_digest(digest), Digest(*output_args)) # Test the string method self.assertEquals(str(Digest.parse_digest(digest)), digest) def test_parse_fail(self): examples = [ 'tarsum.v+md5:abc:', 'sha1:123deadbeefzxczxv', 'sha256123123', 'tarsum.v1+', 'tarsum.v1123+sha1:', ] for bad_digest in examples: with self.assertRaises(InvalidDigestException): Digest.parse_digest(bad_digest) class TestDigestPath(unittest.TestCase): def test_paths(self): examples = [ ('tarsum.v123123+sha1:123deadbeef', 'tarsum/v123123/sha1/12/123deadbeef'), ('tarsum.v1+sha256:123123', 'tarsum/v1/sha256/12/123123'), ('tarsum.v0+md5:abc', 'tarsum/v0/md5/ab/abc'), ('sha1:123deadbeef', 'sha1/12/123deadbeef'), ('sha256:123123', 'sha256/12/123123'), ('md5:abc', 'md5/ab/abc'), ('md5:1', 'md5/01/1'), ('md5.....+++:1', 'md5/01/1'), ('.md5.:1', 'md5/01/1'), ] for digest, path in examples: self.assertEquals(content_path(digest), path) if __name__ == '__main__': unittest.main()