Add flavor extra spec validation tests
Tests cover the addition of flavor extra spec validation [1,2]. Test
validates the ability to create a flavor with extra specs using a custom
namespace. This change was introduced in 2.86 [3].
[1] https://blueprints.launchpad.net/nova/+spec/flavor-extra-spec-image-property-validation-extended
[2] https://review.opendev.org/c/openstack/nova-specs/+/682655/
[3] https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id79
Change-Id: I20267054af04da3753795f7008abcf1118a31bdd
diff --git a/doc/source/microversion_testing.rst b/doc/source/microversion_testing.rst
index 0b80b72..7da8ddb 100644
--- a/doc/source/microversion_testing.rst
+++ b/doc/source/microversion_testing.rst
@@ -428,7 +428,11 @@
* `2.79`_
- .. _2.79: https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#maximum-in-train
+ .. _2.79: https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#maximum-in-train
+
+ * `2.86`_
+
+ .. _2.86: https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id79
* Volume
diff --git a/tempest/api/compute/admin/test_flavors_extra_specs.py b/tempest/api/compute/admin/test_flavors_extra_specs.py
index 4c531b3..10018fe 100644
--- a/tempest/api/compute/admin/test_flavors_extra_specs.py
+++ b/tempest/api/compute/admin/test_flavors_extra_specs.py
@@ -127,3 +127,34 @@
self.flavor['id'], 'hw:numa_nodes')
self.assertEqual(body['hw:numa_nodes'], '1')
self.assertNotIn('hw:cpu_policy', body)
+
+
+class FlavorMetadataValidation(base.BaseV2ComputeAdminTest):
+
+ min_microversion = '2.86'
+
+ @classmethod
+ def resource_setup(cls):
+ super(FlavorMetadataValidation, cls).resource_setup()
+ cls.flavor_name_prefix = 'test_flavor_validate_metadata_'
+ cls.ram = 512
+ cls.vcpus = 1
+ cls.disk = 10
+ cls.ephemeral = 10
+ cls.swap = 1024
+ cls.rxtx = 2
+
+ @decorators.idempotent_id('d3114f03-b0f2-4dc7-be11-70c0abc178b3')
+ def test_flavor_update_with_custom_namespace(self):
+ """Test flavor creation with a custom namespace, key and value"""
+ flavor_name = data_utils.rand_name(self.flavor_name_prefix)
+ flavor_id = self.create_flavor(ram=self.ram,
+ vcpus=self.vcpus,
+ disk=self.disk,
+ name=flavor_name)['id']
+ specs = {'hw:cpu_policy': 'shared', 'foo:bar': 'baz'}
+ body = self.admin_flavors_client.set_flavor_extra_spec(
+ flavor_id,
+ **specs)['extra_specs']
+ self.assertEqual(body['foo:bar'], 'baz')
+ self.assertEqual(body['hw:cpu_policy'], 'shared')