import io import json import os import tempfile import unittest from contextlib import redirect_stdout from pathlib import Path from archive_clients.cli import main class ClientCliTests(unittest.TestCase): def test_check_config_probes_every_qb_override_root(self): with tempfile.TemporaryDirectory() as directory: root = Path(directory) for name in ("token", "qb-password", "syncthing-key"): path = root / name path.write_text(name, encoding="utf-8") os.chmod(path, 0o600) for name in ("qb", "qb-fast", "sync", "backups"): (root / name).mkdir() config = root / "client.toml" config.write_text( f'''client_id = "cache-1" display_name = "Cache 1" role = "cache" control_endpoint = "ws://control/archive_control" shared_token_file = "{root / "token"}" state_db = "{root / "state.db"}" backup_dir = "{root / "backups"}" [qbittorrent] endpoint = "http://qb" username = "admin" password_file = "{root / "qb-password"}" api_root = "/downloads" local_root = "{root / "qb"}" local_path_overrides = {{ "/downloads/fast" = "{root / "qb-fast"}" }} [syncthing] endpoint = "http://syncthing" api_key_file = "{root / "syncthing-key"}" api_root = "/sync" local_root = "{root / "sync"}" ''', encoding="utf-8", ) output = io.StringIO() with redirect_stdout(output): self.assertEqual(main(["--config", str(config), "--check-config"]), 0) reported = json.loads(output.getvalue()) self.assertEqual( [item["root"] for item in reported["filesystems"]], [str(root / "qb"), str(root / "qb-fast"), str(root / "sync")], ) if __name__ == "__main__": unittest.main()