Files
ProxMenux/oci/tests/test_scanopy_recipe.py

55 lines
2.5 KiB
Python

"""Scanopy keeps its three services as native OCI LXCs, without host networking."""
import json
from pathlib import Path
import unittest
ROOT = Path(__file__).resolve().parents[1]
class ScanopyRecipeTests(unittest.TestCase):
def setUp(self):
self.curated = json.loads((ROOT / "catalog/curated/scanopy.json").read_text(encoding="utf-8"))
self.generated = json.loads((ROOT / "catalog/apps/scanopy.json").read_text(encoding="utf-8"))
self.services = {service["name"]: service for service in self.curated["compose_stack"]["services"]}
def test_generated_catalog_copy_matches_curated_profile(self):
self.assertEqual(self.curated, self.generated)
def test_the_server_is_the_main_service(self):
self.assertEqual(set(self.services), {"daemon", "postgres", "server"})
self.assertEqual(self.curated["compose_stack"]["main_service"], "server")
self.assertEqual(self.services["server"]["depends_on"], ["daemon", "postgres"])
def test_only_postgres_stays_off_the_lan(self):
self.assertTrue(self.services["daemon"]["frontend_network"])
self.assertTrue(self.services["server"]["frontend_network"])
self.assertFalse(self.services["postgres"]["frontend_network"])
def test_the_daemon_needs_no_docker_only_settings(self):
compose = self.services["daemon"]["compose"]
self.assertNotIn("network_mode", compose)
self.assertNotIn("privileged", compose)
self.assertNotIn("docker.sock", json.dumps(compose))
def test_the_daemon_stops_with_the_signal_it_handles(self):
self.assertEqual(self.services["daemon"]["compose"]["stop_signal"], "SIGINT")
def test_the_daemon_is_checked_where_it_answers(self):
self.assertIn("/api/health", json.dumps(self.services["daemon"]["compose"]["healthcheck"]))
def test_the_database_password_is_generated_and_shared(self):
password = "${GENERATED_DB_PASSWORD}"
self.assertEqual(self.services["postgres"]["compose"]["environment"]["POSTGRES_PASSWORD"], password)
self.assertIn(password, self.services["server"]["compose"]["environment"]["SCANOPY_DATABASE_URL"])
secrets = self.curated["compose_stack"]["installer_inputs"]["generated_secrets"]
self.assertEqual(len(secrets), 1)
self.assertEqual({binding["service"] for binding in secrets[0]["bindings"]}, {"postgres", "server"})
def test_no_password_of_the_test_install_remains(self):
self.assertNotIn("pmxLab", json.dumps(self.curated))
if __name__ == "__main__":
unittest.main()