diff --git a/src/borg/testsuite/platform.py b/src/borg/testsuite/platform.py index 14f8bed4b..07725cbfd 100644 --- a/src/borg/testsuite/platform.py +++ b/src/borg/testsuite/platform.py @@ -5,6 +5,8 @@ import sys import tempfile import unittest +import pytest + from ..platformflags import is_win32 from ..platform import acl_get, acl_set, swidth from ..platform import get_process_id, process_alive @@ -161,68 +163,59 @@ class PlatformLinuxTestCase(BaseTestCase): self.assert_equal(acl_use_local_uid_gid(b"group:root:rw-:0"), b"group:0:rw-") -@unittest.skipUnless(sys.platform.startswith("darwin"), "macOS only test") -@unittest.skipIf(fakeroot_detected(), "not compatible with fakeroot") -class PlatformDarwinTestCase(BaseTestCase): - def setUp(self): - self.tmpdir = tempfile.mkdtemp() - - def tearDown(self): - shutil.rmtree(self.tmpdir) - - def get_acl(self, path, numeric_ids=False): +@pytest.mark.skipif(not sys.platform.startswith("darwin"), reason="macOS only test") +@pytest.mark.skipif(fakeroot_detected(), reason="not compatible with fakeroot") +@pytest.mark.skipIf(not are_acls_working(), "ACLs do not work") +def test_platform_darwin_access_acl(tmp_path): + def get_acl(path, numeric_ids=False): item = {} acl_get(path, item, os.stat(path), numeric_ids=numeric_ids) return item - def set_acl(self, path, acl, numeric_ids=False): + def set_acl(path, acl, numeric_ids=False): item = {"acl_extended": acl} acl_set(path, item, numeric_ids=numeric_ids) - @unittest.skipIf(not are_acls_working(), "ACLs do not work") - def test_access_acl(self): - file = tempfile.NamedTemporaryFile() - file2 = tempfile.NamedTemporaryFile() - self.assert_equal(self.get_acl(file.name), {}) - self.set_acl( - file.name, - b"!#acl 1\n" - b"group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000000:staff:0:allow:read\n" - b"user:FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000:root:0:allow:read\n", - numeric_ids=False, - ) - self.assert_in( - b"group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000014:staff:20:allow:read", self.get_acl(file.name)["acl_extended"] - ) - self.assert_in( - b"user:FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000:root:0:allow:read", self.get_acl(file.name)["acl_extended"] - ) - self.set_acl( - file2.name, - b"!#acl 1\n" - b"group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000000:staff:0:allow:read\n" - b"user:FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000:root:0:allow:read\n", - numeric_ids=True, - ) - self.assert_in( - b"group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000000:wheel:0:allow:read", self.get_acl(file2.name)["acl_extended"] - ) - self.assert_in( - b"group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000000::0:allow:read", - self.get_acl(file2.name, numeric_ids=True)["acl_extended"], - ) + file = tempfile.NamedTemporaryFile() + file2 = tempfile.NamedTemporaryFile() + assert get_acl(file.name) == {} + set_acl( + file.name, + b"!#acl 1\n" + b"group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000000:staff:0:allow:read\n" + b"user:FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000:root:0:allow:read\n", + numeric_ids=False, + ) + assert b"group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000014:staff:20:allow:read" in get_acl(file.name)["acl_extended"] + assert b"user:FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000:root:0:allow:read" in get_acl(file.name)["acl_extended"] + + set_acl( + file2.name, + b"!#acl 1\n" + b"group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000000:staff:0:allow:read\n" + b"user:FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000:root:0:allow:read\n", + numeric_ids=True, + ) + assert b"group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000000:wheel:0:allow:read" in get_acl(file2.name)["acl_extended"] + assert ( + b"group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000000::0:allow:read" + in get_acl(file2.name, numeric_ids=True)["acl_extended"] + ) -@unittest.skipUnless(sys.platform.startswith(("linux", "freebsd", "darwin")), "POSIX only tests") -class PlatformPosixTestCase(BaseTestCase): - def test_swidth_ascii(self): - self.assert_equal(swidth("borg"), 4) +@pytest.mark.skipif(not sys.platform.startswith(("linux", "freebsd", "darwin")), reason="POSIX only tests") +def test_platform_posix_swidth_ascii(): + assert swidth("borg") == 4 - def test_swidth_cjk(self): - self.assert_equal(swidth("バックアップ"), 6 * 2) - def test_swidth_mixed(self): - self.assert_equal(swidth("borgバックアップ"), 4 + 6 * 2) +@pytest.mark.skipif(not sys.platform.startswith(("linux", "freebsd", "darwin")), reason="POSIX only tests") +def test_platform_posix_swidth_cjk(): + assert swidth("バックアップ") == 6 * 2 + + +@pytest.mark.skipif(not sys.platform.startswith(("linux", "freebsd", "darwin")), reason="POSIX only tests") +def test_splatform_posix_width_mixed(): + assert swidth("borgバックアップ") == 4 + 6 * 2 def test_process_alive(free_pid):