2026-05-19 04:53:47 +02:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
import tempfile
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
|
|
from django.test import TestCase
|
|
|
|
|
|
|
|
|
|
from pobsync.config.load import load_global_config, load_host_config
|
|
|
|
|
from pobsync_backend.config_repository import export_runtime_configs
|
|
|
|
|
from pobsync_backend.models import GlobalConfig, HostConfig
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ConfigRepositoryTests(TestCase):
|
|
|
|
|
def test_exports_database_configs_to_engine_yaml(self) -> None:
|
|
|
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
|
|
|
prefix = Path(tmp)
|
|
|
|
|
GlobalConfig.objects.create(
|
|
|
|
|
name="default",
|
|
|
|
|
backup_root="/backups",
|
|
|
|
|
pobsync_home=str(prefix),
|
2026-05-19 05:04:49 +02:00
|
|
|
ssh_user="backup",
|
|
|
|
|
ssh_port=2222,
|
|
|
|
|
rsync_args=["--archive"],
|
|
|
|
|
excludes_default=["/proc/***"],
|
|
|
|
|
retention_daily=7,
|
|
|
|
|
retention_weekly=4,
|
|
|
|
|
retention_monthly=3,
|
|
|
|
|
retention_yearly=1,
|
2026-05-19 04:53:47 +02:00
|
|
|
data={
|
|
|
|
|
"backup_root": "/ignored",
|
|
|
|
|
"pobsync_home": "/ignored",
|
2026-05-19 05:04:49 +02:00
|
|
|
"ssh": {"user": "ignored", "port": 22, "options": []},
|
|
|
|
|
"retention_defaults": {"daily": 99, "weekly": 99, "monthly": 99, "yearly": 99},
|
2026-05-19 04:53:47 +02:00
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
HostConfig.objects.create(
|
|
|
|
|
host="web-01",
|
|
|
|
|
address="web-01.example.test",
|
2026-05-19 05:04:49 +02:00
|
|
|
ssh_user="root",
|
|
|
|
|
includes=[],
|
|
|
|
|
excludes_add=["/tmp/***"],
|
|
|
|
|
retention_daily=7,
|
|
|
|
|
retention_weekly=4,
|
|
|
|
|
retention_monthly=3,
|
|
|
|
|
retention_yearly=1,
|
2026-05-19 04:53:47 +02:00
|
|
|
config={
|
|
|
|
|
"host": "ignored",
|
|
|
|
|
"address": "ignored",
|
2026-05-19 05:04:49 +02:00
|
|
|
"retention": {"daily": 99, "weekly": 99, "monthly": 99, "yearly": 99},
|
|
|
|
|
"excludes_add": ["/ignored/***"],
|
2026-05-19 04:53:47 +02:00
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
written = export_runtime_configs(prefix=prefix, host="web-01")
|
|
|
|
|
|
|
|
|
|
self.assertEqual(len(written), 2)
|
|
|
|
|
global_cfg = load_global_config(prefix / "config" / "global.yaml")
|
|
|
|
|
host_cfg = load_host_config(prefix / "config" / "hosts" / "web-01.yaml")
|
|
|
|
|
self.assertEqual(global_cfg["backup_root"], "/backups")
|
|
|
|
|
self.assertEqual(global_cfg["pobsync_home"], str(prefix))
|
2026-05-19 05:04:49 +02:00
|
|
|
self.assertEqual(global_cfg["ssh"]["user"], "backup")
|
|
|
|
|
self.assertEqual(global_cfg["ssh"]["port"], 2222)
|
|
|
|
|
self.assertEqual(global_cfg["retention_defaults"]["daily"], 7)
|
2026-05-19 04:53:47 +02:00
|
|
|
self.assertEqual(host_cfg["host"], "web-01")
|
|
|
|
|
self.assertEqual(host_cfg["address"], "web-01.example.test")
|
2026-05-19 05:04:49 +02:00
|
|
|
self.assertEqual(host_cfg["retention"]["daily"], 7)
|
|
|
|
|
self.assertEqual(host_cfg["excludes_add"], ["/tmp/***"])
|