Add vIOMMU device tests
Adds tests to verify [1] which allows operators to add vIOMMU devices to their guests via flavor configuration. Tests do a basic smoke test that creates a guest with the vIOMMU flavor requirements and confirms to relevant XML element is present on the domain. Test also resizes a standard guest to a flavor with vIOMMU, and confirms to XML is present. Then revert and confirm the element is no longer present. [1] https://blueprints.launchpad.net/nova/+spec/libvirt-viommu-device Change-Id: I92c3538f985f0db0ef24ce2c49a797d3fcb69252
This commit is contained in:
parent
4b4ba3d8d9
commit
766ff042bd
79
whitebox_tempest_plugin/api/compute/test_viommu_devices.py
Normal file
79
whitebox_tempest_plugin/api/compute/test_viommu_devices.py
Normal file
@ -0,0 +1,79 @@
|
||||
# Copyright 2024 Red Hat
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from tempest import config
|
||||
import testtools
|
||||
from whitebox_tempest_plugin.api.compute import base
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
|
||||
class ViommuTestQ35ViaImage(base.BaseWhiteboxComputeTest):
|
||||
"""Test the creation of guests with attached Virtual IOMMU intel devices.
|
||||
Q35 is is configured via adding the parameter to the guest image.
|
||||
"""
|
||||
min_microversion = '2.93'
|
||||
|
||||
def setUp(self):
|
||||
super(ViommuTestQ35ViaImage, self).setUp()
|
||||
self.viommu_intel_flavor = self.create_flavor(
|
||||
extra_specs={"hw:viommu_model": 'intel'})
|
||||
self.q35_image_id = self.copy_default_image(hw_machine_type='q35')
|
||||
|
||||
def _get_iommu_xml_element(self, server):
|
||||
root = self.get_server_xml(server['id'])
|
||||
iommu = root.find(".devices/iommu[@model='intel']")
|
||||
return iommu
|
||||
|
||||
def _assert_viommu_model(self, server):
|
||||
iommu = self._get_iommu_xml_element(server)
|
||||
self.assertTrue(
|
||||
iommu, 'vIOMMU element is not present on %s' % server['id'])
|
||||
intremap_status = iommu.find('driver').get('intremap')
|
||||
self.assertEqual(
|
||||
'on', intremap_status, "Expected intremap status to be 'on' but "
|
||||
"instead found: %s" % intremap_status)
|
||||
|
||||
def _assert_viommu_not_present(self, server):
|
||||
iommu = self._get_iommu_xml_element(server)
|
||||
self.assertFalse(
|
||||
iommu, 'vIOMMU element should no longer be present on %s'
|
||||
% server['id'])
|
||||
|
||||
def test_deploy_intel_viommu_model_q35_via_image(self):
|
||||
"""Create a guest with viommu intel model and confirm it is present
|
||||
"""
|
||||
server = self.create_test_server(
|
||||
image_id=self.q35_image_id,
|
||||
flavor=self.viommu_intel_flavor['id'],
|
||||
wait_until='ACTIVE'
|
||||
)
|
||||
self._assert_viommu_model(server)
|
||||
|
||||
@testtools.skipUnless(CONF.compute_feature_enabled.resize,
|
||||
'Resize not available.')
|
||||
def test_resize_intel_viommu_via_image(self):
|
||||
"""Resize guest to use viommu, confirm element is present, revert
|
||||
and verify the element has been removed
|
||||
"""
|
||||
server = self.create_test_server(
|
||||
wait_until='ACTIVE',
|
||||
image_id=self.q35_image_id)
|
||||
self.resize_server(server['id'], self.viommu_intel_flavor['id'])
|
||||
|
||||
self._assert_viommu_model(server)
|
||||
default_flavor = self.create_flavor()
|
||||
self.resize_server(server['id'], default_flavor['id'])
|
||||
self._assert_viommu_not_present(server)
|
@ -129,6 +129,11 @@ general_opts = [
|
||||
'max_disk_devices_to_attach',
|
||||
default=None,
|
||||
help='Maximum number of disks allowed to attach to a singler server'),
|
||||
cfg.StrOpt(
|
||||
'libvirt_hw_machine_type',
|
||||
default='pc',
|
||||
choices=["pc", "q35"],
|
||||
help='The machine type configured for the nova computes')
|
||||
]
|
||||
|
||||
nova_compute_group = cfg.OptGroup(
|
||||
|
Loading…
x
Reference in New Issue
Block a user