mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-07 03:15:56 +00:00
62 lines
2.3 KiB
Python
62 lines
2.3 KiB
Python
import unittest
|
|
import yaml
|
|
import os
|
|
import glob
|
|
|
|
from plugins.filter.invokable_paths import get_invokable_paths
|
|
|
|
|
|
class TestSysRolesApplicationId(unittest.TestCase):
|
|
"""
|
|
Integration tests for sys-* roles based on categories.yml prefixes:
|
|
For each actual sys-* directory under roles/:
|
|
- If dash-joined prefix is in invokable_paths -> vars/main.yml must exist and contain application_id.
|
|
- Otherwise (non-invokable or undeclared) -> if vars/main.yml exists, it must NOT contain application_id.
|
|
"""
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
cls.base_dir = os.path.abspath(
|
|
os.path.join(os.path.dirname(__file__), "..", "..")
|
|
)
|
|
cat_file = os.path.join(cls.base_dir, "roles", "categories.yml")
|
|
cls.invokable_prefixes = set(get_invokable_paths(cat_file))
|
|
# collect actual sys dirs
|
|
pattern = os.path.join(cls.base_dir, "roles", "sys-*")
|
|
cls.actual_dirs = [d for d in glob.glob(pattern) if os.path.isdir(d)]
|
|
|
|
def test_sys_roles_application_id(self):
|
|
for role_dir in self.actual_dirs:
|
|
name = os.path.basename(role_dir)
|
|
prefix = f"sys-{name[len('sys-') :] if name.startswith('sys-') else name}"
|
|
vars_file = os.path.join(role_dir, "vars", "main.yml")
|
|
if prefix in self.invokable_prefixes:
|
|
# must exist with id
|
|
self.assertTrue(
|
|
os.path.isfile(vars_file),
|
|
f"Missing vars/main.yml for invokable role {prefix}",
|
|
)
|
|
with open(vars_file) as f:
|
|
content = yaml.safe_load(f) or {}
|
|
self.assertIn(
|
|
"application_id",
|
|
content,
|
|
f"Expected 'application_id' in {vars_file} for invokable role {prefix}",
|
|
)
|
|
else:
|
|
# if exists, must not contain id
|
|
if not os.path.isfile(vars_file):
|
|
continue
|
|
with open(vars_file) as f:
|
|
content = yaml.safe_load(f) or {}
|
|
self.assertNotIn(
|
|
"application_id",
|
|
content,
|
|
f"Unexpected 'application_id' in {vars_file} for non-invokable role {prefix}",
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|
|
unittest.main()
|