blob: d2b3a8144609cb656c062e2f2ef812a19db11a56 [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
Doug Hellmann583ce2c2015-03-11 14:55:46 +000015from oslo_log import log
Masayuki Igawabfa07602015-01-20 18:47:17 +090016from tempest_lib import exceptions as lib_exc
17
Yuiko Takada420f2eb2014-04-02 19:53:38 +090018from tempest.api.compute import base
Fei Long Wangd39431f2015-05-14 11:30:48 +120019from tempest.common.utils import data_utils
Yuiko Takada420f2eb2014-04-02 19:53:38 +090020from tempest import test
21
22LOG = log.getLogger(__name__)
23
24
25class AgentsAdminTestJSON(base.BaseV2ComputeAdminTest):
Ken'ichi Ohmichi88363cb2015-11-19 08:00:54 +000026 """Tests Agents API"""
Yuiko Takada420f2eb2014-04-02 19:53:38 +090027
28 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +053029 def setup_clients(cls):
30 super(AgentsAdminTestJSON, cls).setup_clients()
Yuiko Takada420f2eb2014-04-02 19:53:38 +090031 cls.client = cls.os_adm.agents_client
32
33 def setUp(self):
34 super(AgentsAdminTestJSON, self).setUp()
35 params = self._param_helper(
36 hypervisor='common', os='linux', architecture='x86_64',
37 version='7.0', url='xxx://xxxx/xxx/xxx',
38 md5hash='add6bb58e139be103324d04d82d8f545')
ghanshyam5805ccc2015-08-04 14:06:20 +090039 body = self.client.create_agent(**params)['agent']
Yuiko Takada420f2eb2014-04-02 19:53:38 +090040 self.agent_id = body['agent_id']
41
42 def tearDown(self):
43 try:
44 self.client.delete_agent(self.agent_id)
Masayuki Igawabfa07602015-01-20 18:47:17 +090045 except lib_exc.NotFound:
Yuiko Takada420f2eb2014-04-02 19:53:38 +090046 pass
47 except Exception:
48 LOG.exception('Exception raised deleting agent %s', self.agent_id)
49 super(AgentsAdminTestJSON, self).tearDown()
50
51 def _param_helper(self, **kwargs):
52 rand_key = 'architecture'
53 if rand_key in kwargs:
54 # NOTE: The rand_name is for avoiding agent conflicts.
55 # If you try to create an agent with the same hypervisor,
56 # os and architecture as an exising agent, Nova will return
57 # an HTTPConflict or HTTPServerError.
58 kwargs[rand_key] = data_utils.rand_name(kwargs[rand_key])
59 return kwargs
60
Chris Hoge7579c1a2015-02-26 14:12:15 -080061 @test.idempotent_id('1fc6bdc8-0b6d-4cc7-9f30-9b04fabe5b90')
Yuiko Takada420f2eb2014-04-02 19:53:38 +090062 def test_create_agent(self):
63 # Create an agent.
64 params = self._param_helper(
65 hypervisor='kvm', os='win', architecture='x86',
66 version='7.0', url='xxx://xxxx/xxx/xxx',
67 md5hash='add6bb58e139be103324d04d82d8f545')
ghanshyam5805ccc2015-08-04 14:06:20 +090068 body = self.client.create_agent(**params)['agent']
Yuiko Takada420f2eb2014-04-02 19:53:38 +090069 self.addCleanup(self.client.delete_agent, body['agent_id'])
70 for expected_item, value in params.items():
71 self.assertEqual(value, body[expected_item])
72
Chris Hoge7579c1a2015-02-26 14:12:15 -080073 @test.idempotent_id('dc9ffd51-1c50-4f0e-a820-ae6d2a568a9e')
Yuiko Takada420f2eb2014-04-02 19:53:38 +090074 def test_update_agent(self):
75 # Update an agent.
76 params = self._param_helper(
77 version='8.0', url='xxx://xxxx/xxx/xxx2',
78 md5hash='add6bb58e139be103324d04d82d8f547')
ghanshyam5805ccc2015-08-04 14:06:20 +090079 body = self.client.update_agent(self.agent_id, **params)['agent']
Yuiko Takada420f2eb2014-04-02 19:53:38 +090080 for expected_item, value in params.items():
81 self.assertEqual(value, body[expected_item])
82
Chris Hoge7579c1a2015-02-26 14:12:15 -080083 @test.idempotent_id('470e0b89-386f-407b-91fd-819737d0b335')
Yuiko Takada420f2eb2014-04-02 19:53:38 +090084 def test_delete_agent(self):
85 # Delete an agent.
David Kranz0a735172015-01-16 10:51:18 -050086 self.client.delete_agent(self.agent_id)
Yuiko Takada420f2eb2014-04-02 19:53:38 +090087
88 # Verify the list doesn't contain the deleted agent.
ghanshyam5805ccc2015-08-04 14:06:20 +090089 agents = self.client.list_agents()['agents']
Yuiko Takada420f2eb2014-04-02 19:53:38 +090090 self.assertNotIn(self.agent_id, map(lambda x: x['agent_id'], agents))
91
Chris Hoge7579c1a2015-02-26 14:12:15 -080092 @test.idempotent_id('6a326c69-654b-438a-80a3-34bcc454e138')
Yuiko Takada420f2eb2014-04-02 19:53:38 +090093 def test_list_agents(self):
94 # List all agents.
ghanshyam5805ccc2015-08-04 14:06:20 +090095 agents = self.client.list_agents()['agents']
Yuiko Takada420f2eb2014-04-02 19:53:38 +090096 self.assertTrue(len(agents) > 0, 'Cannot get any agents.(%s)' % agents)
97 self.assertIn(self.agent_id, map(lambda x: x['agent_id'], agents))
98
Chris Hoge7579c1a2015-02-26 14:12:15 -080099 @test.idempotent_id('eabadde4-3cd7-4ec4-a4b5-5a936d2d4408')
Yuiko Takada420f2eb2014-04-02 19:53:38 +0900100 def test_list_agents_with_filter(self):
101 # List the agent builds by the filter.
102 params = self._param_helper(
103 hypervisor='xen', os='linux', architecture='x86',
104 version='7.0', url='xxx://xxxx/xxx/xxx1',
105 md5hash='add6bb58e139be103324d04d82d8f546')
ghanshyam5805ccc2015-08-04 14:06:20 +0900106 agent_xen = self.client.create_agent(**params)['agent']
Yuiko Takada420f2eb2014-04-02 19:53:38 +0900107 self.addCleanup(self.client.delete_agent, agent_xen['agent_id'])
108
109 agent_id_xen = agent_xen['agent_id']
ghanshyam5805ccc2015-08-04 14:06:20 +0900110 agents = (self.client.list_agents(hypervisor=agent_xen['hypervisor'])
111 ['agents'])
Yuiko Takada420f2eb2014-04-02 19:53:38 +0900112 self.assertTrue(len(agents) > 0, 'Cannot get any agents.(%s)' % agents)
113 self.assertIn(agent_id_xen, map(lambda x: x['agent_id'], agents))
114 self.assertNotIn(self.agent_id, map(lambda x: x['agent_id'], agents))