mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-01 10:22:08 +00:00
63 lines
2.7 KiB
Python
63 lines
2.7 KiB
Python
"""Guard Gonic's persistent data paths and first-run listener contract."""
|
|
import json
|
|
from pathlib import Path
|
|
import unittest
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
|
|
|
|
class GonicRecipeTests(unittest.TestCase):
|
|
def test_persistent_paths_and_listener_match_upstream_image(self):
|
|
"""Both shipped recipes must provide every configured data directory."""
|
|
for family in ("apps", "curated"):
|
|
with self.subTest(family=family):
|
|
template = json.loads(
|
|
(ROOT / "catalog" / family / "gonic.json")
|
|
.read_text(encoding="utf-8")
|
|
)
|
|
service = template["compose_stack"]["services"][0]["compose"]
|
|
environment = service["environment"]
|
|
volume_paths = {
|
|
volume["container_path"]
|
|
for volume in template["container_contract"]["volumes"]
|
|
}
|
|
preparation_paths = {
|
|
item["container_path"]
|
|
for item in template["proxmox"]["installer_profile"]
|
|
["volume_preparations"]
|
|
}
|
|
compose_volumes = set(service["volumes"])
|
|
|
|
expected_paths = {"/data", "/music", "/podcasts", "/playlists", "/cache"}
|
|
self.assertTrue(expected_paths <= volume_paths)
|
|
self.assertTrue(expected_paths <= preparation_paths)
|
|
self.assertTrue({
|
|
"./data:/data",
|
|
"./music:/music:ro",
|
|
"./podcasts:/podcasts",
|
|
"./playlists:/playlists",
|
|
"./cache:/cache",
|
|
} <= compose_volumes)
|
|
self.assertEqual(environment["GONIC_PODCAST_PATH"], "/podcasts")
|
|
self.assertEqual(environment["GONIC_PLAYLISTS_PATH"], "/playlists")
|
|
music = next(
|
|
volume for volume in template["container_contract"]["volumes"]
|
|
if volume["container_path"] == "/music"
|
|
)
|
|
self.assertTrue(music["read_only"])
|
|
self.assertEqual(template["container_contract"]["ports"][0]["container_port"], 80)
|
|
self.assertEqual(template["container_contract"]["ports"][0]["published_example"], 4747)
|
|
self.assertEqual(template["first_run"]["endpoints"][0]["port"], 80)
|
|
self.assertEqual(
|
|
template["proxmox"]["installer_profile"]["startup_healthcheck"]["port"],
|
|
80,
|
|
)
|
|
original = template["container_contract"]["original_compose"]
|
|
for volume in compose_volumes:
|
|
self.assertIn(f"- {volume}", original)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|