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:
Tang Chen 2016-02-21 09:10:15 +08:00
parent 5a978b9ec1
commit acc0297fa6
4 changed files with 116 additions and 2 deletions

View File

View 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)

View File

@ -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"

View File

@ -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)))