diff --git a/test.sh b/test.sh new file mode 100755 index 0000000..5a5d9d4 --- /dev/null +++ b/test.sh @@ -0,0 +1,2 @@ +#!/bin/sh -x +PYTHONPATH=. pytest --pdb --pdbcls=IPython.terminal.debugger:Pdb -rA -s -v -x diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..d254d48 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,27 @@ +""" +Helpers for the pyacl test suite +Copyright 2024, Georg Pfuetzenreuter + +Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence"). +You may not use this work except in compliance with the Licence. +An English copy of the Licence is shipped in a file called LICENSE along with this applications source code. +You may obtain copies of the Licence in any of the official languages at https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12. +""" + +from shutil import rmtree +from subprocess import run + +import pytest + + +@pytest.fixture(scope='session') +def sample_file(tmp_path_factory): + directory = tmp_path_factory.mktemp('sample_files') + file = directory / 'file_with_user_read_acl' + file.touch() + assert not file.read_text() # file should exist + run(['setfacl', '-m', 'u:georg2:r', file], check=True) + out = run(['getfacl', '-c', file], check=True, capture_output=True) + assert 'user:georg2:r--' in out.stdout.decode() # file should have the ACL set + yield file + rmtree(directory) diff --git a/tests/test_pyacl.py b/tests/test_pyacl.py new file mode 100644 index 0000000..fc4fd1f --- /dev/null +++ b/tests/test_pyacl.py @@ -0,0 +1,48 @@ +""" +Test suite for pyacl +Copyright 2024, Georg Pfuetzenreuter + +Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence"). +You may not use this work except in compliance with the Licence. +An English copy of the Licence is shipped in a file called LICENSE along with this applications source code. +You may obtain copies of the Licence in any of the official languages at https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12. +""" + +import posix1e + +from pyacl import acl + + +def test_parse_acl(sample_file): + want = { + 'user': { + 'georg2': { + 'read': True, + 'write': False, + 'execute': False, + }, + }, + 'group': { + None: { + 'read': True, + 'write': False, + 'execute': False, + }, + }, + 'mask': { + None: { + 'read': True, + 'write': False, + 'execute': False, + }, + }, + 'other': { + None: { + 'read': True, + 'write': False, + 'execute': False, + }, + }, + } + have = acl.acl_parse_entries(acl.acl_reduce_entries(posix1e.ACL(file=sample_file))) + assert want == have