Files
rigdoctor/tests/test_gameenv.py
T
jessey 9c30c9824e feat(m6): one-click install + apply controls on Environment page — 0.10.0
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>
2026-05-22 08:05:03 +02:00

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()