Add HyperV default enlightment tests

Tests update of adding libvirt default enlightenments for HyperV when
deploying a guest that uses image os_type 'windows'. [1] Test creates an
image and confirms the default attributes are present and in on state.

In addtion to cover regressions for [2], test that a guest with the
enlightenments can live migrate as well.

[1] https://review.opendev.org/c/openstack/nova/+/847641
[2] https://review.opendev.org/c/openstack/nova/+/904183

Change-Id: I9d8f3c4148949bfdd9fc956e271c18c4d76183b6
This commit is contained in:
jamepark4 2024-02-16 11:45:18 -05:00 committed by Artom Lifshitz
parent 869fdccf31
commit b40728768e

View File

@ -0,0 +1,77 @@
# 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
from whitebox_tempest_plugin.api.compute import base
CONF = config.CONF
class HyperVEnlightenments(base.BaseWhiteboxComputeTest):
"""Verify default hyperv enlightenments are present with windows os_type
image.
"""
min_microversion = '2.93'
DEFAULT_ATTRIBUTES = ['frequencies', 'ipi', 'relaxed', 'reset', 'runtime',
'spinlocks', 'synic', 'tlbflush', 'vapic',
'vendor_id', 'vpindex']
def setUp(self):
super(HyperVEnlightenments, self).setUp()
self.windows_image_id = self.copy_default_image(os_type='windows')
def _confirm_hyperv_elements(self, server):
"""Gather all of the hyperv elements under the feature section of the
domain's XML and confirm they match the expected defaults
"""
root = self.get_server_xml(server['id'])
hyperv = root.find('.features/hyperv')
self.assertTrue(
hyperv, 'hyperv element is not present on %s' % server['id'])
# Collect all attributes set in the instance's hyperv element
elements = {elem.tag: elem.get('state') for elem in hyperv.iter()
if elem.tag != 'hyperv'}
# Verify all attributes configured for the hyperv element match the
# expected default attributes.
self.assertTrue(
list(elements.keys()).sort() == self.DEFAULT_ATTRIBUTES.sort(),
'The default elements %s found on %s do not match the expected '
'default elements %s' % (list(elements.keys()), server['id'],
self.DEFAULT_ATTRIBUTES))
# Confirm all attributes present are in the 'on' state
for attribute, state in elements.items():
self.assertEqual(
'on', state, 'The attribute %s was expected to be in the on '
'state but is instead %s' % (attribute, state))
def test_default_hyperv_enlightenments(self):
"""Confirm default enlightenments are present when deploying a guest
with image os_type of windows
"""
server = self.create_test_server(image_id=self.windows_image_id,
wait_until='ACTIVE')
self._confirm_hyperv_elements(server)
def test_live_migrate_with_enlightenments(self):
"""Verify a guest with hyper-v enlightenments is able to successfully
live-migrate between guests
"""
server = self.create_test_server(image_id=self.windows_image_id,
wait_until='ACTIVE')
self._confirm_hyperv_elements(server)
self.live_migrate(self.os_primary, server['id'], 'ACTIVE')
self._confirm_hyperv_elements(server)