blob: 75cef88a598811501142dbb151462dfa0a0be2f0 [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
zhufl6b7040a2017-01-18 16:38:34 +080016import testtools
17
ghanshyam017b5fe2016-04-15 18:49:26 +090018from tempest.common import compute
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000019from tempest.common import waiters
JordanPc240f7b2014-11-14 19:16:01 +010020from tempest import config
Ken'ichi Ohmichic85a9512017-01-27 18:34:24 -080021from tempest.lib import decorators
JordanPc240f7b2014-11-14 19:16:01 +010022from tempest.scenario import manager
23from tempest import test
24
25CONF = config.CONF
26
JordanPc240f7b2014-11-14 19:16:01 +010027
28class TestShelveInstance(manager.ScenarioTest):
Ken'ichi Ohmichic4e4f1c2015-11-17 08:16:12 +000029 """This test shelves then unshelves a Nova instance
30
JordanPc240f7b2014-11-14 19:16:01 +010031 The following is the scenario outline:
Takashi NATSUME6d5a2b42015-09-08 11:27:49 +090032 * boot an instance and create a timestamp file in it
JordanPc240f7b2014-11-14 19:16:01 +010033 * shelve the instance
34 * unshelve the instance
35 * check the existence of the timestamp file in the unshelved instance
36
37 """
38
zhufl8ed23d22016-07-13 11:00:05 +080039 @classmethod
40 def skip_checks(cls):
41 super(TestShelveInstance, cls).skip_checks()
42 if not CONF.compute_feature_enabled.shelve:
43 raise cls.skipException("Shelve is not available.")
44
JordanPc240f7b2014-11-14 19:16:01 +010045 def _shelve_then_unshelve_server(self, server):
ghanshyam017b5fe2016-04-15 18:49:26 +090046 compute.shelve_server(self.servers_client, server['id'],
47 force_shelve_offload=True)
48
JordanPc240f7b2014-11-14 19:16:01 +010049 self.servers_client.unshelve_server(server['id'])
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000050 waiters.wait_for_server_status(self.servers_client, server['id'],
51 'ACTIVE')
JordanPc240f7b2014-11-14 19:16:01 +010052
PranaliDeore9fe5eb32015-07-22 05:28:00 -070053 def _create_server_then_shelve_and_unshelve(self, boot_from_volume=False):
Matt Riedemann73764bf2015-09-30 14:53:25 -070054 keypair = self.create_keypair()
JordanPc240f7b2014-11-14 19:16:01 +010055
Matt Riedemann73764bf2015-09-30 14:53:25 -070056 security_group = self._create_security_group()
57 security_groups = [{'name': security_group['name']}]
PranaliDeore9fe5eb32015-07-22 05:28:00 -070058
Xiangfei Zhu0b5dca02016-08-16 21:16:25 -070059 server = self.create_server(
Xiangfei Zhu0b5dca02016-08-16 21:16:25 -070060 key_name=keypair['name'],
61 security_groups=security_groups,
Xiangfei Zhu0b5dca02016-08-16 21:16:25 -070062 volume_backed=boot_from_volume)
JordanPc240f7b2014-11-14 19:16:01 +010063
Sean Dague20e98612016-01-06 14:33:28 -050064 instance_ip = self.get_server_ip(server)
Alexander Gubanovc8829f82015-11-12 10:35:13 +020065 timestamp = self.create_timestamp(instance_ip,
66 private_key=keypair['private_key'])
JordanPc240f7b2014-11-14 19:16:01 +010067
68 # Prevent bug #1257594 from coming back
69 # Unshelve used to boot the instance with the original image, not
70 # with the instance snapshot
71 self._shelve_then_unshelve_server(server)
Alexander Gubanovc8829f82015-11-12 10:35:13 +020072
73 timestamp2 = self.get_timestamp(instance_ip,
74 private_key=keypair['private_key'])
Alexander Gubanovabd154c2015-09-23 23:24:06 +030075 self.assertEqual(timestamp, timestamp2)
PranaliDeore9fe5eb32015-07-22 05:28:00 -070076
Ken'ichi Ohmichic85a9512017-01-27 18:34:24 -080077 @decorators.idempotent_id('1164e700-0af0-4a4c-8792-35909a88743c')
zhufl6b7040a2017-01-18 16:38:34 +080078 @testtools.skipUnless(CONF.network.public_network_id,
79 'The public_network_id option must be specified.')
PranaliDeore9fe5eb32015-07-22 05:28:00 -070080 @test.services('compute', 'network', 'image')
81 def test_shelve_instance(self):
82 self._create_server_then_shelve_and_unshelve()
83
Ken'ichi Ohmichic85a9512017-01-27 18:34:24 -080084 @decorators.idempotent_id('c1b6318c-b9da-490b-9c67-9339b627271f')
zhufl6b7040a2017-01-18 16:38:34 +080085 @testtools.skipUnless(CONF.network.public_network_id,
86 'The public_network_id option must be specified.')
PranaliDeore9fe5eb32015-07-22 05:28:00 -070087 @test.services('compute', 'volume', 'network', 'image')
88 def test_shelve_volume_backed_instance(self):
89 self._create_server_then_shelve_and_unshelve(boot_from_volume=True)