Format:
Export:

Test cases(24 of 50)

Show
Priority
Category
0/24 completed0%

Complete prerequisites first ([PRE-01](PRE-01) → [PRE-08](PRE-08) minimum) before running these tests. Go to prerequisites

Verify golden image import and PVC clone
Create and boot first VM from template (RHEL 9)

Masquerade uses OVN-K over eno2/br-ex — no bridge setup required

VM live migration (SNO: expected failure)

NOT POSSIBLE on SNO — live migration requires ≥2 nodes. Documented as an expected failure.

Create VM snapshots and perform restore

Test on local storage

Clone VM and use as template (Golden VM pattern)
Pod network (masquerade) and VM access via Service

Optimal for single-NIC — OVN-K over eno2/br-ex, no bridge setup required

VM directly reachable on LAN (OVN-K localnet) -- ⚠ HETZNER TOS VIOLATION

✗ NOT TESTABLE ON HETZNER -- TOS violation! OVN-K localnet works technically (verified 30.06.2026: ping successful), but any VM MAC that reaches eno2/the physical switch via this interface is detected and reported by Hetzner as an unauthorised MAC (server suspension threatened). Only the registered server MAC is permitted.

SR-IOV – high-performance networking (HW missing)

✗ NOT TESTABLE — SR-IOV requires a dedicated second NIC (Intel X710, Mellanox ConnectX). The sole NIC eno2 is consumed by OVN-K and cannot be used for SR-IOV VFs.

Test VLAN isolation — VMs in separate software bridges

Variant A uses pure software bridges br-net1/2/3 (port: []) — no VM MAC leaves eno2/the physical switch, no TOS risk. Variant B (on-premises, trunk port) is relevant only with your own switch.

Inter-VLAN routing via router VM (br-net1 ↔ br-net2)

purely internal software bridges br-net1/br-net2 (port: []) — no VM MAC leaves the node

VM with 3 Network Interfaces (Management + Data + Storage)
OVN-Kubernetes UserDefinedNetwork (Layer2 Overlay)

UserDefinedNetwork with Layer2 topology is a pure overlay (encapsulated Geneve tunnel within OVN-K) — explicitly NOT localnet, so no VM MAC leaves the node.

⚠️ DEDICATED NAMESPACE REQUIRED: see NOTE below.

Verify MetalLB Basic Functionality

2 Pools: internal-pool binds to br-net1 — external-pool binds to eno2, requires a 2nd public IP

Expose VM Services via MetalLB (SSH)

external-pool uses a provider-registered additional IP (e.g. Hetzner Additional IP); MetalLB speaker announces with the node's own MAC.

⚠️ SHARED RESOURCE: external-pool currently has only ONE IP — Clean up after this test (delete vm-ssh-lb) before starting TC-HCP-002

MetalLB BGP Mode with Router Peering

⚠️ NOT usable by default on the current SNO cluster: there is no customer-controlled router in the path for peering. Left for documentation purposes and future tests.

Multiple IP Pools and Namespace Isolation
MetalLB + Isolated Software Bridges: LB IPs per Bridge Interface

L2Advertisement explicitly binds to br-net1/br-net2 — ARP announcements stay node-internal.

Verify HyperShift Operator and MCE

Single-NIC OK — HyperShift pods use the OVN-K pod network.

⚠️ Check Pod/Node Capacity before starting TC-HCP-002 — see steps below.

Create Hosted Cluster with KubeVirt provider

⚠️ SNO EXAMPLE INSTALLATION: --control-plane-availability-policy SingleReplica is mandatory on a single-node cluster.

Worker nodes of the Hosted Cluster are KubeVirt VMs on the SNO. The control plane runs as pods. The only option for fully virtualised clusters on SNO.

Prerequisites checklist

Confirm these before running steps:

1⚠️ PREPARATION: Be sure the TC-HCP-001 steps have been completed before starting this test case.
2Use pull secret from PRE-07: ~/pull-secret.json
3Determine release image from running cluster:
RELEASE=$(oc get clusterversion version -o jsonpath='{.status.desired.image}')
oc get svc -A | grep $(oc get ipaddresspool external-pool -n metallb-system -o jsonpath='{.spec.addresses[0]}' | cut -d/ -f1)
→ if a match appears (e.g. vm-ssh-lb from TC-MLB-002): oc delete svc <name> -n <namespace> before proceeding
4Optional: if a SECOND, separate additional IP is available, apply dedicated hcp-api-pool (block in 'Commands / YAML' tab) — otherwise skip and use external-pool directly below
5Run hcp create cluster kubevirt (full command in Commands / YAML tab)
6Watch worker VMs:
watch oc get vm -n clusters-hc-demo
7HostedCluster status:
watch oc get hostedcluster -n clusters
8Check etcd pods for verification — with correct SingleReplica configuration, ONLY 1 etcd pod must exist (not 3 with 2 stuck Pending)
oc get pods -n clusters-hc-demo -l app=etcd
9Wait until Status: Available (10–20 minutes!)
10Optional: Wait for kube-apiserver Service and patch to the correct pool — the Service is already type=LoadBalancer, only the pool annotation needs to be set
oc get svc kube-apiserver -n clusters-hc-demo -w
oc patch svc kube-apiserver -n clusters-hc-demo --type=merge -p '{"metadata":{"annotations":{"metallb.io/address-pool":"external-pool"}},"spec":{"loadBalancerIP":null}}'
This is only required if you want to use a different pool. For now the external-pool with its one free IP was used by default
→ EXTERNAL-IP must match the reserved pool IP (not <pending>, not internal-pool)
11Create DNS entry or local /etc/hosts entry for the API name (e.g. hc-demo-api.local)
echo '<pool-ip> hc-demo-api.local' | sudo tee -a /etc/hosts
12Retrieve and test kubeconfig
hcp create kubeconfig --namespace clusters --name hc-demo > hc-demo.kubeconfig
kubectl --kubeconfig hc-demo.kubeconfig get nodes
→ Hosted Cluster node list appears directly from the laptop, no Ingress/port-forward required
13Reach Hosted Cluster web console
oc --kubeconfig hc-demo.kubeconfig get routes -n openshift-console
→ URL pattern: console-openshift-console.apps.hc-demo.apps.<cluster-domain>
⚠️ In this default mode, ONLY HTTPS (443) works; port 80 is deliberately blocked by HyperShift
14Perform some basic tests:
export KUBECONFIG=hc-demo.kubeconfig
oc new-project test
oc new-app nginx
sleep 10
oc get pods -n test
→ nginx pod should be Running
15Check IP stability after MetalLB speaker restart (important for production!)
oc delete pod -n metallb-system -l component=speaker
oc get svc kube-apiserver -n clusters-hc-demo
→ EXTERNAL-IP must remain the same, kubectl access must continue to work
Scale NodePool and change VM flavour

⚠️ Be sure enough compute resources are available on the SNO node before starting this test.

Remove Hosted Cluster cleanly (destroy)
DataVolume import from multiple sources

Import over OVN-K — bandwidth is shared with OCP traffic on eno2/br-ex in this cluster

Create VM backup with OADP
Restore VM from OADP backup

Search test plan

Type at least 2 characters to search

Keyboard shortcuts

P
Go to prerequisites
T
Go to test cases
G
Go to glossary
D
Go to diagrams
J
Next card
K
Previous card
Enter
Open / close focused card
/
Open search
CtrlK
Open search modal
?
Show shortcuts
Esc
Close panel / blur search
/ open searchJ/K next / previous card? keyboard shortcutsEsc close panels