compute: Use valid extra specs to test 'os-extra_specs' API

In Ussuri, nova is hoping to implement support for extra spec
validation. If or when this is completed, only extra specs that are
recognised will be permitted by default. We're currently using a number
of arbitrary extra specs to validate the 'os-extra_specs' API meaning we
will fall afoul of this validation. Head the issue off now by using
recognized extra specs, namely 'hw:numa_nodes' and 'hw:cpu_policy',
instead.

Change-Id: I95a1050d6a5e2e40793ae7f18ff0d326455b4b36
Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
This commit is contained in:
Stephen Finucane 2020-02-11 18:06:12 +00:00
parent fbde5a3948
commit e30375e174
2 changed files with 42 additions and 33 deletions

View File

@ -64,7 +64,7 @@ class FlavorsExtraSpecsTestJSON(base.BaseV2ComputeAdminTest):
# Test to SET, GET, UPDATE, SHOW, UNSET flavor extra
# spec as a user with admin privileges.
# Assigning extra specs values that are to be set
specs = {"key1": "value1", "key2": "value2"}
specs = {'hw:numa_nodes': '1', 'hw:cpu_policy': 'shared'}
# SET extra specs to the flavor created in setUp
set_body = self.admin_flavors_client.set_flavor_extra_spec(
self.flavor['id'], **specs)['extra_specs']
@ -74,30 +74,33 @@ class FlavorsExtraSpecsTestJSON(base.BaseV2ComputeAdminTest):
self.flavor['id'])['extra_specs'])
self.assertEqual(get_body, specs)
# UPDATE the value of the extra specs key1
update_body = \
self.admin_flavors_client.update_flavor_extra_spec(
self.flavor['id'], "key1", key1="value")
self.assertEqual({"key1": "value"}, update_body)
# UPDATE the value of the extra specs 'hw:numa_nodes'
update_body = self.admin_flavors_client.update_flavor_extra_spec(
self.flavor['id'], "hw:numa_nodes", **{'hw:numa_nodes': '2'})
self.assertEqual({'hw:numa_nodes': '2'}, update_body)
# GET extra specs and verify the value of the key2
# GET extra specs and verify the value of the 'hw:cpu_policy'
# is the same as before
get_body = self.admin_flavors_client.list_flavor_extra_specs(
self.flavor['id'])['extra_specs']
self.assertEqual(get_body, {"key1": "value", "key2": "value2"})
self.assertEqual(
get_body, {'hw:numa_nodes': '2', 'hw:cpu_policy': 'shared'}
)
# UNSET extra specs that were set in this test
self.admin_flavors_client.unset_flavor_extra_spec(self.flavor['id'],
"key1")
self.admin_flavors_client.unset_flavor_extra_spec(self.flavor['id'],
"key2")
self.admin_flavors_client.unset_flavor_extra_spec(
self.flavor['id'], 'hw:numa_nodes'
)
self.admin_flavors_client.unset_flavor_extra_spec(
self.flavor['id'], 'hw:cpu_policy'
)
get_body = self.admin_flavors_client.list_flavor_extra_specs(
self.flavor['id'])['extra_specs']
self.assertEmpty(get_body)
@decorators.idempotent_id('a99dad88-ae1c-4fba-aeb4-32f898218bd0')
def test_flavor_non_admin_get_all_keys(self):
specs = {"key1": "value1", "key2": "value2"}
specs = {'hw:numa_nodes': '1', 'hw:cpu_policy': 'shared'}
self.admin_flavors_client.set_flavor_extra_spec(self.flavor['id'],
**specs)
body = (self.flavors_client.list_flavor_extra_specs(
@ -108,11 +111,14 @@ class FlavorsExtraSpecsTestJSON(base.BaseV2ComputeAdminTest):
@decorators.idempotent_id('12805a7f-39a3-4042-b989-701d5cad9c90')
def test_flavor_non_admin_get_specific_key(self):
specs = {'hw:numa_nodes': '1', 'hw:cpu_policy': 'shared'}
body = self.admin_flavors_client.set_flavor_extra_spec(
self.flavor['id'], key1="value1", key2="value2")['extra_specs']
self.assertEqual(body['key1'], 'value1')
self.assertIn('key2', body)
self.flavor['id'], **specs
)['extra_specs']
self.assertEqual(body['hw:numa_nodes'], '1')
self.assertIn('hw:cpu_policy', body)
body = self.flavors_client.show_flavor_extra_spec(
self.flavor['id'], 'key1')
self.assertEqual(body['key1'], 'value1')
self.assertNotIn('key2', body)
self.flavor['id'], 'hw:numa_nodes')
self.assertEqual(body['hw:numa_nodes'], '1')
self.assertNotIn('hw:cpu_policy', body)

