diff options
| author | Rui Chen <chenrui.momo@gmail.com> | 2017-03-10 17:32:44 +0800 |
|---|---|---|
| committer | Rui Chen <chenrui.momo@gmail.com> | 2017-09-18 15:14:22 +0800 |
| commit | ff9bd34b3c63c22c96d7a0711939828a38f003d8 (patch) | |
| tree | a2e26ad3861c5450518cf65d9c8b614da79d16e9 /openstackclient/tests/unit/compute | |
| parent | 5309bf5f873aba4e994c9011a893987c40d56eda (diff) | |
| download | python-openstackclient-ff9bd34b3c63c22c96d7a0711939828a38f003d8.tar.gz | |
[Compute]Make column content readable for both human and machine
Currently, we use utils.format_dict(), utils.format_list(),
utils.format_list_of_dicts to make column value can be easy to read by
human, but osc support to format the CLI output into several format,
like: json, shell, csv, yaml, most of these should be understand by
program and code, so keeping the column content as the original value
make sense, like {u'name': u'RuiChen'} than name='RuiChen'
The patch include all compute commands.
Change-Id: I313a52f94895625e6045df870320840fee157759
Implements: blueprint osc-formattable-columns
Partial-Bug: #1538015
Partial-Bug: #1538006
Diffstat (limited to 'openstackclient/tests/unit/compute')
4 files changed, 84 insertions, 63 deletions
diff --git a/openstackclient/tests/unit/compute/v2/test_aggregate.py b/openstackclient/tests/unit/compute/v2/test_aggregate.py index 3efe0dbd..6cdabad1 100644 --- a/openstackclient/tests/unit/compute/v2/test_aggregate.py +++ b/openstackclient/tests/unit/compute/v2/test_aggregate.py @@ -16,6 +16,7 @@ import mock from mock import call +from osc_lib.cli import format_columns from osc_lib import exceptions from osc_lib import utils @@ -443,7 +444,7 @@ class TestAggregateShow(TestAggregate): TestAggregate.fake_ag.hosts, TestAggregate.fake_ag.id, TestAggregate.fake_ag.name, - utils.format_dict( + format_columns.DictColumn( {key: value for key, value in TestAggregate.fake_ag.metadata.items() if key != 'availability_zone'}), @@ -467,7 +468,7 @@ class TestAggregateShow(TestAggregate): self.aggregate_mock.get.assert_called_once_with(parsed_args.aggregate) self.assertEqual(self.columns, columns) - self.assertEqual(self.data, data) + self.assertItemEqual(self.data, data) class TestAggregateUnset(TestAggregate): diff --git a/openstackclient/tests/unit/compute/v2/test_flavor.py b/openstackclient/tests/unit/compute/v2/test_flavor.py index 4cdbb25b..6d329ffa 100644 --- a/openstackclient/tests/unit/compute/v2/test_flavor.py +++ b/openstackclient/tests/unit/compute/v2/test_flavor.py @@ -16,8 +16,8 @@ import mock from mock import call +from osc_lib.cli import format_columns from osc_lib import exceptions -from osc_lib import utils from openstackclient.compute.v2 import flavor from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes @@ -67,7 +67,7 @@ class TestFlavorCreate(TestFlavor): flavor.id, flavor.name, flavor.is_public, - utils.format_dict(flavor.properties), + format_columns.DictColumn(flavor.properties), flavor.ram, flavor.rxtx_factor, flavor.swap, @@ -107,7 +107,7 @@ class TestFlavorCreate(TestFlavor): self.flavors_mock.create.assert_called_once_with(*default_args) self.assertEqual(self.columns, columns) - self.assertEqual(self.data, data) + self.assertItemEqual(self.data, data) def test_flavor_create_all_options(self): @@ -154,7 +154,7 @@ class TestFlavorCreate(TestFlavor): self.flavor.get_keys.assert_called_once_with() self.assertEqual(self.columns, columns) - self.assertEqual(self.data, data) + self.assertItemEqual(self.data, data) def test_flavor_create_other_options(self): @@ -208,7 +208,7 @@ class TestFlavorCreate(TestFlavor): {'key1': 'value1', 'key2': 'value2'}) self.flavor.get_keys.assert_called_with() self.assertEqual(self.columns, columns) - self.assertEqual(self.data, data) + self.assertItemEqual(self.data, data) def test_public_flavor_create_with_project(self): arglist = [ @@ -338,7 +338,7 @@ class TestFlavorList(TestFlavor): data_long = (data[0] + ( flavors[0].swap, flavors[0].rxtx_factor, - u'property=\'value\'' + format_columns.DictColumn(flavors[0].properties), ), ) def setUp(self): @@ -376,7 +376,7 @@ class TestFlavorList(TestFlavor): ) self.assertEqual(self.columns, columns) - self.assertEqual(tuple(self.data), tuple(data)) + self.assertListItemEqual(self.data, list(data)) def test_flavor_list_all_flavors(self): arglist = [ @@ -405,7 +405,7 @@ class TestFlavorList(TestFlavor): ) self.assertEqual(self.columns, columns) - self.assertEqual(tuple(self.data), tuple(data)) + self.assertListItemEqual(self.data, list(data)) def test_flavor_list_private_flavors(self): arglist = [ @@ -434,7 +434,7 @@ class TestFlavorList(TestFlavor): ) self.assertEqual(self.columns, columns) - self.assertEqual(tuple(self.data), tuple(data)) + self.assertListItemEqual(self.data, list(data)) def test_flavor_list_public_flavors(self): arglist = [ @@ -463,7 +463,7 @@ class TestFlavorList(TestFlavor): ) self.assertEqual(self.columns, columns) - self.assertEqual(tuple(self.data), tuple(data)) + self.assertListItemEqual(self.data, list(data)) def test_flavor_list_long(self): arglist = [ @@ -492,7 +492,7 @@ class TestFlavorList(TestFlavor): ) self.assertEqual(self.columns_long, columns) - self.assertEqual(tuple(self.data_long), tuple(data)) + self.assertListItemEqual(self.data_long, list(data)) class TestFlavorSet(TestFlavor): @@ -652,7 +652,7 @@ class TestFlavorShow(TestFlavor): flavor.id, flavor.name, flavor.is_public, - utils.format_dict(flavor.get_keys()), + format_columns.DictColumn(flavor.get_keys()), flavor.ram, flavor.rxtx_factor, flavor.swap, @@ -689,7 +689,7 @@ class TestFlavorShow(TestFlavor): columns, data = self.cmd.take_action(parsed_args) self.assertEqual(self.columns, columns) - self.assertEqual(self.data, data) + self.assertItemEqual(self.data, data) def test_private_flavor_show(self): private_flavor = compute_fakes.FakeFlavor.create_one_flavor( @@ -709,12 +709,12 @@ class TestFlavorShow(TestFlavor): data_with_project = ( private_flavor.disabled, private_flavor.ephemeral, - self.flavor_access.tenant_id, + format_columns.ListColumn([self.flavor_access.tenant_id]), private_flavor.disk, private_flavor.id, private_flavor.name, private_flavor.is_public, - utils.format_dict(private_flavor.get_keys()), + format_columns.DictColumn(private_flavor.get_keys()), private_flavor.ram, private_flavor.rxtx_factor, private_flavor.swap, @@ -728,7 +728,7 @@ class TestFlavorShow(TestFlavor): self.flavor_access_mock.list.assert_called_with( flavor=private_flavor.id) self.assertEqual(self.columns, columns) - self.assertEqual(data_with_project, data) + self.assertItemEqual(data_with_project, data) class TestFlavorUnset(TestFlavor): diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py index a1225c30..80dc5de8 100644 --- a/openstackclient/tests/unit/compute/v2/test_server.py +++ b/openstackclient/tests/unit/compute/v2/test_server.py @@ -18,6 +18,7 @@ import getpass import mock from mock import call +from osc_lib.cli import format_columns from osc_lib import exceptions from osc_lib import utils as common_utils from oslo_utils import timeutils @@ -298,14 +299,15 @@ class TestServerCreate(TestServer): def datalist(self): datalist = ( server._format_servers_list_power_state( - getattr(self.new_server, 'OS-EXT-STS:power_state')), - '', + getattr(self.new_server, 'OS-EXT-STS:power_state') + ), + format_columns.DictListColumn(self.new_server.networks), self.flavor.name + ' (' + self.new_server.flavor.get('id') + ')', self.new_server.id, self.image.name + ' (' + self.new_server.image.get('id') + ')', self.new_server.name, self.new_server.networks, - '', + format_columns.DictColumn(''), ) return datalist @@ -313,7 +315,10 @@ class TestServerCreate(TestServer): super(TestServerCreate, self).setUp() attrs = { - 'networks': {}, + 'networks': { + 'private': ['fdb4:4f0f:960b:0:f816:3eff:fed9:af5e', + '10.0.0.8'] + }, } self.new_server = compute_fakes.FakeServer.create_one_server( attrs=attrs) @@ -394,7 +399,7 @@ class TestServerCreate(TestServer): ) self.assertEqual(self.columns, columns) - self.assertEqual(self.datalist(), data) + self.assertItemEqual(self.datalist(), data) self.assertFalse(self.images_mock.called) self.assertFalse(self.flavors_mock.called) @@ -459,7 +464,7 @@ class TestServerCreate(TestServer): ) self.assertEqual(self.columns, columns) - self.assertEqual(self.datalist(), data) + self.assertItemEqual(self.datalist(), data) def test_server_create_with_not_exist_security_group(self): arglist = [ @@ -545,7 +550,7 @@ class TestServerCreate(TestServer): ) self.assertEqual(self.columns, columns) - self.assertEqual(self.datalist(), data) + self.assertItemEqual(self.datalist(), data) def test_server_create_with_network(self): arglist = [ @@ -650,7 +655,7 @@ class TestServerCreate(TestServer): ) self.assertEqual(self.columns, columns) - self.assertEqual(self.datalist(), data) + self.assertItemEqual(self.datalist(), data) def test_server_create_with_auto_network(self): arglist = [ @@ -695,7 +700,7 @@ class TestServerCreate(TestServer): ) self.assertEqual(self.columns, columns) - self.assertEqual(self.datalist(), data) + self.assertItemEqual(self.datalist(), data) def test_server_create_with_none_network(self): arglist = [ @@ -740,7 +745,7 @@ class TestServerCreate(TestServer): ) self.assertEqual(self.columns, columns) - self.assertEqual(self.datalist(), data) + self.assertItemEqual(self.datalist(), data) def test_server_create_with_conflict_network_options(self): arglist = [ @@ -903,7 +908,7 @@ class TestServerCreate(TestServer): **kwargs ) self.assertEqual(self.columns, columns) - self.assertEqual(self.datalist(), data) + self.assertItemEqual(self.datalist(), data) @mock.patch.object(common_utils, 'wait_for_status', return_value=False) def test_server_create_with_wait_fails(self, mock_wait_for_status): @@ -1010,7 +1015,7 @@ class TestServerCreate(TestServer): ) self.assertEqual(self.columns, columns) - self.assertEqual(self.datalist(), data) + self.assertItemEqual(self.datalist(), data) def test_server_create_with_block_device_mapping(self): arglist = [ @@ -1062,7 +1067,7 @@ class TestServerCreate(TestServer): ) self.assertEqual(self.columns, columns) - self.assertEqual(self.datalist(), data) + self.assertItemEqual(self.datalist(), data) def test_server_create_with_block_device_mapping_min_input(self): arglist = [ @@ -1113,7 +1118,7 @@ class TestServerCreate(TestServer): ) self.assertEqual(self.columns, columns) - self.assertEqual(self.datalist(), data) + self.assertItemEqual(self.datalist(), data) def test_server_create_with_block_device_mapping_default_input(self): arglist = [ @@ -1164,7 +1169,7 @@ class TestServerCreate(TestServer): ) self.assertEqual(self.columns, columns) - self.assertEqual(self.datalist(), data) + self.assertItemEqual(self.datalist(), data) def test_server_create_with_block_device_mapping_full_input(self): arglist = [ @@ -1219,7 +1224,7 @@ class TestServerCreate(TestServer): ) self.assertEqual(self.columns, columns) - self.assertEqual(self.datalist(), data) + self.assertItemEqual(self.datalist(), data) def test_server_create_with_block_device_mapping_snapshot(self): arglist = [ @@ -1274,7 +1279,7 @@ class TestServerCreate(TestServer): ) self.assertEqual(self.columns, columns) - self.assertEqual(self.datalist(), data) + self.assertItemEqual(self.datalist(), data) def test_server_create_with_block_device_mapping_multiple(self): arglist = [ @@ -1337,7 +1342,7 @@ class TestServerCreate(TestServer): ) self.assertEqual(self.columns, columns) - self.assertEqual(self.datalist(), data) + self.assertItemEqual(self.datalist(), data) def test_server_create_with_block_device_mapping_invalid_format(self): # 1. block device mapping don't contain equal sign "=" @@ -1597,7 +1602,7 @@ class TestServerList(TestServer): s.id, s.name, s.status, - server._format_servers_list_networks(s.networks), + format_columns.DictListColumn(s.networks), self.image.name, self.flavor.name, )) @@ -1609,20 +1614,20 @@ class TestServerList(TestServer): server._format_servers_list_power_state( getattr(s, 'OS-EXT-STS:power_state') ), - server._format_servers_list_networks(s.networks), + format_columns.DictListColumn(s.networks), self.image.name, s.image['id'], self.flavor.name, s.flavor['id'], getattr(s, 'OS-EXT-AZ:availability_zone'), getattr(s, 'OS-EXT-SRV-ATTR:host'), - s.Metadata, + format_columns.DictColumn(s.Metadata), )) self.data_no_name_lookup.append(( s.id, s.name, s.status, - server._format_servers_list_networks(s.networks), + format_columns.DictListColumn(s.networks), s.image['id'], s.flavor['id'] )) @@ -1640,7 +1645,7 @@ class TestServerList(TestServer): self.servers_mock.list.assert_called_with(**self.kwargs) self.assertEqual(self.columns, columns) - self.assertEqual(tuple(self.data), tuple(data)) + self.assertListItemEqual(self.data, list(data)) def test_server_list_long_option(self): arglist = [ @@ -1656,7 +1661,7 @@ class TestServerList(TestServer): self.servers_mock.list.assert_called_with(**self.kwargs) self.assertEqual(self.columns_long, columns) - self.assertEqual(tuple(self.data_long), tuple(data)) + self.assertListItemEqual(self.data_long, list(data)) def test_server_list_no_name_lookup_option(self): arglist = [ @@ -1672,7 +1677,7 @@ class TestServerList(TestServer): self.servers_mock.list.assert_called_with(**self.kwargs) self.assertEqual(self.columns, columns) - self.assertEqual(tuple(self.data_no_name_lookup), tuple(data)) + self.assertListItemEqual(self.data_no_name_lookup, list(data)) def test_server_list_n_option(self): arglist = [ @@ -1688,7 +1693,7 @@ class TestServerList(TestServer): self.servers_mock.list.assert_called_with(**self.kwargs) self.assertEqual(self.columns, columns) - self.assertEqual(tuple(self.data_no_name_lookup), tuple(data)) + self.assertListItemEqual(self.data_no_name_lookup, list(data)) def test_server_list_with_image(self): @@ -1708,7 +1713,7 @@ class TestServerList(TestServer): self.servers_mock.list.assert_called_with(**self.kwargs) self.assertEqual(self.columns, columns) - self.assertEqual(tuple(self.data), tuple(data)) + self.assertListItemEqual(self.data, list(data)) def test_server_list_with_flavor(self): @@ -1728,7 +1733,7 @@ class TestServerList(TestServer): self.servers_mock.list.assert_called_with(**self.kwargs) self.assertEqual(self.columns, columns) - self.assertEqual(tuple(self.data), tuple(data)) + self.assertListItemEqual(self.data, list(data)) def test_server_list_with_changes_since(self): @@ -1749,7 +1754,7 @@ class TestServerList(TestServer): self.servers_mock.list.assert_called_with(**self.kwargs) self.assertEqual(self.columns, columns) - self.assertEqual(tuple(self.data), tuple(data)) + self.assertListItemEqual(self.data, list(data)) @mock.patch.object(timeutils, 'parse_isotime', side_effect=ValueError) def test_server_list_with_invalid_changes_since(self, mock_parse_isotime): @@ -2700,14 +2705,16 @@ class TestServerShow(TestServer): self.data = ( 'Running', - 'public=10.20.30.40, 2001:db8::f', + format_columns.DictListColumn( + {'public': ['10.20.30.40', '2001:db8::f']} + ), self.flavor.name + " (" + self.flavor.id + ")", self.server.id, self.image.name + " (" + self.image.id + ")", self.server.name, {'public': ['10.20.30.40', '2001:db8::f']}, 'tenant-id-xxx', - '', + format_columns.DictColumn(''), ) def test_show_no_options(self): @@ -2730,7 +2737,7 @@ class TestServerShow(TestServer): columns, data = self.cmd.take_action(parsed_args) self.assertEqual(self.columns, columns) - self.assertEqual(self.data, data) + self.assertItemEqual(self.data, data) def test_show_diagnostics(self): arglist = [ @@ -2989,13 +2996,13 @@ class TestServerGeneral(TestServer): # Prepare expected data. # Since networks is a dict, whose items are in random order, there # could be two results after formatted. - data_1 = (u'private=2001:db8::f, 10.20.30.40; ' + data_1 = (u'private=10.20.30.40, 2001:db8::f; ' u'public=10.20.30.40, 2001:db8::f') data_2 = (u'public=10.20.30.40, 2001:db8::f; ' - u'private=2001:db8::f, 10.20.30.40') + u'private=10.20.30.40, 2001:db8::f') - # Call _format_servers_list_networks(). - networks_format = server._format_servers_list_networks(networks) + format_col = format_columns.DictListColumn(networks) + networks_format = format_col.human_readable() msg = ('Network string is not formatted correctly.\n' 'reference = %s or %s\n' @@ -3044,5 +3051,17 @@ class TestServerGeneral(TestServer): # 'networks' is used to create _server. Remove it. server_detail.pop('networks') + # Special handle for 'properties', it's DictColumn type + prop = server_detail.pop('properties') + expected_prop = info.pop('properties') + self.assertIsInstance(prop, format_columns.DictColumn) + self.assertEqual(expected_prop, prop.human_readable()) + + # Special handle for 'addresses', it's DictListColumn type + prop = server_detail.pop('addresses') + expected_prop = info.pop('addresses') + self.assertIsInstance(prop, format_columns.DictListColumn) + self.assertEqual(expected_prop, prop.human_readable()) + # Check the results. self.assertEqual(info, server_detail) diff --git a/openstackclient/tests/unit/compute/v2/test_server_group.py b/openstackclient/tests/unit/compute/v2/test_server_group.py index 088497da..d77767de 100644 --- a/openstackclient/tests/unit/compute/v2/test_server_group.py +++ b/openstackclient/tests/unit/compute/v2/test_server_group.py @@ -15,6 +15,7 @@ import mock +from osc_lib.cli import format_columns from osc_lib import exceptions from osc_lib import utils @@ -38,9 +39,9 @@ class TestServerGroup(compute_fakes.TestComputev2): data = ( fake_server_group.id, - utils.format_list(fake_server_group.members), + format_columns.ListColumn(fake_server_group.members), fake_server_group.name, - utils.format_list(fake_server_group.policies), + format_columns.ListColumn(fake_server_group.policies), fake_server_group.project_id, fake_server_group.user_id, ) @@ -78,7 +79,7 @@ class TestServerGroupCreate(TestServerGroup): ) self.assertEqual(self.columns, columns) - self.assertEqual(self.data, data) + self.assertItemEqual(self.data, data) class TestServerGroupDelete(TestServerGroup): @@ -182,14 +183,14 @@ class TestServerGroupList(TestServerGroup): list_data = (( TestServerGroup.fake_server_group.id, TestServerGroup.fake_server_group.name, - utils.format_list(TestServerGroup.fake_server_group.policies), + format_columns.ListColumn(TestServerGroup.fake_server_group.policies), ),) list_data_long = (( TestServerGroup.fake_server_group.id, TestServerGroup.fake_server_group.name, - utils.format_list(TestServerGroup.fake_server_group.policies), - utils.format_list(TestServerGroup.fake_server_group.members), + format_columns.ListColumn(TestServerGroup.fake_server_group.policies), + format_columns.ListColumn(TestServerGroup.fake_server_group.members), TestServerGroup.fake_server_group.project_id, TestServerGroup.fake_server_group.user_id, ),) @@ -211,7 +212,7 @@ class TestServerGroupList(TestServerGroup): self.server_groups_mock.list.assert_called_once_with(False) self.assertEqual(self.list_columns, columns) - self.assertEqual(self.list_data, tuple(data)) + self.assertListItemEqual(self.list_data, list(data)) def test_server_group_list_with_all_projects_and_long(self): arglist = [ @@ -227,7 +228,7 @@ class TestServerGroupList(TestServerGroup): self.server_groups_mock.list.assert_called_once_with(True) self.assertEqual(self.list_columns_long, columns) - self.assertEqual(self.list_data_long, tuple(data)) + self.assertListItemEqual(self.list_data_long, list(data)) class TestServerGroupShow(TestServerGroup): @@ -250,4 +251,4 @@ class TestServerGroupShow(TestServerGroup): columns, data = self.cmd.take_action(parsed_args) self.assertEqual(self.columns, columns) - self.assertEqual(self.data, data) + self.assertItemEqual(self.data, data) |
