Files
inecs 6033967e6a Initial commit: stateful OpenStack API laboratory simulator.
Ship Keystone auth, multi-service handlers (Yoga→Dalmatian), Compose/Helm
packaging, API contract packs, and pytest/Pulumi coverage labs.
2026-07-18 04:26:48 +03:00

63 lines
2.0 KiB
Python

"""Unit tests for OpenStack contract packs and loader."""
from __future__ import annotations
import json
from pathlib import Path
from app.openstack.contract_loader import (
contracts_root,
list_series,
load_series_pack,
major_for_series,
)
def test_all_series_packs_exist() -> None:
series = {s["series"] for s in list_series()}
assert {"yoga", "antelope", "caracal", "dalmatian"} <= series
def test_dalmatian_core_minimums() -> None:
man = json.loads((contracts_root() / "dalmatian" / "manifest.json").read_text())
by_name = {s["name"]: s for s in man["services"]}
for svc, minimum in man["min_core_operations"].items():
assert by_name[svc]["operation_count"] >= minimum
assert man["operation_count"] >= 1300
assert man["service_count"] == 28
by_name = {s["name"]: s for s in man["services"]}
assert "watcher" in by_name
assert "zaqar" in by_name
assert by_name["neutron"]["operation_count"] >= 250
assert by_name["nova"]["operation_count"] >= 110
def test_load_series_pack_operations() -> None:
packs = load_series_pack("dalmatian")
assert "nova" in packs
assert "neutron" in packs
assert "watcher" in packs
assert "zaqar" in packs
nova = packs["nova"]
methods = {(op.method, op.path) for op in nova.operations}
assert ("GET", "/v2.1/servers") in methods
assert ("POST", "/v2.1/servers/{id}/action") in methods
assert ("GET", "/v2.1/extensions") in methods
assert ("GET", "/v2.0/address-groups") in {
(op.method, op.path) for op in packs["neutron"].operations
}
assert nova.max_microversion is not None
def test_major_mapping() -> None:
assert major_for_series("dalmatian") == 9
assert major_for_series("yoga") == 6
def test_api_json_files_present() -> None:
root = contracts_root() / "dalmatian"
services = [p for p in root.iterdir() if p.is_dir()]
assert len(services) == 28
for svc in services:
assert (svc / "api.json").is_file()