View File

@ -68,32 +68,36 @@ class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest):
self.assertRaises(lib_exc.Forbidden,
self.flavors_client.set_flavor_extra_spec,
self.flavor['id'],
key1="value1", key2="value2")
**{'hw:numa_nodes': '1', 'hw:cpu_policy': 'shared'})
@decorators.attr(type=['negative'])
@decorators.idempotent_id('1ebf4ef8-759e-48fe-a801-d451d80476fb')
def test_flavor_non_admin_update_specific_key(self):
# non admin user is not allowed to update flavor extra spec
body = self.admin_flavors_client.set_flavor_extra_spec(
self.flavor['id'], key1="value1", key2="value2")['extra_specs']
self.assertEqual(body['key1'], 'value1')
self.flavor['id'],
**{'hw:numa_nodes': '1', 'hw:cpu_policy': 'shared'}
)['extra_specs']
self.assertEqual(body['hw:numa_nodes'], '1')
self.assertRaises(lib_exc.Forbidden,
self.flavors_client.
update_flavor_extra_spec,
self.flavor['id'],
'key1',
key1='value1_new')
'hw:numa_nodes',
**{'hw:numa_nodes': '1'})
@decorators.attr(type=['negative'])
@decorators.idempotent_id('28f12249-27c7-44c1-8810-1f382f316b11')
def test_flavor_non_admin_unset_keys(self):
self.admin_flavors_client.set_flavor_extra_spec(
self.flavor['id'], key1="value1", key2="value2")
self.flavor['id'],
**{'hw:numa_nodes': '1', 'hw:cpu_policy': 'shared'}
)
self.assertRaises(lib_exc.Forbidden,
self.flavors_client.unset_flavor_extra_spec,
self.flavor['id'],
'key1')
'hw:numa_nodes')
@decorators.attr(type=['negative'])
@decorators.idempotent_id('440b9f3f-3c7f-4293-a106-0ceda350f8de')
@ -101,7 +105,7 @@ class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest):
self.assertRaises(lib_exc.NotFound,
self.admin_flavors_client.unset_flavor_extra_spec,
self.flavor['id'],
'nonexistent_key')
'hw:cpu_thread_policy')
@decorators.attr(type=['negative'])
@decorators.idempotent_id('329a7be3-54b2-48be-8052-bf2ce4afd898')
@ -109,7 +113,7 @@ class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest):
self.assertRaises(lib_exc.NotFound,
self.flavors_client.show_flavor_extra_spec,
self.flavor['id'],
"nonexistent_key")
'hw:cpu_thread_policy')
@decorators.attr(type=['negative'])
@decorators.idempotent_id('25b822b8-9f49-44f6-80de-d99f0482e5cb')
@ -118,8 +122,8 @@ class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest):
self.assertRaises(lib_exc.BadRequest,
self.admin_flavors_client.update_flavor_extra_spec,
self.flavor['id'],
"key2",
key1="value")
'hw:numa_nodes',
**{'hw:cpu_policy': 'shared'})
@decorators.attr(type=['negative'])
@decorators.idempotent_id('f5889590-bf66-41cc-b4b1-6e6370cfd93f')
@ -128,6 +132,5 @@ class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest):
self.assertRaises(lib_exc.BadRequest,
self.admin_flavors_client.update_flavor_extra_spec,
self.flavor['id'],
"key1",
key1="value",
key2="value")
'hw:numa_nodes',
**{'hw:numa_nodes': '1', 'hw:cpu_policy': 'shared'})