annotate tests/test_shasum.py @ 177:089c40240061

Add an alternate implementation for generating directory tree digests: - Do not use something like os.walk() but use os.scandir() directly. - Recursively generate the subdirectory digests only when needed and in the right order. This fixes that the order of subdirectories in the output did not match the application order of its directory digests. The new implementation also should make filtering (that will be implemented later) easier. NOTE: The tree digests of the old and the new implementation are identical.
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 11 Jan 2025 17:41:28 +0100
parents af8318191ed3
children 7f797d71bd5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
101
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2 r"""Unit tests
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4 """
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6 from __future__ import absolute_import, print_function
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8 import io
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9 import os
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10 import sys
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11 import unittest
102
83dd2506f8f8 FIX: Make tests work on Python 2
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 101
diff changeset
12 try:
83dd2506f8f8 FIX: Make tests work on Python 2
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 101
diff changeset
13 from StringIO import StringIO
83dd2506f8f8 FIX: Make tests work on Python 2
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 101
diff changeset
14 except ImportError:
83dd2506f8f8 FIX: Make tests work on Python 2
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 101
diff changeset
15 StringIO = None
101
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17 from _test_setup import DATADIR
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19 from cutils import shasum
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22 PY2 = sys.version_info[0] <= 2
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24
102
83dd2506f8f8 FIX: Make tests work on Python 2
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 101
diff changeset
25 def _memfile():
83dd2506f8f8 FIX: Make tests work on Python 2
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 101
diff changeset
26 if StringIO:
83dd2506f8f8 FIX: Make tests work on Python 2
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 101
diff changeset
27 return StringIO()
83dd2506f8f8 FIX: Make tests work on Python 2
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 101
diff changeset
28 else:
83dd2506f8f8 FIX: Make tests work on Python 2
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 101
diff changeset
29 return io.StringIO()
83dd2506f8f8 FIX: Make tests work on Python 2
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 101
diff changeset
30
83dd2506f8f8 FIX: Make tests work on Python 2
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 101
diff changeset
31
101
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
32 class ChangedDir(object):
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
33
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
34 """Context manager to temporarily change the directory"""
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
35
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
36 def __init__(self, path):
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
37 self._new_dir = path
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
38 self._prev_dir = None
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
39
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
40 def __enter__(self):
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
41 self._prev_dir = os.getcwd()
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
42 os.chdir(self._new_dir)
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
43
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
44 def __exit__(self, *args, **kwds):
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
45 if self._prev_dir is not None:
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
46 os.chdir(self._prev_dir)
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
47 self._prev_dir = None
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
48
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
49
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
50 class SignifyTests(unittest.TestCase):
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
51
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
52 def test_empty(self):
102
83dd2506f8f8 FIX: Make tests work on Python 2
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 101
diff changeset
53 destfile = _memfile()
101
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
54 opts = shasum.gen_opts(algorithm="SHA256",
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
55 dest=destfile,
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
56 files=[os.path.join(DATADIR, "empty")])
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
57 shasum.shasum(opts)
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
58 self.assertTrue(
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
59 destfile.getvalue().startswith(
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
60 "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 *"))
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
61
103
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
62 def test_empty_with_name(self):
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
63 destfile = _memfile()
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
64 with ChangedDir(DATADIR):
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
65 opts = shasum.gen_opts(algorithm="SHA256",
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
66 dest=destfile,
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
67 files=["empty"])
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
68 shasum.shasum(opts)
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
69 self.assertEqual(
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
70 "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 *empty\n",
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
71 destfile.getvalue())
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
72
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
73 def test_empty_with_name_bsd(self):
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
74 destfile = _memfile()
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
75 with ChangedDir(DATADIR):
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
76 opts = shasum.gen_opts(algorithm="SHA512",
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
77 dest=destfile,
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
78 files=["empty"],
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
79 bsd=True)
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
80 shasum.shasum(opts)
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
81 self.assertEqual(
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
82 "SHA512 (empty) = cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e\n",
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
83 destfile.getvalue())
af8318191ed3 Some more tests
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 102
diff changeset
84
101
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
85 def test_empty_mmap(self):
102
83dd2506f8f8 FIX: Make tests work on Python 2
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 101
diff changeset
86 destfile = _memfile()
101
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
87 opts = shasum.gen_opts(algorithm="SHA256",
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
88 dest=destfile,
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
89 files=[os.path.join(DATADIR, "empty")],
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
90 mmap=True)
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
91 shasum.shasum(opts)
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
92 self.assertTrue(
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
93 destfile.getvalue().startswith(
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
94 "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 *"))
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
95
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
96 def test_empty_no_mmap(self):
102
83dd2506f8f8 FIX: Make tests work on Python 2
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 101
diff changeset
97 destfile = _memfile()
101
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
98 opts = shasum.gen_opts(algorithm="SHA256",
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
99 dest=destfile,
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
100 files=[os.path.join(DATADIR, "empty")],
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
101 mmap=False)
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
102 shasum.shasum(opts)
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
103 self.assertTrue(
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
104 destfile.getvalue().startswith(
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
105 "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 *"))
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
106
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
107
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
108 if __name__ == "__main__":
5de499711a92 Begin some unittests for shasum
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
109 sys.exit(unittest.main())