summaryrefslogtreecommitdiff
path: root/openstackclient/tests/unit
diff options
context:
space:
mode:
authorSławek Kapłoński <slawek@kaplonski.pl>2018-10-19 12:46:21 +0300
committerVlad Gusev <vlad.esten@gmail.com>2019-02-24 10:41:53 +0000
commit75cba9d1cbdd7b14b0d507af27f896c6c45e713e (patch)
tree0e09aa73240b1618083593eb57f7aa2628a000d0 /openstackclient/tests/unit
parent0a187905c01f6bc2b9855081ac0042f00715dedf (diff)
downloadpython-openstackclient-75cba9d1cbdd7b14b0d507af27f896c6c45e713e.tar.gz
Add support for get details of Quota
With passing "--detail" argument to "openstack quota list", details about current usage should be returned. It is currently supported by Nova and Neutron so details of resources from those projects can be returned. Change-Id: I48fda15b34283bb7c66ea18ed28262f48b9229fe Related-Bug: #1716043
Diffstat (limited to 'openstackclient/tests/unit')
-rw-r--r--openstackclient/tests/unit/common/test_quota.py87
-rw-r--r--openstackclient/tests/unit/compute/v2/fakes.py32
-rw-r--r--openstackclient/tests/unit/network/v2/fakes.py23
3 files changed, 138 insertions, 4 deletions
diff --git a/openstackclient/tests/unit/common/test_quota.py b/openstackclient/tests/unit/common/test_quota.py
index 1a3da31d..4f9e321b 100644
--- a/openstackclient/tests/unit/common/test_quota.py
+++ b/openstackclient/tests/unit/common/test_quota.py
@@ -197,6 +197,85 @@ class TestQuotaList(TestQuota):
self.cmd = quota.ListQuota(self.app, None)
+ @staticmethod
+ def _get_detailed_reference_data(quota):
+ reference_data = []
+ for name, values in quota.to_dict().items():
+ if type(values) is dict:
+ if 'used' in values:
+ # For network quota it's "used" key instead of "in_use"
+ in_use = values['used']
+ else:
+ in_use = values['in_use']
+ resource_values = [
+ in_use,
+ values['reserved'],
+ values['limit']]
+ reference_data.append(tuple([name] + resource_values))
+ return reference_data
+
+ def test_quota_list_details_compute(self):
+ detailed_quota = (
+ compute_fakes.FakeQuota.create_one_comp_detailed_quota())
+
+ detailed_column_header = (
+ 'Resource',
+ 'In Use',
+ 'Reserved',
+ 'Limit',
+ )
+ detailed_reference_data = (
+ self._get_detailed_reference_data(detailed_quota))
+
+ self.compute.quotas.get = mock.Mock(return_value=detailed_quota)
+
+ arglist = [
+ '--detail', '--compute',
+ ]
+ verifylist = [
+ ('detail', True),
+ ('compute', True),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ ret_quotas = list(data)
+
+ self.assertEqual(detailed_column_header, columns)
+ self.assertEqual(
+ sorted(detailed_reference_data), sorted(ret_quotas))
+
+ def test_quota_list_details_network(self):
+ detailed_quota = (
+ network_fakes.FakeQuota.create_one_net_detailed_quota())
+
+ detailed_column_header = (
+ 'Resource',
+ 'In Use',
+ 'Reserved',
+ 'Limit',
+ )
+ detailed_reference_data = (
+ self._get_detailed_reference_data(detailed_quota))
+
+ self.network.get_quota = mock.Mock(return_value=detailed_quota)
+
+ arglist = [
+ '--detail', '--network',
+ ]
+ verifylist = [
+ ('detail', True),
+ ('network', True),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ ret_quotas = list(data)
+
+ self.assertEqual(detailed_column_header, columns)
+ self.assertEqual(
+ sorted(detailed_reference_data), sorted(ret_quotas))
+
def test_quota_list_compute(self):
# Two projects with non-default quotas
self.compute.quotas.get = mock.Mock(
@@ -827,13 +906,13 @@ class TestQuotaShow(TestQuota):
self.cmd.take_action(parsed_args)
self.compute_quotas_mock.get.assert_called_once_with(
- self.projects[0].id,
+ self.projects[0].id, detail=False
)
self.volume_quotas_mock.get.assert_called_once_with(
self.projects[0].id,
)
self.network.get_quota.assert_called_once_with(
- self.projects[0].id,
+ self.projects[0].id, details=False
)
self.assertNotCalled(self.network.get_quota_default)
@@ -889,12 +968,12 @@ class TestQuotaShow(TestQuota):
self.cmd.take_action(parsed_args)
self.compute_quotas_mock.get.assert_called_once_with(
- identity_fakes.project_id,
+ identity_fakes.project_id, detail=False
)
self.volume_quotas_mock.get.assert_called_once_with(
identity_fakes.project_id,
)
self.network.get_quota.assert_called_once_with(
- identity_fakes.project_id,
+ identity_fakes.project_id, details=False
)
self.assertNotCalled(self.network.get_quota_default)
diff --git a/openstackclient/tests/unit/compute/v2/fakes.py b/openstackclient/tests/unit/compute/v2/fakes.py
index 234bbd9b..37535aa0 100644
--- a/openstackclient/tests/unit/compute/v2/fakes.py
+++ b/openstackclient/tests/unit/compute/v2/fakes.py
@@ -1400,6 +1400,38 @@ class FakeQuota(object):
return quota
+ @staticmethod
+ def create_one_comp_detailed_quota(attrs=None):
+ """Create one quota"""
+
+ attrs = attrs or {}
+
+ quota_attrs = {
+ 'id': 'project-id-' + uuid.uuid4().hex,
+ 'cores': {'reserved': 0, 'in_use': 0, 'limit': 20},
+ 'fixed_ips': {'reserved': 0, 'in_use': 0, 'limit': 30},
+ 'injected_files': {'reserved': 0, 'in_use': 0, 'limit': 100},
+ 'injected_file_content_bytes': {
+ 'reserved': 0, 'in_use': 0, 'limit': 10240},
+ 'injected_file_path_bytes': {
+ 'reserved': 0, 'in_use': 0, 'limit': 255},
+ 'instances': {'reserved': 0, 'in_use': 0, 'limit': 50},
+ 'key_pairs': {'reserved': 0, 'in_use': 0, 'limit': 20},
+ 'metadata_items': {'reserved': 0, 'in_use': 0, 'limit': 10},
+ 'ram': {'reserved': 0, 'in_use': 0, 'limit': 51200},
+ 'server_groups': {'reserved': 0, 'in_use': 0, 'limit': 10},
+ 'server_group_members': {'reserved': 0, 'in_use': 0, 'limit': 10}
+ }
+
+ quota_attrs.update(attrs)
+ quota = fakes.FakeResource(
+ info=copy.deepcopy(quota_attrs),
+ loaded=True)
+
+ quota.project_id = quota_attrs['id']
+
+ return quota
+
class FakeLimits(object):
"""Fake limits"""
diff --git a/openstackclient/tests/unit/network/v2/fakes.py b/openstackclient/tests/unit/network/v2/fakes.py
index 28e92d11..ee0919fd 100644
--- a/openstackclient/tests/unit/network/v2/fakes.py
+++ b/openstackclient/tests/unit/network/v2/fakes.py
@@ -1700,3 +1700,26 @@ class FakeQuota(object):
info=copy.deepcopy(quota_attrs),
loaded=True)
return quota
+
+ @staticmethod
+ def create_one_net_detailed_quota(attrs=None):
+ """Create one quota"""
+ attrs = attrs or {}
+
+ quota_attrs = {
+ 'floating_ips': {'used': 0, 'reserved': 0, 'limit': 20},
+ 'networks': {'used': 0, 'reserved': 0, 'limit': 25},
+ 'ports': {'used': 0, 'reserved': 0, 'limit': 11},
+ 'rbac_policies': {'used': 0, 'reserved': 0, 'limit': 15},
+ 'routers': {'used': 0, 'reserved': 0, 'limit': 40},
+ 'security_groups': {'used': 0, 'reserved': 0, 'limit': 10},
+ 'security_group_rules': {'used': 0, 'reserved': 0, 'limit': 100},
+ 'subnets': {'used': 0, 'reserved': 0, 'limit': 20},
+ 'subnet_pools': {'used': 0, 'reserved': 0, 'limit': 30}}
+
+ quota_attrs.update(attrs)
+
+ quota = fakes.FakeResource(
+ info=copy.deepcopy(quota_attrs),
+ loaded=True)
+ return quota