test: '{. -> ./mod}/test_util_rmrf.py'

Move the rmrf tests to the module-level tests and align its
implementation with the others.
This commit is contained in:
David Rheinsberg 2020-04-27 16:32:40 +02:00
parent 1ec3e5a776
commit ea7561329f

View file

@ -0,0 +1,47 @@
#
# Tests for the `osbuild.util.rmrf` module.
#
import os
import pathlib
import shutil
import subprocess
import tempfile
import unittest
from osbuild.util import rmrf
def can_set_immutable():
with tempfile.TemporaryDirectory(dir="/var/tmp") as tmp:
try:
os.makedirs(f"{tmp}/f")
# fist they give it ...
subprocess.run(["chattr", "+i", f"{tmp}/f"], check=True)
# ... then they take it away
subprocess.run(["chattr", "-i", f"{tmp}/f"], check=True)
except (subprocess.CalledProcessError, FileNotFoundError):
return False
return True
class TestUtilLinux(unittest.TestCase):
@unittest.skipUnless(can_set_immutable(), "Need root permissions")
def test_rmtree_immutable(self):
#
# Test the `rmrf.rmtree()` helper and verify it can correctly unlink
# files that are marked immutable.
#
with tempfile.TemporaryDirectory(dir="/var/tmp") as vartmpdir:
os.makedirs(f"{vartmpdir}/dir")
p = pathlib.Path(f"{vartmpdir}/dir/immutable")
p.touch()
subprocess.run(["chattr", "+i", f"{vartmpdir}/dir/immutable"],
check=True)
with self.assertRaises(PermissionError):
shutil.rmtree(f"{vartmpdir}/dir")
rmrf.rmtree(f"{vartmpdir}/dir")