blob: 8fc155b02b063945efb2c4b6c80b7e5ae46d2024 [file] [log] [blame]
Yuiko Takada420f2eb2014-04-02 19:53:38 +09001# Copyright 2014 NEC Corporation. All rights reserved.
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14
15from tempest.api.compute import base
Stephen Finucane39fa9c12020-09-03 17:47:19 +010016from tempest import config
Ken'ichi Ohmichi757833a2017-03-10 10:30:30 -080017from tempest.lib.common.utils import data_utils
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -080018from tempest.lib import decorators
Yuiko Takada420f2eb2014-04-02 19:53:38 +090019
Stephen Finucane39fa9c12020-09-03 17:47:19 +010020CONF = config.CONF
Yuiko Takada420f2eb2014-04-02 19:53:38 +090021
Stephen Finucane39fa9c12020-09-03 17:47:19 +010022
23# TODO(stephenfin): Remove these tests once the nova Ussuri branch goes EOL
Yuiko Takada420f2eb2014-04-02 19:53:38 +090024class AgentsAdminTestJSON(base.BaseV2ComputeAdminTest):
zhufl4e726a62020-08-10 16:30:28 +080025 """Tests Compute Agents API"""
Yuiko Takada420f2eb2014-04-02 19:53:38 +090026
27 @classmethod
Stephen Finucane39fa9c12020-09-03 17:47:19 +010028 def skip_checks(cls):
29 super(AgentsAdminTestJSON, cls).skip_checks()
30 if not CONF.compute_feature_enabled.xenapi_apis:
31 raise cls.skipException('The os-agents API is not supported.')
32
33 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +053034 def setup_clients(cls):
35 super(AgentsAdminTestJSON, cls).setup_clients()
Jordan Pittier8160d312017-04-18 11:52:23 +020036 cls.client = cls.os_admin.agents_client
Yuiko Takada420f2eb2014-04-02 19:53:38 +090037
Benny Kopilovc1daa122016-09-26 14:19:50 +030038 @classmethod
39 def resource_setup(cls):
40 super(AgentsAdminTestJSON, cls).resource_setup()
41 cls.params_agent = cls._param_helper(
Yuiko Takada420f2eb2014-04-02 19:53:38 +090042 hypervisor='common', os='linux', architecture='x86_64',
43 version='7.0', url='xxx://xxxx/xxx/xxx',
44 md5hash='add6bb58e139be103324d04d82d8f545')
Yuiko Takada420f2eb2014-04-02 19:53:38 +090045
Benny Kopilovc1daa122016-09-26 14:19:50 +030046 @staticmethod
47 def _param_helper(**kwargs):
Yuiko Takada420f2eb2014-04-02 19:53:38 +090048 rand_key = 'architecture'
49 if rand_key in kwargs:
50 # NOTE: The rand_name is for avoiding agent conflicts.
51 # If you try to create an agent with the same hypervisor,
Felix Li6aebd7e2016-01-04 10:11:04 -050052 # os and architecture as an existing agent, Nova will return
Yuiko Takada420f2eb2014-04-02 19:53:38 +090053 # an HTTPConflict or HTTPServerError.
Martin Kopec213d0a42023-11-30 10:28:14 +010054 kwargs[rand_key] = data_utils.rand_name(
55 prefix=CONF.resource_name_prefix,
56 name=kwargs[rand_key])
Yuiko Takada420f2eb2014-04-02 19:53:38 +090057 return kwargs
58
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -080059 @decorators.idempotent_id('1fc6bdc8-0b6d-4cc7-9f30-9b04fabe5b90')
Yuiko Takada420f2eb2014-04-02 19:53:38 +090060 def test_create_agent(self):
zhufl4e726a62020-08-10 16:30:28 +080061 """Test creating a compute agent"""
Yuiko Takada420f2eb2014-04-02 19:53:38 +090062 params = self._param_helper(
63 hypervisor='kvm', os='win', architecture='x86',
64 version='7.0', url='xxx://xxxx/xxx/xxx',
65 md5hash='add6bb58e139be103324d04d82d8f545')
ghanshyam5805ccc2015-08-04 14:06:20 +090066 body = self.client.create_agent(**params)['agent']
Yuiko Takada420f2eb2014-04-02 19:53:38 +090067 self.addCleanup(self.client.delete_agent, body['agent_id'])
68 for expected_item, value in params.items():
69 self.assertEqual(value, body[expected_item])
70
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -080071 @decorators.idempotent_id('dc9ffd51-1c50-4f0e-a820-ae6d2a568a9e')
Yuiko Takada420f2eb2014-04-02 19:53:38 +090072 def test_update_agent(self):
zhufl4e726a62020-08-10 16:30:28 +080073 """Test updating a compute agent"""
Benny Kopilovc1daa122016-09-26 14:19:50 +030074 # Create and update an agent.
75 body = self.client.create_agent(**self.params_agent)['agent']
76 self.addCleanup(self.client.delete_agent, body['agent_id'])
77 agent_id = body['agent_id']
Yuiko Takada420f2eb2014-04-02 19:53:38 +090078 params = self._param_helper(
79 version='8.0', url='xxx://xxxx/xxx/xxx2',
80 md5hash='add6bb58e139be103324d04d82d8f547')
Benny Kopilovc1daa122016-09-26 14:19:50 +030081 body = self.client.update_agent(agent_id, **params)['agent']
Yuiko Takada420f2eb2014-04-02 19:53:38 +090082 for expected_item, value in params.items():
83 self.assertEqual(value, body[expected_item])
84
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -080085 @decorators.idempotent_id('470e0b89-386f-407b-91fd-819737d0b335')
Yuiko Takada420f2eb2014-04-02 19:53:38 +090086 def test_delete_agent(self):
zhufl4e726a62020-08-10 16:30:28 +080087 """Test deleting a compute agent"""
Benny Kopilovc1daa122016-09-26 14:19:50 +030088 body = self.client.create_agent(**self.params_agent)['agent']
89 self.client.delete_agent(body['agent_id'])
Yuiko Takada420f2eb2014-04-02 19:53:38 +090090
91 # Verify the list doesn't contain the deleted agent.
ghanshyam5805ccc2015-08-04 14:06:20 +090092 agents = self.client.list_agents()['agents']
Benny Kopilovc1daa122016-09-26 14:19:50 +030093 self.assertNotIn(body['agent_id'], map(lambda x: x['agent_id'],
94 agents))
Yuiko Takada420f2eb2014-04-02 19:53:38 +090095
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -080096 @decorators.idempotent_id('6a326c69-654b-438a-80a3-34bcc454e138')
Yuiko Takada420f2eb2014-04-02 19:53:38 +090097 def test_list_agents(self):
zhufl4e726a62020-08-10 16:30:28 +080098 """Test listing compute agents"""
Benny Kopilovc1daa122016-09-26 14:19:50 +030099 body = self.client.create_agent(**self.params_agent)['agent']
100 self.addCleanup(self.client.delete_agent, body['agent_id'])
ghanshyam5805ccc2015-08-04 14:06:20 +0900101 agents = self.client.list_agents()['agents']
zhuflcfa1cd52017-08-10 10:23:01 +0800102 self.assertNotEmpty(agents, 'Cannot get any agents.')
Benny Kopilovc1daa122016-09-26 14:19:50 +0300103 self.assertIn(body['agent_id'], map(lambda x: x['agent_id'], agents))
Yuiko Takada420f2eb2014-04-02 19:53:38 +0900104
Ken'ichi Ohmichiebbfd1c2017-01-27 16:37:00 -0800105 @decorators.idempotent_id('eabadde4-3cd7-4ec4-a4b5-5a936d2d4408')
Yuiko Takada420f2eb2014-04-02 19:53:38 +0900106 def test_list_agents_with_filter(self):
zhufl4e726a62020-08-10 16:30:28 +0800107 """Test listing compute agents by the filter"""
Benny Kopilovc1daa122016-09-26 14:19:50 +0300108 body = self.client.create_agent(**self.params_agent)['agent']
109 self.addCleanup(self.client.delete_agent, body['agent_id'])
Yuiko Takada420f2eb2014-04-02 19:53:38 +0900110 params = self._param_helper(
111 hypervisor='xen', os='linux', architecture='x86',
112 version='7.0', url='xxx://xxxx/xxx/xxx1',
113 md5hash='add6bb58e139be103324d04d82d8f546')
ghanshyam5805ccc2015-08-04 14:06:20 +0900114 agent_xen = self.client.create_agent(**params)['agent']
Yuiko Takada420f2eb2014-04-02 19:53:38 +0900115 self.addCleanup(self.client.delete_agent, agent_xen['agent_id'])
116
117 agent_id_xen = agent_xen['agent_id']
ghanshyam5805ccc2015-08-04 14:06:20 +0900118 agents = (self.client.list_agents(hypervisor=agent_xen['hypervisor'])
119 ['agents'])
zhuflcfa1cd52017-08-10 10:23:01 +0800120 self.assertNotEmpty(agents, 'Cannot get any agents.')
Yuiko Takada420f2eb2014-04-02 19:53:38 +0900121 self.assertIn(agent_id_xen, map(lambda x: x['agent_id'], agents))
Benny Kopilovc1daa122016-09-26 14:19:50 +0300122 self.assertNotIn(body['agent_id'], map(lambda x: x['agent_id'],
123 agents))
wanglbjda347732020-11-05 14:38:57 +0800124 for agent in agents:
125 self.assertEqual(agent_xen['hypervisor'], agent['hypervisor'])