60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
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()
|