Adding description for testcases - compute part8
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: I858158cf4fb5e75208177f2c49b4e7f350f09a1e partially-implements: blueprint testcase-description
This commit is contained in:
parent
24961f6244
commit
e4fb4229c9
|
@ -22,6 +22,7 @@ CONF = config.CONF
|
|||
|
||||
|
||||
class ImagesOneServerTestJSON(base.BaseV2ComputeTest):
|
||||
"""Test server images API"""
|
||||
|
||||
@classmethod
|
||||
def resource_setup(cls):
|
||||
|
@ -54,6 +55,7 @@ class ImagesOneServerTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('3731d080-d4c5-4872-b41a-64d0d0021314')
|
||||
def test_create_delete_image(self):
|
||||
"""Test create/delete server image"""
|
||||
if self.is_requested_microversion_compatible('2.35'):
|
||||
MIN_DISK = 'minDisk'
|
||||
MIN_RAM = 'minRam'
|
||||
|
@ -93,6 +95,7 @@ class ImagesOneServerTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('3b7c6fe4-dfe7-477c-9243-b06359db51e6')
|
||||
def test_create_image_specify_multibyte_character_image_name(self):
|
||||
"""Test creating server image with multibyte character image name"""
|
||||
# prefix character is:
|
||||
# http://unicode.org/cldr/utility/character.jsp?a=20A1
|
||||
|
||||
|
|
|
@ -30,6 +30,8 @@ LOG = logging.getLogger(__name__)
|
|||
|
||||
|
||||
class ImagesOneServerNegativeTestJSON(base.BaseV2ComputeTest):
|
||||
"""Negative tests of server images"""
|
||||
|
||||
create_default_network = True
|
||||
|
||||
def tearDown(self):
|
||||
|
@ -87,7 +89,7 @@ class ImagesOneServerNegativeTestJSON(base.BaseV2ComputeTest):
|
|||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('55d1d38c-dd66-4933-9c8e-7d92aeb60ddc')
|
||||
def test_create_image_specify_invalid_metadata(self):
|
||||
# Return an error when creating image with invalid metadata
|
||||
"""Test creating server image with invalid metadata should fail"""
|
||||
meta = {'': ''}
|
||||
self.assertRaises(lib_exc.BadRequest, self.create_image_from_server,
|
||||
self.server_id, metadata=meta)
|
||||
|
@ -95,7 +97,7 @@ class ImagesOneServerNegativeTestJSON(base.BaseV2ComputeTest):
|
|||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('3d24d11f-5366-4536-bd28-cff32b748eca')
|
||||
def test_create_image_specify_metadata_over_limits(self):
|
||||
# Return an error when creating image with meta data over 255 chars
|
||||
"""Test creating server image with metadata over 255 should fail"""
|
||||
meta = {'a' * 256: 'b' * 256}
|
||||
self.assertRaises(lib_exc.BadRequest, self.create_image_from_server,
|
||||
self.server_id, metadata=meta)
|
||||
|
@ -103,8 +105,11 @@ class ImagesOneServerNegativeTestJSON(base.BaseV2ComputeTest):
|
|||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('0460efcf-ee88-4f94-acef-1bf658695456')
|
||||
def test_create_second_image_when_first_image_is_being_saved(self):
|
||||
# Disallow creating another image when first image is being saved
|
||||
"""Test creating another server image when first image is being saved
|
||||
|
||||
Creating another server image when first image is being saved is
|
||||
not allowed.
|
||||
"""
|
||||
# Create first snapshot
|
||||
image = self.create_image_from_server(self.server_id)
|
||||
self.addCleanup(self._reset_server)
|
||||
|
@ -123,8 +128,7 @@ class ImagesOneServerNegativeTestJSON(base.BaseV2ComputeTest):
|
|||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('084f0cbc-500a-4963-8a4e-312905862581')
|
||||
def test_create_image_specify_name_over_character_limit(self):
|
||||
# Return an error if snapshot name over 255 characters is passed
|
||||
|
||||
"""Test creating server image with image name over 255 should fail"""
|
||||
snapshot_name = ('a' * 256)
|
||||
self.assertRaises(lib_exc.BadRequest,
|
||||
self.compute_images_client.create_image,
|
||||
|
@ -133,8 +137,7 @@ class ImagesOneServerNegativeTestJSON(base.BaseV2ComputeTest):
|
|||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('0894954d-2db2-4195-a45b-ffec0bc0187e')
|
||||
def test_delete_image_that_is_not_yet_active(self):
|
||||
# Return an error while trying to delete an image what is creating
|
||||
|
||||
"""Test deleting a non-active server image should fail"""
|
||||
image = self.create_image_from_server(self.server_id)
|
||||
if api_version_utils.compare_version_header_to_response(
|
||||
"OpenStack-API-Version", "compute 2.45", image.response, "lt"):
|
||||
|
|
|
@ -31,6 +31,8 @@ CONF = config.CONF
|
|||
|
||||
|
||||
class ListImageFiltersTestJSON(base.BaseV2ComputeTest):
|
||||
"""Test listing server images with compute microversion less than 2.36"""
|
||||
|
||||
max_microversion = '2.35'
|
||||
|
||||
@classmethod
|
||||
|
@ -129,8 +131,11 @@ class ListImageFiltersTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('a3f5b513-aeb3-42a9-b18e-f091ef73254d')
|
||||
def test_list_images_filter_by_status(self):
|
||||
# The list of images should contain only images with the
|
||||
# provided status
|
||||
"""Test listing server images filtered by image status
|
||||
|
||||
The list of images should contain only images with the
|
||||
provided image status.
|
||||
"""
|
||||
params = {'status': 'ACTIVE'}
|
||||
images = self.client.list_images(**params)['images']
|
||||
|
||||
|
@ -140,8 +145,11 @@ class ListImageFiltersTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('33163b73-79f5-4d07-a7ea-9213bcc468ff')
|
||||
def test_list_images_filter_by_name(self):
|
||||
# List of all images should contain the expected images filtered
|
||||
# by name
|
||||
"""Test listing server images filtered by image name
|
||||
|
||||
The list of images should contain only images with the
|
||||
provided image name.
|
||||
"""
|
||||
params = {'name': self.image1['name']}
|
||||
images = self.client.list_images(**params)['images']
|
||||
|
||||
|
@ -153,7 +161,11 @@ class ListImageFiltersTestJSON(base.BaseV2ComputeTest):
|
|||
@testtools.skipUnless(CONF.compute_feature_enabled.snapshot,
|
||||
'Snapshotting is not available.')
|
||||
def test_list_images_filter_by_server_id(self):
|
||||
# The images should contain images filtered by server id
|
||||
"""Test listing images filtered by server id
|
||||
|
||||
The list of images should contain only images with the
|
||||
provided server id.
|
||||
"""
|
||||
params = {'server': self.server1['id']}
|
||||
images = self.client.list_images(**params)['images']
|
||||
|
||||
|
@ -169,7 +181,11 @@ class ListImageFiltersTestJSON(base.BaseV2ComputeTest):
|
|||
@testtools.skipUnless(CONF.compute_feature_enabled.snapshot,
|
||||
'Snapshotting is not available.')
|
||||
def test_list_images_filter_by_server_ref(self):
|
||||
# The list of servers should be filtered by server ref
|
||||
"""Test listing images filtered by server link href
|
||||
|
||||
The list of images should contain only images with the
|
||||
provided server link href.
|
||||
"""
|
||||
server_links = self.server2['links']
|
||||
|
||||
# Try all server link types
|
||||
|
@ -188,7 +204,11 @@ class ListImageFiltersTestJSON(base.BaseV2ComputeTest):
|
|||
@testtools.skipUnless(CONF.compute_feature_enabled.snapshot,
|
||||
'Snapshotting is not available.')
|
||||
def test_list_images_filter_by_type(self):
|
||||
# The list of servers should be filtered by image type
|
||||
"""Test listing images filtered by image type
|
||||
|
||||
The list of images should contain only images with the
|
||||
provided image type.
|
||||
"""
|
||||
params = {'type': 'snapshot'}
|
||||
images = self.client.list_images(**params)['images']
|
||||
|
||||
|
@ -202,13 +222,22 @@ class ListImageFiltersTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('3a484ca9-67ba-451e-b494-7fcf28d32d62')
|
||||
def test_list_images_limit_results(self):
|
||||
# Verify only the expected number of results are returned
|
||||
"""Test listing images with limited count
|
||||
|
||||
If we use limit=1 when listing images, then only 1 image should be
|
||||
returned.
|
||||
"""
|
||||
params = {'limit': '1'}
|
||||
images = self.client.list_images(**params)['images']
|
||||
self.assertEqual(1, len([x for x in images if 'id' in x]))
|
||||
|
||||
@decorators.idempotent_id('18bac3ae-da27-436c-92a9-b22474d13aab')
|
||||
def test_list_images_filter_by_changes_since(self):
|
||||
"""Test listing images filtered by changes-since
|
||||
|
||||
The list of images should contain only images updated since the
|
||||
provided changes-since value.
|
||||
"""
|
||||
# Verify only updated images are returned in the detailed list
|
||||
|
||||
# Becoming ACTIVE will modify the updated time
|
||||
|
@ -220,8 +249,11 @@ class ListImageFiltersTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('9b0ea018-6185-4f71-948a-a123a107988e')
|
||||
def test_list_images_with_detail_filter_by_status(self):
|
||||
# Detailed list of all images should only contain images
|
||||
# with the provided status
|
||||
"""Test listing server images details filtered by image status
|
||||
|
||||
The list of images should contain only images with the
|
||||
provided image status.
|
||||
"""
|
||||
params = {'status': 'ACTIVE'}
|
||||
images = self.client.list_images(detail=True, **params)['images']
|
||||
|
||||
|
@ -231,8 +263,11 @@ class ListImageFiltersTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('644ea267-9bd9-4f3b-af9f-dffa02396a17')
|
||||
def test_list_images_with_detail_filter_by_name(self):
|
||||
# Detailed list of all images should contain the expected
|
||||
# images filtered by name
|
||||
"""Test listing server images details filtered by image name
|
||||
|
||||
The list of images should contain only images with the
|
||||
provided image name.
|
||||
"""
|
||||
params = {'name': self.image1['name']}
|
||||
images = self.client.list_images(detail=True, **params)['images']
|
||||
|
||||
|
@ -242,8 +277,11 @@ class ListImageFiltersTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('ba2fa9a9-b672-47cc-b354-3b4c0600e2cb')
|
||||
def test_list_images_with_detail_limit_results(self):
|
||||
# Verify only the expected number of results (with full details)
|
||||
# are returned
|
||||
"""Test listing images details with limited count
|
||||
|
||||
If we use limit=1 when listing images with full details, then only 1
|
||||
image should be returned.
|
||||
"""
|
||||
params = {'limit': '1'}
|
||||
images = self.client.list_images(detail=True, **params)['images']
|
||||
self.assertEqual(1, len(images))
|
||||
|
@ -252,7 +290,11 @@ class ListImageFiltersTestJSON(base.BaseV2ComputeTest):
|
|||
@testtools.skipUnless(CONF.compute_feature_enabled.snapshot,
|
||||
'Snapshotting is not available.')
|
||||
def test_list_images_with_detail_filter_by_server_ref(self):
|
||||
# Detailed list of servers should be filtered by server ref
|
||||
"""Test listing images details filtered by server link href
|
||||
|
||||
The list of images should contain only images with the
|
||||
provided server link href.
|
||||
"""
|
||||
server_links = self.server2['links']
|
||||
|
||||
# Try all server link types
|
||||
|
@ -271,7 +313,11 @@ class ListImageFiltersTestJSON(base.BaseV2ComputeTest):
|
|||
@testtools.skipUnless(CONF.compute_feature_enabled.snapshot,
|
||||
'Snapshotting is not available.')
|
||||
def test_list_images_with_detail_filter_by_type(self):
|
||||
# The detailed list of servers should be filtered by image type
|
||||
"""Test listing images details filtered by image type
|
||||
|
||||
The list of images should contain only images with the
|
||||
provided image type.
|
||||
"""
|
||||
params = {'type': 'snapshot'}
|
||||
images = self.client.list_images(detail=True, **params)['images']
|
||||
self.client.show_image(self.image_ref)
|
||||
|
@ -286,8 +332,11 @@ class ListImageFiltersTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('7d439e18-ac2e-4827-b049-7e18004712c4')
|
||||
def test_list_images_with_detail_filter_by_changes_since(self):
|
||||
# Verify an update image is returned
|
||||
"""Test listing images details filtered by changes-since
|
||||
|
||||
The list of images should contain only images updated since the
|
||||
provided changes-since value.
|
||||
"""
|
||||
# Becoming ACTIVE will modify the updated time
|
||||
# Filter by the image's created time
|
||||
params = {'changes-since': self.image1['created']}
|
||||
|
|
|
@ -22,6 +22,12 @@ CONF = config.CONF
|
|||
|
||||
|
||||
class ListImageFiltersNegativeTestJSON(base.BaseV2ComputeTest):
|
||||
"""Negative tests of listing images using compute images API
|
||||
|
||||
Negative tests of listing images using compute images API with
|
||||
microversion less than 2.36.
|
||||
"""
|
||||
|
||||
max_microversion = '2.35'
|
||||
|
||||
@classmethod
|
||||
|
@ -39,7 +45,7 @@ class ListImageFiltersNegativeTestJSON(base.BaseV2ComputeTest):
|
|||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('391b0440-432c-4d4b-b5da-c5096aa247eb')
|
||||
def test_get_nonexistent_image(self):
|
||||
# Check raises a NotFound
|
||||
"""Test getting a non existent image should fail"""
|
||||
nonexistent_image = data_utils.rand_uuid()
|
||||
self.assertRaises(lib_exc.NotFound, self.client.show_image,
|
||||
nonexistent_image)
|
||||
|
|
|
@ -19,6 +19,7 @@ from tempest.lib import decorators
|
|||
|
||||
|
||||
class ServerAddressesTestJSON(base.BaseV2ComputeTest):
|
||||
"""Test server addresses"""
|
||||
create_default_network = True
|
||||
|
||||
@classmethod
|
||||
|
@ -36,8 +37,10 @@ class ServerAddressesTestJSON(base.BaseV2ComputeTest):
|
|||
@decorators.idempotent_id('6eb718c0-02d9-4d5e-acd1-4e0c269cef39')
|
||||
@utils.services('network')
|
||||
def test_list_server_addresses(self):
|
||||
# All public and private addresses for
|
||||
# a server should be returned
|
||||
"""Test listing server address
|
||||
|
||||
All public and private addresses for a server should be returned.
|
||||
"""
|
||||
|
||||
addresses = self.client.list_addresses(self.server['id'])['addresses']
|
||||
|
||||
|
@ -51,8 +54,11 @@ class ServerAddressesTestJSON(base.BaseV2ComputeTest):
|
|||
@decorators.idempotent_id('87bbc374-5538-4f64-b673-2b0e4443cc30')
|
||||
@utils.services('network')
|
||||
def test_list_server_addresses_by_network(self):
|
||||
# Providing a network type should filter
|
||||
# the addresses return by that type
|
||||
"""Test listing server addresses filtered by network addresses
|
||||
|
||||
Providing a network address should filter the addresses same with
|
||||
the specified one.
|
||||
"""
|
||||
|
||||
addresses = self.client.list_addresses(self.server['id'])['addresses']
|
||||
|
||||
|
|
|
@ -32,11 +32,13 @@ from tempest.lib import decorators
|
|||
|
||||
|
||||
class ServerShowV254Test(base.BaseV2ComputeTest):
|
||||
"""Test servers API schema for compute microversion greater than 2.53"""
|
||||
min_microversion = '2.54'
|
||||
max_microversion = 'latest'
|
||||
|
||||
@decorators.idempotent_id('09170a98-4940-4637-add7-1a35121f1a5a')
|
||||
def test_rebuild_server(self):
|
||||
"""Test rebuilding server with microversion greater than 2.53"""
|
||||
server = self.create_test_server(wait_until='ACTIVE')
|
||||
keypair_name = data_utils.rand_name(
|
||||
self.__class__.__name__ + '-keypair')
|
||||
|
@ -52,11 +54,13 @@ class ServerShowV254Test(base.BaseV2ComputeTest):
|
|||
|
||||
|
||||
class ServerShowV257Test(base.BaseV2ComputeTest):
|
||||
"""Test servers API schema for compute microversion greater than 2.56"""
|
||||
min_microversion = '2.57'
|
||||
max_microversion = 'latest'
|
||||
|
||||
@decorators.idempotent_id('803df848-080a-4261-8f11-b020cd9b6f60')
|
||||
def test_rebuild_server(self):
|
||||
"""Test rebuilding server with microversion greater than 2.56"""
|
||||
server = self.create_test_server(wait_until='ACTIVE')
|
||||
user_data = "ZWNobyAiaGVsbG8gd29ybGQi"
|
||||
# Checking rebuild API response schema
|
||||
|
|
|
@ -24,6 +24,7 @@ CONF = config.CONF
|
|||
|
||||
|
||||
class VolumesSnapshotsTestJSON(base.BaseV2ComputeTest):
|
||||
"""Test volume snapshots with compute microversion less than 2.36"""
|
||||
|
||||
# These tests will fail with a 404 starting from microversion 2.36. For
|
||||
# more information, see:
|
||||
|
@ -48,6 +49,7 @@ class VolumesSnapshotsTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('cd4ec87d-7825-450d-8040-6e2068f2da8f')
|
||||
def test_volume_snapshot_create_get_list_delete(self):
|
||||
"""Test create/get/list/delete volume snapshot"""
|
||||
volume = self.create_volume()
|
||||
self.addCleanup(self.delete_volume, volume['id'])
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ CONF = config.CONF
|
|||
|
||||
|
||||
class VolumesGetTestJSON(base.BaseV2ComputeTest):
|
||||
"""Test compute volumes API with microversion less than 2.36"""
|
||||
|
||||
# These tests will fail with a 404 starting from microversion 2.36. For
|
||||
# more information, see:
|
||||
|
@ -45,7 +46,7 @@ class VolumesGetTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('f10f25eb-9775-4d9d-9cbe-1cf54dae9d5f')
|
||||
def test_volume_create_get_delete(self):
|
||||
# CREATE, GET, DELETE Volume
|
||||
"""Test create/get/delete volume"""
|
||||
v_name = data_utils.rand_name(self.__class__.__name__ + '-Volume')
|
||||
metadata = {'Type': 'work'}
|
||||
# Create volume
|
||||
|
|
|
@ -21,6 +21,8 @@ CONF = config.CONF
|
|||
|
||||
|
||||
class VolumesTestJSON(base.BaseV2ComputeTest):
|
||||
"""Test listing volumes with compute microversion less than 2.36"""
|
||||
|
||||
# NOTE: This test creates a number of 1G volumes. To run successfully,
|
||||
# ensure that the backing file for the volume group that Nova uses
|
||||
# has space for at least 3 1G volumes!
|
||||
|
@ -57,7 +59,7 @@ class VolumesTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('bc2dd1a0-15af-48e5-9990-f2e75a48325d')
|
||||
def test_volume_list(self):
|
||||
# Should return the list of Volumes
|
||||
"""Test listing volumes should return all volumes"""
|
||||
# Fetch all Volumes
|
||||
fetched_list = self.client.list_volumes()['volumes']
|
||||
# Now check if all the Volumes created in setup are in fetched list
|
||||
|
@ -72,7 +74,7 @@ class VolumesTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('bad0567a-5a4f-420b-851e-780b55bb867c')
|
||||
def test_volume_list_with_details(self):
|
||||
# Should return the list of Volumes with details
|
||||
"""Test listing volumes with detail should return all volumes"""
|
||||
# Fetch all Volumes
|
||||
fetched_list = self.client.list_volumes(detail=True)['volumes']
|
||||
# Now check if all the Volumes created in setup are in fetched list
|
||||
|
@ -87,7 +89,11 @@ class VolumesTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('1048ed81-2baf-487a-b284-c0622b86e7b8')
|
||||
def test_volume_list_param_limit(self):
|
||||
# Return the list of volumes based on limit set
|
||||
"""Test listing volumes based on limit set
|
||||
|
||||
If we list volumes with limit=2, then only 2 volumes should be
|
||||
returned.
|
||||
"""
|
||||
params = {'limit': 2}
|
||||
fetched_vol_list = self.client.list_volumes(**params)['volumes']
|
||||
|
||||
|
@ -96,7 +102,11 @@ class VolumesTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('33985568-4965-49d5-9bcc-0aa007ca5b7a')
|
||||
def test_volume_list_with_detail_param_limit(self):
|
||||
# Return the list of volumes with details based on limit set.
|
||||
"""Test listing volumes with detail based on limit set
|
||||
|
||||
If we list volumes with detail with limit=2, then only 2 volumes with
|
||||
detail should be returned.
|
||||
"""
|
||||
params = {'limit': 2}
|
||||
fetched_vol_list = self.client.list_volumes(detail=True,
|
||||
**params)['volumes']
|
||||
|
@ -106,7 +116,12 @@ class VolumesTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('51c22651-a074-4ea7-af0b-094f9331303e')
|
||||
def test_volume_list_param_offset_and_limit(self):
|
||||
# Return the list of volumes based on offset and limit set.
|
||||
"""Test listing volumes based on offset and limit set
|
||||
|
||||
If we list volumes with offset=1 and limit=1, then 1 volume located
|
||||
in the position 1 in the all volumes list should be returned.
|
||||
(The items in the all volumes list start from position 0.)
|
||||
"""
|
||||
# get all volumes list
|
||||
all_vol_list = self.client.list_volumes()['volumes']
|
||||
params = {'offset': 1, 'limit': 1}
|
||||
|
@ -123,7 +138,13 @@ class VolumesTestJSON(base.BaseV2ComputeTest):
|
|||
|
||||
@decorators.idempotent_id('06b6abc4-3f10-48e9-a7a1-3facc98f03e5')
|
||||
def test_volume_list_with_detail_param_offset_and_limit(self):
|
||||
# Return the list of volumes details based on offset and limit set.
|
||||
"""Test listing volumes with detail based on offset and limit set
|
||||
|
||||
If we list volumes with detail with offset=1 and limit=1, then 1
|
||||
volume with detail located in the position 1 in the all volumes list
|
||||
should be returned.
|
||||
(The items in the all volumes list start from position 0.)
|
||||
"""
|
||||
# get all volumes list
|
||||
all_vol_list = self.client.list_volumes(detail=True)['volumes']
|
||||
params = {'offset': 1, 'limit': 1}
|
||||
|
|
|
@ -23,6 +23,7 @@ CONF = config.CONF
|
|||
|
||||
|
||||
class VolumesNegativeTest(base.BaseV2ComputeTest):
|
||||
"""Negative tests of volumes with compute microversion less than 2.36"""
|
||||
|
||||
# These tests will fail with a 404 starting from microversion 2.36. For
|
||||
# more information, see:
|
||||
|
@ -44,7 +45,7 @@ class VolumesNegativeTest(base.BaseV2ComputeTest):
|
|||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('c03ea686-905b-41a2-8748-9635154b7c57')
|
||||
def test_volume_get_nonexistent_volume_id(self):
|
||||
# Negative: Should not be able to get details of nonexistent volume
|
||||
"""Test getting details of a non existent volume should fail"""
|
||||
# Creating a nonexistent volume id
|
||||
# Trying to GET a non existent volume
|
||||
self.assertRaises(lib_exc.NotFound, self.client.show_volume,
|
||||
|
@ -53,7 +54,7 @@ class VolumesNegativeTest(base.BaseV2ComputeTest):
|
|||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('54a34226-d910-4b00-9ef8-8683e6c55846')
|
||||
def test_volume_delete_nonexistent_volume_id(self):
|
||||
# Negative: Should not be able to delete nonexistent Volume
|
||||
"""Test deleting a nonexistent volume should fail"""
|
||||
# Creating nonexistent volume id
|
||||
# Trying to DELETE a non existent volume
|
||||
self.assertRaises(lib_exc.NotFound, self.client.delete_volume,
|
||||
|
@ -62,8 +63,7 @@ class VolumesNegativeTest(base.BaseV2ComputeTest):
|
|||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('5125ae14-152b-40a7-b3c5-eae15e9022ef')
|
||||
def test_create_volume_with_invalid_size(self):
|
||||
# Negative: Should not be able to create volume with invalid size
|
||||
# in request
|
||||
"""Test creating volume with invalid size should fail"""
|
||||
v_name = data_utils.rand_name(self.__class__.__name__ + '-Volume')
|
||||
metadata = {'Type': 'work'}
|
||||
self.assertRaises(lib_exc.BadRequest, self.client.create_volume,
|
||||
|
@ -72,8 +72,7 @@ class VolumesNegativeTest(base.BaseV2ComputeTest):
|
|||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('131cb3a1-75cc-4d40-b4c3-1317f64719b0')
|
||||
def test_create_volume_without_passing_size(self):
|
||||
# Negative: Should not be able to create volume without passing size
|
||||
# in request
|
||||
"""Test creating volume without specifying size should fail"""
|
||||
v_name = data_utils.rand_name(self.__class__.__name__ + '-Volume')
|
||||
metadata = {'Type': 'work'}
|
||||
self.assertRaises(lib_exc.BadRequest, self.client.create_volume,
|
||||
|
@ -82,7 +81,7 @@ class VolumesNegativeTest(base.BaseV2ComputeTest):
|
|||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('8cce995e-0a83-479a-b94d-e1e40b8a09d1')
|
||||
def test_create_volume_with_size_zero(self):
|
||||
# Negative: Should not be able to create volume with size zero
|
||||
"""Test creating volume with size=0 should fail"""
|
||||
v_name = data_utils.rand_name(self.__class__.__name__ + '-Volume')
|
||||
metadata = {'Type': 'work'}
|
||||
self.assertRaises(lib_exc.BadRequest, self.client.create_volume,
|
||||
|
@ -91,14 +90,13 @@ class VolumesNegativeTest(base.BaseV2ComputeTest):
|
|||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('62bab09a-4c03-4617-8cca-8572bc94af9b')
|
||||
def test_get_volume_without_passing_volume_id(self):
|
||||
# Negative: Should not be able to get volume when empty ID is passed
|
||||
"""Test getting volume details without volume id should fail"""
|
||||
self.assertRaises(lib_exc.NotFound, self.client.show_volume, '')
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('62972737-124b-4513-b6cf-2f019f178494')
|
||||
def test_delete_invalid_volume_id(self):
|
||||
# Negative: Should not be able to delete volume when invalid ID is
|
||||
# passed
|
||||
"""Test deleting volume with an invalid volume id should fail"""
|
||||
self.assertRaises(lib_exc.NotFound,
|
||||
self.client.delete_volume,
|
||||
data_utils.rand_name('invalid'))
|
||||
|
@ -106,5 +104,5 @@ class VolumesNegativeTest(base.BaseV2ComputeTest):
|
|||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('0d1417c5-4ae8-4c2c-adc5-5f0b864253e5')
|
||||
def test_delete_volume_without_passing_volume_id(self):
|
||||
# Negative: Should not be able to delete volume when empty ID is passed
|
||||
"""Test deleting volume without volume id should fail"""
|
||||
self.assertRaises(lib_exc.NotFound, self.client.delete_volume, '')
|
||||
|
|
Loading…
Reference in New Issue