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
This commit is contained in:
Takashi Kajinami 2024-01-20 19:11:27 +09:00
parent 2921b3d3f4
commit ea0bafde65
6 changed files with 8 additions and 187 deletions

View File

@ -0,0 +1,5 @@
---
upgrade:
- |
The deprecated ``[compute-feature-enabled] xenapi_apis`` option has been
removed.

View File

@ -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'])

View File

@ -207,15 +207,10 @@ class ServersAdminTestJSON(base.BaseV2ComputeAdminTest):
self.assertEqual(self.image_ref_alt, rebuilt_image_id) self.assertEqual(self.image_ref_alt, rebuilt_image_id)
@decorators.idempotent_id('7a1323b4-a6a2-497a-96cb-76c07b945c71') @decorators.idempotent_id('7a1323b4-a6a2-497a-96cb-76c07b945c71')
def test_reset_network_inject_network_info(self): def test_inject_network_info(self):
"""Test resetting and injecting network info of a server""" """Test injecting network info of a server"""
if not CONF.compute_feature_enabled.xenapi_apis: # Create a server
raise self.skipException(
'The resetNetwork server action is not supported.')
# Reset Network of a Server
server = self.create_test_server(wait_until='ACTIVE') server = self.create_test_server(wait_until='ACTIVE')
self.client.reset_network(server['id'])
# Inject the Network Info into Server # Inject the Network Info into Server
self.client.inject_network_info(server['id']) self.client.inject_network_info(server['id'])

View File

@ -26,13 +26,6 @@ class ServerMetadataTestJSON(base.BaseV2ComputeTest):
create_default_network = True 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 @classmethod
def setup_clients(cls): def setup_clients(cls):
super(ServerMetadataTestJSON, cls).setup_clients() super(ServerMetadataTestJSON, cls).setup_clients()

View File

@ -14,13 +14,10 @@
# under the License. # under the License.
from tempest.api.compute import base from tempest.api.compute import base
from tempest import config
from tempest.lib.common.utils import data_utils from tempest.lib.common.utils import data_utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest.lib import exceptions as lib_exc from tempest.lib import exceptions as lib_exc
CONF = config.CONF
class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest): class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
"""Negative tests of server metadata""" """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. 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'} meta = {'testkey': 'testvalue'}
self.assertRaises(lib_exc.BadRequest, self.assertRaises(lib_exc.BadRequest,
self.client.set_server_metadata_item, self.client.set_server_metadata_item,
@ -104,10 +97,6 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('0df38c2a-3d4e-4db5-98d8-d4d9fa843a12') @decorators.idempotent_id('0df38c2a-3d4e-4db5-98d8-d4d9fa843a12')
def test_set_metadata_non_existent_server(self): def test_set_metadata_non_existent_server(self):
"""Test setting metadata for a non existent server should fail""" """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() non_existent_server_id = data_utils.rand_uuid()
meta = {'meta1': 'data1'} meta = {'meta1': 'data1'}
self.assertRaises(lib_exc.NotFound, self.assertRaises(lib_exc.NotFound,
@ -119,10 +108,6 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('904b13dc-0ef2-4e4c-91cd-3b4a0f2f49d8') @decorators.idempotent_id('904b13dc-0ef2-4e4c-91cd-3b4a0f2f49d8')
def test_update_metadata_non_existent_server(self): def test_update_metadata_non_existent_server(self):
"""Test updating metadata for a non existent server should fail""" """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() non_existent_server_id = data_utils.rand_uuid()
meta = {'key1': 'value1', 'key2': 'value2'} meta = {'key1': 'value1', 'key2': 'value2'}
self.assertRaises(lib_exc.NotFound, self.assertRaises(lib_exc.NotFound,
@ -134,10 +119,6 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('a452f38c-05c2-4b47-bd44-a4f0bf5a5e48') @decorators.idempotent_id('a452f38c-05c2-4b47-bd44-a4f0bf5a5e48')
def test_update_metadata_with_blank_key(self): def test_update_metadata_with_blank_key(self):
"""Test updating server metadata to blank key should fail""" """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'} meta = {'': 'data1'}
self.assertRaises(lib_exc.BadRequest, self.assertRaises(lib_exc.BadRequest,
self.client.update_server_metadata, 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. 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() non_existent_server_id = data_utils.rand_uuid()
self.assertRaises(lib_exc.NotFound, self.assertRaises(lib_exc.NotFound,
self.client.delete_server_metadata_item, self.client.delete_server_metadata_item,
@ -168,10 +145,6 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
A 403 Forbidden or 413 Overlimit (old behaviour) exception A 403 Forbidden or 413 Overlimit (old behaviour) exception
will be raised while exceeding metadata items limit for project. 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( quota_set = self.quotas_client.show_quota_set(
self.tenant_id)['quota_set'] self.tenant_id)['quota_set']
quota_metadata = quota_set['metadata_items'] quota_metadata = quota_set['metadata_items']
@ -196,10 +169,6 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('96100343-7fa9-40d8-80fa-d29ef588ce1c') @decorators.idempotent_id('96100343-7fa9-40d8-80fa-d29ef588ce1c')
def test_set_server_metadata_blank_key(self): def test_set_server_metadata_blank_key(self):
"""Test setting server metadata with blank key should fail""" """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'} meta = {'': 'data1'}
self.assertRaises(lib_exc.BadRequest, self.assertRaises(lib_exc.BadRequest,
self.client.set_server_metadata, self.client.set_server_metadata,
@ -209,10 +178,6 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('64a91aee-9723-4863-be44-4c9d9f1e7d0e') @decorators.idempotent_id('64a91aee-9723-4863-be44-4c9d9f1e7d0e')
def test_set_server_metadata_missing_metadata(self): def test_set_server_metadata_missing_metadata(self):
"""Test setting server metadata without metadata field should fail""" """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'} meta = {'meta1': 'data1'}
self.assertRaises(lib_exc.BadRequest, self.assertRaises(lib_exc.BadRequest,
self.client.set_server_metadata, self.client.set_server_metadata,

View File

@ -618,18 +618,6 @@ ComputeFeaturesGroup = [
help='Does the test environment support attaching a volume to ' help='Does the test environment support attaching a volume to '
'more than one instance? This depends on hypervisor and ' 'more than one instance? This depends on hypervisor and '
'volume backend/type and compute API version 2.60.'), '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', cfg.BoolOpt('ide_bus',
default=True, default=True,
help='Does the test environment support attaching devices ' help='Does the test environment support attaching devices '