cbd0adca91
Stateful FastAPI lab with contract packs, Compose/Helm, Docker Hub release targets, and Pulumi coverage across all Engine series (GET/POST/PUT/DELETE/HEAD).
62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
"""Contract pack integrity and series deltas."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from app.ovirt.contract_loader import list_series, load_series_pack, major_for_series
|
|
from tools.ovirt_api_inventory.catalog import SERIES
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
CONTRACTS = ROOT / "contracts" / "ovirt"
|
|
|
|
|
|
@pytest.mark.contract
|
|
def test_all_series_packs_exist() -> None:
|
|
available = {s["series"] for s in list_series()}
|
|
for series in SERIES:
|
|
assert series in available
|
|
pack = load_series_pack(series)
|
|
assert pack.operation_count() > 0
|
|
assert pack.api_version in {"3", "4"}
|
|
|
|
|
|
@pytest.mark.contract
|
|
def test_series_deltas_are_real() -> None:
|
|
"""Later series must not be identical copies of earlier inventories."""
|
|
|
|
counts = []
|
|
for series in SERIES:
|
|
man = json.loads((CONTRACTS / series / "manifest.json").read_text())
|
|
counts.append((series, man["operation_count"]))
|
|
# 3.0 < 3.3 < 4.3 (real growth)
|
|
by = dict(counts)
|
|
assert by["3.0"] < by["3.3"]
|
|
assert by["3.3"] < by["4.3"]
|
|
assert by["4.3"] <= by["4.5"]
|
|
# deltas files record added ops
|
|
d33 = json.loads((CONTRACTS / "3.3" / "deltas.json").read_text())
|
|
assert d33["added_count"] > 0
|
|
assert any("vnicprofiles" in x for x in d33["added"])
|
|
|
|
|
|
@pytest.mark.contract
|
|
def test_v3_vs_v4_api_version() -> None:
|
|
assert load_series_pack("3.6").api_version == "3"
|
|
assert load_series_pack("4.5").api_version == "4"
|
|
assert major_for_series("4.5") == 45
|
|
|
|
|
|
@pytest.mark.contract
|
|
def test_entry_point_links_grow() -> None:
|
|
early = json.loads((CONTRACTS / "3.0" / "manifest.json").read_text())
|
|
late = json.loads((CONTRACTS / "4.5" / "manifest.json").read_text())
|
|
early_rels = {l["rel"] for l in early["entry_point_links"]}
|
|
late_rels = {l["rel"] for l in late["entry_point_links"]}
|
|
assert "vms" in early_rels
|
|
assert "vnicprofiles" in late_rels
|
|
assert "vnicprofiles" not in early_rels or "affinitylabels" in late_rels - early_rels
|