computer-playbook/tests/integration/test_oauth2_proxy_ports.py

59 lines
2.3 KiB
Python

import unittest
import yaml
from pathlib import Path
class TestOAuth2ProxyPorts(unittest.TestCase):
@classmethod
def setUpClass(cls):
# Set up root paths and load oauth2_proxy ports mapping
cls.ROOT = Path(__file__).parent.parent.parent.resolve()
cls.PORTS_FILE = cls.ROOT / 'group_vars' / 'all' / '08_ports.yml'
with cls.PORTS_FILE.open() as f:
data = yaml.safe_load(f)
cls.oauth2_ports = (
data.get('ports', {})
.get('localhost', {})
.get('oauth2_proxy', {})
)
def test_oauth2_feature_has_port_mapping(self):
# Iterate over each role directory
roles_dir = self.ROOT / 'roles'
for role_path in roles_dir.iterdir():
if not role_path.is_dir():
continue
with self.subTest(role=role_path.name):
# Check for configuration.yml
config_file = role_path / 'vars' / 'configuration.yml'
if not config_file.exists():
self.skipTest(f"No configuration.yml for role {role_path.name}")
config = yaml.safe_load(config_file.read_text()) or {}
if not config.get('features', {}).get('oauth2', False):
self.skipTest(f"OAuth2 not enabled for role {role_path.name}")
# Load application_id from vars/main.yml
main_file = role_path / 'vars' / 'main.yml'
if not main_file.exists():
self.fail(f"Missing vars/main.yml in role {role_path.name}")
main = yaml.safe_load(main_file.read_text()) or {}
app_id = main.get('application_id')
if not app_id:
self.fail(f"application_id not set in {main_file}")
# Validate oauth2_ports structure
self.assertIsInstance(self.oauth2_ports, dict,
"oauth2_proxy ports mapping is not a dict")
# Assert port mapping exists for the application
if app_id not in self.oauth2_ports:
self.fail(
f"Missing oauth2_proxy port mapping for application '{app_id}' "
f"in group_vars/all/08_ports.yml"
)
if __name__ == '__main__':
unittest.main()