computer-playbook/tests/integration/test_run_after_application_ids.py

38 lines
1.3 KiB
Python

#!/usr/bin/env python3
import os
import unittest
import yaml
from pathlib import Path
class TestRunAfterRoles(unittest.TestCase):
def setUp(self):
self.roles_dir = Path(__file__).resolve().parent.parent.parent / "roles"
self.valid_role_names = {p.name for p in self.roles_dir.iterdir() if p.is_dir()}
def test_run_after_roles_are_valid(self):
invalid_refs = []
for role in self.valid_role_names:
meta_path = self.roles_dir / role / "meta" / "main.yml"
if not meta_path.exists():
continue
try:
with open(meta_path, "r", encoding="utf-8") as f:
data = yaml.safe_load(f) or {}
except Exception as e:
self.fail(f"Failed to parse {meta_path}: {e}")
continue
run_after = data.get("galaxy_info", {}).get("run_after", [])
for ref in run_after:
if ref not in self.valid_role_names:
invalid_refs.append((role, ref))
if invalid_refs:
msg = "\n".join(f"{role}: invalid run_after → {ref}" for role, ref in invalid_refs)
self.fail(f"Found invalid run_after references:\n{msg}")
if __name__ == "__main__":
unittest.main()