Skip to content

Commit 3469d38

Browse files
committed
add source dv Windows from registry
Signed-off-by: Adam Cinko <acinko@redhat.com>
1 parent cd55c0f commit 3469d38

4 files changed

Lines changed: 82 additions & 78 deletions

File tree

tests/storage/cdi_clone/conftest.py

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import pytest
22
from ocp_resources.datavolume import DataVolume
33

4+
from tests.storage.cdi_clone.constants import WINDOWS_CLONE_TIMEOUT
45
from tests.storage.constants import QUAY_FEDORA_CONTAINER_IMAGE
5-
from utilities.constants import REGISTRY_STR, Images
6+
from utilities.artifactory import get_artifactory_config_map, get_artifactory_secret, get_test_artifact_server_url
7+
from utilities.constants import REGISTRY_STR, WIN_2K22, Images
8+
from utilities.os_utils import get_windows_container_disk_path
69
from utilities.storage import create_dv, data_volume
710

811

@@ -59,3 +62,47 @@ def fedora_dv_with_block_volume_mode(
5962
) as dv:
6063
dv.wait_for_dv_success()
6164
yield dv
65+
66+
67+
@pytest.fixture(scope="function")
68+
def source_dv_windows_registry(
69+
unprivileged_client,
70+
namespace,
71+
storage_class_name_scope_function,
72+
):
73+
"""Fixture that creates a Windows 2022 DataVolume from registry."""
74+
secret = get_artifactory_secret(namespace=namespace.name)
75+
cert = get_artifactory_config_map(namespace=namespace.name)
76+
77+
with create_dv(
78+
client=unprivileged_client,
79+
dv_name=f"dv-source-{WIN_2K22}-registry",
80+
namespace=namespace.name,
81+
source="registry",
82+
size=Images.Windows.CONTAINER_DISK_DV_SIZE,
83+
storage_class=storage_class_name_scope_function,
84+
url=f"{get_test_artifact_server_url(schema='registry')}/{get_windows_container_disk_path(os_value=WIN_2K22)}",
85+
secret=secret,
86+
cert_configmap=cert.name,
87+
) as dv:
88+
dv.wait_for_dv_success(timeout=WINDOWS_CLONE_TIMEOUT)
89+
yield dv
90+
91+
92+
@pytest.fixture(scope="function")
93+
def cloned_windows_dv_from_registry(
94+
unprivileged_client,
95+
source_dv_windows_registry,
96+
):
97+
"""Fixture that creates a cloned DataVolume from registry source."""
98+
with create_dv(
99+
client=unprivileged_client,
100+
source="pvc",
101+
dv_name=f"dv-target-{WIN_2K22}-vtpm",
102+
namespace=source_dv_windows_registry.namespace,
103+
size=source_dv_windows_registry.size,
104+
source_pvc=source_dv_windows_registry.name,
105+
storage_class=source_dv_windows_registry.storage_class,
106+
) as cdv:
107+
cdv.wait_for_dv_success(timeout=WINDOWS_CLONE_TIMEOUT)
108+
yield cdv
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
"""Constants for CDI clone tests."""
2+
3+
from utilities.constants import TIMEOUT_40MIN
4+
5+
WINDOWS_CLONE_TIMEOUT = TIMEOUT_40MIN

tests/storage/cdi_clone/test_clone.py

Lines changed: 28 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,24 @@
1212
)
1313

1414
from tests.os_params import FEDORA_LATEST, WINDOWS_11, WINDOWS_11_TEMPLATE_LABELS
15+
from tests.storage.cdi_clone.constants import WINDOWS_CLONE_TIMEOUT
1516
from tests.storage.utils import (
1617
assert_pvc_snapshot_clone_annotation,
1718
assert_use_populator,
1819
create_windows_vm_validate_guest_agent_info,
20+
validate_os_info_vmi_vs_windows_os,
21+
verify_vtpm_in_windows_vm,
22+
wait_for_windows_vm,
1923
)
2024
from utilities.constants import (
2125
OS_FLAVOR_FEDORA,
26+
OS_FLAVOR_WIN_CONTAINER_DISK,
2227
OS_FLAVOR_WINDOWS,
2328
TIMEOUT_1MIN,
2429
TIMEOUT_40MIN,
30+
U1_LARGE,
31+
WIN_2K22,
32+
WINDOWS_2K22_PREFERENCE,
2533
Images,
2634
)
2735
from utilities.storage import (
@@ -38,8 +46,6 @@
3846
running_vm,
3947
)
4048

41-
WINDOWS_CLONE_TIMEOUT = TIMEOUT_40MIN
42-
4349

