Files

55 lines
2.5 KiB
Python
Raw Permalink Normal View History

"""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()