blob: e950766b9bbcefb9190d9970a156bc82e59ea574 [file] [log] [blame]
JordanPc240f7b2014-11-14 19:16:01 +01001# Copyright 2014 Scality
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
ghanshyam017b5fe2016-04-15 18:49:26 +090016from tempest.common import compute
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000017from tempest.common import waiters
JordanPc240f7b2014-11-14 19:16:01 +010018from tempest import config
Ken'ichi Ohmichic85a9512017-01-27 18:34:24 -080019from tempest.lib import decorators
JordanPc240f7b2014-11-14 19:16:01 +010020from tempest.scenario import manager
21from tempest import test
22
23CONF = config.CONF
24
JordanPc240f7b2014-11-14 19:16:01 +010025
26class TestShelveInstance(manager.ScenarioTest):
Ken'ichi Ohmichic4e4f1c2015-11-17 08:16:12 +000027 """This test shelves then unshelves a Nova instance
28
JordanPc240f7b2014-11-14 19:16:01 +010029 The following is the scenario outline:
Takashi NATSUME6d5a2b42015-09-08 11:27:49 +090030 * boot an instance and create a timestamp file in it
JordanPc240f7b2014-11-14 19:16:01 +010031 * shelve the instance
32 * unshelve the instance
33 * check the existence of the timestamp file in the unshelved instance
34
35 """
36
zhufl8ed23d22016-07-13 11:00:05 +080037 @classmethod
38 def skip_checks(cls):
39 super(TestShelveInstance, cls).skip_checks()
40 if not CONF.compute_feature_enabled.shelve:
41 raise cls.skipException("Shelve is not available.")
42
JordanPc240f7b2014-11-14 19:16:01 +010043 def _shelve_then_unshelve_server(self, server):
ghanshyam017b5fe2016-04-15 18:49:26 +090044 compute.shelve_server(self.servers_client, server['id'],
45 force_shelve_offload=True)
46
JordanPc240f7b2014-11-14 19:16:01 +010047 self.servers_client.unshelve_server(server['id'])
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000048 waiters.wait_for_server_status(self.servers_client, server['id'],
49 'ACTIVE')
JordanPc240f7b2014-11-14 19:16:01 +010050
PranaliDeore9fe5eb32015-07-22 05:28:00 -070051 def _create_server_then_shelve_and_unshelve(self, boot_from_volume=False):
Matt Riedemann73764bf2015-09-30 14:53:25 -070052 keypair = self.create_keypair()
JordanPc240f7b2014-11-14 19:16:01 +010053
Matt Riedemann73764bf2015-09-30 14:53:25 -070054 security_group = self._create_security_group()
55 security_groups = [{'name': security_group['name']}]
PranaliDeore9fe5eb32015-07-22 05:28:00 -070056
Xiangfei Zhu0b5dca02016-08-16 21:16:25 -070057 server = self.create_server(
58 image_id=CONF.compute.image_ref,
59 key_name=keypair['name'],
60 security_groups=security_groups,
Xiangfei Zhu0b5dca02016-08-16 21:16:25 -070061 volume_backed=boot_from_volume)
JordanPc240f7b2014-11-14 19:16:01 +010062
Sean Dague20e98612016-01-06 14:33:28 -050063 instance_ip = self.get_server_ip(server)
Alexander Gubanovc8829f82015-11-12 10:35:13 +020064 timestamp = self.create_timestamp(instance_ip,
65 private_key=keypair['private_key'])
JordanPc240f7b2014-11-14 19:16:01 +010066
67 # Prevent bug #1257594 from coming back
68 # Unshelve used to boot the instance with the original image, not
69 # with the instance snapshot
70 self._shelve_then_unshelve_server(server)
Alexander Gubanovc8829f82015-11-12 10:35:13 +020071
72 timestamp2 = self.get_timestamp(instance_ip,
73 private_key=keypair['private_key'])
Alexander Gubanovabd154c2015-09-23 23:24:06 +030074 self.assertEqual(timestamp, timestamp2)
PranaliDeore9fe5eb32015-07-22 05:28:00 -070075
Ken'ichi Ohmichic85a9512017-01-27 18:34:24 -080076 @decorators.idempotent_id('1164e700-0af0-4a4c-8792-35909a88743c')
PranaliDeore9fe5eb32015-07-22 05:28:00 -070077 @test.services('compute', 'network', 'image')
78 def test_shelve_instance(self):
79 self._create_server_then_shelve_and_unshelve()
80
Ken'ichi Ohmichic85a9512017-01-27 18:34:24 -080081 @decorators.idempotent_id('c1b6318c-b9da-490b-9c67-9339b627271f')
PranaliDeore9fe5eb32015-07-22 05:28:00 -070082 @test.services('compute', 'volume', 'network', 'image')
83 def test_shelve_volume_backed_instance(self):
84 self._create_server_then_shelve_and_unshelve(boot_from_volume=True)