summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorxudan <xudan16@huawei.com>2017-08-18 06:19:39 -0400
committerxudan <xudan16@huawei.com>2017-08-18 06:35:21 -0400
commit31f12d423b6b03be50d2fd98141904834ec8719b (patch)
treec5eb8b1c7f6e64205c650d80bddf123a753203de
parent474795c11c556dcd325559853fe7ed436a69418c (diff)
Test case specification for VIM Volume
1. Add the alias VIM Volume test cases into testscope. 2. Add test case specification for VIM Volume. Change-Id: I715a69aad380466659365cc554351efb4d6eb053 Signed-off-by: xudan <xudan16@huawei.com>
-rw-r--r--docs/testing/developer/testscope/index.rst63
-rw-r--r--docs/testing/user/testspecification/vimoperationsvolume/index.rst999
2 files changed, 1018 insertions, 44 deletions
diff --git a/docs/testing/developer/testscope/index.rst b/docs/testing/developer/testscope/index.rst
index 09901333..81f2cedc 100644
--- a/docs/testing/developer/testscope/index.rst
+++ b/docs/testing/developer/testscope/index.rst
@@ -272,12 +272,14 @@ Volume service availability zone operations with the Cinder v2 API
------------------------------------------------------------------
| tempest.api.volume.test_availability_zone.AvailabilityZoneV2TestJSON.test_get_availability_zone_list
+| tempest.api.volume.test_availability_zone.AvailabilityZoneTestJSON.test_get_availability_zone_list
Volume cloning operations with the Cinder v2 API
------------------------------------------------
| tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete_as_clone
+| tempest.api.volume.test_volumes_get.VolumesGetTest.test_volume_create_get_update_delete_as_clone
Image copy-to-volume operations with the Cinder v2 API
@@ -285,6 +287,8 @@ Image copy-to-volume operations with the Cinder v2 API
| tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_volume_bootable
| tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete_from_image
+| tempest.api.volume.test_volumes_get.VolumesActionsTest.test_volume_bootable
+| tempest.api.volume.test_volumes_get.VolumesGetTest.test_volume_create_get_update_delete_from_image
Volume creation and deletion operations with the Cinder v2 API
@@ -297,12 +301,21 @@ Volume creation and deletion operations with the Cinder v2 API
| tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_out_passing_size
| tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_size_negative
| tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_size_zero
+| tempest.api.volume.test_volumes_get.VolumesGetTest.test_volume_create_get_update_delete
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_create_volume_with_invalid_size
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_create_volume_with_nonexistent_source_volid
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_create_volume_with_nonexistent_volume_type
+| tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_without_passing_size
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_create_volume_without_passing_size
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_create_volume_with_size_negative
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_create_volume_with_size_zero
Volume service extension listing operations with the Cinder v2 API
------------------------------------------------------------------
| tempest.api.volume.test_extensions.ExtensionsV2TestJSON.test_list_extensions
+| tempest.api.volume.test_extensions.ExtensionsTestJSON.test_list_extensions
Volume GET operations with the Cinder v2 API
@@ -311,6 +324,9 @@ Volume GET operations with the Cinder v2 API
| tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_get_invalid_volume_id
| tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_get_volume_without_passing_volume_id
| tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_volume_get_nonexistent_volume_id
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_get_invalid_volume_id
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_get_volume_without_passing_volume_id
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_volume_get_nonexistent_volume_id
Volume listing operations with the Cinder v2 API
@@ -335,6 +351,25 @@ Volume listing operations with the Cinder v2 API
| tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_pagination
| tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_with_multiple_params
| tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_pagination
+| tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list
+| tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_by_name
+| tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_details_by_name
+| tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_param_display_name_and_status
+| tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_with_detail_param_display_name_and_status
+| tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_with_detail_param_metadata
+| tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_with_details
+| tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_with_param_metadata
+| tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_by_availability_zone
+| tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_by_status
+| tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_details_by_availability_zone
+| tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_details_by_status
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_list_volumes_detail_with_invalid_status
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_list_volumes_detail_with_nonexistent_name
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_list_volumes_with_invalid_status
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_list_volumes_with_nonexistent_name
+| tempest.api.volume.v2.test_volumes_list.VolumesListTestJSON.test_volume_list_details_pagination
+| tempest.api.volume.v2.test_volumes_list.VolumesListTestJSON.test_volume_list_details_with_multiple_params
+| tempest.api.volume.v2.test_volumes_list.VolumesListTestJSON.test_volume_list_pagination
Volume metadata operations with the Cinder v2 API
@@ -342,12 +377,17 @@ Volume metadata operations with the Cinder v2 API
| tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_create_get_delete_volume_metadata
| tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_update_volume_metadata_item
+| tempest.api.volume.test_volume_metadata.VolumesMetadataTest.test_crud_volume_metadata
+| tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_crud_volume_metadata
+| tempest.api.volume.test_volume_metadata.VolumesMetadataTest.test_update_volume_metadata_item
+| tempest.api.volume.test_volume_metadata.VolumesMetadataTest.test_update_show_volume_metadata_item
Verification of read-only status on volumes with the Cinder v2 API
------------------------------------------------------------------
| tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_volume_readonly_update
+| tempest.api.volume.test_volumes_actions.VolumesActionsTest.test_volume_readonly_update
Volume reservation operations with the Cinder v2 API
@@ -357,6 +397,10 @@ Volume reservation operations with the Cinder v2 API
| tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_reserve_volume_with_negative_volume_status
| tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_reserve_volume_with_nonexistent_volume_id
| tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_unreserve_volume_with_nonexistent_volume_id
+| tempest.api.volume.test_volumes_actions.VolumesActionsTest.test_reserve_unreserve_volume
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_reserve_volume_with_negative_volume_status
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_reserve_volume_with_nonexistent_volume_id
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_unreserve_volume_with_nonexistent_volume_id
Volume snapshot creation/deletion operations with the Cinder v2 API
@@ -374,6 +418,22 @@ Volume snapshot creation/deletion operations with the Cinder v2 API
| tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_snapshots_list_with_params
| tempest.api.volume.test_volumes_snapshots_negative.VolumesV2SnapshotNegativeTestJSON.test_create_snapshot_with_nonexistent_volume_id
| tempest.api.volume.test_volumes_snapshots_negative.VolumesV2SnapshotNegativeTestJSON.test_create_snapshot_without_passing_volume_id
+| tempest.api.volume.test_snapshot_metadata.SnapshotMetadataTestJSON.test_crud_snapshot_metadata
+| tempest.api.volume.test_snapshot_metadata.SnapshotV2MetadataTestJSON.test_crud_snapshot_metadata
+| tempest.api.volume.test_snapshot_metadata.SnapshotMetadataTestJSON.test_update_snapshot_metadata_item
+| tempest.api.volume.test_snapshot_metadata.SnapshotMetadataTestJSON.test_update_show_snapshot_metadata_item
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_create_volume_with_nonexistent_snapshot_id
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_delete_invalid_volume_id
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_delete_volume_without_passing_volume_id
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_volume_delete_nonexistent_volume_id
+| tempest.api.volume.test_volumes_snapshots.VolumesSnapshotTestJSON.test_snapshot_create_get_list_update_delete
+| tempest.api.volume.test_volumes_snapshots.VolumesSnapshotTestJSON.test_volume_from_snapshot
+| tempest.api.volume.test_volumes_snapshots_list.VolumesSnapshotListTestJSON.test_snapshots_list_details_with_params
+| tempest.api.volume.test_volumes_snapshots_list.VolumesV2SnapshotListTestJSON.test_snapshots_list_details_with_params
+| tempest.api.volume.test_volumes_snapshots_list.VolumesSnapshotListTestJSON.test_snapshots_list_with_params
+| tempest.api.volume.test_volumes_snapshots_list.VolumesV2SnapshotListTestJSON.test_snapshots_list_with_params
+| tempest.api.volume.test_volumes_snapshots_negative.VolumesSnapshotNegativeTestJSON.test_create_snapshot_with_nonexistent_volume_id
+| tempest.api.volume.test_volumes_snapshots_negative.VolumesSnapshotNegativeTestJSON.test_create_snapshot_without_passing_volume_id
Volume update operations with the Cinder v2 API
@@ -382,6 +442,9 @@ Volume update operations with the Cinder v2 API
| tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_empty_volume_id
| tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_invalid_volume_id
| tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_nonexistent_volume_id
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_update_volume_with_empty_volume_id
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_update_volume_with_invalid_volume_id
+| tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_update_volume_with_nonexistent_volume_id
---------------------------
diff --git a/docs/testing/user/testspecification/vimoperationsvolume/index.rst b/docs/testing/user/testspecification/vimoperationsvolume/index.rst
index ce039a5b..9a76c37c 100644
--- a/docs/testing/user/testspecification/vimoperationsvolume/index.rst
+++ b/docs/testing/user/testspecification/vimoperationsvolume/index.rst
@@ -1,36 +1,512 @@
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
-.. (c) Ericsson AB
+.. (c) Ericsson AB, Huawei Technologies Co.,Ltd
-========================================
+=========================================
VIM volume operations test specification
-========================================
+=========================================
.. toctree::
:maxdepth: 2
-Each test case requires documentation according to:
-* Use case specification
-* Test preconditions
-* Basic test flow execution descriptor
-* Post conditions and pass fail criteria
+Scope
+=====
+
+The VIM volume operations test area evaluates the ability of the system under
+test to support VIM volume operations. The test cases documented here are the
+volume API test cases in the OpenStack Interop guideline 2016.8 as implemented
+by the RefStack client. These test cases will evaluate basic OpenStack (as a VIM)
+volume operations, including:
+
+- Volume attach and detach operations
+- Volume service availability zone operations
+- Volume cloning operations
+- Image copy-to-volume operations
+- Volume creation and deletion operations
+- Volume service extension listing
+- Volume metadata operations
+- Volume snapshot operations
+
+References
+================
+
+- OpenStack Governance/Interop
+
+ - https://wiki.openstack.org/wiki/Governance/InteropWG
+
+- Defcore test cases
+
+ - https://github.com/openstack/interop/blob/master/2016.08.json
+
+- Refstack client
+
+ - https://github.com/openstack/refstack-client
+
+Definitions and abbreviations
+=============================
+
+The following terms and abbreviations are used in conjunction with this test area
+
+- API - Application Programming Interface
+- NFVi - Network Functions Virtualization infrastructure
+- SUT - System Under Test
+- VIM - Virtual Infrastructure Manager
+- VM - Virtual Machine
+
+System Under Test (SUT)
+=======================
+
+The system under test is assumed to be the NFVI and VIM deployed with a Pharos compliant infrastructure.
+
+Test Area Structure
+====================
+
+The test area is structured based on VIM volume API operations. Each test case is
+able to run independently, i.e. irrelevant of the state created by a previous test.
+Specifically, every test performs clean-up operations which return the system to
+the same state as before the test.
+
+For brevity, the test cases in this test area are summarized together based on
+the operations they are testing.
+
+Test Descriptions
+=================
+
+API Used and Reference
+----------------------
+
+Block storage: https://developer.openstack.org/api-ref/block-storage
+
+- create volume
+- delete volume
+- update volume
+- attach volume to server
+- detach volume from server
+- create volume metadata
+- update volume metadata
+- delete volume metadata
+- list volume
+
+- create snapshot
+- update snapshot
+- delete snapshot
+
+------------------------------------------------------------------------
+Test Case 1 - Volume attach and detach operations with the Cinder v2 API
+------------------------------------------------------------------------
+
+Test case specification
+-----------------------
-tempest.api.volume.test_availability_zone.AvailabilityZoneV2TestJSON.test_get_availability_zone_list
-tempest.api.volume.test_extensions.ExtensionsV2TestJSON.test_list_extensions
-tempest.api.volume.test_snapshot_metadata.SnapshotV2MetadataTestJSON.test_create_get_delete_snapshot_metadata
-tempest.api.volume.test_snapshot_metadata.SnapshotV2MetadataTestJSON.test_crud_snapshot_metadata
-tempest.api.volume.test_snapshot_metadata.SnapshotV2MetadataTestJSON.test_update_snapshot_metadata_item
-tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_create_get_delete_volume_metadata
-tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_crud_volume_metadata
-tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_update_volume_metadata_item
tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_attach_detach_volume_to_instance
tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_get_volume_attachment
-tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_reserve_unreserve_volume
-tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_volume_bootable
-tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_volume_readonly_update
-tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_attach_volumes_with_nonexistent_volume_id
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_detach_volumes_with_invalid_volume_id
+
+Test preconditions
+------------------
+
+* Volume extension API
+
+Basic test flow execution description and pass/fail criteria
+------------------------------------------------------------
+
+Test execution
+''''''''''''''
+* Test action 1: Create a server VM1
+* Test action 2: Attach a provided VOL1 to VM1
+* **Test assertion 1:** Verify VOL1 is in 'in-use' status
+* Test action 3: Detach VOL1 from VM1
+* **Test assertion 2:** Verify VOL1 is in 'available' status
+* Test action 4: Create a server VM2
+* Test action 5: Attach a provided VOL2 to VM2 and wait for VOL2 to reach 'in-use' status
+* Test action 6: Retrieve VOL2's attachment information ATTCH_INFO
+* **Test assertion 3:** Verify ATTCH_INFO is correct
+* Test action 7: Create a server VM3 and wait for VM3 to reach 'ACTIVE' status
+* Test action 8: Attach a non-existent volume to VM3
+* **Test assertion 4:** Verify attach volume failed, a 'NOT FOUND' error is returned in the response
+* Test action 9: Detach a volume from a server by using an invalid volume ID
+* **Test assertion 5:** Verify detach volume failed, a 'NOT FOUND' error is returned in the response
+
+Pass / fail criteria
+''''''''''''''''''''
+
+This test evaluates the volume API ability of attaching a volume to a server
+and detaching a volume from a server. Specifically, the test verifies that:
+
+* Volumes can be attached and detached from servers.
+* Volume attachment information can be retrieved.
+* Attach and detach a volume using an invalid volume ID is not allowed.
+
+In order to pass this test, all test assertions listed in the test execution above need to pass.
+
+Post conditions
+---------------
+
+N/A
+
+--------------------------------------------------------------------------------
+Test Case 2 - Volume service availability zone operations with the Cinder v2 API
+--------------------------------------------------------------------------------
+
+Test case specification
+-----------------------
+
+tempest.api.volume.test_availability_zone.AvailabilityZoneV2TestJSON.test_get_availability_zone_list
+
+tempest.api.volume.test_availability_zone.AvailabilityZoneTestJSON.test_get_availability_zone_list
+
+Note: the second test case is the alias of the first one.
+Alias should always be included so that the test run will be tempest version agnostic,
+which can be used to test different version of Openstack.
+
+Test preconditions
+------------------
+
+* Volume extension API
+
+Basic test flow execution description and pass/fail criteria
+------------------------------------------------------------
+
+Test execution
+''''''''''''''
+* Test action 1: List all existent availability zones
+* **Test assertion 1:** Verify the availability zone list length is greater than 0
+
+Pass / fail criteria
+''''''''''''''''''''
+
+This test case evaluates the volume API ability of listing availability zones.
+Specifically, the test verifies that:
+
+* Availability zones can be listed.
+
+In order to pass this test, all test assertions listed in the test execution above need to pass.
+
+Post conditions
+---------------
+
+N/A
+
+--------------------------------------------------------------
+Test Case 3 - Volume cloning operations with the Cinder v2 API
+--------------------------------------------------------------
+
+Test case specification
+-----------------------
+
tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete_as_clone
+
+tempest.api.volume.test_volumes_get.VolumesGetTest.test_volume_create_get_update_delete_as_clone
+
+Note: the second test case is the alias of the first one.
+Alias should always be included so that the test run will be tempest version agnostic,
+which can be used to test different version of Openstack.
+
+Test preconditions
+------------------
+
+* Volume extension API
+* Cinder volume clones feature is enabled
+
+Basic test flow execution description and pass/fail criteria
+------------------------------------------------------------
+
+Test execution
+''''''''''''''
+* Test action 1: Create a volume VOL1
+* Test action 2: Create a volume VOL2 from source volume VOL1 with a specific name and metadata
+* Test action 2: Wait for VOL2 to reach 'available' status
+* **Test assertion 1:** Verify the name of VOL2 is correct
+* Test action 3: Retrieve VOL2's detail information
+* **Test assertion 2:** Verify the retrieved volume name, ID and metadata are the same as VOL2
+* **Test assertion 3:** Verify VOL2's bootable flag is 'False'
+* Test action 4: Update the name of VOL2 with the original value
+* Test action 5: Update the name of VOL2 with a new value
+* **Test assertion 4:** Verify the name of VOL2 is updated successfully
+* Test action 6: Create a volume VOL3 with no name specified and a description contains characters '@#$%^*'
+* **Test assertion 5:** Verify VOL3 is created successfully
+* Test action 7: Update the name of VOL3 and description with the original value
+* **Test assertion 6:** Verify VOL3's bootable flag is 'False'
+
+Pass / fail criteria
+''''''''''''''''''''
+
+This test case evaluates the volume API ability of creating a cloned volume from a source volume,
+getting cloned volume detail information and updating cloned volume attributes.
+
+Specifically, the test verifies that:
+
+* Cloned volume can be created from a source volume.
+* Cloned volume detail information can be retrieved.
+* Cloned volume detail information can be updated.
+
+In order to pass this test, all test assertions listed in the test execution above need to pass.
+
+Post conditions
+---------------
+
+N/A
+
+--------------------------------------------------------------------
+Test Case 4 - Image copy-to-volume operations with the Cinder v2 API
+--------------------------------------------------------------------
+
+Test case specification
+-----------------------
+
+tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_volume_bootable
tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete_from_image
+
+tempest.api.volume.test_volumes_get.VolumesActionsTest.test_volume_bootable
+tempest.api.volume.test_volumes_get.VolumesGetTest.test_volume_create_get_update_delete_from_image
+
+Note: the last 2 test cases are the alias of the former 2.
+Alias should always be included so that the test run will be tempest version agnostic,
+which can be used to test different version of Openstack.
+
+Test preconditions
+------------------
+
+* Volume extension API
+
+Basic test flow execution description and pass/fail criteria
+------------------------------------------------------------
+
+Test execution
+''''''''''''''
+* Test action 1: Set a provided volume VOL1's bootable flag to 'True'
+* Test action 2: Retrieve VOL1's bootable flag
+* **Test assertion 1:** Verify VOL1's bootable flag is 'True'
+* Test action 3: Set a provided volume VOL1's bootable flag to 'False'
+* Test action 4: Retrieve VOL1's bootable flag
+* **Test assertion 2:** Verify VOL1's bootable flag is 'False'
+* Test action 5: Create a bootable volume VOL2 from one image with a specific name and metadata
+* Test action 6: Wait for VOL2 to reach 'available' status
+* **Test assertion 3:** Verify the name of VOL2 name is correct
+* Test action 7: Retrieve VOL2's information
+* **Test assertion 4:** Verify the retrieved volume name, ID and metadata are the same as VOL2
+* **Test assertion 5:** Verify VOL2's bootable flag is 'True'
+* Test action 8: Update the name of VOL2 with the original value
+* Test action 9: Update the name of VOL2 with a new value
+* **Test assertion 6:** Verify the name of VOL2 is updated successfully
+* Test action 10: Create a volume VOL3 with no name specified and a description contains characters '@#$%^*'
+* **Test assertion 7:** Verify VOL3 is created successfully
+* Test action 11: Update the name of VOL3 and description with the original value
+* **Test assertion 8:** Verify VOL3's bootable flag is 'True'
+
+Pass / fail criteria
+''''''''''''''''''''
+
+This test case evaluates the volume API ability of updating volume's bootable flag and creating
+a bootable volume from an image, getting bootable volume detail information and updating bootable volume.
+
+Specifically, the test verifies that:
+
+* Volume bootable flag can be set and retrieved.
+* Bootable volume can be created from a source volume.
+* Bootable volume detail information can be retrieved.
+* Bootable volume detail information can be updated.
+
+In order to pass this test, all test assertions listed in the test execution above need to pass.
+
+Post conditions
+---------------
+
+N/A
+
+----------------------------------------------------------------------------
+Test Case 5 - Volume creation and deletion operations with the Cinder v2 API
+----------------------------------------------------------------------------
+
+Test case specification
+-----------------------
+
+tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_invalid_size
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_source_volid
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_volume_type
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_out_passing_size
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_size_negative
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_size_zero
+
+tempest.api.volume.test_volumes_get.VolumesGetTest.test_volume_create_get_update_delete
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_create_volume_with_invalid_size
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_create_volume_with_nonexistent_source_volid
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_create_volume_with_nonexistent_volume_type
+
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_without_passing_size
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_create_volume_without_passing_size
+
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_create_volume_with_size_negative
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_create_volume_with_size_zero
+
+Note: test cases 8 to 11 are the alias of the fist 4 test cases, test cases 12 and 13 are both alias of
+test case 5, and test cases 14 and 15 are the alias of the cases 6 and 7, respectively.
+Alias should always be included so that the test run will be tempest version agnostic,
+which can be used to test different version of OpenStack.
+
+Test preconditions
+------------------
+
+* Volume extension API
+
+Basic test flow execution description and pass/fail criteria
+------------------------------------------------------------
+
+Test execution
+''''''''''''''
+* Test action 1: Create a volume VOL1 with a specific name and metadata
+* Test action 2: Wait for VOL1 to reach 'available' status
+* **Test assertion 1:** Verify the name of VOL1 is correct
+* Test action 3: Retrieve VOL1's information
+* **Test assertion 2:** Verify the retrieved volume name, ID and metadata are the same as VOL1
+* **Test assertion 3:** Verify VOL1's bootable flag is 'False'
+* Test action 4: Update the name of VOL1 with the original value
+* Test action 5: Update the name of VOL1 with a new value
+* **Test assertion 4:** Verify the name of VOL1 is updated successfully
+* Test action 6: Create a volume VOL2 with no name specified and a description contains characters '@#$%^*'
+* **Test assertion 5:** Verify VOL2 is created successfully
+* Test action 7: Update the name of VOL2 and description with the original value
+* **Test assertion 6:** Verify VOL2's bootable flag is 'False'
+* Test action 8: Create a volume with an invalid size '#$%'
+* **Test assertion 7:** Verify create volume failed, a bad request error is returned in the response
+* Test action 9: Create a volume with a nonexistent source volume
+* **Test assertion 8:** Verify create volume failed, a 'Not Found' error is returned in the response
+* Test action 10: Create a volume with a nonexistent volume type
+* **Test assertion 9:** Verify create volume failed, a 'Not Found' error is returned in the response
+* Test action 11: Create a volume without passing a volume size
+* **Test assertion 10:** Verify create volume failed, a bad request error is returned in the response
+* Test action 12: Create a volume with a negative volume size
+* **Test assertion 11:** Verify create volume failed, a bad request error is returned in the response
+* Test action 13: Create a volume with volume size '0'
+* **Test assertion 12:** Verify create volume failed, a bad request error is returned in the response
+
+Pass / fail criteria
+''''''''''''''''''''
+
+This test case evaluates the volume API ability of creating a volume, getting volume
+detail information and updating volume, the reference is,
+Specifically, the test verifies that:
+
+* Volume can be created from a source volume.
+* Volume detail information can be retrieved/updated.
+* Create a volume with an invalid size is not allowed.
+* Create a volume with a nonexistent source volume or volume type is not allowed.
+* Create a volume without passing a volume size is not allowed.
+* Create a volume with a negative volume size is not allowed.
+* Create a volume with volume size '0' is not allowed.
+
+In order to pass this test, all test assertions listed in the test execution above need to pass.
+
+Post conditions
+---------------
+
+N/A
+
+--------------------------------------------------------------------------------
+Test Case 6 - Volume service extension listing operations with the Cinder v2 API
+--------------------------------------------------------------------------------
+
+Test case specification
+-----------------------
+
+tempest.api.volume.test_extensions.ExtensionsV2TestJSON.test_list_extensions
+
+tempest.api.volume.test_extensions.ExtensionsTestJSON.test_list_extensions
+
+Note: the second test case is the alias of the first one.
+Alias should always be included so that the test run will be tempest version agnostic,
+which can be used to test different version of Openstack.
+
+Test preconditions
+------------------
+
+* Volume extension API
+* At least one Cinder extension is configured
+
+Basic test flow execution description and pass/fail criteria
+------------------------------------------------------------
+
+Test execution
+''''''''''''''
+
+* Test action 1: List all cinder service extensions
+* **Test assertion 1:** Verify all extensions are list in the extension list
+
+Pass / fail criteria
+''''''''''''''''''''
+
+This test case evaluates the volume API ability of listing all existent volume service extensions.
+
+* Cinder service extensions can be listed.
+
+In order to pass this test, all test assertions listed in the test execution above need to pass.
+
+Post conditions
+---------------
+
+N/A
+
+----------------------------------------------------------
+Test Case 7 - Volume GET operations with the Cinder v2 API
+----------------------------------------------------------
+
+Test case specification
+-----------------------
+
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_get_invalid_volume_id
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_get_volume_without_passing_volume_id
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_volume_get_nonexistent_volume_id
+
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_get_invalid_volume_id
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_get_volume_without_passing_volume_id"
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_volume_get_nonexistent_volume_id
+
+Note: the latter 3 test cases is the alias of the first 3 ones.
+Alias should always be included so that the test run will be tempest version agnostic,
+which can be used to test different version of Openstack.
+
+Test preconditions
+------------------
+
+* Volume extension API
+
+Basic test flow execution description and pass/fail criteria
+------------------------------------------------------------
+
+Test execution
+''''''''''''''
+
+* Test action 1: Retrieve a volume with an invalid volume ID
+* **Test assertion 1:** Verify retrieve volume failed, a 'Not Found' error is returned in the response
+* Test action 2: Retrieve a volume with an empty volume ID
+* **Test assertion 2:** Verify retrieve volume failed, a 'Not Found' error is returned in the response
+* Test action 3: Retrieve a volume with a nonexistent volume ID
+* **Test assertion 3:** Verify retrieve volume failed, a 'Not Found' error is returned in the response
+
+Pass / fail criteria
+''''''''''''''''''''
+
+This test case evaluates the volume API ability of getting volumes.
+Specifically, the test verifies that:
+
+* Get a volume with an invalid/an empty/a nonexistent volume ID is not allowed.
+
+In order to pass this test, all test assertions listed in the test execution above need to pass.
+
+Post conditions
+---------------
+
+N/A
+
+--------------------------------------------------------------
+Test Case 8 - Volume listing operations with the Cinder v2 API
+--------------------------------------------------------------
+
+Test case specification
+-----------------------
+
tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list
tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_by_name
tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_by_name
@@ -43,40 +519,475 @@ tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_by_
tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_by_status
tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_details_by_availability_zone
tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_details_by_status
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_attach_volumes_with_nonexistent_volume_id
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_invalid_size
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_snapshot_id
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_source_volid
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_volume_type
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_out_passing_size
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_size_negative
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_size_zero
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_without_passing_size
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_delete_invalid_volume_id
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_delete_volume_without_passing_volume_id
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_detach_volumes_with_invalid_volume_id
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_get_invalid_volume_id
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_get_volume_without_passing_volume_id
tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_detail_with_invalid_status
tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_detail_with_nonexistent_name
tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_with_invalid_status
tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_with_nonexistent_name
+tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_pagination
+tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_with_multiple_params
+tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_pagination
+
+tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list
+tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_by_name
+tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_details_by_name
+tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_param_display_name_and_status
+tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_with_detail_param_display_name_and_status
+tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_with_detail_param_metadata
+tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_with_details
+tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_with_param_metadata
+tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_by_availability_zone
+tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_by_status
+tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_details_by_availability_zone
+tempest.api.volume.test_volumes_list.VolumesListTestJSON.test_volume_list_details_by_status
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_list_volumes_detail_with_invalid_status
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_list_volumes_detail_with_nonexistent_name
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_list_volumes_with_invalid_status
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_list_volumes_with_nonexistent_name
+tempest.api.volume.v2.test_volumes_list.VolumesListTestJSON.test_volume_list_details_pagination
+tempest.api.volume.v2.test_volumes_list.VolumesListTestJSON.test_volume_list_details_with_multiple_params
+tempest.api.volume.v2.test_volumes_list.VolumesListTestJSON.test_volume_list_pagination
+
+Note: the latter 19 test cases is the alias of the first 19 ones.
+Alias should always be included so that the test run will be tempest version agnostic,
+which can be used to test different version of Openstack.
+
+Test preconditions
+------------------
+
+* Volume extension API
+* The backing file for the volume group that Nova uses has space for at least 3 1G volumes
+
+Basic test flow execution description and pass/fail criteria
+------------------------------------------------------------
+
+Test execution
+''''''''''''''
+
+* Test action 1: List all existent volumes
+* **Test assertion 1:** Verify the volume list is complete
+* Test action 2: List existent volumes and filter the volume list by volume name
+* **Test assertion 2:** Verify the length of filtered volume list is 1 and the retrieved volume is correct
+* Test action 3: List existent volumes in detail and filter the volume list by volume name
+* **Test assertion 3:** Verify the length of filtered volume list is 1 and the retrieved volume is correct
+* Test action 4: List existent volumes and filter the volume list by volume name and status 'available'
+* **Test assertion 4:** Verify the name and status parameters of the fetched volume are correct
+* Test action 5: List existent volumes in detail and filter the volume list by volume name and status 'available'
+* **Test assertion 5:** Verify the name and status parameters of the fetched volume are correct
+* Test action 6: List all existent volumes in detail and filter the volume list by volume metadata
+* **Test assertion 6:** Verify the metadata parameter of the fetched volume is correct
+* Test action 7: List all existent volumes in detail
+* **Test assertion 7:** Verify the volume list is complete
+* Test action 8: List all existent volumes and filter the volume list by volume metadata
+* **Test assertion 8:** Verify the metadata parameter of the fetched volume is correct
+* Test action 9: List existent volumes and filter the volume list by availability zone
+* **Test assertion 9:** Verify the availability zone parameter of the fetched volume is correct
+* Test action 10: List all existent volumes and filter the volume list by volume status 'available'
+* **Test assertion 10:** Verify the status parameter of the fetched volume is correct
+* Test action 11: List existent volumes in detail and filter the volume list by availability zone
+* **Test assertion 11:** Verify the availability zone parameter of the fetched volume is correct
+* Test action 12: List all existent volumes in detail and filter the volume list by volume status 'available'
+* **Test assertion 12:** Verify the status parameter of the fetched volume is correct
+* Test action 13: List all existent volumes in detail and filter the volume list by an invalid volume status 'null'
+* **Test assertion 13:** Verify the filtered volume list is empty
+* Test action 14: List all existent volumes in detail and filter the volume list by a non-existent volume name
+* **Test assertion 14:** Verify the filtered volume list is empty
+* Test action 15: List all existent volumes and filter the volume list by an invalid volume status 'null'
+* **Test assertion 15:** Verify the filtered volume list is empty
+* Test action 16: List all existent volumes and filter the volume list by a non-existent volume name
+* **Test assertion 16:** Verify the filtered volume list is empty
+* Test action 17: List all existent volumes in detail and paginate the volume list by desired volume IDs
+* **Test assertion 17:** Verify only the desired volumes are listed in the filtered volume list
+* Test action 18: List all existent volumes in detail and filter the volume list by volume status 'available' and display limit '2'
+* Test action 19: Sort the filtered volume list by IDs in ascending order
+* **Test assertion 18:** Verify the length of filtered volume list is 2
+* **Test assertion 19:** Verify the status of retrieved volumes is correct
+* **Test assertion 20:** Verify the filtered volume list is sorted correctly
+* Test action 20: List all existent volumes in detail and filter the volume list by volume status 'available' and display limit '2'
+* Test action 21: Sort the filtered volume list by IDs in descending order
+* **Test assertion 21:** Verify the length of filtered volume list is 2
+* **Test assertion 22:** Verify the status of retrieved volumes is correct
+* **Test assertion 23:** Verify the filtered volume list is sorted correctly
+* Test action 22: List all existent volumes and paginate the volume list by desired volume IDs
+* **Test assertion 24:** Verify only the desired volumes are listed in the filtered volume list
+
+Pass / fail criteria
+''''''''''''''''''''
+
+This test case evaluates the volume API ability of getting a list of volumes and filtering the volume list.
+Specifically, the test verifies that:
+
+* Get a list of volumes (in detail) successful.
+* Get a list of volumes (in detail) and filter volumes by name/status/metadata/availability zone successful.
+* Volume list pagination functionality is working.
+* Get a list of volumes in detail using combined condition successful.
+
+In order to pass this test, all test assertions listed in the test execution above need to pass.
+
+Post conditions
+---------------
+
+N/A
+
+---------------------------------------------------------------
+Test Case 9 - Volume metadata operations with the Cinder v2 API
+---------------------------------------------------------------
+
+Test case specification
+-----------------------
+
+tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_create_get_delete_volume_metadata
+tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_update_volume_metadata_item
+
+tempest.api.volume.test_volume_metadata.VolumesMetadataTest.test_crud_volume_metadata
+tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_crud_volume_metadata
+
+tempest.api.volume.test_volume_metadata.VolumesMetadataTest.test_update_volume_metadata_item
+tempest.api.volume.test_volume_metadata.VolumesMetadataTest.test_update_show_volume_metadata_item
+
+Note: Test case 3 and 4 are the alias of the first test case, and the last 2 test cases
+are the alias of the second test case.
+Alias should always be included so that the test run will be tempest version agnostic,
+which can be used to test different version of OpenStack.
+
+Test preconditions
+------------------
+
+* Volume extension API
+
+Basic test flow execution description and pass/fail criteria
+------------------------------------------------------------
+
+Test execution
+''''''''''''''
+
+* Test action 1: Create metadata for a provided volume VOL1
+* Test action 2: Get the metadata of VOL1
+* **Test assertion 1:** Verify the metadata of VOL1 is correct
+* Test action 3: Update the metadata of VOL1
+* **Test assertion 2:** Verify the metadata of VOL1 is updated
+* Test action 4: Delete one metadata item 'key1' of VOL1
+* **Test assertion 3:** Verify the metadata item 'key1' is deleted
+* Test action 5: Create metadata for a provided volume VOL2
+* **Test assertion 4:** Verify the metadata of VOL2 is correct
+* Test action 6: Update one metadata item 'key3' of VOL2
+* **Test assertion 5:** Verify the metadata of VOL2 is updated
+
+Pass / fail criteria
+''''''''''''''''''''
+
+This test case evaluates the volume API ability of creating metadata for a volume, getting the
+metadata of a volume, updating volume metadata and deleting a metadata item of a volume.
+Specifically, the test verifies that:
+
+* Create metadata for volume successfully.
+* Get metadata of volume successfully.
+* Update volume metadata and metadata item successfully.
+* Delete metadata item of a volume successfully.
+
+In order to pass this test, all test assertions listed in the test execution above need to pass.
+
+Post conditions
+---------------
+
+N/A
+
+---------------------------------------------------------------------------------
+Test Case 10 - Verification of read-only status on volumes with the Cinder v2 API
+---------------------------------------------------------------------------------
+
+Test case specification
+-----------------------
+
+tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_volume_readonly_update
+
+tempest.api.volume.test_volumes_actions.VolumesActionsTest.test_volume_readonly_update
+
+Note: the second test case is the alias of the first one.
+Alias should always be included so that the test run will be tempest version agnostic,
+which can be used to test different version of Openstack.
+
+Test preconditions
+------------------
+
+* Volume extension API
+
+Basic test flow execution description and pass/fail criteria
+------------------------------------------------------------
+
+Test execution
+''''''''''''''
+
+* Test action 1: Update a provided volume VOL1's read-only access mode to 'True'
+* **Test assertion 1:** Verify VOL1 is in read-only access mode
+* Test action 2: Update a provided volume VOL1's read-only access mode to 'False'
+* **Test assertion 2:** Verify VOL1 is not in read-only access mode
+
+Pass / fail criteria
+''''''''''''''''''''
+
+This test case evaluates the volume API ability of setting and updating volume read-only access mode.
+Specifically, the test verifies that:
+
+* Volume read-only access mode can be set and updated.
+
+In order to pass this test, all test assertions listed in the test execution above need to pass.
+
+Post conditions
+---------------
+
+N/A
+
+-------------------------------------------------------------------
+Test Case 11 - Volume reservation operations with the Cinder v2 API
+-------------------------------------------------------------------
+
+Test case specification
+-----------------------
+
+tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_reserve_unreserve_volume
tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_reserve_volume_with_negative_volume_status
tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_reserve_volume_with_nonexistent_volume_id
tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_unreserve_volume_with_nonexistent_volume_id
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_empty_volume_id
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_invalid_volume_id
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_nonexistent_volume_id
+
+tempest.api.volume.test_volumes_actions.VolumesActionsTest.test_reserve_unreserve_volume
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_reserve_volume_with_negative_volume_status
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_reserve_volume_with_nonexistent_volume_id
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_unreserve_volume_with_nonexistent_volume_id
+
+Note: the last 4 test cases are the alias of the first 4 ones.
+Alias should always be included so that the test run will be tempest version agnostic,
+which can be used to test different version of Openstack.
+
+Test preconditions
+------------------
+
+* Volume extension API
+
+Basic test flow execution description and pass/fail criteria
+------------------------------------------------------------
+
+Test execution
+''''''''''''''
+
+* Test action 1: Update a provided volume VOL1 as reserved
+* **Test assertion 1:** Verify VOL1 is in 'attaching' status
+* Test action 2: Update VOL1 as un-reserved
+* **Test assertion 2:** Verify VOL1 is in 'available' status
+* Test action 3: Update a provided volume VOL2 as reserved
+* Test action 4: Update VOL2 as reserved again
+* **Test assertion 3:** Verify update VOL2 status failed, a bad request error is returned in the response
+* Test action 5: Update VOL2 as un-reserved
+* Test action 6: Update a non-existent volume as reserved by using an invalid volume ID
+* **Test assertion 4:** Verify update non-existent volume as reserved failed, a 'Not Found' error is returned in the response
+* Test action 7: Update a non-existent volume as un-reserved by using an invalid volume ID
+* **Test assertion 5:** Verify update non-existent volume as un-reserved failed, a 'Not Found' error is returned in the response
+
+Pass / fail criteria
+''''''''''''''''''''
+
+This test case evaluates the volume API ability of reserving and un-reserving volumes.
+Specifically, the test verifies that:
+
+* Volume can be reserved and un-reserved.
+* Update a non-existent volume as reserved is not allowed.
+* Update a non-existent volume as un-reserved is not allowed.
+
+In order to pass this test, all test assertions listed in the test execution above need to pass.
+
+Post conditions
+---------------
+
+N/A
+
+----------------------------------------------------------------------------------
+Test Case 12 - Volume snapshot creation/deletion operations with the Cinder v2 API
+----------------------------------------------------------------------------------
+
+Test case specification
+-----------------------
+
+tempest.api.volume.test_snapshot_metadata.SnapshotV2MetadataTestJSON.test_create_get_delete_snapshot_metadata
+tempest.api.volume.test_snapshot_metadata.SnapshotV2MetadataTestJSON.test_update_snapshot_metadata_item
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_snapshot_id
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_delete_invalid_volume_id
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_delete_volume_without_passing_volume_id
tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_volume_delete_nonexistent_volume_id
-tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_volume_get_nonexistent_volume_id
tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_snapshot_create_get_list_update_delete
+tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_volume_from_snapshot
tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_snapshots_list_details_with_params
tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_snapshots_list_with_params
-tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_volume_from_snapshot
-tempest.api.volume.test_volumes_snapshots_list.VolumesV2SnapshotListTestJSON.test_snapshots_list_details_with_params
-tempest.api.volume.test_volumes_snapshots_list.VolumesV2SnapshotListTestJSON.test_snapshots_list_with_params
tempest.api.volume.test_volumes_snapshots_negative.VolumesV2SnapshotNegativeTestJSON.test_create_snapshot_with_nonexistent_volume_id
tempest.api.volume.test_volumes_snapshots_negative.VolumesV2SnapshotNegativeTestJSON.test_create_snapshot_without_passing_volume_id
-tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_pagination
-tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_with_multiple_params
-tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_pagination
+
+tempest.api.volume.test_snapshot_metadata.SnapshotMetadataTestJSON.test_crud_snapshot_metadata
+tempest.api.volume.test_snapshot_metadata.SnapshotV2MetadataTestJSON.test_crud_snapshot_metadata
+
+tempest.api.volume.test_snapshot_metadata.SnapshotMetadataTestJSON.test_update_snapshot_metadata_item
+tempest.api.volume.test_snapshot_metadata.SnapshotMetadataTestJSON.test_update_show_snapshot_metadata_item
+
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_create_volume_with_nonexistent_snapshot_id
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_delete_invalid_volume_id
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_delete_volume_without_passing_volume_id
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_volume_delete_nonexistent_volume_id
+tempest.api.volume.test_volumes_snapshots.VolumesSnapshotTestJSON.test_snapshot_create_get_list_update_delete
+tempest.api.volume.test_volumes_snapshots.VolumesSnapshotTestJSON.test_volume_from_snapshot
+
+tempest.api.volume.test_volumes_snapshots_list.VolumesSnapshotListTestJSON.test_snapshots_list_details_with_params
+tempest.api.volume.test_volumes_snapshots_list.VolumesV2SnapshotListTestJSON.test_snapshots_list_details_with_params
+
+tempest.api.volume.test_volumes_snapshots_list.VolumesSnapshotListTestJSON.test_snapshots_list_with_params
+tempest.api.volume.test_volumes_snapshots_list.VolumesV2SnapshotListTestJSON.test_snapshots_list_with_params
+
+tempest.api.volume.test_volumes_snapshots_negative.VolumesSnapshotNegativeTestJSON.test_create_snapshot_with_nonexistent_volume_id
+tempest.api.volume.test_volumes_snapshots_negative.VolumesSnapshotNegativeTestJSON.test_create_snapshot_without_passing_volume_id
+
+Note: test case 13 and 14 are the alias of test case 1, test case 15 and 16 are the alias of test case 2,
+test case 17 to 22 are the alias of test case 3 to 8 respectively, test case 23 and 24 are the alias of
+test case 9, test case 25 and 26 are the alias of test case 10, and test case 27 and 28 are the alias of
+test case 11 and 12 respectively.
+Alias should always be included so that the test run will be tempest version agnostic,
+which can be used to test different version of OpenStack.
+
+Test preconditions
+------------------
+
+* Volume extension API
+
+Basic test flow execution description and pass/fail criteria
+------------------------------------------------------------
+
+Test execution
+''''''''''''''
+
+* Test action 1: Create metadata for a provided snapshot SNAP1
+* Test action 2: Get the metadata of SNAP1
+* **Test assertion 1:** Verify the metadata of SNAP1 is correct
+* Test action 3: Update the metadata of SNAP1
+* **Test assertion 2:** Verify the metadata of SNAP1 is updated
+* Test action 4: Delete one metadata item 'key3' of SNAP1
+* **Test assertion 3:** Verify the metadata item 'key3' is deleted
+* Test action 5: Create metadata for a provided snapshot SNAP2
+* **Test assertion 4:** Verify the metadata of SNAP2 is correct
+* Test action 6: Update one metadata item 'key3' of SNAP2
+* **Test assertion 5:** Verify the metadata of SNAP2 is updated
+* Test action 7: Create a volume with a nonexistent snapshot
+* **Test assertion 6:** Verify create volume failed, a 'Not Found' error is returned in the response
+* Test action 8: Delete a volume with an invalid volume ID
+* **Test assertion 7:** Verify delete volume failed, a 'Not Found' error is returned in the response
+* Test action 9: Delete a volume with an empty volume ID
+* **Test assertion 8:** Verify delete volume failed, a 'Not Found' error is returned in the response
+* Test action 10: Delete a volume with a nonexistent volume ID
+* **Test assertion 9:** Verify delete volume failed, a 'Not Found' error is returned in the response
+* Test action 11: Create a snapshot SNAP2 from a provided volume VOL1
+* Test action 12: Retrieve SNAP2's detail information
+* **Test assertion 10:** Verify SNAP2 is created from VOL1
+* Test action 13: Update the name and description of SNAP2
+* **Test assertion 11:** Verify the name and description of SNAP2 are updated in the response body of update snapshot API
+* Test action 14: Retrieve SNAP2's detail information
+* **Test assertion 12:** Verify the name and description of SNAP2 are correct
+* Test action 15: Delete SNAP2
+* Test action 16: Create a volume VOL2 with a volume size
+* Test action 17: Create a snapshot SNAP3 from VOL2
+* Test action 18: Create a volume VOL3 from SNAP3 with a bigger volume size
+* Test action 19: Retrieve VOL3's detail information
+* **Test assertion 13:** Verify volume size and source snapshot of VOL3 are correct
+* Test action 20: List all snapshots in detail and filter the snapshot list by name
+* **Test assertion 14:** Verify the filtered snapshot list is correct
+* Test action 21: List all snapshots in detail and filter the snapshot list by status
+* **Test assertion 15:** Verify the filtered snapshot list is correct
+* Test action 22: List all snapshots in detail and filter the snapshot list by name and status
+* **Test assertion 16:** Verify the filtered snapshot list is correct
+* Test action 23: List all snapshots and filter the snapshot list by name
+* **Test assertion 17:** Verify the filtered snapshot list is correct
+* Test action 24: List all snapshots and filter the snapshot list by status
+* **Test assertion 18:** Verify the filtered snapshot list is correct
+* Test action 25: List all snapshots and filter the snapshot list by name and status
+* **Test assertion 19:** Verify the filtered snapshot list is correct
+* Test action 26: Create a snapshot from a nonexistent volume by using an invalid volume ID
+* **Test assertion 20:** Verify create snapshot failed, a 'Not Found' error is returned in the response
+* Test action 27: Create a snapshot from a volume by using an empty volume ID
+* **Test assertion 21:** Verify create snapshot failed, a 'Not Found' error is returned in the response
+
+Pass / fail criteria
+''''''''''''''''''''
+
+This test case evaluates the volume API ability of managing snapshot and snapshot metadata.
+Specifically, the test verifies that:
+
+* Create metadata for snapshot successfully.
+* Get metadata of snapshot successfully.
+* Update snapshot metadata and metadata item successfully.
+* Delete metadata item of a snapshot successfully.
+* Create a volume from a nonexistent snapshot is not allowed.
+* Delete a volume using an invalid volume ID is not allowed.
+* Delete a volume without passing the volume ID is not allowed.
+* Delete a non-existent volume is not allowed.
+* Create snapshot successfully.
+* Get snapshot's detail information successfully.
+* Update snapshot attributes successfully.
+* Delete snapshot successfully.
+* Creates a volume and a snapshot passing a size different from the source successfully.
+* List snapshot details by display_name and status filters successfully.
+* Create a snapshot from a nonexistent volume is not allowed.
+* Create a snapshot from a volume without passing the volume ID is not allowed.
+
+In order to pass this test, all test assertions listed in the test execution above need to pass.
+
+Post conditions
+---------------
+
+N/A
+
+--------------------------------------------------------------
+Test Case 13 - Volume update operations with the Cinder v2 API
+--------------------------------------------------------------
+
+Test case specification
+-----------------------
+
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_empty_volume_id
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_invalid_volume_id
+tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_nonexistent_volume_id
+
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_update_volume_with_empty_volume_id
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_update_volume_with_invalid_volume_id
+tempest.api.volume.test_volumes_negative.VolumesNegativeTest.test_update_volume_with_nonexistent_volume_id
+
+Note: the last 3 test cases are the alias of the first 3 ones.
+Alias should always be included so that the test run will be tempest version agnostic,
+which can be used to test different version of Openstack.
+
+Test preconditions
+------------------
+
+* Volume extension API
+
+Basic test flow execution description and pass/fail criteria
+------------------------------------------------------------
+
+Test execution
+''''''''''''''
+
+* Test action 1: Update a volume by using an empty volume ID
+* **Test assertion 1:** Verify update volume failed, a 'Not Found' error is returned in the response
+* Test action 2: Update a volume by using an invalid volume ID
+* **Test assertion 2:** Verify update volume failed, a 'Not Found' error is returned in the response
+* Test action 3: Update a non-existent volume by using a random generated volume ID
+* **Test assertion 3:** Verify update volume failed, a 'Not Found' error is returned in the response
+
+Pass / fail criteria
+''''''''''''''''''''
+
+This test case evaluates the volume API ability of updating volume attributes.
+Specifically, the test verifies that:
+
+* Update a volume without passing the volume ID is not allowed.
+* Update a volume using an invalid volume ID is not allowed.
+* Update a non-existent volume is not allowed.
+
+In order to pass this test, all test assertions listed in the test execution above need to pass.
+
+Post conditions
+---------------
+
+N/A