summaryrefslogtreecommitdiff
path: root/openstackclient/tests/unit/compute
diff options
context:
space:
mode:
authorRui Chen <chenrui.momo@gmail.com>2017-03-10 17:32:44 +0800
committerRui Chen <chenrui.momo@gmail.com>2017-09-18 15:14:22 +0800
commitff9bd34b3c63c22c96d7a0711939828a38f003d8 (patch)
treea2e26ad3861c5450518cf65d9c8b614da79d16e9 /openstackclient/tests/unit/compute
parent5309bf5f873aba4e994c9011a893987c40d56eda (diff)
downloadpython-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')
-rw-r--r--openstackclient/tests/unit/compute/v2/test_aggregate.py5
-rw-r--r--openstackclient/tests/unit/compute/v2/test_flavor.py32
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server.py91
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server_group.py19
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)