Skip to content

Commit 3e4a9b1

Browse files
authored
[virt] virt-cluster tests to use golden data sources (RedHatQE#2045)
* [virt] virt-cluster tests to use golden data sources update virt-cluster tests to utilize golden image datasources instead of all the time downloading image from artifactory server * fix tox * fix os_dict key names * fix imports * fix test params * fix comments * add cirros_os const * drop data_source from VMs if data_volume_template passed
1 parent 6cc29ce commit 3e4a9b1

18 files changed

Lines changed: 321 additions & 381 deletions

tests/conftest.py

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -871,11 +871,6 @@ def golden_image_data_volume_scope_module(request, admin_client, golden_images_n
871871
)
872872

873873

874-
@pytest.fixture(scope="module")
875-
def golden_image_data_source_scope_module(admin_client, golden_image_data_volume_scope_module):
876-
yield from create_or_update_data_source(admin_client=admin_client, dv=golden_image_data_volume_scope_module)
877-
878-
879874
@pytest.fixture()
880875
def golden_image_data_volume_scope_function(request, admin_client, golden_images_namespace, schedulable_nodes):
881876
yield from data_volume(
@@ -968,17 +963,6 @@ def golden_image_vm_instance_from_template_multi_storage_scope_class(
968963
yield vm
969964

970965

971-
@pytest.fixture()
972-
def vm_from_template_scope_function(request, unprivileged_client, namespace, golden_image_data_source_scope_function):
973-
with vm_instance_from_template(
974-
request=request,
975-
unprivileged_client=unprivileged_client,
976-
namespace=namespace,
977-
data_source=golden_image_data_source_scope_function,
978-
) as vm_from_template:
979-
yield vm_from_template
980-
981-
982966
"""
983967
Windows-specific fixtures
984968
"""

tests/virt/cluster/common_templates/conftest.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
from packaging import version
55

66
from tests.virt.cluster.common_templates.utils import (
7-
get_data_volume_template_dict_with_default_storage_class,
87
get_matrix_os_golden_image_data_source,
98
matrix_os_vm_from_template,
109
xfail_old_guest_agent_version,
1110
)
11+
from tests.virt.utils import get_data_volume_template_dict_with_default_storage_class
1212
from utilities.constants import REGEDIT_PROC_NAME
1313
from utilities.virt import (
1414
start_and_fetch_processid_on_linux_vm,
@@ -131,14 +131,14 @@ def tablet_device_vm(
131131
request,
132132
unprivileged_client,
133133
namespace,
134-
golden_image_data_source_multi_storage_scope_class,
134+
golden_image_data_volume_template_for_test_scope_class,
135135
cpu_for_migration,
136136
):
137137
with vm_instance_from_template(
138138
request=request,
139139
unprivileged_client=unprivileged_client,
140140
namespace=namespace,
141-
data_source=golden_image_data_source_multi_storage_scope_class,
141+
data_volume_template=golden_image_data_volume_template_for_test_scope_class,
142142
vm_cpu_model=cpu_for_migration if request.param.get("set_vm_common_cpu") else None,
143143
) as vm:
144144
yield vm

tests/virt/cluster/common_templates/general/test_base_custom_templates.py

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
import pytest
44
from kubernetes.dynamic.exceptions import UnprocessibleEntityError
55
from ocp_resources.template import Template
6-
from pytest_testconfig import py_config
76

8-
from tests.os_params import FEDORA_LATEST, FEDORA_LATEST_OS
7+
from tests.os_params import FEDORA_LATEST
98
from utilities.constants import NamespacesNames
109
from utilities.virt import (
1110
VirtualMachineForTestsFromTemplate,
@@ -77,17 +76,8 @@ def custom_template_from_base_template(request, namespace):
7776

7877

7978
@pytest.mark.parametrize(
80-
"golden_image_data_volume_scope_class",
81-
[
82-
pytest.param(
83-
{
84-
"dv_name": FEDORA_LATEST_OS,
85-
"image": FEDORA_LATEST.get("image_path"),
86-
"dv_size": FEDORA_LATEST.get("dv_size"),
87-
"storage_class": py_config["default_storage_class"],
88-
},
89-
),
90-
],
79+
"golden_image_data_source_for_test_scope_class",
80+
[pytest.param({"os_dict": FEDORA_LATEST})],
9181
indirect=True,
9282
)
9383
class TestBaseCustomTemplates:
@@ -124,7 +114,7 @@ def test_vm_from_base_custom_template(
124114
self,
125115
unprivileged_client,
126116
namespace,
127-
golden_image_data_source_scope_class,
117+
golden_image_data_volume_template_for_test_scope_class,
128118
custom_template_from_base_template,
129119
vm_name,
130120
):
@@ -133,7 +123,7 @@ def test_vm_from_base_custom_template(
133123
namespace=namespace.name,
134124
client=unprivileged_client,
135125
template_object=custom_template_from_base_template,
136-
data_source=golden_image_data_source_scope_class,
126+
data_volume_template=golden_image_data_volume_template_for_test_scope_class,
137127
) as custom_vm:
138128
running_vm(vm=custom_vm)
139129

@@ -160,8 +150,7 @@ def test_vm_from_base_custom_template(
160150
def test_custom_template_vm_validation(
161151
self,
162152
unprivileged_client,
163-
namespace,
164-
golden_image_data_source_scope_class,
153+
golden_image_data_volume_template_for_test_scope_class,
165154
custom_template_from_base_template,
166155
):
167156
with pytest.raises(UnprocessibleEntityError, match=r".*This VM has too many cores.*"):
@@ -170,7 +159,7 @@ def test_custom_template_vm_validation(
170159
namespace=custom_template_from_base_template.namespace,
171160
client=unprivileged_client,
172161
template_object=custom_template_from_base_template,
173-
data_source=golden_image_data_source_scope_class,
162+
data_volume_template=golden_image_data_volume_template_for_test_scope_class,
174163
cpu_cores=3,
175164
) as vm_from_template:
176165
pytest.fail(f"VM validation failed on {vm_from_template.name}")

tests/virt/cluster/common_templates/general/test_diskless_vm.py

Lines changed: 36 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,57 +5,49 @@
55
import logging
66

77
import pytest
8-
from pytest_testconfig import config as py_config
8+
from ocp_resources.template import Template
99

1010
from tests.os_params import RHEL_LATEST_LABELS, WINDOWS_LATEST_LABELS
11-
from utilities.constants import Images
11+
from tests.virt.constants import CIRROS_OS
12+
from utilities.virt import VirtualMachineForTestsFromTemplate
1213

1314
LOGGER = logging.getLogger(__name__)
1415
# Image is not relevant - needed for VM creation with a template but will not be used
15-
SMALL_VM_IMAGE = f"{Images.Cirros.DIR}/{Images.Cirros.QCOW2_IMG}"
1616

1717

1818
@pytest.mark.parametrize(
19-
"golden_image_data_volume_scope_function, vm_from_template_scope_function",
20-
[
21-
pytest.param(
22-
{
23-
"dv_name": "cirros-dv",
24-
"image": SMALL_VM_IMAGE,
25-
"storage_class": py_config["default_storage_class"],
26-
"dv_size": Images.Cirros.DEFAULT_DV_SIZE,
27-
},
28-
{
29-
"vm_name": "rhel-diskless-vm",
30-
"template_labels": RHEL_LATEST_LABELS,
31-
"diskless_vm": True,
32-
"start_vm": False,
33-
},
34-
marks=(pytest.mark.polarion("CNV-4696"), pytest.mark.gating(), pytest.mark.s390x),
35-
),
36-
pytest.param(
37-
{
38-
"dv_name": "cirros-dv",
39-
"image": SMALL_VM_IMAGE,
40-
"storage_class": py_config["default_storage_class"],
41-
"dv_size": Images.Cirros.DEFAULT_DV_SIZE,
42-
},
43-
{
44-
"vm_name": "windows-diskless-vm",
45-
"template_labels": WINDOWS_LATEST_LABELS,
46-
"diskless_vm": True,
47-
"start_vm": False,
48-
},
49-
marks=(pytest.mark.polarion("CNV-4697"),),
50-
),
51-
],
19+
"golden_image_data_source_for_test_scope_class",
20+
[pytest.param({"os_dict": CIRROS_OS})],
5221
indirect=True,
5322
)
54-
def test_diskless_vm_creation(
55-
unprivileged_client,
56-
namespace,
57-
golden_image_data_volume_scope_function,
58-
vm_from_template_scope_function,
59-
):
60-
LOGGER.info("Verify diskless VM is created.")
61-
assert vm_from_template_scope_function.exists, f"{vm_from_template_scope_function.name} VM was not created."
23+
class TestDisklessVM:
24+
@pytest.mark.parametrize(
25+
"vm_params",
26+
[
27+
pytest.param(
28+
{"vm_name": "rhel-diskless-vm", "template_labels": RHEL_LATEST_LABELS},
29+
marks=(pytest.mark.polarion("CNV-4696"), pytest.mark.gating(), pytest.mark.s390x),
30+
),
31+
pytest.param(
32+
{"vm_name": "windows-diskless-vm", "template_labels": WINDOWS_LATEST_LABELS},
33+
marks=pytest.mark.polarion("CNV-4697"),
34+
),
35+
],
36+
)
37+
def test_diskless_vm_creation(
38+
self,
39+
vm_params,
40+
unprivileged_client,
41+
namespace,
42+
golden_image_data_source_for_test_scope_class,
43+
):
44+
LOGGER.info("Verify diskless VM is created.")
45+
with VirtualMachineForTestsFromTemplate(
46+
name=vm_params["vm_name"],
47+
namespace=namespace.name,
48+
client=unprivileged_client,
49+
labels=Template.generate_template_labels(**vm_params["template_labels"]),
50+
data_source=golden_image_data_source_for_test_scope_class,
51+
diskless_vm=True,
52+
) as vm_from_template:
53+
assert vm_from_template.exists, f"{vm_from_template.name} VM was not created."

tests/virt/cluster/common_templates/general/test_template_validator.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from ocp_resources.template import Template
1212

1313
from tests.os_params import RHEL_LATEST_LABELS
14-
from utilities.constants import Images
14+
from tests.virt.constants import CIRROS_OS
1515
from utilities.virt import VirtualMachineForTestsFromTemplate
1616

1717
pytestmark = [pytest.mark.post_upgrade, pytest.mark.sno]
@@ -22,21 +22,17 @@
2222

2323
@pytest.mark.s390x
2424
@pytest.mark.parametrize(
25-
"golden_image_data_volume_multi_storage_scope_function",
25+
"golden_image_data_source_for_test_scope_function",
2626
[
2727
pytest.param(
28-
{
29-
"dv_name": "cirros-dv",
30-
"image": f"{Images.Cirros.DIR}/{Images.Cirros.QCOW2_IMG}", # Negative tests require a dummy DV.
31-
"dv_size": Images.Cirros.DEFAULT_DV_SIZE,
32-
},
28+
{"os_dict": CIRROS_OS},
3329
marks=pytest.mark.polarion("CNV-2960"),
3430
),
3531
],
3632
indirect=True,
3733
)
3834
def test_template_validation_min_memory(
39-
unprivileged_client, namespace, golden_image_data_source_multi_storage_scope_function
35+
unprivileged_client, namespace, golden_image_data_source_for_test_scope_function
4036
):
4137
LOGGER.info("Test template validator - minimum required memory")
4238

@@ -45,7 +41,7 @@ def test_template_validation_min_memory(
4541
name="rhel-min-memory-validation",
4642
namespace=namespace.name,
4743
client=unprivileged_client,
48-
data_source=golden_image_data_source_multi_storage_scope_function,
44+
data_source=golden_image_data_source_for_test_scope_function,
4945
labels=Template.generate_template_labels(**RHEL_LATEST_LABELS),
5046
memory_guest="0.5G",
5147
):

tests/virt/cluster/common_templates/rhel/test_rhel_tablet_device.py

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@
1313
from ocp_resources.template import Template
1414
from pyhelper_utils.shell import run_ssh_commands
1515

16-
from tests.os_params import RHEL_LATEST, RHEL_LATEST_LABELS, RHEL_LATEST_OS
16+
from tests.os_params import RHEL_LATEST, RHEL_LATEST_LABELS
1717
from tests.virt.cluster.common_templates.utils import check_vm_xml_tablet_device, set_vm_tablet_device_dict
18-
from utilities.constants import VIRTIO, Images
18+
from tests.virt.constants import CIRROS_OS
19+
from utilities.constants import VIRTIO
1920
from utilities.virt import VirtualMachineForTestsFromTemplate, migrate_vm_and_verify
2021

2122
LOGGER = logging.getLogger(__name__)
@@ -34,16 +35,8 @@ def check_vm_system_tablet_device(vm, expected_device):
3435

3536

3637
@pytest.mark.parametrize(
37-
"golden_image_data_volume_multi_storage_scope_class,",
38-
[
39-
pytest.param(
40-
{
41-
"dv_name": RHEL_LATEST_OS,
42-
"image": RHEL_LATEST["image_path"],
43-
"dv_size": RHEL_LATEST["dv_size"],
44-
},
45-
),
46-
],
38+
"golden_image_data_source_for_test_scope_class",
39+
[pytest.param({"os_dict": RHEL_LATEST})],
4740
indirect=True,
4841
)
4942
class TestRHELTabletDevice:
@@ -128,16 +121,8 @@ def test_tablet_device_migrate_vm(self, tablet_device_vm):
128121

129122
@pytest.mark.s390x
130123
@pytest.mark.parametrize(
131-
"golden_image_data_volume_multi_storage_scope_class",
132-
[
133-
pytest.param(
134-
{
135-
"dv_name": "cirros-dv",
136-
"image": f"{Images.Cirros.DIR}/{Images.Cirros.QCOW2_IMG}", # Negative tests require a dummy DV.
137-
"dv_size": Images.Cirros.DEFAULT_DV_SIZE,
138-
},
139-
),
140-
],
124+
"golden_image_data_source_for_test_scope_class",
125+
[pytest.param({"os_dict": CIRROS_OS})],
141126
indirect=True,
142127
)
143128
class TestRHELTabletDeviceNegative:
@@ -163,7 +148,7 @@ class TestRHELTabletDeviceNegative:
163148
indirect=False,
164149
)
165150
def test_tablet_invalid_usb_tablet_device(
166-
self, vm_name, vm_dict, unprivileged_client, namespace, golden_image_data_source_multi_storage_scope_class
151+
self, vm_name, vm_dict, unprivileged_client, namespace, golden_image_data_source_for_test_scope_class
167152
):
168153
LOGGER.info("Test tablet device - wrong device bus.")
169154

@@ -172,7 +157,7 @@ def test_tablet_invalid_usb_tablet_device(
172157
name=vm_name,
173158
namespace=namespace.name,
174159
client=unprivileged_client,
175-
data_source=golden_image_data_source_multi_storage_scope_class,
160+
data_source=golden_image_data_source_for_test_scope_class,
176161
labels=Template.generate_template_labels(**RHEL_LATEST_LABELS),
177162
vm_dict=vm_dict,
178163
):
@@ -189,7 +174,7 @@ def test_tablet_invalid_usb_tablet_device(
189174
indirect=False,
190175
)
191176
def test_tablet_invalid_type_tablet_device(
192-
self, vm_dict, unprivileged_client, namespace, golden_image_data_source_multi_storage_scope_class
177+
self, vm_dict, unprivileged_client, namespace, golden_image_data_source_for_test_scope_class
193178
):
194179
LOGGER.info("Test tablet device - wrong device type.")
195180

@@ -198,7 +183,7 @@ def test_tablet_invalid_type_tablet_device(
198183
name="rhel-keyboard-tablet-device-vm",
199184
namespace=namespace.name,
200185
client=unprivileged_client,
201-
data_source=golden_image_data_source_multi_storage_scope_class,
186+
data_source=golden_image_data_source_for_test_scope_class,
202187
labels=Template.generate_template_labels(**RHEL_LATEST_LABELS),
203188
vm_dict=vm_dict,
204189
):

0 commit comments

Comments
 (0)