Add functional tests for "volume" commands v2
The tests for v2 "volume" commands are quite similar to v1. This patch also map 'metadata' to 'properties', 'volume_type' to 'type' to align to the v1 output. Change-Id: Icf2c5463b186fc78c890ccd96453090c4a2c2eb6 Partial-bug: #1519503
This commit is contained in:
		
							
								
								
									
										0
									
								
								functional/tests/volume/v2/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								functional/tests/volume/v2/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										80
									
								
								functional/tests/volume/v2/test_volume.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								functional/tests/volume/v2/test_volume.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
			
		||||
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
 | 
			
		||||
#    not use this file except in compliance with the License. You may obtain
 | 
			
		||||
#    a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#         http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
#    Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
#    License for the specific language governing permissions and limitations
 | 
			
		||||
#    under the License.
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
import uuid
 | 
			
		||||
 | 
			
		||||
from functional.common import test
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class VolumeTests(test.TestCase):
 | 
			
		||||
    """Functional tests for volume. """
 | 
			
		||||
 | 
			
		||||
    NAME = uuid.uuid4().hex
 | 
			
		||||
    OTHER_NAME = uuid.uuid4().hex
 | 
			
		||||
    HEADERS = ['"Display Name"']
 | 
			
		||||
    FIELDS = ['name']
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def setUpClass(cls):
 | 
			
		||||
        os.environ['OS_VOLUME_API_VERSION'] = '2'
 | 
			
		||||
        opts = cls.get_show_opts(cls.FIELDS)
 | 
			
		||||
        raw_output = cls.openstack('volume create --size 1 ' + cls.NAME + opts)
 | 
			
		||||
        expected = cls.NAME + '\n'
 | 
			
		||||
        cls.assertOutput(expected, raw_output)
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def tearDownClass(cls):
 | 
			
		||||
        # Rename test
 | 
			
		||||
        raw_output = cls.openstack(
 | 
			
		||||
            'volume set --name ' + cls.OTHER_NAME + ' ' + cls.NAME)
 | 
			
		||||
        cls.assertOutput('', raw_output)
 | 
			
		||||
        # Delete test
 | 
			
		||||
        raw_output = cls.openstack('volume delete ' + cls.OTHER_NAME)
 | 
			
		||||
        cls.assertOutput('', raw_output)
 | 
			
		||||
 | 
			
		||||
    def test_volume_list(self):
 | 
			
		||||
        opts = self.get_list_opts(self.HEADERS)
 | 
			
		||||
        raw_output = self.openstack('volume list' + opts)
 | 
			
		||||
        self.assertIn(self.NAME, raw_output)
 | 
			
		||||
 | 
			
		||||
    def test_volume_show(self):
 | 
			
		||||
        opts = self.get_show_opts(self.FIELDS)
 | 
			
		||||
        raw_output = self.openstack('volume show ' + self.NAME + opts)
 | 
			
		||||
        self.assertEqual(self.NAME + "\n", raw_output)
 | 
			
		||||
 | 
			
		||||
    def test_volume_properties(self):
 | 
			
		||||
        raw_output = self.openstack(
 | 
			
		||||
            'volume set --property a=b --property c=d ' + self.NAME)
 | 
			
		||||
        self.assertEqual("", raw_output)
 | 
			
		||||
        opts = self.get_show_opts(["properties"])
 | 
			
		||||
        raw_output = self.openstack('volume show ' + self.NAME + opts)
 | 
			
		||||
        self.assertEqual("a='b', c='d'\n", raw_output)
 | 
			
		||||
 | 
			
		||||
        raw_output = self.openstack('volume unset --property a ' + self.NAME)
 | 
			
		||||
        self.assertEqual("", raw_output)
 | 
			
		||||
        raw_output = self.openstack('volume show ' + self.NAME + opts)
 | 
			
		||||
        self.assertEqual("c='d'\n", raw_output)
 | 
			
		||||
 | 
			
		||||
    def test_volume_set(self):
 | 
			
		||||
        discription = uuid.uuid4().hex
 | 
			
		||||
        self.openstack('volume set --description ' + discription + ' ' +
 | 
			
		||||
                       self.NAME)
 | 
			
		||||
        opts = self.get_show_opts(["description", "name"])
 | 
			
		||||
        raw_output = self.openstack('volume show ' + self.NAME + opts)
 | 
			
		||||
        self.assertEqual(discription + "\n" + self.NAME + "\n", raw_output)
 | 
			
		||||
 | 
			
		||||
    def test_volume_set_size(self):
 | 
			
		||||
        self.openstack('volume set --size 2 ' + self.NAME)
 | 
			
		||||
        opts = self.get_show_opts(["name", "size"])
 | 
			
		||||
        raw_output = self.openstack('volume show ' + self.NAME + opts)
 | 
			
		||||
        self.assertEqual(self.NAME + "\n2\n", raw_output)
 | 
			
		||||
