diff options
Diffstat (limited to 'openstackclient/tests/functional')
6 files changed, 394 insertions, 171 deletions
diff --git a/openstackclient/tests/functional/common/test_configuration.py b/openstackclient/tests/functional/common/test_configuration.py index f47d3b00..63a17d0e 100644 --- a/openstackclient/tests/functional/common/test_configuration.py +++ b/openstackclient/tests/functional/common/test_configuration.py @@ -10,6 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. +import json import os from openstackclient.common import configuration @@ -20,25 +21,47 @@ BASIC_CONFIG_HEADERS = ['Field', 'Value'] class ConfigurationTests(base.TestCase): - - opts = "-f value -c auth.password" + """Functional test for configuration.""" def test_configuration_show(self): + + # Test show without option raw_output = self.openstack('configuration show') items = self.parse_listing(raw_output) self.assert_table_structure(items, BASIC_CONFIG_HEADERS) - def test_configuration_show_unmask(self): - raw_output = self.openstack('configuration show --unmask ' + self.opts) + cmd_output = json.loads(self.openstack( + 'configuration show -f json' + )) + self.assertEqual( + configuration.REDACTED, + cmd_output['auth.password'] + ) + + # Test show --mask + cmd_output = json.loads(self.openstack( + 'configuration show --mask -f json' + )) + self.assertEqual( + configuration.REDACTED, + cmd_output['auth.password'] + ) + + # Test show --unmask + cmd_output = json.loads(self.openstack( + 'configuration show --unmask -f json' + )) # If we are using os-client-config, this will not be set. Rather than # parse clouds.yaml to get the right value, just make sure # we are not getting redacted. passwd = os.environ.get('OS_PASSWORD') if passwd: - self.assertEqual(passwd + '\n', raw_output) + self.assertEqual( + passwd, + cmd_output['auth.password'] + ) else: - self.assertNotEqual(configuration.REDACTED + '\n', raw_output) - - def test_configuration_show_mask(self): - raw_output = self.openstack('configuration show --mask ' + self.opts) - self.assertEqual(configuration.REDACTED + '\n', raw_output) + self.assertNotEqual( + configuration.REDACTED, + cmd_output['auth.password'] + ) diff --git a/openstackclient/tests/functional/compute/v2/test_aggregate.py b/openstackclient/tests/functional/compute/v2/test_aggregate.py index 38368103..95068fc2 100644 --- a/openstackclient/tests/functional/compute/v2/test_aggregate.py +++ b/openstackclient/tests/functional/compute/v2/test_aggregate.py @@ -10,6 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. +import json import uuid from openstackclient.tests.functional import base @@ -18,90 +19,164 @@ from openstackclient.tests.functional import base class AggregateTests(base.TestCase): """Functional tests for aggregate.""" - NAME = uuid.uuid4().hex - HEADERS = ['Name'] - FIELDS = ['name'] + def test_aggregate_create_and_delete(self): + """Test create, delete multiple""" + name1 = uuid.uuid4().hex + cmd_output = json.loads(self.openstack( + 'aggregate create -f json ' + + '--zone nova ' + + name1)) + self.assertEqual( + name1, + cmd_output['name'] + ) + self.assertEqual( + 'nova', + cmd_output['availability_zone'] + ) - @classmethod - def setUpClass(cls): - opts = cls.get_opts(cls.FIELDS) - # Use the default 'nova' availability zone for the aggregate. - raw_output = cls.openstack( - 'aggregate create --zone nova ' + cls.NAME + opts + name2 = uuid.uuid4().hex + cmd_output = json.loads(self.openstack( + 'aggregate create -f json ' + + '--zone nova ' + + name2)) + self.assertEqual( + name2, + cmd_output['name'] + ) + self.assertEqual( + 'nova', + cmd_output['availability_zone'] ) - expected = cls.NAME + '\n' - cls.assertOutput(expected, raw_output) - @classmethod - def tearDownClass(cls): - raw_output = cls.openstack('aggregate delete ' + cls.NAME) - cls.assertOutput('', raw_output) + del_output = self.openstack( + 'aggregate delete ' + name1 + ' ' + name2) + self.assertOutput('', del_output) def test_aggregate_list(self): - opts = self.get_opts(self.HEADERS) - raw_output = self.openstack('aggregate list' + opts) - self.assertIn(self.NAME, raw_output) - - def test_aggregate_show(self): - opts = self.get_opts(self.FIELDS) - raw_output = self.openstack('aggregate show ' + self.NAME + opts) - self.assertEqual(self.NAME + "\n", raw_output) + """Test aggregate list""" + name1 = uuid.uuid4().hex + self.openstack( + 'aggregate create ' + + '--zone nova ' + + '--property a=b ' + + name1) + self.addCleanup(self.openstack, 'aggregate delete ' + name1) - def test_aggregate_properties(self): - opts = self.get_opts(['name', 'properties']) + name2 = uuid.uuid4().hex + self.openstack( + 'aggregate create ' + + '--zone internal ' + + '--property c=d ' + + name2) + self.addCleanup(self.openstack, 'aggregate delete ' + name2) + + cmd_output = json.loads(self.openstack( + 'aggregate list -f json')) + names = [x['Name'] for x in cmd_output] + self.assertIn(name1, names) + self.assertIn(name2, names) + zones = [x['Availability Zone'] for x in cmd_output] + self.assertIn('nova', zones) + self.assertIn('internal', zones) + + # Test aggregate list --long + cmd_output = json.loads(self.openstack( + 'aggregate list --long -f json')) + names = [x['Name'] for x in cmd_output] + self.assertIn(name1, names) + self.assertIn(name2, names) + zones = [x['Availability Zone'] for x in cmd_output] + self.assertIn('nova', zones) + self.assertIn('internal', zones) + properties = [x['Properties'] for x in cmd_output] + self.assertIn({'a': 'b'}, properties) + self.assertIn({'c': 'd'}, properties) + + def test_aggregate_set_and_unset(self): + """Test aggregate set, show and unset""" + name1 = uuid.uuid4().hex + name2 = uuid.uuid4().hex + self.openstack( + 'aggregate create ' + + '--zone nova ' + + '--property a=b ' + + name1) + self.addCleanup(self.openstack, 'aggregate delete ' + name2) raw_output = self.openstack( - 'aggregate set --property a=b --property c=d ' + self.NAME + 'aggregate set --name ' + + name2 + + ' --zone internal ' + + '--no-property ' + + '--property c=d ' + + name1 ) - self.assertEqual('', raw_output) - - raw_output = self.openstack('aggregate show ' + self.NAME + opts) - self.assertIn(self.NAME + "\na='b', c='d'\n", raw_output) + self.assertOutput('', raw_output) - raw_output = self.openstack( - 'aggregate unset --property a ' + self.NAME + cmd_output = json.loads(self.openstack( + 'aggregate show -f json ' + name2)) + self.assertEqual( + name2, + cmd_output['name'] ) - self.assertEqual('', raw_output) - - raw_output = self.openstack('aggregate show ' + self.NAME + opts) - self.assertIn(self.NAME + "\nc='d'\n", raw_output) - - raw_output = self.openstack( - 'aggregate set --property a=b --property c=d ' + self.NAME + self.assertEqual( + 'internal', + cmd_output['availability_zone'] ) - self.assertEqual('', raw_output) - - raw_output = self.openstack( - 'aggregate set --no-property ' + self.NAME + self.assertIn( + "c='d'", + cmd_output['properties'] + ) + self.assertNotIn( + "a='b'", + cmd_output['properties'] ) - self.assertEqual('', raw_output) - - raw_output = self.openstack('aggregate show ' + self.NAME + opts) - self.assertNotIn("a='b', c='d'", raw_output) - - def test_aggregate_set(self): - opts = self.get_opts(["name", "availability_zone"]) + # Test unset raw_output = self.openstack( - 'aggregate set --zone Zone_1 ' + self.NAME) - self.assertEqual("", raw_output) + 'aggregate unset --property c ' + + name2 + ) + self.assertOutput('', raw_output) - raw_output = self.openstack('aggregate show ' + self.NAME + opts) - self.assertEqual("Zone_1\n" + self.NAME + "\n", raw_output) + cmd_output = json.loads(self.openstack( + 'aggregate show -f json ' + name2)) + self.assertNotIn( + "c='d'", + cmd_output['properties'] + ) def test_aggregate_add_and_remove_host(self): - opts = self.get_opts(["hosts", "name"]) - - raw_output = self.openstack('host list -f value -c "Host Name"') - host_name = raw_output.split()[0] - + """Test aggregate add and remove host""" + name = uuid.uuid4().hex self.openstack( - 'aggregate add host ' + self.NAME + ' ' + host_name) - raw_output = self.openstack('aggregate show ' + self.NAME + opts) - self.assertEqual("[u'" + host_name + "']" + "\n" + self.NAME + "\n", - raw_output) + 'aggregate create ' + name) + self.addCleanup(self.openstack, 'aggregate delete ' + name) + + # Get a host + cmd_output = json.loads(self.openstack( + 'host list -f json')) + host_name = cmd_output[0]['Host Name'] + + # Test add host + cmd_output = json.loads(self.openstack( + 'aggregate add host -f json ' + + name + ' ' + + host_name + )) + self.assertIn( + host_name, + cmd_output['hosts'] + ) - self.openstack( - 'aggregate remove host ' + self.NAME + ' ' + host_name) - raw_output = self.openstack('aggregate show ' + self.NAME + opts) - self.assertEqual("[]\n" + self.NAME + "\n", raw_output) + # Test remove host + cmd_output = json.loads(self.openstack( + 'aggregate remove host -f json ' + + name + ' ' + + host_name + )) + self.assertNotIn( + host_name, + cmd_output['hosts'] + ) diff --git a/openstackclient/tests/functional/identity/v3/test_group.py b/openstackclient/tests/functional/identity/v3/test_group.py index 70491183..917d5df0 100644 --- a/openstackclient/tests/functional/identity/v3/test_group.py +++ b/openstackclient/tests/functional/identity/v3/test_group.py @@ -102,11 +102,7 @@ class GroupTests(common.IdentityTests): 'user_domain': self.domain_name, 'group': group_name, 'user': username}) - self.assertEqual( - '%(user)s added to group %(group)s\n' % {'user': username, - 'group': group_name}, - raw_output - ) + self.assertOutput('', raw_output) def test_group_contains_user(self): group_name = self._create_dummy_group() @@ -128,11 +124,7 @@ class GroupTests(common.IdentityTests): 'user_domain': self.domain_name, 'group': group_name, 'user': username}) - self.assertEqual( - '%(user)s added to group %(group)s\n' % {'user': username, - 'group': group_name}, - raw_output - ) + self.assertOutput('', raw_output) raw_output = self.openstack( 'group contains user ' '--group-domain %(group_domain)s ' @@ -165,14 +157,5 @@ class GroupTests(common.IdentityTests): 'user_domain': self.domain_name, 'group': group_name, 'user': username}) - self.assertEqual( - '%(user)s added to group %(group)s\n' % {'user': username, - 'group': group_name}, - add_raw_output - ) - self.assertEqual( - '%(user)s removed from ' - 'group %(group)s\n' % {'user': username, - 'group': group_name}, - remove_raw_output - ) + self.assertOutput('', add_raw_output) + self.assertOutput('', remove_raw_output) diff --git a/openstackclient/tests/functional/identity/v3/test_project.py b/openstackclient/tests/functional/identity/v3/test_project.py index 5639dc16..96d41c3a 100644 --- a/openstackclient/tests/functional/identity/v3/test_project.py +++ b/openstackclient/tests/functional/identity/v3/test_project.py @@ -10,6 +10,8 @@ # License for the specific language governing permissions and limitations # under the License. +import json + from tempest.lib.common.utils import data_utils from openstackclient.tests.functional.identity.v3 import common @@ -111,3 +113,14 @@ class ProjectTests(common.IdentityTests): 'name': self.project_name}) items = self.parse_show(raw_output) self.assert_show_fields(items, self.PROJECT_FIELDS) + + def test_project_show_with_parents_children(self): + json_output = json.loads(self.openstack( + 'project show ' + '--parents --children -f json ' + '--domain %(domain)s ' + '%(name)s' % {'domain': self.domain_name, + 'name': self.project_name})) + for attr_name in (self.PROJECT_FIELDS + ['parents', 'subtree']): + self.assertIn(attr_name, json_output) + self.assertEqual(self.project_name, json_output.get('name')) diff --git a/openstackclient/tests/functional/volume/v1/test_qos.py b/openstackclient/tests/functional/volume/v1/test_qos.py index 770d5acb..9ca32b0a 100644 --- a/openstackclient/tests/functional/volume/v1/test_qos.py +++ b/openstackclient/tests/functional/volume/v1/test_qos.py @@ -10,6 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. +import json import uuid from openstackclient.tests.functional.volume.v1 import common @@ -18,38 +19,103 @@ from openstackclient.tests.functional.volume.v1 import common class QosTests(common.BaseVolumeTests): """Functional tests for volume qos. """ - NAME = uuid.uuid4().hex - HEADERS = ['Name'] - FIELDS = ['id', 'name'] - ID = None - - @classmethod - def setUpClass(cls): - super(QosTests, cls).setUpClass() - opts = cls.get_opts(cls.FIELDS) - raw_output = cls.openstack('volume qos create ' + cls.NAME + opts) - cls.ID, name, rol = raw_output.split('\n') - cls.assertOutput(cls.NAME, name) - - @classmethod - def tearDownClass(cls): - raw_output = cls.openstack('volume qos delete ' + cls.ID) - cls.assertOutput('', raw_output) - - def test_volume_qos_list(self): - opts = self.get_opts(self.HEADERS) - raw_output = self.openstack('volume qos list' + opts) - self.assertIn(self.NAME, raw_output) - - def test_volume_qos_show(self): - opts = self.get_opts(self.FIELDS) - raw_output = self.openstack('volume qos show ' + self.ID + opts) - self.assertEqual(self.ID + "\n" + self.NAME + "\n", raw_output) - - def test_volume_qos_metadata(self): + def test_volume_qos_create_list(self): + """Test create, list, delete multiple""" + name1 = uuid.uuid4().hex + cmd_output = json.loads(self.openstack( + 'volume qos create -f json ' + + name1 + )) + self.assertEqual( + name1, + cmd_output['name'] + ) + + name2 = uuid.uuid4().hex + cmd_output = json.loads(self.openstack( + 'volume qos create -f json ' + + name2 + )) + self.assertEqual( + name2, + cmd_output['name'] + ) + + # Test list + cmd_output = json.loads(self.openstack( + 'volume qos list -f json' + )) + names = [x["Name"] for x in cmd_output] + self.assertIn(name1, names) + self.assertIn(name2, names) + + # Test delete multiple + del_output = self.openstack('volume qos delete ' + name1 + ' ' + name2) + self.assertOutput('', del_output) + + def test_volume_qos_set_show_unset(self): + """Tests create volume qos, set, unset, show, delete""" + + name = uuid.uuid4().hex + cmd_output = json.loads(self.openstack( + 'volume qos create -f json ' + + '--consumer front-end ' + '--property Alpha=a ' + + name + )) + self.addCleanup(self.openstack, 'volume qos delete ' + name) + self.assertEqual( + name, + cmd_output['name'] + ) + + self.assertEqual( + "front-end", + cmd_output['consumer'] + ) + + # Test volume qos set + raw_output = self.openstack( + 'volume qos set ' + + '--property Alpha=c ' + + '--property Beta=b ' + + name, + ) + self.assertOutput('', raw_output) + + # Test volume qos show + cmd_output = json.loads(self.openstack( + 'volume qos show -f json ' + + name + )) + self.assertEqual( + name, + cmd_output['name'] + ) + self.assertEqual( + "Alpha='c', Beta='b'", + cmd_output['specs'] + ) + + # Test volume qos unset raw_output = self.openstack( - 'volume qos set --property a=b --property c=d ' + self.ID) - self.assertEqual("", raw_output) - opts = self.get_opts(['name', 'specs']) - raw_output = self.openstack('volume qos show ' + self.ID + opts) - self.assertEqual(self.NAME + "\na='b', c='d'\n", raw_output) + 'volume qos unset ' + + '--property Alpha ' + + name, + ) + self.assertOutput('', raw_output) + + cmd_output = json.loads(self.openstack( + 'volume qos show -f json ' + + name + )) + self.assertEqual( + name, + cmd_output['name'] + ) + self.assertEqual( + "Beta='b'", + cmd_output['specs'] + ) + + # TODO(qiangjiahui): Add tests for associate and disassociate volume type diff --git a/openstackclient/tests/functional/volume/v2/test_qos.py b/openstackclient/tests/functional/volume/v2/test_qos.py index 1558c216..aee10dca 100644 --- a/openstackclient/tests/functional/volume/v2/test_qos.py +++ b/openstackclient/tests/functional/volume/v2/test_qos.py @@ -10,6 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. +import json import uuid from openstackclient.tests.functional.volume.v2 import common @@ -18,45 +19,107 @@ from openstackclient.tests.functional.volume.v2 import common class QosTests(common.BaseVolumeTests): """Functional tests for volume qos. """ - NAME = uuid.uuid4().hex - HEADERS = ['Name'] - FIELDS = ['id', 'name'] - ID = None - - @classmethod - def setUpClass(cls): - super(QosTests, cls).setUpClass() - opts = cls.get_opts(cls.FIELDS) - raw_output = cls.openstack('volume qos create ' + cls.NAME + opts) - cls.ID, name, rol = raw_output.split('\n') - cls.assertOutput(cls.NAME, name) - - @classmethod - def tearDownClass(cls): - raw_output = cls.openstack('volume qos delete ' + cls.ID) - cls.assertOutput('', raw_output) - - def test_volume_qos_list(self): - opts = self.get_opts(self.HEADERS) - raw_output = self.openstack('volume qos list' + opts) - self.assertIn(self.NAME, raw_output) - - def test_volume_qos_show(self): - opts = self.get_opts(self.FIELDS) - raw_output = self.openstack('volume qos show ' + self.ID + opts) - self.assertEqual(self.ID + "\n" + self.NAME + "\n", raw_output) - - def test_volume_qos_metadata(self): + def test_volume_qos_create_delete_list(self): + """Test create, list, delete multiple""" + name1 = uuid.uuid4().hex + cmd_output = json.loads(self.openstack( + 'volume qos create -f json ' + + name1 + )) + self.assertEqual( + name1, + cmd_output['name'] + ) + + name2 = uuid.uuid4().hex + cmd_output = json.loads(self.openstack( + 'volume qos create -f json ' + + name2 + )) + self.assertEqual( + name2, + cmd_output['name'] + ) + + # Test list + cmd_output = json.loads(self.openstack( + 'volume qos list -f json' + )) + names = [x["Name"] for x in cmd_output] + self.assertIn(name1, names) + self.assertIn(name2, names) + + # Test delete multiple + del_output = self.openstack('volume qos delete ' + name1 + ' ' + name2) + self.assertOutput('', del_output) + + def test_volume_qos_set_show_unset(self): + """Tests create volume qos, set, unset, show, delete""" + + name = uuid.uuid4().hex + cmd_output = json.loads(self.openstack( + 'volume qos create -f json ' + + '--consumer front-end ' + '--property Alpha=a ' + + name + )) + self.addCleanup(self.openstack, 'volume qos delete ' + name) + self.assertEqual( + name, + cmd_output['name'] + ) + + self.assertEqual( + "front-end", + cmd_output['consumer'] + ) + self.assertEqual( + "Alpha='a'", + cmd_output['properties'] + ) + + # Test volume qos set raw_output = self.openstack( - 'volume qos set --property a=b --property c=d ' + self.ID) - self.assertEqual("", raw_output) - opts = self.get_opts(['name', 'properties']) - raw_output = self.openstack('volume qos show ' + self.ID + opts) - self.assertEqual(self.NAME + "\na='b', c='d'\n", raw_output) + 'volume qos set ' + + '--property Alpha=c ' + + '--property Beta=b ' + + name, + ) + self.assertOutput('', raw_output) + + # Test volume qos show + cmd_output = json.loads(self.openstack( + 'volume qos show -f json ' + + name + )) + self.assertEqual( + name, + cmd_output['name'] + ) + self.assertEqual( + "Alpha='c', Beta='b'", + cmd_output['properties'] + ) + # Test volume qos unset raw_output = self.openstack( - 'volume qos unset --property a ' + self.ID) - self.assertEqual("", raw_output) - opts = self.get_opts(['name', 'properties']) - raw_output = self.openstack('volume qos show ' + self.ID + opts) - self.assertEqual(self.NAME + "\nc='d'\n", raw_output) + 'volume qos unset ' + + '--property Alpha ' + + name, + ) + self.assertOutput('', raw_output) + + cmd_output = json.loads(self.openstack( + 'volume qos show -f json ' + + name + )) + self.assertEqual( + name, + cmd_output['name'] + ) + self.assertEqual( + "Beta='b'", + cmd_output['properties'] + ) + + # TODO(qiangjiahui): Add tests for associate and disassociate volume type |
