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:
parent
2921b3d3f4
commit
ea0bafde65
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
upgrade:
|
||||||
|
- |
|
||||||
|
The deprecated ``[compute-feature-enabled] xenapi_apis`` option has been
|
||||||
|
removed.
|
@ -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'])
|
|
@ -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'])
|
||||||
|
|
||||||
|
@ -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()
|
||||||
|
@ -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,
|
||||||
|
@ -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 '
|
||||||
|
Loading…
Reference in New Issue
Block a user