Add unit test for getting project quota remains

This patch adds the unit test for get_project_quotas() when the
argument 'remains' is true. In this case, remains of each resource are
calculated.

'Remains' means the amount of a project quota which is not allocated to
users. The added test mocks quota_get_all(), which gets user quota if
explicitly set. 'Remains' of instances and cores are calculated by
subtracting 'hard_limit' returned by fake_quota_get_all() from 'limit',
which means project quota.

Change-Id: Ib5307c1e960ffcd59fe04fd011626b0ba927375d
This commit is contained in:
Hironori Shiina 2015-01-14 15:48:10 +09:00 committed by Shiina, Hironori
parent 89856392a8
commit 6af1d3aad0
1 changed files with 110 additions and 0 deletions

View File

@ -1084,8 +1084,17 @@ class DbQuotaDriverTestCase(test.TestCase):
injected_file_path_bytes=dict(in_use=0, reserved=0),
)
def fake_quota_get_all(context, project_id):
self.calls.append('quota_get_all')
self.assertEqual(project_id, 'test_project')
return [sqa_models.ProjectUserQuota(resource='instances',
hard_limit=5),
sqa_models.ProjectUserQuota(resource='cores',
hard_limit=2)]
self.stubs.Set(db, 'quota_get_all_by_project', fake_qgabp)
self.stubs.Set(db, 'quota_usage_get_all_by_project', fake_qugabp)
self.stubs.Set(db, 'quota_get_all', fake_quota_get_all)
self._stub_quota_class_get_all_by_name()
self._stub_quota_class_get_default()
@ -1176,6 +1185,107 @@ class DbQuotaDriverTestCase(test.TestCase):
),
))
def test_get_project_quotas_with_remains(self):
self.maxDiff = None
self._stub_get_by_project()
result = self.driver.get_project_quotas(
FakeContext('test_project', 'test_class'),
quota.QUOTAS._resources, 'test_project', remains=True)
self.assertEqual(self.calls, [
'quota_get_all_by_project',
'quota_usage_get_all_by_project',
'quota_class_get_all_by_name',
'quota_class_get_default',
'quota_get_all',
])
self.assertEqual(result, dict(
instances=dict(
limit=5,
in_use=2,
reserved=2,
remains=0,
),
cores=dict(
limit=10,
in_use=4,
reserved=4,
remains=8,
),
ram=dict(
limit=25 * 1024,
in_use=10 * 1024,
reserved=0,
remains=25 * 1024,
),
floating_ips=dict(
limit=10,
in_use=2,
reserved=0,
remains=10,
),
fixed_ips=dict(
limit=10,
in_use=0,
reserved=0,
remains=10,
),
metadata_items=dict(
limit=64,
in_use=0,
reserved=0,
remains=64,
),
injected_files=dict(
limit=2,
in_use=0,
reserved=0,
remains=2,
),
injected_file_content_bytes=dict(
limit=5 * 1024,
in_use=0,
reserved=0,
remains=5 * 1024,
),
injected_file_path_bytes=dict(
limit=127,
in_use=0,
reserved=0,
remains=127,
),
security_groups=dict(
limit=10,
in_use=0,
reserved=0,
remains=10,
),
security_group_rules=dict(
limit=20,
in_use=0,
reserved=0,
remains=20,
),
key_pairs=dict(
limit=100,
in_use=0,
reserved=0,
remains=100,
),
server_groups=dict(
limit=10,
in_use=0,
reserved=0,
remains=10,
),
server_group_members=dict(
limit=10,
in_use=0,
reserved=0,
remains=10,
),
))
def test_get_user_quotas_alt_context_no_class(self):
self.maxDiff = None
self._stub_get_by_project_and_user()