38 lines
1.4 KiB
Python
38 lines
1.4 KiB
Python
"""Unit tests for terraform/onboarding (P20, REQ-184)."""
|
|
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
ROOT = Path(__file__).resolve().parent.parent
|
|
ONBOARDING_DIR = ROOT / "terraform" / "onboarding"
|
|
|
|
|
|
def test_onboarding_terraform_dir_exists():
|
|
"""P20 (REQ-184): terraform/onboarding/ exists with main.tf + README."""
|
|
assert ONBOARDING_DIR.is_dir()
|
|
assert (ONBOARDING_DIR / "main.tf").is_file()
|
|
assert (ONBOARDING_DIR / "README.md").is_file()
|
|
|
|
|
|
def test_onboarding_terraform_validates():
|
|
"""P20 (REQ-184): terraform validate passes for the onboarding module
|
|
(offline-proven, D-114). Skipped if terraform is not installed."""
|
|
if not subprocess.call(["which", "terraform"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) == 0:
|
|
pytest.skip("terraform not installed")
|
|
rc = subprocess.call(
|
|
["terraform", "validate"],
|
|
cwd=str(ONBOARDING_DIR),
|
|
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL,
|
|
)
|
|
assert rc == 0, "terraform validate failed for terraform/onboarding/"
|
|
|
|
|
|
def test_onboarding_main_tf_has_nova_tags():
|
|
"""P20 (REQ-184): the deploy role is tagged with nova:owner + nova:contract."""
|
|
main_tf = (ONBOARDING_DIR / "main.tf").read_text()
|
|
assert '"nova:owner"' in main_tf
|
|
assert '"nova:contract"' in main_tf
|
|
assert "aws_iam_role" in main_tf
|
|
assert "lambda:InvokeFunctionUrl" in main_tf |