blob: 50a13600fd7efff2b22625381a20a65d148a8916 [file] [log] [blame]
lkuchlan9dea88e2016-06-07 17:12:01 +03001# Copyright 2016 Red Hat, Inc.
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
16from tempest.api.volume import base
17from tempest.common.utils import data_utils
18from tempest.common import waiters
19from tempest import config
20from tempest import test
21
22CONF = config.CONF
23
24
25class VolumesBackupsV2Test(base.BaseVolumeTest):
26
27 @classmethod
28 def skip_checks(cls):
29 super(VolumesBackupsV2Test, cls).skip_checks()
30 if not CONF.volume_feature_enabled.backup:
31 raise cls.skipException("Cinder backup feature disabled")
32
33 @classmethod
34 def resource_setup(cls):
35 super(VolumesBackupsV2Test, cls).resource_setup()
36
lkuchlanf8a66682016-06-16 14:49:19 +030037 @test.idempotent_id('a66eb488-8ee1-47d4-8e9f-575a095728c6')
38 def test_volume_backup_create_get_detailed_list_restore_delete(self):
39 # Create backup
lisalibf543c32016-08-24 17:11:20 +080040 volume = self.create_volume()
41 self.addCleanup(self.volumes_client.delete_volume,
42 volume['id'])
zhuflc6ce5392016-08-17 14:34:37 +080043 backup_name = data_utils.rand_name(
44 self.__class__.__name__ + '-Backup')
lkuchlanf8a66682016-06-16 14:49:19 +030045 create_backup = self.backups_client.create_backup
lisalibf543c32016-08-24 17:11:20 +080046 backup = create_backup(volume_id=volume['id'],
lkuchlanf8a66682016-06-16 14:49:19 +030047 name=backup_name)['backup']
48 self.addCleanup(self.backups_client.delete_backup,
49 backup['id'])
50 self.assertEqual(backup_name, backup['name'])
51 waiters.wait_for_volume_status(self.volumes_client,
lisalibf543c32016-08-24 17:11:20 +080052 volume['id'], 'available')
lkuchlanf8a66682016-06-16 14:49:19 +030053 self.backups_client.wait_for_backup_status(backup['id'],
54 'available')
55
56 # Get a given backup
57 backup = self.backups_client.show_backup(backup['id'])['backup']
58 self.assertEqual(backup_name, backup['name'])
59
60 # Get all backups with detail
61 backups = self.backups_client.list_backups(
62 detail=True)['backups']
63 self.assertIn((backup['name'], backup['id']),
64 [(m['name'], m['id']) for m in backups])
65
66 # Restore backup
67 restore = self.backups_client.restore_backup(
68 backup['id'])['restore']
69
70 # Delete backup
71 self.addCleanup(self.volumes_client.delete_volume,
72 restore['volume_id'])
73 self.assertEqual(backup['id'], restore['backup_id'])
74 self.backups_client.wait_for_backup_status(backup['id'],
75 'available')
76 waiters.wait_for_volume_status(self.volumes_client,
77 restore['volume_id'], 'available')
78
lkuchlan9dea88e2016-06-07 17:12:01 +030079 @test.idempotent_id('07af8f6d-80af-44c9-a5dc-c8427b1b62e6')
80 @test.services('compute')
81 def test_backup_create_attached_volume(self):
82 """Test backup create using force flag.
83
84 Cinder allows to create a volume backup, whether the volume status
85 is "available" or "in-use".
86 """
87 # Create a server
lisalibf543c32016-08-24 17:11:20 +080088 volume = self.create_volume()
89 self.addCleanup(self.volumes_client.delete_volume,
90 volume['id'])
zhuflc6ce5392016-08-17 14:34:37 +080091 server_name = data_utils.rand_name(
92 self.__class__.__name__ + '-instance')
lkuchlan9dea88e2016-06-07 17:12:01 +030093 server = self.create_server(name=server_name, wait_until='ACTIVE')
94 self.addCleanup(self.servers_client.delete_server, server['id'])
95 # Attach volume to instance
96 self.servers_client.attach_volume(server['id'],
lisalibf543c32016-08-24 17:11:20 +080097 volumeId=volume['id'])
lkuchlan9dea88e2016-06-07 17:12:01 +030098 waiters.wait_for_volume_status(self.volumes_client,
lisalibf543c32016-08-24 17:11:20 +080099 volume['id'], 'in-use')
lkuchlan9dea88e2016-06-07 17:12:01 +0300100 self.addCleanup(waiters.wait_for_volume_status, self.volumes_client,
lisalibf543c32016-08-24 17:11:20 +0800101 volume['id'], 'available')
lkuchlan9dea88e2016-06-07 17:12:01 +0300102 self.addCleanup(self.servers_client.detach_volume, server['id'],
lisalibf543c32016-08-24 17:11:20 +0800103 volume['id'])
lkuchlan9dea88e2016-06-07 17:12:01 +0300104 # Create backup using force flag
zhuflc6ce5392016-08-17 14:34:37 +0800105 backup_name = data_utils.rand_name(
106 self.__class__.__name__ + '-Backup')
lkuchlan9dea88e2016-06-07 17:12:01 +0300107 backup = self.backups_client.create_backup(
lisalibf543c32016-08-24 17:11:20 +0800108 volume_id=volume['id'],
lkuchlan9dea88e2016-06-07 17:12:01 +0300109 name=backup_name, force=True)['backup']
110 self.addCleanup(self.backups_client.delete_backup, backup['id'])
111 self.backups_client.wait_for_backup_status(backup['id'],
112 'available')
113 self.assertEqual(backup_name, backup['name'])
114
115
116class VolumesBackupsV1Test(VolumesBackupsV2Test):
117 _api_version = 1