blob: c38ce2d729f739f24bf02c004d09027a923b5fd6 [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):
Ken'ichi Ohmichi76800242015-07-03 05:12:31 +000065 got_server = self.servers_client.show_server(self.server['id'])
Andrea Frittoli247058f2014-07-16 16:09:22 +010066 self.assertThat(
67 self.server, custom_matchers.MatchesDictExceptForKeys(
68 got_server, excluded_keys=['OS-EXT-AZ:availability_zone']))
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090069
70 def cinder_create(self):
Ken'ichi Ohmichi70672df2013-08-19 18:35:19 +090071 self.volume = self.create_volume()
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090072
73 def cinder_list(self):
Joseph Lanoux6809bab2014-12-18 14:57:18 +000074 volumes = self.volumes_client.list_volumes()
Andrea Frittoli247058f2014-07-16 16:09:22 +010075 self.assertIn(self.volume['id'], [x['id'] for x in volumes])
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090076
77 def cinder_show(self):
Ken'ichi Ohmichi35798fb2015-04-06 01:22:41 +000078 volume = self.volumes_client.show_volume(self.volume['id'])
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090079 self.assertEqual(self.volume, volume)
80
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090081 def nova_reboot(self):
Ken'ichi Ohmichi5271b0f2015-08-10 07:53:27 +000082 self.servers_client.reboot_server(self.server['id'], 'SOFT')
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090083 self._wait_for_server_status('ACTIVE')
84
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090085 def check_partitions(self):
Andrea Frittoli247058f2014-07-16 16:09:22 +010086 # NOTE(andreaf) The device name may be different on different guest OS
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090087 partitions = self.linux_client.get_partitions()
Alessandro Pilottib4aa55d2014-08-17 13:57:16 +030088 self.assertEqual(1, partitions.count(CONF.compute.volume_device_name))
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +090089
Grishkin0f1e11c2014-05-04 20:44:52 +040090 def create_and_add_security_group(self):
Yair Fried1fc32a12014-08-04 09:11:30 +030091 secgroup = self._create_security_group()
Andrea Frittoli247058f2014-07-16 16:09:22 +010092 self.servers_client.add_security_group(self.server['id'],
93 secgroup['name'])
94 self.addCleanup(self.servers_client.remove_security_group,
95 self.server['id'], secgroup['name'])
Grishkin0f1e11c2014-05-04 20:44:52 +040096
Clark Boylanff31bcc2014-11-04 13:44:04 -080097 def wait_for_secgroup_add():
Ken'ichi Ohmichi76800242015-07-03 05:12:31 +000098 body = self.servers_client.show_server(self.server['id'])
Clark Boylanff31bcc2014-11-04 13:44:04 -080099 return {'name': secgroup['name']} in body['security_groups']
100
101 if not test.call_until_true(wait_for_secgroup_add,
102 CONF.compute.build_timeout,
103 CONF.compute.build_interval):
104 msg = ('Timed out waiting for adding security group %s to server '
105 '%s' % (secgroup['id'], self.server['id']))
106 raise exceptions.TimeoutException(msg)
107
Chris Hoge7579c1a2015-02-26 14:12:15 -0800108 @test.idempotent_id('bdbb5441-9204-419d-a225-b4fdbfb1a1a8')
Masayuki Igawa4ded9f02014-02-17 15:05:59 +0900109 @test.services('compute', 'volume', 'image', 'network')
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900110 def test_minimum_basic_scenario(self):
111 self.glance_image_create()
112 self.nova_keypair_add()
113 self.nova_boot()
114 self.nova_list()
115 self.nova_show()
116 self.cinder_create()
117 self.cinder_list()
118 self.cinder_show()
119 self.nova_volume_attach()
john-griffith5462b332013-12-13 10:04:43 -0500120 self.addCleanup(self.nova_volume_detach)
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900121 self.cinder_show()
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900122
Yair Friedae0e73d2014-11-24 11:56:26 +0200123 self.floating_ip = self.create_floating_ip(self.server)
Grishkin0f1e11c2014-05-04 20:44:52 +0400124 self.create_and_add_security_group()
JordanP3fe2dc32014-11-17 13:06:01 +0100125
126 self.linux_client = self.get_remote_client(self.floating_ip['ip'])
Attila Fazekas28c25202014-02-08 18:51:38 +0100127 self.nova_reboot()
JordanP3fe2dc32014-11-17 13:06:01 +0100128
129 self.linux_client = self.get_remote_client(self.floating_ip['ip'])
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900130 self.check_partitions()