diff options
-rw-r--r-- | psutil/_pslinux.py | 9 | ||||
-rwxr-xr-x | psutil/tests/test_linux.py | 43 |
2 files changed, 39 insertions, 13 deletions
diff --git a/psutil/_pslinux.py b/psutil/_pslinux.py index 4fce35a7..73fe71ed 100644 --- a/psutil/_pslinux.py +++ b/psutil/_pslinux.py @@ -1244,17 +1244,17 @@ class RootFsDeviceFinder: if path is None: try: path = self.use_proc_partitions() - except FileNotFoundError as err: + except OSError as err: debug(err) if path is None: try: path = self.use_sys_dev_block() - except FileNotFoundError as err: + except OSError as err: debug(err) if path is None: try: path = self.use_sys_class_block() - except FileNotFoundError as err: + except OSError as err: debug(err) return path @@ -1282,8 +1282,7 @@ def disk_partitions(all=False): retlist = [] partitions = cext.disk_partitions(mounts_path) - for partition in partitions: - device, mountpoint, fstype, opts = partition + for device, mountpoint, fstype, opts in partitions: if device == 'none': device = '' if device in ("/dev/root", "rootfs"): diff --git a/psutil/tests/test_linux.py b/psutil/tests/test_linux.py index fb49c7f6..9249b2aa 100755 --- a/psutil/tests/test_linux.py +++ b/psutil/tests/test_linux.py @@ -28,6 +28,7 @@ from psutil._compat import FileNotFoundError from psutil._compat import PY3 from psutil._compat import u from psutil.tests import call_until +from psutil.tests import GITHUB_ACTIONS from psutil.tests import GLOBAL_TIMEOUT from psutil.tests import HAS_BATTERY from psutil.tests import HAS_CPU_FREQ @@ -1267,22 +1268,35 @@ class TestSystemDiskIoCounters(PsutilTestCase): @unittest.skipIf(not LINUX, "LINUX only") class TestRootFsDeviceFinder(PsutilTestCase): - def test_it(self): + def setUp(self): dev = os.stat("/").st_dev - major = os.major(dev) - minor = os.minor(dev) + self.major = os.major(dev) + self.minor = os.minor(dev) + + def test_call_methods(self): + finder = RootFsDeviceFinder() + if os.path.exists("/proc/partitions"): + finder.use_proc_partitions() + else: + self.assertRaises(FileNotFoundError, finder.use_proc_partitions) + if os.path.exists("/sys/dev/block/%s:%s/uevent" % ( + self.major, self.minor)): + finder.use_sys_class_block() + else: + self.assertRaises(FileNotFoundError, finder.use_sys_class_block) + finder.use_sys_dev_block() + + @unittest.skipIf(GITHUB_ACTIONS, "unsupported on GITHUB_ACTIONS") + def test_it(self): finder = RootFsDeviceFinder() self.assertIsNotNone(finder.find()) a = b = c = None if os.path.exists("/proc/partitions"): a = finder.use_proc_partitions() - else: - self.assertRaises(FileNotFoundError, finder.use_proc_partitions) - if os.path.exists("/sys/dev/block/%s:%s/uevent" % (major, minor)): + if os.path.exists("/sys/dev/block/%s:%s/uevent" % ( + self.major, self.minor)): b = finder.use_sys_class_block() - else: - self.assertRaises(FileNotFoundError, finder.use_sys_class_block) c = finder.use_sys_dev_block() base = a or b or c @@ -1294,11 +1308,24 @@ class TestRootFsDeviceFinder(PsutilTestCase): self.assertEqual(base, c) @unittest.skipIf(not which("findmnt"), "findmnt utility not available") + @unittest.skipIf(GITHUB_ACTIONS, "unsupported on GITHUB_ACTIONS") def test_against_findmnt(self): psutil_value = RootFsDeviceFinder().find() findmnt_value = sh("findmnt -o SOURCE -rn /") self.assertEqual(psutil_value, findmnt_value) + def test_disk_partitions_mocked(self): + with mock.patch( + 'psutil._pslinux.cext.disk_partitions', + return_value=[('/dev/root', '/', 'ext4', 'rw')]) as m: + part = psutil.disk_partitions()[0] + assert m.called + if not GITHUB_ACTIONS: + self.assertNotEqual(part.device, "/dev/root") + self.assertEqual(part.device, RootFsDeviceFinder().find()) + else: + self.assertEqual(part.device, "/dev/root") + # ===================================================================== # --- misc |