blob: eac83115e899ca6ef69f1178b5f723f3c878b9be [file] [log] [blame]
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +09001# Copyright 2013 NEC Corporation
2# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
Doug Hellmann583ce2c2015-03-11 14:55:46 +000016from oslo_log import log as logging
17
Andrea Frittoli247058f2014-07-16 16:09:22 +010018from tempest.common import custom_matchers
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000019from tempest.common import waiters
Matthew Treinish6c072292014-01-29 19:15:52 +000020from tempest import config
Clark Boylanff31bcc2014-11-04 13:44:04 -080021from tempest import exceptions
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090022from tempest.scenario import manager
Masayuki Igawa4ded9f02014-02-17 15:05:59 +090023from tempest import test
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090024
Matthew Treinish6c072292014-01-29 19:15:52 +000025CONF = config.CONF
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090026
27LOG = logging.getLogger(__name__)
28
29
Andrea Frittoli247058f2014-07-16 16:09:22 +010030class TestMinimumBasicScenario(manager.ScenarioTest):
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090031
32 """
33 This is a basic minimum scenario test.
34
35 This test below:
36 * across the multiple components
37 * as a regular user
38 * with and without optional parameters
39 * check command outputs
40
41 """
42
43 def _wait_for_server_status(self, status):
Andrea Frittoli247058f2014-07-16 16:09:22 +010044 server_id = self.server['id']
45 # Raise on error defaults to True, which is consistent with the
46 # original function from scenario tests here
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000047 waiters.wait_for_server_status(self.servers_client,
48 server_id, status)
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090049
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090050 def nova_keypair_add(self):
Ken'ichi Ohmichi599d1b82013-08-19 18:48:37 +090051 self.keypair = self.create_keypair()
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090052
53 def nova_boot(self):
Andrea Frittoli247058f2014-07-16 16:09:22 +010054 create_kwargs = {'key_name': self.keypair['name']}
Giulio Fidente61cadca2013-09-24 18:33:37 +020055 self.server = self.create_server(image=self.image,
Ken'ichi Ohmichi61f272b2013-08-15 15:58:53 +090056 create_kwargs=create_kwargs)
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090057
58 def nova_list(self):
David Kranzae99b9a2015-02-16 13:37:01 -050059 servers = self.servers_client.list_servers()
Andrea Frittoli247058f2014-07-16 16:09:22 +010060 # The list servers in the compute client is inconsistent...
61 servers = servers['servers']
62 self.assertIn(self.server['id'], [x['id'] for x in servers])
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090063
64 def nova_show(self):
ghanshyam0f825252015-08-25 16:02:50 +090065 got_server = (self.servers_client.show_server(self.server['id'])
66 ['server'])
Jordan Pittier5d367152015-08-19 12:03:49 +020067 excluded_keys = ['OS-EXT-AZ:availability_zone']
68 # Exclude these keys because of LP:#1486475
69 excluded_keys.extend(['OS-EXT-STS:power_state', 'updated'])
Andrea Frittoli247058f2014-07-16 16:09:22 +010070 self.assertThat(
71 self.server, custom_matchers.MatchesDictExceptForKeys(
Jordan Pittier5d367152015-08-19 12:03:49 +020072 got_server, excluded_keys=excluded_keys))
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090073
74 def cinder_create(self):
Ken'ichi Ohmichi70672df2013-08-19 18:35:19 +090075 self.volume = self.create_volume()
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090076
77 def cinder_list(self):
John Warren6177c9e2015-08-19 20:00:17 +000078 volumes = self.volumes_client.list_volumes()['volumes']
Andrea Frittoli247058f2014-07-16 16:09:22 +010079 self.assertIn(self.volume['id'], [x['id'] for x in volumes])
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090080
81 def cinder_show(self):
John Warren6177c9e2015-08-19 20:00:17 +000082 volume = self.volumes_client.show_volume(self.volume['id'])['volume']
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090083 self.assertEqual(self.volume, volume)
84
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090085 def nova_reboot(self):
Ken'ichi Ohmichi5271b0f2015-08-10 07:53:27 +000086 self.servers_client.reboot_server(self.server['id'], 'SOFT')
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090087 self._wait_for_server_status('ACTIVE')
88
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090089 def check_partitions(self):
Andrea Frittoli247058f2014-07-16 16:09:22 +010090 # NOTE(andreaf) The device name may be different on different guest OS
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090091 partitions = self.linux_client.get_partitions()
Alessandro Pilottib4aa55d2014-08-17 13:57:16 +030092 self.assertEqual(1, partitions.count(CONF.compute.volume_device_name))
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090093
Grishkin0f1e11c2014-05-04 20:44:52 +040094 def create_and_add_security_group(self):
Yair Fried1fc32a12014-08-04 09:11:30 +030095 secgroup = self._create_security_group()
Andrea Frittoli247058f2014-07-16 16:09:22 +010096 self.servers_client.add_security_group(self.server['id'],
97 secgroup['name'])
98 self.addCleanup(self.servers_client.remove_security_group,
99 self.server['id'], secgroup['name'])
Grishkin0f1e11c2014-05-04 20:44:52 +0400100
Clark Boylanff31bcc2014-11-04 13:44:04 -0800101 def wait_for_secgroup_add():
ghanshyam0f825252015-08-25 16:02:50 +0900102 body = (self.servers_client.show_server(self.server['id'])
103 ['server'])
Clark Boylanff31bcc2014-11-04 13:44:04 -0800104 return {'name': secgroup['name']} in body['security_groups']
105
106 if not test.call_until_true(wait_for_secgroup_add,
107 CONF.compute.build_timeout,
108 CONF.compute.build_interval):
109 msg = ('Timed out waiting for adding security group %s to server '
110 '%s' % (secgroup['id'], self.server['id']))
111 raise exceptions.TimeoutException(msg)
112
Chris Hoge7579c1a2015-02-26 14:12:15 -0800113 @test.idempotent_id('bdbb5441-9204-419d-a225-b4fdbfb1a1a8')
Masayuki Igawa4ded9f02014-02-17 15:05:59 +0900114 @test.services('compute', 'volume', 'image', 'network')
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900115 def test_minimum_basic_scenario(self):
116 self.glance_image_create()
117 self.nova_keypair_add()
118 self.nova_boot()
119 self.nova_list()
120 self.nova_show()
121 self.cinder_create()
122 self.cinder_list()
123 self.cinder_show()
124 self.nova_volume_attach()
john-griffith5462b332013-12-13 10:04:43 -0500125 self.addCleanup(self.nova_volume_detach)
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900126 self.cinder_show()
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900127
Yair Friedae0e73d2014-11-24 11:56:26 +0200128 self.floating_ip = self.create_floating_ip(self.server)
Grishkin0f1e11c2014-05-04 20:44:52 +0400129 self.create_and_add_security_group()
JordanP3fe2dc32014-11-17 13:06:01 +0100130
131 self.linux_client = self.get_remote_client(self.floating_ip['ip'])
Attila Fazekas28c25202014-02-08 18:51:38 +0100132 self.nova_reboot()
JordanP3fe2dc32014-11-17 13:06:01 +0100133
134 self.linux_client = self.get_remote_client(self.floating_ip['ip'])
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900135 self.check_partitions()