@@ -17,6 +17,7 @@ import mock
 | 
			
		||||
import random
 | 
			
		||||
import uuid
 | 
			
		||||
 | 
			
		||||
from openstackclient.common import utils as common_utils
 | 
			
		||||
from openstackclient.tests import fakes
 | 
			
		||||
from openstackclient.tests.identity.v3 import fakes as identity_fakes
 | 
			
		||||
from openstackclient.tests.image.v2 import fakes as image_fakes
 | 
			
		||||
@@ -56,8 +57,31 @@ VOLUME = {
 | 
			
		||||
    "attachments": volume_attachments
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
VOLUME_columns = tuple(sorted(VOLUME))
 | 
			
		||||
VOLUME_data = tuple((VOLUME[x] for x in sorted(VOLUME)))
 | 
			
		||||
VOLUME_columns = (
 | 
			
		||||
    "attachments",
 | 
			
		||||
    "availability_zone",
 | 
			
		||||
    "description",
 | 
			
		||||
    "id",
 | 
			
		||||
    "name",
 | 
			
		||||
    "properties",
 | 
			
		||||
    "size",
 | 
			
		||||
    "snapshot_id",
 | 
			
		||||
    "status",
 | 
			
		||||
    "type"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
VOLUME_data = (
 | 
			
		||||
    volume_attachments,
 | 
			
		||||
    volume_availability_zone,
 | 
			
		||||
    volume_description,
 | 
			
		||||
    volume_id,
 | 
			
		||||
    volume_name,
 | 
			
		||||
    common_utils.format_dict(volume_metadata),
 | 
			
		||||
    volume_size,
 | 
			
		||||
    volume_snapshot_id,
 | 
			
		||||
    volume_status,
 | 
			
		||||
    volume_type
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
snapshot_id = "cb2d364e-4d1c-451a-8c68-b5bbcb340fb2"
 | 
			
		||||
 
 | 
			
		||||
@@ -394,6 +394,16 @@ class ShowVolume(command.ShowOne):
 | 
			
		||||
        volume_client = self.app.client_manager.volume
 | 
			
		||||
        volume = utils.find_resource(volume_client.volumes, parsed_args.volume)
 | 
			
		||||
 | 
			
		||||
        # Special mapping for columns to make the output easier to read:
 | 
			
		||||
        # 'metadata' --> 'properties'
 | 
			
		||||
        # 'volume_type' --> 'type'
 | 
			
		||||
        volume._info.update(
 | 
			
		||||
            {
 | 
			
		||||
                'properties': utils.format_dict(volume._info.pop('metadata')),
 | 
			
		||||
                'type': volume._info.pop('volume_type'),
 | 
			
		||||
            },
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        # Remove key links from being displayed
 | 
			
		||||
        volume._info.pop("links", None)
 | 
			
		||||
        return zip(*sorted(six.iteritems(volume._info)))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user