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.
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
"""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()
|
||||
Reference in New Issue
Block a user