computer-playbook/tests/integration/test_configuration_database_dependency.py

44 lines
1.7 KiB
Python

import unittest
from pathlib import Path
import yaml
class TestConfigurationDatabaseDependency(unittest.TestCase):
# Define project root and glob pattern for configuration files
PROJECT_ROOT = Path(__file__).resolve().parents[2]
CONFIG_PATTERN = 'roles/*/vars/configuration.yml'
def test_central_database_implies_database_service_enabled(self):
"""
For each roles/*/vars/configuration.yml:
If features.central_database is true,
then docker.services.database.enabled must be true.
"""
config_paths = sorted(self.PROJECT_ROOT.glob(self.CONFIG_PATTERN))
self.assertTrue(config_paths, f"No configuration files found for pattern {self.CONFIG_PATTERN}")
for config_path in config_paths:
with self.subTest(configuration=config_path):
content = yaml.safe_load(config_path.read_text(encoding='utf-8')) or {}
# Read central_database flag
features = content.get('features', {})
central_db = features.get('central_database', False)
# Read database enabled flag
docker = content.get('docker', {})
services = docker.get('services', {})
database = services.get('database', {})
db_enabled = database.get('enabled', False)
if central_db:
self.assertTrue(
db_enabled,
f"{config_path}: features.central_database is true but docker.services.database.enabled is not true"
)
else:
# No requirement when central_database is false or absent
self.assertTrue(True)
if __name__ == '__main__':
unittest.main()