Files
inecs cbd0adca91 Initial release of the oVirt/RHV Engine API simulator.
Stateful FastAPI lab with contract packs, Compose/Helm, Docker Hub release
targets, and Pulumi coverage across all Engine series (GET/POST/PUT/DELETE/HEAD).
2026-07-18 04:49:28 +03:00

152 lines
5.2 KiB
Python

"""Surface probe: GET/POST/PUT/DELETE happy paths across Engine collections."""
from __future__ import annotations
import uuid
import pytest
import requests
from .conftest import auth_headers, collection_items, discover_base_url, oauth_token
pytestmark = pytest.mark.integration
@pytest.fixture(scope="module")
def session_ctx():
base = discover_base_url()
token = oauth_token(base)
return base, auth_headers(token, version="4")
def test_get_all_top_level_collections(session_ctx) -> None:
base, headers = session_ctx
collections = {
"datacenters": "data_center",
"clusters": "cluster",
"hosts": "host",
"vms": "vm",
"disks": "disk",
"networks": "network",
"vnicprofiles": "vnic_profile",
"storagedomains": "storage_domain",
"storageconnections": "storage_connection",
"templates": "template",
"users": "user",
"groups": "group",
"roles": "role",
"events": "event",
"jobs": "job",
"tags": "tag",
"bookmarks": "bookmark",
"instancetypes": "instance_type",
"macpools": "mac_pool",
"schedulingpolicies": "scheduling_policy",
"schedulingpolicyunits": "scheduling_policy_unit",
"clusterlevels": "cluster_level",
"icons": "icon",
"operatingsystems": "operating_system",
"networkfilters": "network_filter",
"vmpools": "vm_pool",
"affinitylabels": "affinity_label",
"permissions": "permission",
"domains": "domain",
"options": "engine_option",
"imagetransfers": "image_transfer",
"katelloerrata": "katello_erratum",
"externalhostproviders": "external_host_provider",
"openstacknetworkproviders": "openstack_network_provider",
"openstackimageproviders": "openstack_image_provider",
"openstackvolumeproviders": "openstack_volume_provider",
}
for name, element in collections.items():
r = requests.get(f"{base}/ovirt-engine/api/{name}", headers=headers, verify=False, timeout=60)
assert r.status_code == 200, f"{name}: {r.status_code} {r.text[:200]}"
items = collection_items(r.json(), element)
assert len(items) >= 1, f"{name}: expected seeded rows, got empty"
def test_host_activate_deactivate(session_ctx) -> None:
base, headers = session_ctx
hosts = requests.get(f"{base}/ovirt-engine/api/hosts", headers=headers, verify=False, timeout=60)
host = hosts.json()["host"]
hid = host[0]["id"] if isinstance(host, list) else host["id"]
for action in ("deactivate", "activate"):
r = requests.post(
f"{base}/ovirt-engine/api/hosts/{hid}/{action}",
headers=headers,
json={"action": {}},
verify=False,
timeout=60,
)
assert r.status_code == 200, action
def test_tags_bookmarks_crud(session_ctx) -> None:
base, headers = session_ctx
name = f"tag-{uuid.uuid4().hex[:8]}"
create = requests.post(
f"{base}/ovirt-engine/api/tags",
headers=headers,
json={"tag": {"name": name, "description": "t"}},
verify=False,
timeout=60,
)
assert create.status_code == 201, create.text
tid = create.json()["tag"]["id"]
got = requests.get(f"{base}/ovirt-engine/api/tags/{tid}", headers=headers, verify=False, timeout=60)
assert got.status_code == 200
delete = requests.delete(
f"{base}/ovirt-engine/api/tags/{tid}", headers=headers, verify=False, timeout=60
)
assert delete.status_code == 200
bname = f"bm-{uuid.uuid4().hex[:6]}"
bc = requests.post(
f"{base}/ovirt-engine/api/bookmarks",
headers=headers,
json={"bookmark": {"name": bname, "value": "Vms:"}},
verify=False,
timeout=60,
)
assert bc.status_code == 201
bid = bc.json()["bookmark"]["id"]
requests.delete(f"{base}/ovirt-engine/api/bookmarks/{bid}", headers=headers, verify=False, timeout=60)
def test_snapshot_flow(session_ctx) -> None:
base, headers = session_ctx
clusters = requests.get(f"{base}/ovirt-engine/api/clusters", headers=headers, verify=False, timeout=60)
cluster = clusters.json()["cluster"]
cid = cluster[0]["id"] if isinstance(cluster, list) else cluster["id"]
vm = requests.post(
f"{base}/ovirt-engine/api/vms",
headers=headers,
json={"vm": {"name": f"snap-{uuid.uuid4().hex[:6]}", "cluster": {"id": cid}}},
verify=False,
timeout=60,
).json()["vm"]
snap = requests.post(
f"{base}/ovirt-engine/api/vms/{vm['id']}/snapshots",
headers=headers,
json={"snapshot": {"description": "s1"}},
verify=False,
timeout=60,
)
assert snap.status_code == 201
sid = snap.json()["snapshot"]["id"]
lst = requests.get(
f"{base}/ovirt-engine/api/vms/{vm['id']}/snapshots",
headers=headers,
verify=False,
timeout=60,
)
assert lst.status_code == 200
requests.delete(
f"{base}/ovirt-engine/api/vms/{vm['id']}/snapshots/{sid}",
headers=headers,
verify=False,
timeout=60,
)
requests.delete(f"{base}/ovirt-engine/api/vms/{vm['id']}", headers=headers, verify=False, timeout=60)