4450
def create_vm_from_clone_dv_template(
4551
vm_name,
@@ -69,47 +75,6 @@ def create_vm_from_clone_dv_template(
6975
running_vm(vm=vm)
7076

7177

72-
def create_windows_vm_with_vtpm_validate_guest_agent_info(
73-
dv,
74-
namespace,
75-
unprivileged_client,
76-
windows_version,
77-
admin_client=None,
78-
):
79-
"""
80-
Create Windows VM with vTPM using instance types and preferences.
81-
82-
Args:
83-
dv: DataVolume to use for the VM
84-
namespace: Namespace object
85-
unprivileged_client: Client to use
86-
windows_version: Windows version string ("11", "2k22", etc.)
87-
admin_client: Optional admin client for vTPM validation
88-
"""
89-
from tests.storage.utils import validate_os_info_vmi_vs_windows_os, wait_for_windows_vm
90-
91-
# Map Windows version to preference name
92-
preference_name = f"windows.{windows_version}" # e.g., "windows.11", "windows.2k22"
93-
94-
with VirtualMachineForTests(
95-
name=f"vm-win-{windows_version}-vtpm",
96-
namespace=namespace.name,
97-
client=unprivileged_client,
98-
os_flavor=OS_FLAVOR_WINDOWS,
99-
vm_instance_type=VirtualMachineClusterInstancetype(name="u1.large", client=unprivileged_client),
100-
vm_preference=VirtualMachineClusterPreference(name=preference_name, client=unprivileged_client),
101-
data_volume_template={"metadata": dv.res["metadata"], "spec": dv.res["spec"]},
102-
) as vm:
103-
wait_for_windows_vm(vm=vm, version=windows_version, timeout=TIMEOUT_40MIN)
104-
validate_os_info_vmi_vs_windows_os(vm=vm)
105-
106-
# Validate vTPM if admin_client provided
107-
if admin_client:
108-
from tests.storage.utils import verify_vtpm_in_windows_vm
109-
110-
verify_vtpm_in_windows_vm(vm=vm, admin_client=admin_client)
111-
112-
11378
@pytest.mark.tier3
11479
@pytest.mark.parametrize(
11580
"data_volume_multi_storage_scope_function",
@@ -235,45 +200,31 @@ def test_successful_vm_from_cloned_dv_windows(
235200

236201

237202
@pytest.mark.tier3
238-
@pytest.mark.parametrize(
239-
"data_volume_multi_storage_scope_function",
240-
[
241-
pytest.param(
242-
{
243-
"dv_name": "dv-source-win11-vtpm",
244-
"source": "http",
245-
"image": f"{Images.Windows.DIR}/{Images.Windows.WIN11_IMG}",
246-
"dv_size": Images.Windows.DEFAULT_DV_SIZE,
247-
},
248-
marks=pytest.mark.polarion("CNV-3638"),
249-
),
250-
],
251-
indirect=True,
252-
)
203+
@pytest.mark.polarion("CNV-3638")
253204
def test_successful_vm_from_cloned_dv_windows_with_vtpm(
205+
admin_client, # only needed for `verify_vtpm_in_windows_vm`, to be deleted once verified
254206
unprivileged_client,
255-
admin_client,
256-
data_volume_multi_storage_scope_function,
257207
namespace,
208+
cloned_windows_dv_from_registry,
258209
):
259-
"""Test cloning Windows 11 DV and creating VM with vTPM using instance types."""
260-
with create_dv(
210+
"""Test cloning Windows 2022 DV and creating VM with vTPM using instance types."""
211+
212+
with VirtualMachineForTests(
213+
name=f"vm-{WIN_2K22}-vtpm",
214+
namespace=namespace.name,
261215
client=unprivileged_client,
262-
source="pvc",
263-
dv_name="dv-target-win11-vtpm",
264-
namespace=data_volume_multi_storage_scope_function.namespace,
265-
size=data_volume_multi_storage_scope_function.size,
266-
source_pvc=data_volume_multi_storage_scope_function.name,
267-
storage_class=data_volume_multi_storage_scope_function.storage_class,
268-
) as cdv:
269-
cdv.wait_for_dv_success(timeout=WINDOWS_CLONE_TIMEOUT)
270-
create_windows_vm_with_vtpm_validate_guest_agent_info(
271-
dv=cdv,
272-
namespace=namespace,
273-
unprivileged_client=unprivileged_client,
274-
windows_version="11",
275-
admin_client=admin_client,
276-
)
216+
os_flavor=OS_FLAVOR_WIN_CONTAINER_DISK,
217+
vm_instance_type=VirtualMachineClusterInstancetype(name=U1_LARGE, client=unprivileged_client),
218+
vm_preference=VirtualMachineClusterPreference(name=WINDOWS_2K22_PREFERENCE, client=unprivileged_client),
219+
data_volume_template={
220+
"metadata": cloned_windows_dv_from_registry.res["metadata"],
221+
"spec": cloned_windows_dv_from_registry.res["spec"],
222+
},
223+
) as vm:
224+
vm.start()
225+
wait_for_windows_vm(vm=vm, version="2k22", timeout=TIMEOUT_40MIN)
226+
validate_os_info_vmi_vs_windows_os(vm=vm)
227+
verify_vtpm_in_windows_vm(vm=vm, admin_client=admin_client)
277228

278229

279230
@pytest.mark.parametrize(

utilities/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,7 @@ class NamespacesNames:
812812
RHEL8_PREFERENCE = "rhel.8"
813813
RHEL9_PREFERENCE = "rhel.9"
814814
RHEL10_PREFERENCE = "rhel.10"
815+
WINDOWS_2K22_PREFERENCE = "windows.2k22"
815816
U1_SMALL = "u1.small"
816817
U1_LARGE = "u1.large"
817818
PROMETHEUS_K8S = "prometheus-k8s"

0 commit comments

Comments
 (0)