diff --git a/obliteratus/device.py b/obliteratus/device.py index 34fc572..6b87739 100644 --- a/obliteratus/device.py +++ b/obliteratus/device.py @@ -124,13 +124,13 @@ def _system_memory_gb() -> tuple[float, float]: import psutil vm = psutil.virtual_memory() return vm.total / 1024 ** 3, vm.available / 1024 ** 3 - except ImportError: + except (AttributeError, ImportError, OSError, RuntimeError, ValueError): pass try: total = os.sysconf("SC_PHYS_PAGES") * os.sysconf("SC_PAGE_SIZE") / 1024 ** 3 # Rough estimate: assume 60 % available if we can't query return total, total * 0.6 - except (AttributeError, ValueError): + except (AttributeError, OSError, ValueError): return 16.0, 8.0 # conservative fallback diff --git a/tests/test_device_boundaries.py b/tests/test_device_boundaries.py index e493050..327b966 100644 --- a/tests/test_device_boundaries.py +++ b/tests/test_device_boundaries.py @@ -71,6 +71,14 @@ def test_system_memory_sources_and_fallback(monkeypatch): monkeypatch.setitem(__import__("sys").modules, "psutil", fake_psutil) assert device._system_memory_gb() == (32.0, 12.0) + fake_psutil.virtual_memory = Mock(side_effect=FileNotFoundError("/proc/meminfo")) + monkeypatch.setattr( + device.os, + "sysconf", + lambda name: {"SC_PHYS_PAGES": 4, "SC_PAGE_SIZE": gib}[name], + ) + assert device._system_memory_gb() == (4.0, 2.4) + monkeypatch.delitem(__import__("sys").modules, "psutil", raising=False) real_import = __import__("builtins").__import__