blob: 77e195d996058ad4e31df7a39cea02538f25ff27 [file] [log] [blame]
ZhiQiang Fan39f97222013-09-20 04:49:44 +08001# Copyright 2012 OpenStack Foundation
Jay Pipes051075a2012-04-28 17:39:37 -04002# 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
Matthew Treinish6c072292014-01-29 19:15:52 +000016from tempest import config
Matthew Treinishf4a9b0f2013-07-26 16:58:26 -040017from tempest.openstack.common import log as logging
Sean Dague6dbc6da2013-05-08 17:49:46 -040018from tempest.scenario import manager
Matthew Treinishd75edef2014-04-11 15:57:16 -040019from tempest.scenario import utils as test_utils
Masayuki Igawa4ded9f02014-02-17 15:05:59 +090020from tempest import test
Jay Pipes051075a2012-04-28 17:39:37 -040021
Matthew Treinish6c072292014-01-29 19:15:52 +000022CONF = config.CONF
23
Jay Pipes051075a2012-04-28 17:39:37 -040024LOG = logging.getLogger(__name__)
25
Matthew Treinisha0048cb2014-04-08 17:44:42 -040026load_tests = test_utils.load_tests_input_scenario_utils
Andrea Frittolif5da28b2013-12-06 07:08:07 +000027
Jay Pipes051075a2012-04-28 17:39:37 -040028
Ghanshyam5a305c42014-08-27 14:24:58 +090029class TestServerBasicOps(manager.ScenarioTest):
Jay Pipes051075a2012-04-28 17:39:37 -040030
31 """
32 This smoke test case follows this basic set of operations:
33
34 * Create a keypair for use in launching an instance
35 * Create a security group to control network access in instance
36 * Add simple permissive rules to the security group
37 * Launch an instance
38 * Pause/unpause the instance
39 * Suspend/resume the instance
40 * Terminate the instance
41 """
42
Andrea Frittolif5da28b2013-12-06 07:08:07 +000043 def setUp(self):
44 super(TestServerBasicOps, self).setUp()
45 # Setup image and flavor the test instance
46 # Support both configured and injected values
47 if not hasattr(self, 'image_ref'):
Matthew Treinish6c072292014-01-29 19:15:52 +000048 self.image_ref = CONF.compute.image_ref
Andrea Frittolif5da28b2013-12-06 07:08:07 +000049 if not hasattr(self, 'flavor_ref'):
Matthew Treinish6c072292014-01-29 19:15:52 +000050 self.flavor_ref = CONF.compute.flavor_ref
Andrea Frittolif5da28b2013-12-06 07:08:07 +000051 self.image_utils = test_utils.ImageUtils()
52 if not self.image_utils.is_flavor_enough(self.flavor_ref,
53 self.image_ref):
54 raise self.skipException(
55 '{image} does not fit in {flavor}'.format(
56 image=self.image_ref, flavor=self.flavor_ref
57 )
58 )
Matthew Treinish6c072292014-01-29 19:15:52 +000059 self.run_ssh = CONF.compute.run_ssh and \
Andrea Frittolif5da28b2013-12-06 07:08:07 +000060 self.image_utils.is_sshable_image(self.image_ref)
61 self.ssh_user = self.image_utils.ssh_user(self.image_ref)
62 LOG.debug('Starting test for i:{image}, f:{flavor}. '
63 'Run ssh: {ssh}, user: {ssh_user}'.format(
64 image=self.image_ref, flavor=self.flavor_ref,
65 ssh=self.run_ssh, ssh_user=self.ssh_user))
66
Ken'ichi Ohmichi599d1b82013-08-19 18:48:37 +090067 def add_keypair(self):
68 self.keypair = self.create_keypair()
Jay Pipes051075a2012-04-28 17:39:37 -040069
ivan-zhu19977392013-01-12 21:57:55 +080070 def boot_instance(self):
Andrea Frittolif5da28b2013-12-06 07:08:07 +000071 # Create server with image and flavor from input scenario
Ghanshyam5a305c42014-08-27 14:24:58 +090072 security_groups = [self.security_group]
Jay Pipes051075a2012-04-28 17:39:37 -040073 create_kwargs = {
Ghanshyam5a305c42014-08-27 14:24:58 +090074 'key_name': self.keypair['name'],
Grishkin0f1e11c2014-05-04 20:44:52 +040075 'security_groups': security_groups
Jay Pipes051075a2012-04-28 17:39:37 -040076 }
Matthew Treinishb7144eb2013-12-13 22:57:35 +000077 self.instance = self.create_server(image=self.image_ref,
78 flavor=self.flavor_ref,
79 create_kwargs=create_kwargs)
ivan-zhu19977392013-01-12 21:57:55 +080080
Andrea Frittolif5da28b2013-12-06 07:08:07 +000081 def verify_ssh(self):
82 if self.run_ssh:
83 # Obtain a floating IP
Ghanshyam5a305c42014-08-27 14:24:58 +090084 _, floating_ip = self.floating_ips_client.create_floating_ip()
85 self.addCleanup(self.delete_wrapper,
86 self.floating_ips_client.delete_floating_ip,
87 floating_ip['id'])
Andrea Frittolif5da28b2013-12-06 07:08:07 +000088 # Attach a floating IP
Ghanshyam5a305c42014-08-27 14:24:58 +090089 self.floating_ips_client.associate_floating_ip_to_server(
90 floating_ip['ip'], self.instance['id'])
Andrea Frittolif5da28b2013-12-06 07:08:07 +000091 # Check ssh
Nachi Ueno95b41282014-01-15 06:54:21 -080092 try:
Yair Fried3960c4d2014-05-07 15:20:30 +030093 self.get_remote_client(
Ghanshyam5a305c42014-08-27 14:24:58 +090094 server_or_ip=floating_ip['ip'],
Nachi Ueno95b41282014-01-15 06:54:21 -080095 username=self.image_utils.ssh_user(self.image_ref),
Ghanshyam5a305c42014-08-27 14:24:58 +090096 private_key=self.keypair['private_key'])
Nachi Ueno95b41282014-01-15 06:54:21 -080097 except Exception:
98 LOG.exception('ssh to server failed')
99 self._log_console_output()
100 raise
Andrea Frittolif5da28b2013-12-06 07:08:07 +0000101
Masayuki Igawa4ded9f02014-02-17 15:05:59 +0900102 @test.services('compute', 'network')
ivan-zhu19977392013-01-12 21:57:55 +0800103 def test_server_basicops(self):
Ken'ichi Ohmichi599d1b82013-08-19 18:48:37 +0900104 self.add_keypair()
Grishkin0f1e11c2014-05-04 20:44:52 +0400105 self.security_group = self._create_security_group_nova()
ivan-zhu19977392013-01-12 21:57:55 +0800106 self.boot_instance()
Andrea Frittolif5da28b2013-12-06 07:08:07 +0000107 self.verify_ssh()
Ghanshyam5a305c42014-08-27 14:24:58 +0900108 self.servers_client.delete_server(self.instance['id'])