blob: db026c12aad4d7cfffff8442308c1e9cb6324966 [file] [log] [blame]
zhangyanzid4d3c6d2013-11-06 09:27:13 +08001# Copyright 2013 Huawei Technologies Co.,LTD
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
Matthew Treinish01472ff2015-02-20 17:26:52 -050016from tempest_lib.common.utils import data_utils
17
Zhi Kun Liubb363a22013-11-28 18:47:39 +080018from tempest.api.volume import base
Masayuki Igawaa279a682014-03-14 13:29:42 +090019from tempest import test
zhangyanzid4d3c6d2013-11-06 09:27:13 +080020
21
Chandan Kumar457d1632014-11-18 13:46:08 +053022class SnapshotsActionsV2Test(base.BaseVolumeAdminTest):
zhangyanzid4d3c6d2013-11-06 09:27:13 +080023
24 @classmethod
Rohan Kanade05749152015-01-30 17:15:18 +053025 def setup_clients(cls):
26 super(SnapshotsActionsV2Test, cls).setup_clients()
27 cls.client = cls.snapshots_client
28
29 @classmethod
Andrea Frittoli61a12e22014-09-15 13:14:54 +010030 def resource_setup(cls):
Chandan Kumar457d1632014-11-18 13:46:08 +053031 super(SnapshotsActionsV2Test, cls).resource_setup()
zhangyanzid4d3c6d2013-11-06 09:27:13 +080032
zhangyanzid4d3c6d2013-11-06 09:27:13 +080033 # Create a test shared volume for tests
Ken'ichi Ohmichi07308f12015-03-23 00:24:28 +000034 vol_name = data_utils.rand_name(cls.__name__ + '-Volume')
Chandan Kumar457d1632014-11-18 13:46:08 +053035 cls.name_field = cls.special_fields['name_field']
36 params = {cls.name_field: vol_name}
Joseph Lanoux6809bab2014-12-18 14:57:18 +000037 cls.volume = \
Markus Zoeller3d2a21c2015-02-27 12:04:22 +010038 cls.volumes_client.create_volume(**params)
zhangyanzid4d3c6d2013-11-06 09:27:13 +080039 cls.volumes_client.wait_for_volume_status(cls.volume['id'],
40 'available')
41
42 # Create a test shared snapshot for tests
Ken'ichi Ohmichi07308f12015-03-23 00:24:28 +000043 snap_name = data_utils.rand_name(cls.__name__ + '-Snapshot')
Chandan Kumar457d1632014-11-18 13:46:08 +053044 params = {cls.name_field: snap_name}
Joseph Lanoux6809bab2014-12-18 14:57:18 +000045 cls.snapshot = \
Chandan Kumar457d1632014-11-18 13:46:08 +053046 cls.client.create_snapshot(cls.volume['id'], **params)
zhangyanzid4d3c6d2013-11-06 09:27:13 +080047 cls.client.wait_for_snapshot_status(cls.snapshot['id'],
48 'available')
49
50 @classmethod
Andrea Frittoli61a12e22014-09-15 13:14:54 +010051 def resource_cleanup(cls):
zhangyanzid4d3c6d2013-11-06 09:27:13 +080052 # Delete the test snapshot
53 cls.client.delete_snapshot(cls.snapshot['id'])
54 cls.client.wait_for_resource_deletion(cls.snapshot['id'])
55
56 # Delete the test volume
57 cls.volumes_client.delete_volume(cls.volume['id'])
58 cls.volumes_client.wait_for_resource_deletion(cls.volume['id'])
59
Chandan Kumar457d1632014-11-18 13:46:08 +053060 super(SnapshotsActionsV2Test, cls).resource_cleanup()
zhangyanzid4d3c6d2013-11-06 09:27:13 +080061
62 def tearDown(self):
63 # Set snapshot's status to available after test
64 status = 'available'
65 snapshot_id = self.snapshot['id']
66 self.admin_snapshots_client.reset_snapshot_status(snapshot_id,
67 status)
Chandan Kumar457d1632014-11-18 13:46:08 +053068 super(SnapshotsActionsV2Test, self).tearDown()
zhangyanzid4d3c6d2013-11-06 09:27:13 +080069
wanghaofa3908c2014-01-15 19:34:03 +080070 def _create_reset_and_force_delete_temp_snapshot(self, status=None):
71 # Create snapshot, reset snapshot status,
72 # and force delete temp snapshot
73 temp_snapshot = self.create_snapshot(self.volume['id'])
74 if status:
Joseph Lanoux6809bab2014-12-18 14:57:18 +000075 self.admin_snapshots_client.\
wanghaofa3908c2014-01-15 19:34:03 +080076 reset_snapshot_status(temp_snapshot['id'], status)
Joseph Lanoux6809bab2014-12-18 14:57:18 +000077 self.admin_snapshots_client.\
wanghaofa3908c2014-01-15 19:34:03 +080078 force_delete_snapshot(temp_snapshot['id'])
wanghaofa3908c2014-01-15 19:34:03 +080079 self.client.wait_for_resource_deletion(temp_snapshot['id'])
80
zhangyanzid4d3c6d2013-11-06 09:27:13 +080081 def _get_progress_alias(self):
82 return 'os-extended-snapshot-attributes:progress'
83
Masayuki Igawaa279a682014-03-14 13:29:42 +090084 @test.attr(type='gate')
Chris Hoge7579c1a2015-02-26 14:12:15 -080085 @test.idempotent_id('3e13ca2f-48ea-49f3-ae1a-488e9180d535')
zhangyanzid4d3c6d2013-11-06 09:27:13 +080086 def test_reset_snapshot_status(self):
87 # Reset snapshot status to creating
88 status = 'creating'
Joseph Lanoux6809bab2014-12-18 14:57:18 +000089 self.admin_snapshots_client.\
zhangyanzid4d3c6d2013-11-06 09:27:13 +080090 reset_snapshot_status(self.snapshot['id'], status)
Joseph Lanoux6809bab2014-12-18 14:57:18 +000091 snapshot_get \
zhangyanzid4d3c6d2013-11-06 09:27:13 +080092 = self.admin_snapshots_client.get_snapshot(self.snapshot['id'])
zhangyanzid4d3c6d2013-11-06 09:27:13 +080093 self.assertEqual(status, snapshot_get['status'])
94
Masayuki Igawaa279a682014-03-14 13:29:42 +090095 @test.attr(type='gate')
Chris Hoge7579c1a2015-02-26 14:12:15 -080096 @test.idempotent_id('41288afd-d463-485e-8f6e-4eea159413eb')
zhangyanzid4d3c6d2013-11-06 09:27:13 +080097 def test_update_snapshot_status(self):
98 # Reset snapshot status to creating
99 status = 'creating'
100 self.admin_snapshots_client.\
101 reset_snapshot_status(self.snapshot['id'], status)
102
103 # Update snapshot status to error
104 progress = '80%'
105 status = 'error'
106 progress_alias = self._get_progress_alias()
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000107 self.client.update_snapshot_status(self.snapshot['id'],
108 status, progress)
109 snapshot_get \
zhangyanzid4d3c6d2013-11-06 09:27:13 +0800110 = self.admin_snapshots_client.get_snapshot(self.snapshot['id'])
zhangyanzid4d3c6d2013-11-06 09:27:13 +0800111 self.assertEqual(status, snapshot_get['status'])
112 self.assertEqual(progress, snapshot_get[progress_alias])
113
Masayuki Igawaa279a682014-03-14 13:29:42 +0900114 @test.attr(type='gate')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800115 @test.idempotent_id('05f711b6-e629-4895-8103-7ca069f2073a')
wanghaofa3908c2014-01-15 19:34:03 +0800116 def test_snapshot_force_delete_when_snapshot_is_creating(self):
117 # test force delete when status of snapshot is creating
118 self._create_reset_and_force_delete_temp_snapshot('creating')
119
Masayuki Igawaa279a682014-03-14 13:29:42 +0900120 @test.attr(type='gate')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800121 @test.idempotent_id('92ce8597-b992-43a1-8868-6316b22a969e')
wanghaofa3908c2014-01-15 19:34:03 +0800122 def test_snapshot_force_delete_when_snapshot_is_deleting(self):
123 # test force delete when status of snapshot is deleting
124 self._create_reset_and_force_delete_temp_snapshot('deleting')
125
Masayuki Igawaa279a682014-03-14 13:29:42 +0900126 @test.attr(type='gate')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800127 @test.idempotent_id('645a4a67-a1eb-4e8e-a547-600abac1525d')
wanghaofa3908c2014-01-15 19:34:03 +0800128 def test_snapshot_force_delete_when_snapshot_is_error(self):
129 # test force delete when status of snapshot is error
130 self._create_reset_and_force_delete_temp_snapshot('error')
131
Masayuki Igawaa279a682014-03-14 13:29:42 +0900132 @test.attr(type='gate')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800133 @test.idempotent_id('bf89080f-8129-465e-9327-b2f922666ba5')
wanghaofa3908c2014-01-15 19:34:03 +0800134 def test_snapshot_force_delete_when_snapshot_is_error_deleting(self):
135 # test force delete when status of snapshot is error_deleting
136 self._create_reset_and_force_delete_temp_snapshot('error_deleting')
137
zhangyanzid4d3c6d2013-11-06 09:27:13 +0800138
Chandan Kumar457d1632014-11-18 13:46:08 +0530139class SnapshotsActionsV1Test(SnapshotsActionsV2Test):
140 _api_version = 1