diff options
-rw-r--r-- | snekbox/filesystem.py (renamed from snekbox/libmount.py) | 7 | ||||
-rw-r--r-- | snekbox/memfs.py | 2 | ||||
-rw-r--r-- | tests/test_filesystem.py (renamed from tests/test_libmount.py) | 34 |
3 files changed, 25 insertions, 18 deletions
diff --git a/snekbox/libmount.py b/snekbox/filesystem.py index 5300c5c..0cdfbf5 100644 --- a/snekbox/libmount.py +++ b/snekbox/filesystem.py @@ -1,3 +1,4 @@ +"""Mounts and unmounts filesystems.""" from __future__ import annotations import ctypes @@ -48,6 +49,9 @@ def mount(source: Path | str, target: Path | str, fs: str, **options: str | int) target: Target directory. fs: Filesystem type. **options: Mount options. + + Raises: + OSError: On any mount error. """ if Path(target).is_mount(): raise OSError(f"{target} is already a mount point") @@ -71,6 +75,9 @@ def unmount(target: Path | str, flags: UnmountFlags | int = UnmountFlags.MNT_DET Args: target: Target directory. flags: Unmount flags. + + Raises: + OSError: On any unmount error. """ if not Path(target).is_mount(): raise OSError(f"{target} is not a mount point") diff --git a/snekbox/memfs.py b/snekbox/memfs.py index 6a3a635..ebbbb4a 100644 --- a/snekbox/memfs.py +++ b/snekbox/memfs.py @@ -9,7 +9,7 @@ from types import TracebackType from typing import Type from uuid import uuid4 -from snekbox.libmount import mount, unmount +from snekbox.filesystem import mount, unmount from snekbox.snekio import FileAttachment log = logging.getLogger(__name__) diff --git a/tests/test_libmount.py b/tests/test_filesystem.py index d60c6da..b33322c 100644 --- a/tests/test_libmount.py +++ b/tests/test_filesystem.py @@ -5,7 +5,7 @@ from shutil import rmtree from unittest import TestCase from uuid import uuid4 -from snekbox import libmount +from snekbox.filesystem import UnmountFlags, mount, unmount class LibMountTests(TestCase): @@ -25,11 +25,11 @@ class LibMountTests(TestCase): path = self.temp_dir / str(uuid4()) path.mkdir() try: - libmount.mount(source="", target=path, fs="tmpfs") + mount(source="", target=path, fs="tmpfs") yield path finally: with suppress(OSError): - libmount.unmount(path) + unmount(path) def test_mount(self): """Test normal mounting.""" @@ -54,7 +54,7 @@ class LibMountTests(TestCase): for case, err, msg in cases: with self.subTest(case=case): with self.assertRaises(err) as cm: - libmount.mount(**case) + mount(**case) self.assertIn(msg, str(cm.exception)) def test_mount_duplicate(self): @@ -62,31 +62,31 @@ class LibMountTests(TestCase): path = self.temp_dir / str(uuid4()) path.mkdir() try: - libmount.mount(source="", target=path, fs="tmpfs") + mount(source="", target=path, fs="tmpfs") with self.assertRaises(OSError) as cm: - libmount.mount(source="", target=path, fs="tmpfs") + mount(source="", target=path, fs="tmpfs") self.assertIn("already a mount point", str(cm.exception)) finally: - libmount.unmount(target=path) + unmount(target=path) def test_unmount_flags(self): """Test unmount flags.""" flags = [ - libmount.UnmountFlags.MNT_FORCE, - libmount.UnmountFlags.MNT_DETACH, - libmount.UnmountFlags.UMOUNT_NOFOLLOW, + UnmountFlags.MNT_FORCE, + UnmountFlags.MNT_DETACH, + UnmountFlags.UMOUNT_NOFOLLOW, ] for flag in flags: with self.subTest(flag=flag), self.get_mount() as path: self.assertTrue(path.is_mount()) - libmount.unmount(path, flag) + unmount(path, flag) self.assertFalse(path.is_mount()) def test_unmount_flags_expire(self): """Test unmount MNT_EXPIRE behavior.""" with self.get_mount() as path: with self.assertRaises(BlockingIOError): - libmount.unmount(path, libmount.UnmountFlags.MNT_EXPIRE) + unmount(path, UnmountFlags.MNT_EXPIRE) def test_unmount_errors(self): """Test invalid unmount errors.""" @@ -97,14 +97,14 @@ class LibMountTests(TestCase): for case, err, msg in cases: with self.subTest(case=case): with self.assertRaises(err) as cm: - libmount.unmount(**case) + unmount(**case) self.assertIn(msg, str(cm.exception)) def test_unmount_invalid_args(self): """Test invalid unmount invalid flag.""" with self.get_mount() as path: with self.assertRaises(OSError) as cm: - libmount.unmount(path, 251) + unmount(path, 251) self.assertIn("Invalid argument", str(cm.exception)) def test_threading(self): @@ -119,7 +119,7 @@ class LibMountTests(TestCase): with ThreadPoolExecutor() as pool: res = list( pool.map( - libmount.mount, + mount, [""] * len(paths), paths, ["tmpfs"] * len(paths), @@ -131,7 +131,7 @@ class LibMountTests(TestCase): with self.subTest(path=path): self.assertTrue(path.is_mount()) - unmounts = list(pool.map(libmount.unmount, paths)) + unmounts = list(pool.map(unmount, paths)) self.assertEqual(len(unmounts), len(paths)) for path in paths: @@ -140,4 +140,4 @@ class LibMountTests(TestCase): finally: with suppress(OSError): for path in paths: - libmount.unmount(path) + unmount(path) |