147f04c9a2
Persist aggregates and server security groups in domain tables, add Cinder quota show from DB-backed defaults, align unit tests with OpenStack series, auto-pick Keystone :5000/:15000 for smoke, and document test locations plus 6514/6514 results.
73 lines
2.9 KiB
Python
73 lines
2.9 KiB
Python
"""OpenStack pack remount via /ui/api/contract/apply."""
|
|
|
|
import pytest
|
|
from httpx import ASGITransport, AsyncClient
|
|
|
|
from app.config import Settings
|
|
from app.main import create_app
|
|
from tests.unit.test_health import FakeDatabase
|
|
|
|
_SERIES = {
|
|
6: "yoga",
|
|
7: "antelope",
|
|
8: "caracal",
|
|
9: "dalmatian",
|
|
}
|
|
|
|
|
|
def _app():
|
|
return create_app(
|
|
settings=Settings(contract_snapshot=None),
|
|
database_factory=lambda _settings: FakeDatabase(True),
|
|
worker_factories=(),
|
|
)
|
|
|
|
|
|
async def test_contract_apply_swaps_openstack_series() -> None:
|
|
app = _app()
|
|
async with app.router.lifespan_context(app):
|
|
async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as client:
|
|
versions = await client.get("/ui/api/versions")
|
|
assert versions.status_code == 200
|
|
assert {item["major"] for item in versions.json()["majors"]} == {6, 7, 8, 9}
|
|
|
|
applied = await client.post("/ui/api/contract/apply", params={"major": 7})
|
|
assert applied.status_code == 200
|
|
payload = applied.json()
|
|
assert payload["ok"] is True
|
|
assert payload["major"] == 7
|
|
assert payload["series"] == "antelope"
|
|
assert payload["runtime_version"] == "openstack-antelope"
|
|
assert (payload.get("method_count") or payload.get("operation_count") or 0) > 0
|
|
|
|
versions_after = await client.get("/ui/api/versions")
|
|
assert versions_after.json()["runtime_version"] == "openstack-antelope"
|
|
|
|
restored = await client.post("/ui/api/contract/apply", params={"major": 9})
|
|
assert restored.status_code == 200
|
|
assert restored.json()["runtime_version"] == "openstack-dalmatian"
|
|
assert (await client.get("/ui/api/versions")).json()["runtime_version"] == (
|
|
"openstack-dalmatian"
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize("major,series", list(_SERIES.items()))
|
|
async def test_contract_apply_sets_runtime_per_series(major: int, series: str) -> None:
|
|
app = _app()
|
|
async with app.router.lifespan_context(app):
|
|
async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as client:
|
|
applied = await client.post("/ui/api/contract/apply", params={"major": major})
|
|
assert applied.status_code == 200
|
|
body = applied.json()
|
|
assert body["runtime_version"] == f"openstack-{series}"
|
|
assert body["series"] == series
|
|
|
|
|
|
async def test_contract_apply_works_without_proxmox_snapshot() -> None:
|
|
app = _app()
|
|
async with app.router.lifespan_context(app):
|
|
async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as client:
|
|
response = await client.post("/ui/api/contract/apply", params={"major": 7})
|
|
assert response.status_code == 200
|
|
assert response.json()["runtime_version"] == "openstack-antelope"
|