blob: ecddfbaf685e83ed73accfab07c2f304ac6a2fb5 [file] [log] [blame]
wanghaoaa1f2f92013-10-10 11:30:37 +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
Zhi Kun Liubb363a22013-11-28 18:47:39 +080016from tempest.api.volume import base
Andrea Frittolicd368412017-08-14 21:37:56 +010017from tempest.common import utils
jeremy.zhang7b0eaf82017-04-25 15:11:15 +080018from tempest.common import waiters
19from tempest import config
Ken'ichi Ohmichi6b279c72017-01-27 18:26:59 -080020from tempest.lib import decorators
jeremy.zhang7b0eaf82017-04-25 15:11:15 +080021
22CONF = config.CONF
wanghaoaa1f2f92013-10-10 11:30:37 +080023
24
Ken'ichi Ohmichie8afb8c2017-03-27 11:25:37 -070025class VolumesActionsTest(base.BaseVolumeAdminTest):
zhuflfcfb31b2020-04-20 15:41:07 +080026 """Test volume actions"""
27
Ghanshyam Mann7d91b692020-03-03 10:21:50 -060028 create_default_network = True
wanghaoaa1f2f92013-10-10 11:30:37 +080029
wanghao9d3d6cb2013-11-12 15:10:10 +080030 def _create_reset_and_force_delete_temp_volume(self, status=None):
31 # Create volume, reset volume status, and force delete temp volume
zhufl89403442016-10-09 16:19:28 +080032 temp_volume = self.create_volume()
wanghao9d3d6cb2013-11-12 15:10:10 +080033 if status:
zhufl7e75fcb2016-10-17 09:00:40 +080034 self.admin_volume_client.reset_volume_status(
35 temp_volume['id'], status=status)
jeremy.zhang4b974462017-08-24 10:13:37 +080036 waiters.wait_for_volume_resource_status(
37 self.volumes_client, temp_volume['id'], status)
Joseph Lanoux6809bab2014-12-18 14:57:18 +000038 self.admin_volume_client.force_delete_volume(temp_volume['id'])
lkuchlanb21fc572016-11-28 12:25:22 +020039 self.volumes_client.wait_for_resource_deletion(temp_volume['id'])
wanghao9d3d6cb2013-11-12 15:10:10 +080040
Ken'ichi Ohmichi6b279c72017-01-27 18:26:59 -080041 @decorators.idempotent_id('d063f96e-a2e0-4f34-8b8a-395c42de1845')
wanghaoaa1f2f92013-10-10 11:30:37 +080042 def test_volume_reset_status(self):
zhuflfcfb31b2020-04-20 15:41:07 +080043 """Test resetting volume status
44
45 Reset volume status to available->error->available->maintenance
46 """
zhufl7a682fe2016-12-15 17:20:00 +080047 volume = self.create_volume()
jeremy.zhang4b974462017-08-24 10:13:37 +080048 self.addCleanup(waiters.wait_for_volume_resource_status,
49 self.volumes_client, volume['id'], 'available')
Benny Kopilovba37ac42017-03-26 13:25:04 +030050 self.addCleanup(self.admin_volume_client.reset_volume_status,
51 volume['id'], status='available')
52 for status in ['error', 'available', 'maintenance']:
zhufl7a682fe2016-12-15 17:20:00 +080053 self.admin_volume_client.reset_volume_status(
54 volume['id'], status=status)
jeremy.zhang4b974462017-08-24 10:13:37 +080055 waiters.wait_for_volume_resource_status(
56 self.volumes_client, volume['id'], status)
wanghaoaa1f2f92013-10-10 11:30:37 +080057
Ken'ichi Ohmichi6b279c72017-01-27 18:26:59 -080058 @decorators.idempotent_id('21737d5a-92f2-46d7-b009-a0cc0ee7a570')
wanghao9d3d6cb2013-11-12 15:10:10 +080059 def test_volume_force_delete_when_volume_is_creating(self):
zhuflfcfb31b2020-04-20 15:41:07 +080060 """Test force deleting volume when its status is creating"""
wanghao9d3d6cb2013-11-12 15:10:10 +080061 self._create_reset_and_force_delete_temp_volume('creating')
62
Ken'ichi Ohmichi6b279c72017-01-27 18:26:59 -080063 @decorators.idempotent_id('db8d607a-aa2e-4beb-b51d-d4005c232011')
wanghao9d3d6cb2013-11-12 15:10:10 +080064 def test_volume_force_delete_when_volume_is_attaching(self):
zhuflfcfb31b2020-04-20 15:41:07 +080065 """Test force deleting volume when its status is attaching"""
wanghao9d3d6cb2013-11-12 15:10:10 +080066 self._create_reset_and_force_delete_temp_volume('attaching')
67
Ken'ichi Ohmichi6b279c72017-01-27 18:26:59 -080068 @decorators.idempotent_id('3e33a8a8-afd4-4d64-a86b-c27a185c5a4a')
wanghao9d3d6cb2013-11-12 15:10:10 +080069 def test_volume_force_delete_when_volume_is_error(self):
zhuflfcfb31b2020-04-20 15:41:07 +080070 """Test force deleting volume when its status is error"""
wanghao9d3d6cb2013-11-12 15:10:10 +080071 self._create_reset_and_force_delete_temp_volume('error')
Benny Kopilov63fe58f2017-03-26 13:31:46 +030072
73 @decorators.idempotent_id('b957cabd-1486-4e21-90cf-a9ed3c39dfb2')
74 def test_volume_force_delete_when_volume_is_maintenance(self):
zhuflfcfb31b2020-04-20 15:41:07 +080075 """Test force deleting volume when its status is maintenance"""
Benny Kopilov63fe58f2017-03-26 13:31:46 +030076 self._create_reset_and_force_delete_temp_volume('maintenance')
jeremy.zhang7b0eaf82017-04-25 15:11:15 +080077
78 @decorators.idempotent_id('d38285d9-929d-478f-96a5-00e66a115b81')
Andrea Frittolicd368412017-08-14 21:37:56 +010079 @utils.services('compute')
jeremy.zhang7b0eaf82017-04-25 15:11:15 +080080 def test_force_detach_volume(self):
zhuflfcfb31b2020-04-20 15:41:07 +080081 """Test force detaching volume when its status is error"""
jeremy.zhang7b0eaf82017-04-25 15:11:15 +080082 # Create a server and a volume
lkuchland4ecd0e2017-06-11 12:01:27 +030083 server_id = self.create_server()['id']
jeremy.zhang7b0eaf82017-04-25 15:11:15 +080084 volume_id = self.create_volume()['id']
85
86 # Attach volume
87 self.volumes_client.attach_volume(
88 volume_id,
89 instance_uuid=server_id,
90 mountpoint='/dev/%s' % CONF.compute.volume_device_name)
91 waiters.wait_for_volume_resource_status(self.volumes_client,
92 volume_id, 'in-use')
93 self.addCleanup(waiters.wait_for_volume_resource_status,
94 self.volumes_client, volume_id, 'available')
95 self.addCleanup(self.volumes_client.detach_volume, volume_id)
96 attachment = self.volumes_client.show_volume(
97 volume_id)['volume']['attachments'][0]
98
99 # Reset volume's status to error
100 self.admin_volume_client.reset_volume_status(volume_id, status='error')
jeremy.zhang4b974462017-08-24 10:13:37 +0800101 waiters.wait_for_volume_resource_status(self.volumes_client,
102 volume_id, 'error')
jeremy.zhang7b0eaf82017-04-25 15:11:15 +0800103
104 # Force detach volume
105 self.admin_volume_client.force_detach_volume(
106 volume_id, connector=None,
107 attachment_id=attachment['attachment_id'])
108 waiters.wait_for_volume_resource_status(self.volumes_client,
109 volume_id, 'available')
110 vol_info = self.volumes_client.show_volume(volume_id)['volume']
jeremy.zhang7b0eaf82017-04-25 15:11:15 +0800111 self.assertEmpty(vol_info['attachments'])