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