6033967e6a
Ship Keystone auth, multi-service handlers (Yoga→Dalmatian), Compose/Helm packaging, API contract packs, and pytest/Pulumi coverage labs.
63 lines
2.0 KiB
Python
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()
|