Joe Gordon | b5e10cd | 2013-07-10 15:51:12 +0000 | [diff] [blame] | 1 | # 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. |
Matthew Treinish | 01472ff | 2015-02-20 17:26:52 -0500 | [diff] [blame] | 15 | |
Doug Hellmann | 583ce2c | 2015-03-11 14:55:46 +0000 | [diff] [blame] | 16 | from oslo_log import log as logging |
Matthew Treinish | 01472ff | 2015-02-20 17:26:52 -0500 | [diff] [blame] | 17 | from tempest_lib.common.utils import data_utils |
Masayuki Igawa | bfa0760 | 2015-01-20 18:47:17 +0900 | [diff] [blame] | 18 | from tempest_lib import exceptions as lib_exc |
Joe Gordon | b5e10cd | 2013-07-10 15:51:12 +0000 | [diff] [blame] | 19 | |
Matthew Treinish | 6c07229 | 2014-01-29 19:15:52 +0000 | [diff] [blame] | 20 | from tempest import config |
Joe Gordon | b5e10cd | 2013-07-10 15:51:12 +0000 | [diff] [blame] | 21 | from tempest.scenario import manager |
Masayuki Igawa | 4ded9f0 | 2014-02-17 15:05:59 +0900 | [diff] [blame] | 22 | from tempest import test |
Joe Gordon | b5e10cd | 2013-07-10 15:51:12 +0000 | [diff] [blame] | 23 | |
Matthew Treinish | 6c07229 | 2014-01-29 19:15:52 +0000 | [diff] [blame] | 24 | CONF = config.CONF |
| 25 | |
Joe Gordon | b5e10cd | 2013-07-10 15:51:12 +0000 | [diff] [blame] | 26 | |
| 27 | LOG = logging.getLogger(__name__) |
| 28 | |
| 29 | |
Ghanshyam | aa4511e | 2014-09-08 10:37:50 +0900 | [diff] [blame] | 30 | class TestLargeOpsScenario(manager.ScenarioTest): |
Joe Gordon | b5e10cd | 2013-07-10 15:51:12 +0000 | [diff] [blame] | 31 | |
| 32 | """ |
| 33 | Test large operations. |
| 34 | |
| 35 | This test below: |
Joe Gordon | fa29a62 | 2014-04-17 13:21:44 -0700 | [diff] [blame] | 36 | * Spin up multiple instances in one nova call, and repeat three times |
Joe Gordon | b5e10cd | 2013-07-10 15:51:12 +0000 | [diff] [blame] | 37 | * as a regular user |
| 38 | * TODO: same thing for cinder |
| 39 | |
| 40 | """ |
| 41 | |
Sylvain Afchain | 9206477 | 2014-01-16 02:45:57 +0100 | [diff] [blame] | 42 | @classmethod |
Emily Hugenbruch | 5e2d2a2 | 2015-02-25 21:35:45 +0000 | [diff] [blame] | 43 | def skip_checks(cls): |
| 44 | super(TestLargeOpsScenario, cls).skip_checks() |
Yair Fried | c1f1e83 | 2014-09-21 12:57:32 +0300 | [diff] [blame] | 45 | if CONF.scenario.large_ops_number < 1: |
| 46 | raise cls.skipException("large_ops_number not set to multiple " |
| 47 | "instances") |
Emily Hugenbruch | 5e2d2a2 | 2015-02-25 21:35:45 +0000 | [diff] [blame] | 48 | |
| 49 | @classmethod |
| 50 | def setup_credentials(cls): |
Sylvain Afchain | 9206477 | 2014-01-16 02:45:57 +0100 | [diff] [blame] | 51 | cls.set_network_resources() |
Emily Hugenbruch | 5e2d2a2 | 2015-02-25 21:35:45 +0000 | [diff] [blame] | 52 | super(TestLargeOpsScenario, cls).setup_credentials() |
| 53 | |
| 54 | @classmethod |
| 55 | def resource_setup(cls): |
Andrea Frittoli | ac20b5e | 2014-09-15 13:31:14 +0100 | [diff] [blame] | 56 | super(TestLargeOpsScenario, cls).resource_setup() |
Yair Fried | 6cad136 | 2014-11-24 17:56:56 +0200 | [diff] [blame] | 57 | # list of cleanup calls to be executed in reverse order |
| 58 | cls._cleanup_resources = [] |
| 59 | |
| 60 | @classmethod |
| 61 | def resource_cleanup(cls): |
| 62 | while cls._cleanup_resources: |
| 63 | function, args, kwargs = cls._cleanup_resources.pop(-1) |
| 64 | try: |
| 65 | function(*args, **kwargs) |
Masayuki Igawa | bfa0760 | 2015-01-20 18:47:17 +0900 | [diff] [blame] | 66 | except lib_exc.NotFound: |
Yair Fried | 6cad136 | 2014-11-24 17:56:56 +0200 | [diff] [blame] | 67 | pass |
| 68 | super(TestLargeOpsScenario, cls).resource_cleanup() |
| 69 | |
| 70 | @classmethod |
| 71 | def addCleanupClass(cls, function, *arguments, **keywordArguments): |
| 72 | cls._cleanup_resources.append((function, arguments, keywordArguments)) |
Sylvain Afchain | 9206477 | 2014-01-16 02:45:57 +0100 | [diff] [blame] | 73 | |
Joe Gordon | b5e10cd | 2013-07-10 15:51:12 +0000 | [diff] [blame] | 74 | def _wait_for_server_status(self, status): |
| 75 | for server in self.servers: |
Joe Gordon | 6286a6a | 2014-03-05 16:35:03 -0800 | [diff] [blame] | 76 | # Make sure nova list keeps working throughout the build process |
| 77 | self.servers_client.list_servers() |
Ghanshyam | aa4511e | 2014-09-08 10:37:50 +0900 | [diff] [blame] | 78 | self.servers_client.wait_for_server_status(server['id'], status) |
Joe Gordon | b5e10cd | 2013-07-10 15:51:12 +0000 | [diff] [blame] | 79 | |
Joe Gordon | b5e10cd | 2013-07-10 15:51:12 +0000 | [diff] [blame] | 80 | def nova_boot(self): |
Ken'ichi Ohmichi | 6ded8df | 2015-03-23 02:00:19 +0000 | [diff] [blame] | 81 | name = data_utils.rand_name('scenario-server') |
Matthew Treinish | 6c07229 | 2014-01-29 19:15:52 +0000 | [diff] [blame] | 82 | flavor_id = CONF.compute.flavor_ref |
Yair Fried | 6cad136 | 2014-11-24 17:56:56 +0200 | [diff] [blame] | 83 | # Explicitly create secgroup to avoid cleanup at the end of testcases. |
| 84 | # Since no traffic is tested, we don't need to actually add rules to |
| 85 | # secgroup |
David Kranz | 9964b4e | 2015-02-06 15:45:29 -0500 | [diff] [blame] | 86 | secgroup = self.security_groups_client.create_security_group( |
Yair Fried | 6cad136 | 2014-11-24 17:56:56 +0200 | [diff] [blame] | 87 | 'secgroup-%s' % name, 'secgroup-desc-%s' % name) |
| 88 | self.addCleanupClass(self.security_groups_client.delete_security_group, |
| 89 | secgroup['id']) |
| 90 | |
Ghanshyam | aa4511e | 2014-09-08 10:37:50 +0900 | [diff] [blame] | 91 | self.servers_client.create_server( |
| 92 | name, |
| 93 | self.image, |
| 94 | flavor_id, |
Matthew Treinish | 6c07229 | 2014-01-29 19:15:52 +0000 | [diff] [blame] | 95 | min_count=CONF.scenario.large_ops_number, |
Ken'ichi Ohmichi | 1b3461e | 2014-12-02 03:41:07 +0000 | [diff] [blame] | 96 | security_groups=[{'name': secgroup['name']}]) |
Joe Gordon | b5e10cd | 2013-07-10 15:51:12 +0000 | [diff] [blame] | 97 | # needed because of bug 1199788 |
Ghanshyam | aa4511e | 2014-09-08 10:37:50 +0900 | [diff] [blame] | 98 | params = {'name': name} |
David Kranz | ae99b9a | 2015-02-16 13:37:01 -0500 | [diff] [blame] | 99 | server_list = self.servers_client.list_servers(params) |
Ghanshyam | aa4511e | 2014-09-08 10:37:50 +0900 | [diff] [blame] | 100 | self.servers = server_list['servers'] |
Joe Gordon | a321965 | 2013-10-09 15:23:11 -0700 | [diff] [blame] | 101 | for server in self.servers: |
Matthew Treinish | b7144eb | 2013-12-13 22:57:35 +0000 | [diff] [blame] | 102 | # after deleting all servers - wait for all servers to clear |
| 103 | # before cleanup continues |
Yair Fried | 6cad136 | 2014-11-24 17:56:56 +0200 | [diff] [blame] | 104 | self.addCleanupClass(self.servers_client. |
| 105 | wait_for_server_termination, |
| 106 | server['id']) |
Matthew Treinish | b7144eb | 2013-12-13 22:57:35 +0000 | [diff] [blame] | 107 | for server in self.servers: |
Yair Fried | 6cad136 | 2014-11-24 17:56:56 +0200 | [diff] [blame] | 108 | self.addCleanupClass(self.servers_client.delete_server, |
| 109 | server['id']) |
Joe Gordon | b5e10cd | 2013-07-10 15:51:12 +0000 | [diff] [blame] | 110 | self._wait_for_server_status('ACTIVE') |
| 111 | |
Joe Gordon | b7f37cc | 2014-05-09 13:30:40 -0700 | [diff] [blame] | 112 | def _large_ops_scenario(self): |
Joe Gordon | b5e10cd | 2013-07-10 15:51:12 +0000 | [diff] [blame] | 113 | self.glance_image_create() |
| 114 | self.nova_boot() |
Joe Gordon | b7f37cc | 2014-05-09 13:30:40 -0700 | [diff] [blame] | 115 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 116 | @test.idempotent_id('14ba0e78-2ed9-4d17-9659-a48f4756ecb3') |
Joe Gordon | b7f37cc | 2014-05-09 13:30:40 -0700 | [diff] [blame] | 117 | @test.services('compute', 'image') |
| 118 | def test_large_ops_scenario_1(self): |
| 119 | self._large_ops_scenario() |
| 120 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 121 | @test.idempotent_id('b9b79b88-32aa-42db-8f8f-dcc8f4b4ccfe') |
Joe Gordon | b7f37cc | 2014-05-09 13:30:40 -0700 | [diff] [blame] | 122 | @test.services('compute', 'image') |
| 123 | def test_large_ops_scenario_2(self): |
| 124 | self._large_ops_scenario() |
| 125 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 126 | @test.idempotent_id('3aab7e82-2de3-419a-9da1-9f3a070668fb') |
Joe Gordon | b7f37cc | 2014-05-09 13:30:40 -0700 | [diff] [blame] | 127 | @test.services('compute', 'image') |
| 128 | def test_large_ops_scenario_3(self): |
| 129 | self._large_ops_scenario() |