9c30c9824e
Make the environment report actionable, not just advisory. Install (reuses M9 installer): - Add GameMode, MangoHud, cpupower to the component catalog (so they also show on the Setup page); catalog.by_id() lookup. - "tool not installed" findings (GameMode/MangoHud) get an Install button. Apply runtime-reversible tunables (D22, realizing the D9 consent-gated milestone): - core/fixes.py: dropdown of live options + Apply for CPU governor, NVIDIA persistence, PCIe ASPM policy, vm.swappiness, THP. One pkexec command each, no reboot, reverts on reboot; chosen value validated against live options; writes go to sysfs/procfs/nvidia-smi, never GRUB. GRUB/mitigations stay suggestion-only. - Finding gained optional action (install) + fix (apply) ids; shared finding_card renders the matching control; Environment page wires both and re-checks after a change. Tests for fixes (parse, command builders, value validation, gameenv wiring). Docs: D22 added (amends D9); SPEC/MODULES/ROADMAP updated. 0.9.0 -> 0.10.0. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
74 lines
2.7 KiB
Python
74 lines
2.7 KiB
Python
"""Tests for M6 gaming-environment checks (pure evaluators + aggregate smoke test)."""
|
|
|
|
import unittest
|
|
|
|
from rigdoctor.core import gameenv
|
|
from rigdoctor.core.health import Finding
|
|
|
|
|
|
class AspmTests(unittest.TestCase):
|
|
def test_powersave_is_warning(self):
|
|
f = gameenv.evaluate_aspm("[powersave] performance powersupersave\n")
|
|
self.assertEqual(f.severity, "warning")
|
|
self.assertEqual(f.category, "PCIe")
|
|
|
|
def test_performance_is_ok(self):
|
|
self.assertEqual(gameenv.evaluate_aspm("[performance] powersave powersupersave").severity, "ok")
|
|
|
|
def test_default_is_info(self):
|
|
self.assertEqual(gameenv.evaluate_aspm("[default] performance powersave").severity, "info")
|
|
|
|
def test_missing_is_none(self):
|
|
self.assertIsNone(gameenv.evaluate_aspm(None))
|
|
self.assertIsNone(gameenv.evaluate_aspm("no brackets here"))
|
|
|
|
|
|
class GovernorTests(unittest.TestCase):
|
|
def test_performance_only_is_ok(self):
|
|
self.assertEqual(gameenv.evaluate_governor({"performance"}).severity, "ok")
|
|
|
|
def test_powersave_is_warning(self):
|
|
f = gameenv.evaluate_governor({"powersave"})
|
|
self.assertEqual(f.severity, "warning")
|
|
self.assertEqual(f.fix, "cpu_governor") # offers the live Apply dropdown
|
|
|
|
def test_dynamic_is_info(self):
|
|
self.assertEqual(gameenv.evaluate_governor({"schedutil"}).severity, "info")
|
|
|
|
def test_empty_is_none(self):
|
|
self.assertIsNone(gameenv.evaluate_governor(set()))
|
|
|
|
|
|
class SwappinessTests(unittest.TestCase):
|
|
def test_high_is_info_with_suggestion(self):
|
|
f = gameenv.evaluate_swappiness(60)
|
|
self.assertEqual(f.severity, "info")
|
|
self.assertEqual(f.fix, "swappiness") # offers the live Apply dropdown
|
|
|
|
def test_low_is_ok(self):
|
|
self.assertEqual(gameenv.evaluate_swappiness(10).severity, "ok")
|
|
|
|
|
|
class ShaderCacheTests(unittest.TestCase):
|
|
def test_disabled_nvidia_is_warning(self):
|
|
self.assertEqual(gameenv.evaluate_shader_cache({"__GL_SHADER_DISK_CACHE": "0"}).severity, "warning")
|
|
|
|
def test_disabled_mesa_is_warning(self):
|
|
self.assertEqual(gameenv.evaluate_shader_cache({"MESA_SHADER_CACHE_DISABLE": "true"}).severity, "warning")
|
|
|
|
def test_default_is_ok(self):
|
|
self.assertEqual(gameenv.evaluate_shader_cache({}).severity, "ok")
|
|
|
|
|
|
class AggregateTests(unittest.TestCase):
|
|
def test_run_returns_sorted_findings(self):
|
|
findings = gameenv.run_gameenv_checks()
|
|
self.assertTrue(all(isinstance(f, Finding) for f in findings))
|
|
order = {"critical": 0, "warning": 1, "info": 2, "ok": 3}
|
|
sevs = [order.get(f.severity, 9) for f in findings]
|
|
self.assertEqual(sevs, sorted(sevs)) # worst-first
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|