36 lines
1.7 KiB
Python
36 lines
1.7 KiB
Python
import importlib.util
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
from unittest.mock import patch
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
sys.path.insert(0, str(ROOT / "app"))
|
|
stem = "pigway_ubuntu_agent_api" if (ROOT / "app/pigway_ubuntu_agent_api.py").exists() else "pigway_pi_control_api"
|
|
spec = importlib.util.spec_from_file_location("storage_api_under_test", ROOT / "app" / (stem + ".py"))
|
|
api = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(api)
|
|
|
|
|
|
class StorageConfigTests(unittest.TestCase):
|
|
def test_config_round_trip_and_invalid_edits_are_atomic(self):
|
|
with tempfile.TemporaryDirectory() as directory:
|
|
config = Path(directory) / "agent.conf"
|
|
config.write_text("[device]\nname = auto\n")
|
|
identifier = "a" * 32
|
|
with patch.object(api, "CFG", config):
|
|
api.update_ini({"storage_names": {identifier: "媒体盘 100%"}, "storage_visible": {identifier: "false"}})
|
|
self.assertEqual(api.config_json()["storage_names"][identifier], "媒体盘 100%")
|
|
self.assertEqual(api.config_json()["storage_visible"][identifier], "false")
|
|
original = config.read_text()
|
|
for updates in [
|
|
{"storage_visible": {identifier: "yes"}},
|
|
{"storage_names": {"invalid-id": "Bad"}},
|
|
{"storage_names": {identifier: "x" * 65}},
|
|
{"storage_names": {identifier: "bad\tname"}},
|
|
]:
|
|
with self.assertRaises(ValueError):
|
|
api.update_ini(updates)
|
|
self.assertEqual(config.read_text(), original)
|