From e30375e174ed29ee614a91b6aa6d0341067dcae2 Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Tue, 11 Feb 2020 18:06:12 +0000 Subject: [PATCH] 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 --- .../compute/admin/test_flavors_extra_specs.py | 44 +++++++++++-------- .../test_flavors_extra_specs_negative.py | 31 +++++++------ 2 files changed, 42 insertions(+), 33 deletions(-) diff --git a/tempest/api/compute/admin/test_flavors_extra_specs.py b/tempest/api/compute/admin/test_flavors_extra_specs.py index 4d27a22661..789965eb8f 100644 --- a/tempest/api/compute/admin/test_flavors_extra_specs.py +++ b/tempest/api/compute/admin/test_flavors_extra_specs.py @@ -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) diff --git a/tempest/api/compute/admin/test_flavors_extra_specs_negative.py b/tempest/api/compute/admin/test_flavors_extra_specs_negative.py index 5cde39e32b..9f8929328f 100644 --- a/tempest/api/compute/admin/test_flavors_extra_specs_negative.py +++ b/tempest/api/compute/admin/test_flavors_extra_specs_negative.py @@ -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'})