Files
tempest/tempest/api/volume/test_volume_delete_cascade.py
T
zhufl 3fdd35ae69 Adding description for testcases - volume part1
When Tempest is used in customer site, often we are required to
provide a testcase list including testcase names and descriptions.
Now no this kind of doc is available, so we can add descriptions
with the format of doc string for every testcase, so later we
can generata such a testcase description list.

There are hundreds of testcases missing descriptions, so we can
add them gradually, and limit the modified files in one patch
for the convenience of reviewing.

Change-Id: I9840ea976d290a8fd22d8c3bae17db9ed42f629a
partially-implements: blueprint testcase-description
2020-04-17 09:42:40 +08:00

108 lines
3.8 KiB
Python

# Copyright 2016 Red Hat, Inc.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import operator
import testtools
from tempest.api.volume import base
from tempest import config
from tempest.lib import decorators
CONF = config.CONF
class VolumesDeleteCascade(base.BaseVolumeTest):
"""Delete a volume with associated snapshots.
Cinder provides the ability to delete a volume with its
associated snapshots.
It is allow a volume and its snapshots to be removed in one operation
both for usability and performance reasons.
"""
@classmethod
def skip_checks(cls):
super(VolumesDeleteCascade, cls).skip_checks()
if not CONF.volume_feature_enabled.snapshot:
raise cls.skipException("Cinder snapshot feature disabled")
def _assert_cascade_delete(self, volume_id):
# Fetch volume ids
volume_list = [
vol['id'] for vol in
self.volumes_client.list_volumes()['volumes']
]
# Verify the parent volume was deleted
self.assertNotIn(volume_id, volume_list)
# List snapshots
snapshot_list = self.snapshots_client.list_snapshots()['snapshots']
# Verify snapshots were deleted
self.assertNotIn(volume_id, map(operator.itemgetter('volume_id'),
snapshot_list))
@decorators.idempotent_id('994e2d40-de37-46e8-b328-a58fba7e4a95')
def test_volume_delete_cascade(self):
"""Test deleting a volume with associated snapshots
The case validates the ability to delete a volume
with associated snapshots.
"""
# Create a volume
volume = self.create_volume()
for _ in range(2):
self.create_snapshot(volume['id'])
# Delete the parent volume with associated snapshots
self.volumes_client.delete_volume(volume['id'], cascade=True)
self.volumes_client.wait_for_resource_deletion(volume['id'])
# Verify volume parent was deleted with its associated snapshots
self._assert_cascade_delete(volume['id'])
@decorators.idempotent_id('59a77ede-609b-4ee8-9f68-fc3c6ffe97b5')
@testtools.skipIf(CONF.volume.storage_protocol == 'ceph',
'Skip because of Bug#1677525')
def test_volume_from_snapshot_cascade_delete(self):
"""Test deleting a volume with associated volume-associated snapshot
The case validates the ability to delete a volume with
associated snapshot while there is another volume created
from that snapshot.
"""
# Create a volume
volume = self.create_volume()
snapshot = self.create_snapshot(volume['id'])
# Create volume from snapshot
volume_snap = self.create_volume(snapshot_id=snapshot['id'])
volume_details = self.volumes_client.show_volume(
volume_snap['id'])['volume']
self.assertEqual(snapshot['id'], volume_details['snapshot_id'])
# Delete the parent volume with associated snapshot
self.volumes_client.delete_volume(volume['id'], cascade=True)
self.volumes_client.wait_for_resource_deletion(volume['id'])
# Verify volume parent was deleted with its associated snapshot
self._assert_cascade_delete(volume['id'])