from __future__ import annotations

import unittest

from phs.modules.system_health import normalize_service, parse_df, parse_meminfo


class SystemHealthTests(unittest.TestCase):
    def test_parse_meminfo_returns_bytes(self) -> None:
        values = parse_meminfo(
            "MemTotal:       1024000 kB\n"
            "MemAvailable:    512000 kB\n"
            "SwapTotal:       256000 kB\n"
        )
        self.assertEqual(values["MemTotal"], 1024000 * 1024)
        self.assertEqual(values["MemAvailable"], 512000 * 1024)

    def test_normalize_service_states(self) -> None:
        self.assertEqual(
            normalize_service({"enabled": 1, "installed": 1, "monitored": 1, "running": 1})[-1],
            "running",
        )
        self.assertEqual(
            normalize_service({"enabled": 1, "installed": 1, "monitored": 1, "running": 0})[-1],
            "down",
        )
        self.assertEqual(
            normalize_service({"enabled": 0, "installed": 1, "monitored": 0})[-1],
            "disabled",
        )
        self.assertEqual(
            normalize_service({"enabled": 1, "installed": 1, "monitored": 0})[-1],
            "unmonitored",
        )

    def test_parse_df(self) -> None:
        rows = parse_df(
            "Filesystem 1024-blocks Used Available Capacity Mounted on\n"
            "/dev/vda1 104857600 52428800 52428800 50% /\n"
        )
        self.assertEqual(len(rows), 1)
        self.assertEqual(rows[0]["mount"], "/")
        self.assertEqual(rows[0]["percent"], 50.0)
        self.assertEqual(rows[0]["total"], 104857600 * 1024)


if __name__ == "__main__":
    unittest.main()
