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.
97 lines
4.4 KiB
Python
97 lines
4.4 KiB
Python
"""Web console route tests."""
|
|
|
|
from httpx import ASGITransport, AsyncClient
|
|
|
|
from app.main import create_app
|
|
from tests.unit.test_health import FakeDatabase
|
|
|
|
|
|
async def test_root_console_is_served() -> None:
|
|
app = create_app(database_factory=lambda _settings: FakeDatabase(True), worker_factories=())
|
|
async with app.router.lifespan_context(app):
|
|
async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as client:
|
|
response = await client.get("/console")
|
|
assert response.status_code == 200
|
|
assert "OpenStack API Emulator" in response.text
|
|
assert "openstack" in response.text
|
|
assert 'id="catalog-drawer"' in response.text
|
|
assert "catalog-drawer" in response.text
|
|
assert 'id="help-drawer"' in response.text
|
|
assert 'id="help-badge"' in response.text
|
|
assert 'id="data-badge"' in response.text
|
|
assert 'id="data-drawer"' in response.text
|
|
assert "data-badge-btn" in response.text
|
|
assert 'id="endpoints-badge-count"' in response.text
|
|
assert 'id="endpoints-drawer-count"' in response.text
|
|
assert 'id="ui-modal"' in response.text
|
|
assert 'role="alertdialog"' in response.text
|
|
assert "Request body" in response.text
|
|
|
|
|
|
async def test_ui_method_server_list_is_implemented() -> None:
|
|
app = create_app(database_factory=lambda _settings: FakeDatabase(True), worker_factories=())
|
|
async with app.router.lifespan_context(app):
|
|
async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as client:
|
|
method = await client.get(
|
|
"/ui/api/method",
|
|
params={"major": 9, "path": "/v2.1/servers", "verb": "GET"},
|
|
)
|
|
assert method.status_code == 200
|
|
payload = method.json()
|
|
assert payload["implemented"] is True
|
|
assert payload["name"] == "server_list"
|
|
assert payload["service"] == "nova"
|
|
|
|
|
|
async def test_ui_catalog_server_list_is_implemented() -> None:
|
|
app = create_app(database_factory=lambda _settings: FakeDatabase(True), worker_factories=())
|
|
async with app.router.lifespan_context(app):
|
|
async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as client:
|
|
catalog = await client.get("/ui/api/catalog", params={"major": 9})
|
|
assert catalog.status_code == 200
|
|
body = catalog.json()
|
|
assert body["source_version"] == "openstack-dalmatian"
|
|
methods = {
|
|
(path["path"], method["name"]): method["implemented"]
|
|
for category in body["categories"]
|
|
for path in category["paths"]
|
|
for method in path["methods"]
|
|
}
|
|
assert methods[("/v2.1/servers", "server_list")] is True
|
|
|
|
|
|
async def test_demo_api_requires_database() -> None:
|
|
app = create_app(database_factory=lambda _settings: FakeDatabase(True), worker_factories=())
|
|
async with app.router.lifespan_context(app):
|
|
async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as client:
|
|
state = await client.get("/ui/api/demo/state")
|
|
load = await client.post("/ui/api/demo/load")
|
|
assert state.status_code == 503
|
|
assert load.status_code == 503
|
|
|
|
|
|
async def test_ui_versions_and_catalog_endpoints() -> None:
|
|
app = create_app(database_factory=lambda _settings: FakeDatabase(True), worker_factories=())
|
|
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
|
|
majors = versions.json()["majors"]
|
|
assert {item["major"] for item in majors} == {6, 7, 8, 9}
|
|
assert {item["latest_version"] for item in majors} == {
|
|
"yoga",
|
|
"antelope",
|
|
"caracal",
|
|
"dalmatian",
|
|
}
|
|
catalog = await client.get("/ui/api/catalog", params={"major": 9})
|
|
assert catalog.status_code == 200
|
|
assert catalog.json()["source_version"] == "openstack-dalmatian"
|
|
method = await client.get(
|
|
"/ui/api/method",
|
|
params={"major": 9, "path": "/v2.1/servers", "verb": "GET"},
|
|
)
|
|
assert method.status_code == 200
|
|
assert method.json()["path"] == "/v2.1/servers"
|
|
assert method.json()["name"] == "server_list"
|