Add test case that confirms flavor metadata is now present within the
guest XML [1]
[1] 619cd0a9c7
Change-Id: I99a57883940bc299de8fe7676139a5f8f87569e5
Signed-off-by: jamepark4 <jparker@redhat.com>
90 lines
3.6 KiB
Python
90 lines
3.6 KiB
Python
# Copyright 2025 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
|
|
from tempest.lib.common.utils import data_utils
|
|
|
|
from whitebox_tempest_plugin.api.compute import base
|
|
|
|
CONF = config.CONF
|
|
|
|
|
|
class TestFlavorMetadata(base.BaseWhiteboxComputeTest):
|
|
|
|
def test_flavor_metadata_is_present(self):
|
|
"Verify flavor metadata is present in guest XML"
|
|
|
|
xmlns = {'nova': 'http://openstack.org/xmlns/libvirt/nova/1.1'}
|
|
msg_template = "The expected flavor metadata {} {} was not found " \
|
|
"and instead found {}"
|
|
name = data_utils.rand_name(
|
|
prefix=CONF.resource_name_prefix,
|
|
name=self.__class__.__name__ + "-flavor")
|
|
extra_specs = {'hw:cpu_policy': 'shared'}
|
|
parameters_to_validate = {
|
|
'vcpus': 2,
|
|
'disk': 1,
|
|
'memory': CONF.whitebox.flavor_ram_size,
|
|
'ephemeral': 0,
|
|
'swap': 0
|
|
}
|
|
|
|
flavor = self.create_flavor(
|
|
name=name,
|
|
vcpus=parameters_to_validate.get('vcpus'),
|
|
ram=parameters_to_validate.get('memory'),
|
|
disk=parameters_to_validate.get('disk'),
|
|
extra_specs=extra_specs)
|
|
|
|
server = self.create_test_server(flavor=flavor['id'],
|
|
wait_until='ACTIVE')
|
|
domain = self.get_server_xml(server['id'])
|
|
metadata = domain.find('./metadata')
|
|
flavor_element = metadata.find('.//nova:instance/nova:flavor', xmlns)
|
|
|
|
# Confirm flavor name and id are present in metadata
|
|
flv_metadata_name = flavor_element.attrib.get('name')
|
|
self.assertEqual(
|
|
name, flv_metadata_name,
|
|
msg_template.format('name', name, flv_metadata_name))
|
|
flv_metadata_id = flavor_element.attrib.get('id')
|
|
self.assertEqual(
|
|
flavor['id'], flv_metadata_id,
|
|
msg_template.format('id', flavor['id'], flv_metadata_id))
|
|
|
|
# Iterate and validate core flavor parameters are present in metadata
|
|
for param, expected_val in parameters_to_validate.items():
|
|
found_element = \
|
|
flavor_element.find('.//nova:{}'.format(param), xmlns)
|
|
element_value = int(found_element.text)
|
|
self.assertEqual(
|
|
expected_val, element_value,
|
|
msg_template.format(param, expected_val, element_value))
|
|
|
|
# Verify extra specs are present and correct
|
|
extra_specs_elem = flavor_element.find('.//nova:extraSpecs', xmlns)
|
|
extra_spec = extra_specs_elem.find('.//nova:extraSpec', xmlns)
|
|
flv_metadata_es_name = extra_spec.get('name')
|
|
self.assertEqual(
|
|
'hw:cpu_policy', flv_metadata_es_name,
|
|
msg_template.format('extra specs name', 'hw:cpu_policy',
|
|
flv_metadata_es_name))
|
|
flv_metadata_es_value = extra_spec.text
|
|
self.assertEqual(
|
|
'shared', flv_metadata_es_value,
|
|
msg_template.format('extra specs value', 'shared',
|
|
flv_metadata_es_value))
|