67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
"""Тесты настройки Pi (wesp.env + systemd)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
from unittest.mock import patch
|
|
|
|
from app.services.pi_platform_setup_service import (
|
|
_merge_env_file,
|
|
apply_pi_platform_setup,
|
|
get_pi_platform_setup_status,
|
|
)
|
|
|
|
|
|
class PiPlatformSetupTests(unittest.TestCase):
|
|
def test_merge_env_creates_file(self) -> None:
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
home = Path(tmp) / "wesp"
|
|
home.mkdir()
|
|
(home / "install").mkdir()
|
|
(home / "install" / "wesp.env.example").write_text(
|
|
"WESP_CONFIG=production\n",
|
|
encoding="utf-8",
|
|
)
|
|
env = Path(tmp) / "wesp.env"
|
|
venv = Path(tmp) / "wes"
|
|
defaults = {"WESP_SYSTEMD_UNIT": "myscript", "WESP_VENV": str(venv)}
|
|
added, _ = _merge_env_file(env, defaults, home=home, venv=venv)
|
|
self.assertTrue(env.is_file())
|
|
self.assertIn("WESP_SYSTEMD_UNIT", env.read_text(encoding="utf-8"))
|
|
self.assertTrue(added)
|
|
|
|
@patch(
|
|
"app.services.pi_platform_setup_service.get_pi_platform_setup_status",
|
|
return_value={"platform_ready": True, "running_as_root": True},
|
|
)
|
|
@patch("app.services.pi_platform_setup_service._is_root", return_value=True)
|
|
@patch("app.services.pi_platform_setup_service._install_systemd_unit")
|
|
@patch("app.services.pi_platform_setup_service.schedule_service_restart")
|
|
@patch("app.services.pi_platform_setup_service._merge_env_file")
|
|
def test_apply_ok(
|
|
self,
|
|
mock_merge: object,
|
|
mock_restart: object,
|
|
mock_unit: object,
|
|
_root: object,
|
|
_status: object,
|
|
) -> None:
|
|
mock_merge.return_value = (["WESP_SYSTEMD_UNIT"], [])
|
|
mock_unit.return_value = (True, "ok", Path("/etc/systemd/system/myscript.service"))
|
|
mock_restart.return_value = {"scheduled": True, "message": "restart"}
|
|
|
|
cfg = {"BASE_DIR": "/opt/wesp", "WESP_SYSTEMD_UNIT": "myscript"}
|
|
r = apply_pi_platform_setup(cfg)
|
|
self.assertTrue(r.get("ok"))
|
|
|
|
def test_apply_requires_root(self) -> None:
|
|
with patch("app.services.pi_platform_setup_service._is_root", return_value=False):
|
|
r = apply_pi_platform_setup({"BASE_DIR": "/opt/wesp"})
|
|
self.assertFalse(r.get("ok"))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|