From ea0bafde654951faa221fc9b18b7293b127c21ec Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Sat, 20 Jan 2024 19:11:27 +0900 Subject: [PATCH] Remove xenapi_apis option Because ussuri is no longer supported by master, the option can be removed now. Note: - inject network infomation API is still valid so its test is restored - Disabled Metadata API tests are restored because these are not actually specific to xenapi virt driver. Change-Id: I123bf1d605db294351c823ed41d2a70b81831087 --- .../remove-xenapi_apis-86720c0c399460ab.yaml | 5 + tempest/api/compute/admin/test_agents.py | 125 ------------------ tempest/api/compute/admin/test_servers.py | 11 +- .../compute/servers/test_server_metadata.py | 7 - .../servers/test_server_metadata_negative.py | 35 ----- tempest/config.py | 12 -- 6 files changed, 8 insertions(+), 187 deletions(-) create mode 100644 releasenotes/notes/remove-xenapi_apis-86720c0c399460ab.yaml delete mode 100644 tempest/api/compute/admin/test_agents.py diff --git a/releasenotes/notes/remove-xenapi_apis-86720c0c399460ab.yaml b/releasenotes/notes/remove-xenapi_apis-86720c0c399460ab.yaml new file mode 100644 index 0000000000..26da18c367 --- /dev/null +++ b/releasenotes/notes/remove-xenapi_apis-86720c0c399460ab.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - | + The deprecated ``[compute-feature-enabled] xenapi_apis`` option has been + removed. diff --git a/tempest/api/compute/admin/test_agents.py b/tempest/api/compute/admin/test_agents.py deleted file mode 100644 index 8fc155b02b..0000000000 --- a/tempest/api/compute/admin/test_agents.py +++ /dev/null @@ -1,125 +0,0 @@ -# Copyright 2014 NEC Corporation. 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.api.compute import base -from tempest import config -from tempest.lib.common.utils import data_utils -from tempest.lib import decorators - -CONF = config.CONF - - -# TODO(stephenfin): Remove these tests once the nova Ussuri branch goes EOL -class AgentsAdminTestJSON(base.BaseV2ComputeAdminTest): - """Tests Compute Agents API""" - - @classmethod - def skip_checks(cls): - super(AgentsAdminTestJSON, cls).skip_checks() - if not CONF.compute_feature_enabled.xenapi_apis: - raise cls.skipException('The os-agents API is not supported.') - - @classmethod - def setup_clients(cls): - super(AgentsAdminTestJSON, cls).setup_clients() - cls.client = cls.os_admin.agents_client - - @classmethod - def resource_setup(cls): - super(AgentsAdminTestJSON, cls).resource_setup() - cls.params_agent = cls._param_helper( - hypervisor='common', os='linux', architecture='x86_64', - version='7.0', url='xxx://xxxx/xxx/xxx', - md5hash='add6bb58e139be103324d04d82d8f545') - - @staticmethod - def _param_helper(**kwargs): - rand_key = 'architecture' - if rand_key in kwargs: - # NOTE: The rand_name is for avoiding agent conflicts. - # If you try to create an agent with the same hypervisor, - # os and architecture as an existing agent, Nova will return - # an HTTPConflict or HTTPServerError. - kwargs[rand_key] = data_utils.rand_name( - prefix=CONF.resource_name_prefix, - name=kwargs[rand_key]) - return kwargs - - @decorators.idempotent_id('1fc6bdc8-0b6d-4cc7-9f30-9b04fabe5b90') - def test_create_agent(self): - """Test creating a compute agent""" - params = self._param_helper( - hypervisor='kvm', os='win', architecture='x86', - version='7.0', url='xxx://xxxx/xxx/xxx', - md5hash='add6bb58e139be103324d04d82d8f545') - body = self.client.create_agent(**params)['agent'] - self.addCleanup(self.client.delete_agent, body['agent_id']) - for expected_item, value in params.items(): - self.assertEqual(value, body[expected_item]) - - @decorators.idempotent_id('dc9ffd51-1c50-4f0e-a820-ae6d2a568a9e') - def test_update_agent(self): - """Test updating a compute agent""" - # Create and update an agent. - body = self.client.create_agent(**self.params_agent)['agent'] - self.addCleanup(self.client.delete_agent, body['agent_id']) - agent_id = body['agent_id'] - params = self._param_helper( - version='8.0', url='xxx://xxxx/xxx/xxx2', - md5hash='add6bb58e139be103324d04d82d8f547') - body = self.client.update_agent(agent_id, **params)['agent'] - for expected_item, value in params.items(): - self.assertEqual(value, body[expected_item]) - - @decorators.idempotent_id('470e0b89-386f-407b-91fd-819737d0b335') - def test_delete_agent(self): - """Test deleting a compute agent""" - body = self.client.create_agent(**self.params_agent)['agent'] - self.client.delete_agent(body['agent_id']) - - # Verify the list doesn't contain the deleted agent. - agents = self.client.list_agents()['agents'] - self.assertNotIn(body['agent_id'], map(lambda x: x['agent_id'], - agents)) - - @decorators.idempotent_id('6a326c69-654b-438a-80a3-34bcc454e138') - def test_list_agents(self): - """Test listing compute agents""" - body = self.client.create_agent(**self.params_agent)['agent'] - self.addCleanup(self.client.delete_agent, body['agent_id']) - agents = self.client.list_agents()['agents'] - self.assertNotEmpty(agents, 'Cannot get any agents.') - self.assertIn(body['agent_id'], map(lambda x: x['agent_id'], agents)) - - @decorators.idempotent_id('eabadde4-3cd7-4ec4-a4b5-5a936d2d4408') - def test_list_agents_with_filter(self): - """Test listing compute agents by the filter""" - body = self.client.create_agent(**self.params_agent)['agent'] - self.addCleanup(self.client.delete_agent, body['agent_id']) - params = self._param_helper( - hypervisor='xen', os='linux', architecture='x86', - version='7.0', url='xxx://xxxx/xxx/xxx1', - md5hash='add6bb58e139be103324d04d82d8f546') - agent_xen = self.client.create_agent(**params)['agent'] - self.addCleanup(self.client.delete_agent, agent_xen['agent_id']) - - agent_id_xen = agent_xen['agent_id'] - agents = (self.client.list_agents(hypervisor=agent_xen['hypervisor']) - ['agents']) - self.assertNotEmpty(agents, 'Cannot get any agents.') - self.assertIn(agent_id_xen, map(lambda x: x['agent_id'], agents)) - self.assertNotIn(body['agent_id'], map(lambda x: x['agent_id'], - agents)) - for agent in agents: - self.assertEqual(agent_xen['hypervisor'], agent['hypervisor']) diff --git a/tempest/api/compute/admin/test_servers.py b/tempest/api/compute/admin/test_servers.py index be838fcbc0..6c9aafb99d 100644 --- a/tempest/api/compute/admin/test_servers.py +++ b/tempest/api/compute/admin/test_servers.py @@ -207,15 +207,10 @@ class ServersAdminTestJSON(base.BaseV2ComputeAdminTest): self.assertEqual(self.image_ref_alt, rebuilt_image_id) @decorators.idempotent_id('7a1323b4-a6a2-497a-96cb-76c07b945c71') - def test_reset_network_inject_network_info(self): - """Test resetting and injecting network info of a server""" - if not CONF.compute_feature_enabled.xenapi_apis: - raise self.skipException( - 'The resetNetwork server action is not supported.') - - # Reset Network of a Server + def test_inject_network_info(self): + """Test injecting network info of a server""" + # Create a server server = self.create_test_server(wait_until='ACTIVE') - self.client.reset_network(server['id']) # Inject the Network Info into Server self.client.inject_network_info(server['id']) diff --git a/tempest/api/compute/servers/test_server_metadata.py b/tempest/api/compute/servers/test_server_metadata.py index 9f93e768ef..5f35b15136 100644 --- a/tempest/api/compute/servers/test_server_metadata.py +++ b/tempest/api/compute/servers/test_server_metadata.py @@ -26,13 +26,6 @@ class ServerMetadataTestJSON(base.BaseV2ComputeTest): create_default_network = True - @classmethod - def skip_checks(cls): - super(ServerMetadataTestJSON, cls).skip_checks() - if not CONF.compute_feature_enabled.xenapi_apis: - raise cls.skipException( - 'Metadata is read-only on non-Xen-based deployments.') - @classmethod def setup_clients(cls): super(ServerMetadataTestJSON, cls).setup_clients() diff --git a/tempest/api/compute/servers/test_server_metadata_negative.py b/tempest/api/compute/servers/test_server_metadata_negative.py index 655909c125..2059dfa830 100644 --- a/tempest/api/compute/servers/test_server_metadata_negative.py +++ b/tempest/api/compute/servers/test_server_metadata_negative.py @@ -14,13 +14,10 @@ # under the License. from tempest.api.compute import base -from tempest import config from tempest.lib.common.utils import data_utils from tempest.lib import decorators from tempest.lib import exceptions as lib_exc -CONF = config.CONF - class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest): """Negative tests of server metadata""" @@ -91,10 +88,6 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest): Raise BadRequest if key in uri does not match the key passed in body. """ - if not CONF.compute_feature_enabled.xenapi_apis: - raise self.skipException( - 'Metadata is read-only on non-Xen-based deployments.') - meta = {'testkey': 'testvalue'} self.assertRaises(lib_exc.BadRequest, self.client.set_server_metadata_item, @@ -104,10 +97,6 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest): @decorators.idempotent_id('0df38c2a-3d4e-4db5-98d8-d4d9fa843a12') def test_set_metadata_non_existent_server(self): """Test setting metadata for a non existent server should fail""" - if not CONF.compute_feature_enabled.xenapi_apis: - raise self.skipException( - 'Metadata is read-only on non-Xen-based deployments.') - non_existent_server_id = data_utils.rand_uuid() meta = {'meta1': 'data1'} self.assertRaises(lib_exc.NotFound, @@ -119,10 +108,6 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest): @decorators.idempotent_id('904b13dc-0ef2-4e4c-91cd-3b4a0f2f49d8') def test_update_metadata_non_existent_server(self): """Test updating metadata for a non existent server should fail""" - if not CONF.compute_feature_enabled.xenapi_apis: - raise self.skipException( - 'Metadata is read-only on non-Xen-based deployments.') - non_existent_server_id = data_utils.rand_uuid() meta = {'key1': 'value1', 'key2': 'value2'} self.assertRaises(lib_exc.NotFound, @@ -134,10 +119,6 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest): @decorators.idempotent_id('a452f38c-05c2-4b47-bd44-a4f0bf5a5e48') def test_update_metadata_with_blank_key(self): """Test updating server metadata to blank key should fail""" - if not CONF.compute_feature_enabled.xenapi_apis: - raise self.skipException( - 'Metadata is read-only on non-Xen-based deployments.') - meta = {'': 'data1'} self.assertRaises(lib_exc.BadRequest, self.client.update_server_metadata, @@ -150,10 +131,6 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest): Should not be able to delete metadata item from a non-existent server. """ - if not CONF.compute_feature_enabled.xenapi_apis: - raise self.skipException( - 'Metadata is read-only on non-Xen-based deployments.') - non_existent_server_id = data_utils.rand_uuid() self.assertRaises(lib_exc.NotFound, self.client.delete_server_metadata_item, @@ -168,10 +145,6 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest): A 403 Forbidden or 413 Overlimit (old behaviour) exception will be raised while exceeding metadata items limit for project. """ - if not CONF.compute_feature_enabled.xenapi_apis: - raise self.skipException( - 'Metadata is read-only on non-Xen-based deployments.') - quota_set = self.quotas_client.show_quota_set( self.tenant_id)['quota_set'] quota_metadata = quota_set['metadata_items'] @@ -196,10 +169,6 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest): @decorators.idempotent_id('96100343-7fa9-40d8-80fa-d29ef588ce1c') def test_set_server_metadata_blank_key(self): """Test setting server metadata with blank key should fail""" - if not CONF.compute_feature_enabled.xenapi_apis: - raise self.skipException( - 'Metadata is read-only on non-Xen-based deployments.') - meta = {'': 'data1'} self.assertRaises(lib_exc.BadRequest, self.client.set_server_metadata, @@ -209,10 +178,6 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest): @decorators.idempotent_id('64a91aee-9723-4863-be44-4c9d9f1e7d0e') def test_set_server_metadata_missing_metadata(self): """Test setting server metadata without metadata field should fail""" - if not CONF.compute_feature_enabled.xenapi_apis: - raise self.skipException( - 'Metadata is read-only on non-Xen-based deployments.') - meta = {'meta1': 'data1'} self.assertRaises(lib_exc.BadRequest, self.client.set_server_metadata, diff --git a/tempest/config.py b/tempest/config.py index 893148bed5..32d0624dcf 100644 --- a/tempest/config.py +++ b/tempest/config.py @@ -618,18 +618,6 @@ ComputeFeaturesGroup = [ help='Does the test environment support attaching a volume to ' 'more than one instance? This depends on hypervisor and ' 'volume backend/type and compute API version 2.60.'), - cfg.BoolOpt('xenapi_apis', - default=False, - help='Does the test environment support the XenAPI-specific ' - 'APIs: os-agents, writeable server metadata and the ' - 'resetNetwork server action? ' - 'These were removed in Victoria alongside the XenAPI ' - 'virt driver.', - deprecated_for_removal=True, - deprecated_reason="On Nova side, XenAPI virt driver and the " - "APIs that only worked with that driver " - "have been removed and there's nothing to " - "test after Ussuri."), cfg.BoolOpt('ide_bus', default=True, help='Does the test environment support attaching devices '