Merge "Adding description for testcases - volume part5"
diff --git a/tempest/api/volume/admin/test_volume_quotas.py b/tempest/api/volume/admin/test_volume_quotas.py
index b073604..5ab8e87 100644
--- a/tempest/api/volume/admin/test_volume_quotas.py
+++ b/tempest/api/volume/admin/test_volume_quotas.py
@@ -22,6 +22,8 @@
class VolumeQuotasAdminTestJSON(base.BaseVolumeAdminTest):
+ """Test volume quotas with admin privilege"""
+
credentials = ['primary', 'alt', 'admin']
def setUp(self):
@@ -54,17 +56,19 @@
@decorators.idempotent_id('59eada70-403c-4cef-a2a3-a8ce2f1b07a0')
def test_list_quotas(self):
+ """Test showing volume quota set"""
# Check response schema
self.admin_quotas_client.show_quota_set(self.demo_tenant_id)
@decorators.idempotent_id('2be020a2-5fdd-423d-8d35-a7ffbc36e9f7')
def test_list_default_quotas(self):
+ """Test showing volume default quota set"""
# Check response schema
self.admin_quotas_client.show_default_quota_set(self.demo_tenant_id)
@decorators.idempotent_id('3d45c99e-cc42-4424-a56e-5cbd212b63a6')
def test_update_all_quota_resources_for_tenant(self):
- # Admin can update all the resource quota limits for a tenant
+ """Test admin can update all the volume quota limits for a project"""
new_quota_set = {'gigabytes': 1009,
'volumes': 11,
'snapshots': 11,
@@ -87,14 +91,14 @@
@decorators.idempotent_id('18c51ae9-cb03-48fc-b234-14a19374dbed')
def test_show_quota_usage(self):
+ """Test showing volume quota usage"""
# Check response schema
self.admin_quotas_client.show_quota_set(
self.os_admin.credentials.tenant_id, params={'usage': True})
@decorators.idempotent_id('874b35a9-51f1-4258-bec5-cd561b6690d3')
def test_delete_quota(self):
- # Admin can delete the resource quota set for a project
-
+ """Test admin can delete the volume quota set for a project"""
self.addCleanup(self.admin_quotas_client.update_quota_set,
self.demo_tenant_id, **self.cleanup_quota_set)
@@ -112,6 +116,7 @@
@decorators.idempotent_id('ae8b6091-48ad-4bfa-a188-bbf5cc02115f')
def test_quota_usage(self):
+ """Test volume quota usage is updated after creating volume"""
quota_usage = self.admin_quotas_client.show_quota_set(
self.demo_tenant_id, params={'usage': True})['quota_set']
@@ -131,6 +136,7 @@
@decorators.idempotent_id('8911036f-9d54-4720-80cc-a1c9796a8805')
def test_quota_usage_after_volume_transfer(self):
+ """Test volume quota usage is updated after transferring volume"""
# Create a volume for transfer
volume = self.create_volume()
self.addCleanup(self.delete_volume,
diff --git a/tempest/api/volume/admin/test_volume_retype.py b/tempest/api/volume/admin/test_volume_retype.py
index 18e0b9b..5c14d52 100644
--- a/tempest/api/volume/admin/test_volume_retype.py
+++ b/tempest/api/volume/admin/test_volume_retype.py
@@ -88,6 +88,7 @@
class VolumeRetypeWithMigrationTest(VolumeRetypeTest):
+ """Test volume retype with migration"""
@classmethod
def skip_checks(cls):
@@ -134,11 +135,25 @@
@decorators.idempotent_id('a1a41f3f-9dad-493e-9f09-3ff197d477cd')
def test_available_volume_retype_with_migration(self):
+ """Test volume retype with migration
+
+ 1. Create volume1 with volume_type1
+ 2. Retype volume1 to volume_type2 with migration_policy='on-demand'
+ 3. Check volume1's volume_type is changed to volume_type2, and
+ 'os-vol-host-attr:host' in the volume info is changed.
+ """
src_vol = self.create_volume(volume_type=self.src_vol_type['name'])
self._retype_volume(src_vol, migration_policy='on-demand')
@decorators.idempotent_id('d0d9554f-e7a5-4104-8973-f35b27ccb60d')
def test_volume_from_snapshot_retype_with_migration(self):
+ """Test volume created from snapshot retype with migration
+
+ 1. Create volume1 from snapshot with volume_type1
+ 2. Retype volume1 to volume_type2 with migration_policy='on-demand'
+ 3. Check volume1's volume_type is changed to volume_type2, and
+ 'os-vol-host-attr:host' in the volume info is changed.
+ """
src_vol = self._create_volume_from_snapshot()
# Migrate the volume from snapshot to the second backend
@@ -146,6 +161,7 @@
class VolumeRetypeWithoutMigrationTest(VolumeRetypeTest):
+ """Test volume retype without migration"""
@classmethod
def resource_setup(cls):
@@ -174,6 +190,13 @@
@decorators.idempotent_id('b90412ee-465d-46e9-b249-ec84a47d5f25')
def test_available_volume_retype(self):
+ """Test volume retype without migration
+
+ 1. Create volume1 with volume_type1
+ 2. Retype volume1 to volume_type2 with migration_policy='never'
+ 3. Check volume1's volume_type is changed to volume_type2, and
+ 'os-vol-host-attr:host' in the volume info is not changed.
+ """
src_vol = self.create_volume(volume_type=self.src_vol_type['name'])
# Retype the volume from snapshot
diff --git a/tempest/api/volume/admin/test_volume_services_negative.py b/tempest/api/volume/admin/test_volume_services_negative.py
index 3a863a1..bf39be5 100644
--- a/tempest/api/volume/admin/test_volume_services_negative.py
+++ b/tempest/api/volume/admin/test_volume_services_negative.py
@@ -19,6 +19,7 @@
class VolumeServicesNegativeTest(base.BaseVolumeAdminTest):
+ """Negative tests of volume services"""
@classmethod
def resource_setup(cls):
@@ -30,6 +31,7 @@
@decorators.attr(type='negative')
@decorators.idempotent_id('3246ce65-ba70-4159-aa3b-082c28e4b484')
def test_enable_service_with_invalid_host(self):
+ """Test enabling volume service with invalid host should fail"""
self.assertRaises(lib_exc.NotFound,
self.admin_volume_services_client.enable_service,
host='invalid_host', binary=self.binary)
@@ -37,6 +39,7 @@
@decorators.attr(type='negative')
@decorators.idempotent_id('c571f179-c6e6-4c50-a0ab-368b628a8ac1')
def test_disable_service_with_invalid_binary(self):
+ """Test disabling volume service with invalid binary should fail"""
self.assertRaises(lib_exc.NotFound,
self.admin_volume_services_client.disable_service,
host=self.host, binary='invalid_binary')
@@ -44,6 +47,7 @@
@decorators.attr(type='negative')
@decorators.idempotent_id('77767b36-5e8f-4c68-a0b5-2308cc21ec64')
def test_disable_log_reason_with_no_reason(self):
+ """Test disabling volume service with none reason should fail"""
self.assertRaises(lib_exc.BadRequest,
self.admin_volume_services_client.disable_log_reason,
host=self.host, binary=self.binary,
@@ -52,6 +56,7 @@
@decorators.attr(type='negative')
@decorators.idempotent_id('712bfab8-1f44-4eb5-a632-fa70bf78f05e')
def test_freeze_host_with_invalid_host(self):
+ """Test freezing volume service with invalid host should fail"""
self.assertRaises(lib_exc.BadRequest,
self.admin_volume_services_client.freeze_host,
host='invalid_host')
@@ -59,6 +64,7 @@
@decorators.attr(type='negative')
@decorators.idempotent_id('7c6287c9-d655-47e1-9a11-76f6657a6dce')
def test_thaw_host_with_invalid_host(self):
+ """Test thawing volume service with invalid host should fail"""
self.assertRaises(lib_exc.BadRequest,
self.admin_volume_services_client.thaw_host,
host='invalid_host')
diff --git a/tempest/api/volume/admin/test_volume_snapshot_quotas_negative.py b/tempest/api/volume/admin/test_volume_snapshot_quotas_negative.py
index ff5e7e2..10fd485 100644
--- a/tempest/api/volume/admin/test_volume_snapshot_quotas_negative.py
+++ b/tempest/api/volume/admin/test_volume_snapshot_quotas_negative.py
@@ -24,6 +24,7 @@
class VolumeSnapshotQuotasNegativeTestJSON(base.BaseVolumeAdminTest):
+ """Negative tests of volume snapshot quotas"""
@classmethod
def skip_checks(cls):
@@ -67,6 +68,7 @@
@decorators.attr(type='negative')
@decorators.idempotent_id('02bbf63f-6c05-4357-9d98-2926a94064ff')
def test_quota_volume_snapshots(self):
+ """Test creating snapshot exceeding snapshots quota should fail"""
self.assertRaises(lib_exc.OverLimit,
self.snapshots_client.create_snapshot,
volume_id=self.volume['id'])
@@ -74,6 +76,7 @@
@decorators.attr(type='negative')
@decorators.idempotent_id('c99a1ca9-6cdf-498d-9fdf-25832babef27')
def test_quota_volume_gigabytes_snapshots(self):
+ """Test creating snapshot exceeding gigabytes quota should fail"""
self.addCleanup(self.admin_quotas_client.update_quota_set,
self.demo_tenant_id,
**self.shared_quota_set)
diff --git a/tempest/api/volume/test_versions.py b/tempest/api/volume/test_versions.py
index 1e5c9de..e065bdf 100644
--- a/tempest/api/volume/test_versions.py
+++ b/tempest/api/volume/test_versions.py
@@ -17,14 +17,14 @@
class VersionsTest(base.BaseVolumeTest):
- """Test cinder versions"""
+ """Test volume versions"""
_api_version = 3
@decorators.idempotent_id('77838fc4-b49b-4c64-9533-166762517369')
@decorators.attr(type='smoke')
def test_list_versions(self):
- """Test listing cinder versions"""
+ """Test listing volume versions"""
# NOTE: The version data is checked on service client side
# with JSON-Schema validation. It is enough to just call
# the API here.
@@ -32,7 +32,7 @@
@decorators.idempotent_id('7f755ae2-caa9-4049-988c-331d8f7a579f')
def test_show_version(self):
- "Test getting cinder version details"
+ """Test getting volume version details"""
# NOTE: The version data is checked on service client side
# with JSON-Schema validation. So we will loop through each
# version and call show version.
diff --git a/tempest/api/volume/test_volume_absolute_limits.py b/tempest/api/volume/test_volume_absolute_limits.py
index 4d64a95..ccf0804 100644
--- a/tempest/api/volume/test_volume_absolute_limits.py
+++ b/tempest/api/volume/test_volume_absolute_limits.py
@@ -24,6 +24,7 @@
# it requires force_tenant_isolation=True, which need admin
# credentials to create non-admin users for the tests.
class AbsoluteLimitsTests(base.BaseVolumeAdminTest): # noqa: T115
+ """Test volume absolute limits"""
# avoid existing volumes of pre-defined tenant
force_tenant_isolation = True
@@ -43,7 +44,7 @@
@decorators.idempotent_id('8e943f53-e9d6-4272-b2e9-adcf2f7c29ad')
def test_get_volume_absolute_limits(self):
- # get volume limit for a tenant
+ """Test getting volume absolute limits"""
absolute_limits = \
self.volume_limits_client.show_limits(
)['limits']['absolute']
diff --git a/tempest/api/volume/test_volumes_backup.py b/tempest/api/volume/test_volumes_backup.py
index e3b8800..2e78114 100644
--- a/tempest/api/volume/test_volumes_backup.py
+++ b/tempest/api/volume/test_volumes_backup.py
@@ -27,6 +27,7 @@
class VolumesBackupsTest(base.BaseVolumeTest):
+ """Test volumes backup"""
@classmethod
def skip_checks(cls):
@@ -54,6 +55,16 @@
'ceph does not support arbitrary container names')
@decorators.idempotent_id('a66eb488-8ee1-47d4-8e9f-575a095728c6')
def test_volume_backup_create_get_detailed_list_restore_delete(self):
+ """Test create/get/list/restore/delete volume backup
+
+ 1. Create volume1 with metadata
+ 2. Create backup1 from volume1
+ 3. Show backup1
+ 4. List backups with detail
+ 5. Restore backup1
+ 6. Verify backup1 has been restored successfully with the metadata
+ of volume1
+ """
# Create a volume with metadata
metadata = {"vol-meta1": "value1",
"vol-meta2": "value2",
@@ -89,7 +100,7 @@
restored_volume_metadata = self.volumes_client.show_volume(
restored_volume['volume_id'])['volume']['metadata']
- # Verify the backups has been restored successfully
+ # Verify the backup has been restored successfully
# with the metadata of the source volume.
self.assertThat(restored_volume_metadata.items(),
matchers.ContainsAll(metadata.items()))
@@ -120,6 +131,13 @@
@decorators.idempotent_id('2a8ba340-dff2-4511-9db7-646f07156b15')
@utils.services('image')
def test_bootable_volume_backup_and_restore(self):
+ """Test backuping and restoring a bootable volume
+
+ 1. Create volume1 from image
+ 2. Create backup1 from volume1
+ 3. Restore backup1
+ 4. Verify the restored backup volume is bootable
+ """
# Create volume from image
img_uuid = CONF.compute.image_ref
volume = self.create_volume(imageRef=img_uuid)
@@ -144,6 +162,7 @@
class VolumesBackupsV39Test(base.BaseVolumeTest):
+ """Test volumes backup with volume microversion greater than 3.8"""
_api_version = 3
min_microversion = '3.9'
@@ -157,6 +176,7 @@
@decorators.idempotent_id('9b374cbc-be5f-4d37-8848-7efb8a873dcc')
def test_update_backup(self):
+ """Test updating backup's name and description"""
# Create volume and backup
volume = self.create_volume()
backup = self.create_backup(volume_id=volume['id'])
diff --git a/tempest/api/volume/test_volumes_snapshots.py b/tempest/api/volume/test_volumes_snapshots.py
index bf221e8..fd2e7c4 100644
--- a/tempest/api/volume/test_volumes_snapshots.py
+++ b/tempest/api/volume/test_volumes_snapshots.py
@@ -25,6 +25,8 @@
class VolumesSnapshotTestJSON(base.BaseVolumeTest):
+ """Test volume snapshots"""
+
create_default_network = True
@classmethod
@@ -41,6 +43,7 @@
@decorators.idempotent_id('8567b54c-4455-446d-a1cf-651ddeaa3ff2')
@utils.services('compute')
def test_snapshot_create_delete_with_volume_in_use(self):
+ """Test create/delete snapshot from volume attached to server"""
# Create a test instance
server = self.create_server()
# NOTE(zhufl) Here we create volume from self.image_ref for adding
@@ -66,7 +69,13 @@
@decorators.idempotent_id('5210a1de-85a0-11e6-bb21-641c676a5d61')
@utils.services('compute')
def test_snapshot_create_offline_delete_online(self):
+ """Test creating snapshots when volume is detached and attached
+ 1. Create snapshot1 from volume1(not attached to any server)
+ 2. Attach volume1 to server1
+ 3. Create snapshot2 and snapshot3 from volume1
+ 4. Delete snapshot3, snapshot1, snapshot2
+ """
# Create a snapshot while it is not attached
snapshot1 = self.create_snapshot(self.volume_origin['id'])
@@ -74,7 +83,7 @@
server = self.create_server()
self.attach_volume(server['id'], self.volume_origin['id'])
- # Now that the volume is attached, create another snapshots
+ # Now that the volume is attached, create other snapshots
snapshot2 = self.create_snapshot(self.volume_origin['id'], force=True)
snapshot3 = self.create_snapshot(self.volume_origin['id'], force=True)
@@ -86,6 +95,7 @@
@decorators.idempotent_id('2a8abbe4-d871-46db-b049-c41f5af8216e')
def test_snapshot_create_get_list_update_delete(self):
+ """Test create/get/list/update/delete snapshot"""
# Create a snapshot with metadata
metadata = {"snap-meta1": "value1",
"snap-meta2": "value2",
@@ -156,19 +166,25 @@
@decorators.idempotent_id('677863d1-3142-456d-b6ac-9924f667a7f4')
def test_volume_from_snapshot(self):
- # Creates a volume from a snapshot passing a size
- # different from the source
+ """Test creating volume from snapshot with extending size"""
self._create_volume_from_snapshot(extra_size=1)
@decorators.idempotent_id('053d8870-8282-4fff-9dbb-99cb58bb5e0a')
def test_volume_from_snapshot_no_size(self):
- # Creates a volume from a snapshot defaulting to original size
+ """Test creating volume from snapshot with original size"""
self._create_volume_from_snapshot()
@decorators.idempotent_id('bbcfa285-af7f-479e-8c1a-8c34fc16543c')
@testtools.skipUnless(CONF.volume_feature_enabled.backup,
"Cinder backup is disabled")
def test_snapshot_backup(self):
+ """Test creating backup from snapshot and volume
+
+ 1. Create snapshot1 from volume1
+ 2. Create backup from volume1 and snapshot1
+ 3. Check the created backup's volume is volume1 and snapshot
+ is snapshot1
+ """
# Create a snapshot
snapshot = self.create_snapshot(volume_id=self.volume_origin['id'])
diff --git a/tempest/api/volume/test_volumes_snapshots_list.py b/tempest/api/volume/test_volumes_snapshots_list.py
index f4f039c..77627bc 100644
--- a/tempest/api/volume/test_volumes_snapshots_list.py
+++ b/tempest/api/volume/test_volumes_snapshots_list.py
@@ -18,6 +18,7 @@
class VolumesSnapshotListTestJSON(base.BaseVolumeTest):
+ """Test listing volume snapshots"""
@classmethod
def skip_checks(cls):
@@ -50,6 +51,7 @@
def _list_snapshots_by_param_limit(self, limit, expected_elements):
"""list snapshots by limit param"""
+
# Get snapshots list using limit parameter
fetched_snap_list = self.snapshots_client.list_snapshots(
limit=limit)['snapshots']
@@ -58,7 +60,8 @@
@decorators.idempotent_id('59f41f43-aebf-48a9-ab5d-d76340fab32b')
def test_snapshots_list_with_params(self):
- """list snapshots with params."""
+ """Test listing snapshots with params"""
+
# Verify list snapshots by display_name filter
params = {'name': self.snapshot['name']}
self._list_by_param_values_and_assert(**params)
@@ -74,7 +77,8 @@
@decorators.idempotent_id('220a1022-1fcd-4a74-a7bd-6b859156cda2')
def test_snapshots_list_details_with_params(self):
- """list snapshot details with params."""
+ """Test listing snapshot details with params"""
+
# Verify list snapshot details by display_name filter
params = {'name': self.snapshot['name']}
self._list_by_param_values_and_assert(with_detail=True, **params)
@@ -88,24 +92,29 @@
@decorators.idempotent_id('db4d8e0a-7a2e-41cc-a712-961f6844e896')
def test_snapshot_list_param_limit(self):
- # List returns limited elements
+ """Test listing snapshot with limit returns the limited elements
+
+ If listing snapshots with limit=1, then 1 snapshot is returned.
+ """
self._list_snapshots_by_param_limit(limit=1, expected_elements=1)
@decorators.idempotent_id('a1427f61-420e-48a5-b6e3-0b394fa95400')
def test_snapshot_list_param_limit_equals_infinite(self):
- # List returns all elements when request limit exceeded
- # snapshots number
+ """Test listing snapshot with infinite limit
+
+ If listing snapshots with limit greater than the count of all
+ snapshots, then all snapshots are returned.
+ """
snap_list = self.snapshots_client.list_snapshots()['snapshots']
self._list_snapshots_by_param_limit(limit=100000,
expected_elements=len(snap_list))
@decorators.idempotent_id('e3b44b7f-ae87-45b5-8a8c-66110eb24d0a')
def test_snapshot_list_param_limit_equals_zero(self):
- # List returns zero elements
+ """Test listing snapshot with zero limit should return empty list"""
self._list_snapshots_by_param_limit(limit=0, expected_elements=0)
def _list_snapshots_param_sort(self, sort_key, sort_dir):
- """list snapshots by sort param"""
snap_list = self.snapshots_client.list_snapshots(
sort_key=sort_key, sort_dir=sort_dir)['snapshots']
self.assertNotEmpty(snap_list)
@@ -122,33 +131,42 @@
@decorators.idempotent_id('c5513ada-64c1-4d28-83b9-af3307ec1388')
def test_snapshot_list_param_sort_id_asc(self):
+ """Test listing snapshots sort by id ascendingly"""
self._list_snapshots_param_sort(sort_key='id', sort_dir='asc')
@decorators.idempotent_id('8a7fe058-0b41-402a-8afd-2dbc5a4a718b')
def test_snapshot_list_param_sort_id_desc(self):
+ """Test listing snapshots sort by id descendingly"""
self._list_snapshots_param_sort(sort_key='id', sort_dir='desc')
@decorators.idempotent_id('4052c3a0-2415-440a-a8cc-305a875331b0')
def test_snapshot_list_param_sort_created_at_asc(self):
+ """Test listing snapshots sort by created_at ascendingly"""
self._list_snapshots_param_sort(sort_key='created_at', sort_dir='asc')
@decorators.idempotent_id('dcbbe24a-f3c0-4ec8-9274-55d48db8d1cf')
def test_snapshot_list_param_sort_created_at_desc(self):
+ """Test listing snapshots sort by created_at descendingly"""
self._list_snapshots_param_sort(sort_key='created_at', sort_dir='desc')
@decorators.idempotent_id('d58b5fed-0c37-42d3-8c5d-39014ac13c00')
def test_snapshot_list_param_sort_name_asc(self):
+ """Test listing snapshots sort by display_name ascendingly"""
self._list_snapshots_param_sort(sort_key='display_name',
sort_dir='asc')
@decorators.idempotent_id('96ba6f4d-1f18-47e1-b4bc-76edc6c21250')
def test_snapshot_list_param_sort_name_desc(self):
+ """Test listing snapshots sort by display_name descendingly"""
self._list_snapshots_param_sort(sort_key='display_name',
sort_dir='desc')
@decorators.idempotent_id('05489dde-44bc-4961-a1f5-3ce7ee7824f7')
def test_snapshot_list_param_marker(self):
- # The list of snapshots should end before the provided marker
+ """Test listing snapshots with marker
+
+ The list of snapshots should end before the provided marker
+ """
snap_list = self.snapshots_client.list_snapshots()['snapshots']
# list_snapshots will take the reverse order as they are created.
snapshot_id_list = [snap['id'] for snap in snap_list][::-1]
@@ -163,6 +181,13 @@
@decorators.idempotent_id('ca96d551-17c6-4e11-b0e8-52d3bb8a63c7')
def test_snapshot_list_param_offset(self):
+ """Test listing snapshots with offset and limit
+
+ If listing snapshots with offset=2 and limit=3, then at most 3(limit)
+ snapshots located in the position 2(offset) in the all snapshots list
+ should be returned.
+ (The items in the all snapshots list start from position 0.)
+ """
params = {'offset': 2, 'limit': 3}
snap_list = self.snapshots_client.list_snapshots(**params)['snapshots']
# Verify the list of snapshots skip offset=2 from the first element
diff --git a/tempest/api/volume/test_volumes_snapshots_negative.py b/tempest/api/volume/test_volumes_snapshots_negative.py
index 0453c0a..9c36dc6 100644
--- a/tempest/api/volume/test_volumes_snapshots_negative.py
+++ b/tempest/api/volume/test_volumes_snapshots_negative.py
@@ -20,6 +20,7 @@
class VolumesSnapshotNegativeTestJSON(base.BaseVolumeTest):
+ """Negative tests of volume snapshot"""
@classmethod
def skip_checks(cls):
@@ -30,7 +31,7 @@
@decorators.attr(type=['negative'])
@decorators.idempotent_id('e3e466af-70ab-4f4b-a967-ab04e3532ea7')
def test_create_snapshot_with_nonexistent_volume_id(self):
- # Create a snapshot with nonexistent volume id
+ """Test creating snapshot from non existent volume should fail"""
s_name = data_utils.rand_name(self.__class__.__name__ + '-snap')
self.assertRaises(lib_exc.NotFound,
self.snapshots_client.create_snapshot,
@@ -40,6 +41,7 @@
@decorators.attr(type=['negative'])
@decorators.idempotent_id('bb9da53e-d335-4309-9c15-7e76fd5e4d6d')
def test_create_snapshot_without_passing_volume_id(self):
+ """Test creating snapshot without passing volume_id should fail"""
# Create a snapshot without passing volume id
s_name = data_utils.rand_name(self.__class__.__name__ + '-snap')
self.assertRaises(lib_exc.NotFound,
@@ -49,6 +51,10 @@
@decorators.attr(type=['negative'])
@decorators.idempotent_id('677863d1-34f9-456d-b6ac-9924f667a7f4')
def test_volume_from_snapshot_decreasing_size(self):
+ """Test creating volume from snapshot with decreasing size
+
+ creating volume from snapshot with decreasing size should fail.
+ """
# Creates a volume a snapshot passing a size different from the source
src_size = CONF.volume.volume_size * 2
@@ -64,6 +70,7 @@
@decorators.attr(type=['negative'])
@decorators.idempotent_id('8fd92339-e22f-4591-86b4-1e2215372a40')
def test_list_snapshot_invalid_param_limit(self):
+ """Test listing snapshots with invalid limit param should fail"""
self.assertRaises(lib_exc.BadRequest,
self.snapshots_client.list_snapshots,
limit='invalid')
@@ -71,6 +78,7 @@
@decorators.attr(type=['negative'])
@decorators.idempotent_id('27b5f37f-bf69-4e8c-986e-c44f3d6819b8')
def test_list_snapshots_invalid_param_sort(self):
+ """Test listing snapshots with invalid sort key should fail"""
self.assertRaises(lib_exc.BadRequest,
self.snapshots_client.list_snapshots,
sort_key='invalid')
@@ -78,6 +86,7 @@
@decorators.attr(type=['negative'])
@decorators.idempotent_id('b68deeda-ca79-4a32-81af-5c51179e553a')
def test_list_snapshots_invalid_param_marker(self):
+ """Test listing snapshots with invalid marker should fail"""
self.assertRaises(lib_exc.NotFound,
self.snapshots_client.list_snapshots,
marker=data_utils.rand_uuid())