diff options
author | Allen Webb <allenwebb@google.com> | 2021-03-30 16:37:11 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2021-06-08 17:23:26 +0200 |
commit | c46c32338580eee3446b7caa57883db3a8bb9010 (patch) | |
tree | 8882061bc4685ba8d852b53bb7f44b42dee9302f /test/test-systemd-tmpfiles.py | |
parent | man: add details on overriding top level drop-ins (diff) | |
download | systemd-c46c32338580eee3446b7caa57883db3a8bb9010.tar.xz systemd-c46c32338580eee3446b7caa57883db3a8bb9010.zip |
tmpfiles: add '=' action modifier.
Add the '=' action modifier that instructs tmpfiles.d to check the file
type of a path and remove objects that do not match before trying to
open or create the path.
BUG=chromium:1186405
TEST=./test/test-systemd-tmpfiles.py "$(which systemd-tmpfiles)"
Change-Id: If807dc0db427393e9e0047aba640d0d114897c26
Diffstat (limited to 'test/test-systemd-tmpfiles.py')
-rwxr-xr-x | test/test-systemd-tmpfiles.py | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/test/test-systemd-tmpfiles.py b/test/test-systemd-tmpfiles.py index 255922d05b..3376029463 100755 --- a/test/test-systemd-tmpfiles.py +++ b/test/test-systemd-tmpfiles.py @@ -48,6 +48,7 @@ def test_invalids(*, user): test_line('f++ /too/many/plusses', user=user) test_line('f+!+ /too/many/plusses', user=user) test_line('f!+! /too/many/bangs', user=user) + test_line('f== /too/many/equals', user=user) test_line('w /unresolved/argument - - - - "%Y"', user=user) test_line('w /unresolved/argument/sandwich - - - - "%v%Y%v"', user=user) test_line('w /unresolved/filename/%Y - - - - "whatever"', user=user) @@ -73,9 +74,11 @@ def test_uninitialized_t(): test_line('w /foo - - - - "specifier for --user %t"', user=True, returncode=0, extra={'env':{}}) -def test_content(line, expected, *, user, extra={}): +def test_content(line, expected, *, user, extra={}, subpath='/arg', path_cb=None): d = tempfile.TemporaryDirectory(prefix='test-systemd-tmpfiles.') - arg = d.name + '/arg' + if path_cb is not None: + path_cb(d.name, subpath) + arg = d.name + subpath spec = line.format(arg) test_line(spec, user=user, returncode=0, extra=extra) content = open(arg).read() @@ -134,6 +137,57 @@ def test_valid_specifiers(*, user): test_content('f {} - - - - %%', '%', user=user) +def mkfifo(parent, subpath): + os.makedirs(parent, mode=0o755, exist_ok=True) + first_component = subpath.split('/')[1] + path = parent + '/' + first_component + print('path: {}'.format(path)) + os.mkfifo(path) + +def mkdir(parent, subpath): + first_component = subpath.split('/')[1] + path = parent + '/' + first_component + os.makedirs(path, mode=0o755, exist_ok=True) + os.symlink(path, path + '/self', target_is_directory=True) + +def symlink(parent, subpath): + link_path = parent + '/link-target' + os.makedirs(parent, mode=0o755, exist_ok=True) + with open(link_path, 'wb') as f: + f.write(b'target') + first_component = subpath.split('/')[1] + path = parent + '/' + first_component + os.symlink(link_path, path, target_is_directory=True) + +def file(parent, subpath): + content = 'file-' + subpath.split('/')[1] + path = parent + subpath + os.makedirs(os.path.dirname(path), mode=0o755, exist_ok=True) + with open(path, 'wb') as f: + f.write(content.encode()) + +def valid_symlink(parent, subpath): + target = 'link-target' + link_path = parent + target + os.makedirs(link_path, mode=0o755, exist_ok=True) + first_component = subpath.split('/')[1] + path = parent + '/' + first_component + os.symlink(target, path, target_is_directory=True) + +def test_hard_cleanup(*, user): + type_cbs = [None, file, mkdir, symlink] + if 'mkfifo' in dir(os): + type_cbs.append(mkfifo) + + for type_cb in type_cbs: + for subpath in ['/shallow', '/deep/1/2']: + label = '{}-{}'.format('None' if type_cb is None else type_cb.__name__, subpath.split('/')[1]) + test_content('f= {} - - - - ' + label, label, user=user, subpath=subpath, path_cb=type_cb) + + # Test the case that a valid symlink is in the path. + label = 'valid_symlink-deep' + test_content('f= {} - - - - ' + label, label, user=user, subpath='/deep/1/2', path_cb=valid_symlink) + if __name__ == '__main__': test_invalids(user=False) test_invalids(user=True) @@ -141,3 +195,6 @@ if __name__ == '__main__': test_valid_specifiers(user=False) test_valid_specifiers(user=True) + + test_hard_cleanup(user=False) + test_hard_cleanup(user=True) |