Add missing tests for cinder.db.api.quota_
blueprint db-api-tests Change-Id: Ib47c1620ce124919d9f3365a0abaa53b4b3e5cd4
This commit is contained in:
parent
9a87bb6381
commit
b7044c891b
@ -26,6 +26,33 @@ from datetime import timedelta
|
|||||||
FLAGS = flags.FLAGS
|
FLAGS = flags.FLAGS
|
||||||
|
|
||||||
|
|
||||||
|
def _quota_reserve(context, project_id):
|
||||||
|
"""Create sample Quota, QuotaUsage and Reservation objects.
|
||||||
|
|
||||||
|
There is no method db.quota_usage_create(), so we have to use
|
||||||
|
db.quota_reserve() for creating QuotaUsage objects.
|
||||||
|
|
||||||
|
Returns reservations uuids.
|
||||||
|
|
||||||
|
"""
|
||||||
|
def get_sync(resource, usage):
|
||||||
|
def sync(elevated, project_id, session):
|
||||||
|
return {resource: usage}
|
||||||
|
return sync
|
||||||
|
quotas = {}
|
||||||
|
resources = {}
|
||||||
|
deltas = {}
|
||||||
|
for i in range(3):
|
||||||
|
resource = 'res%d' % i
|
||||||
|
quotas[resource] = db.quota_create(context, project_id, resource, i)
|
||||||
|
resources[resource] = ReservableResource(resource,
|
||||||
|
get_sync(resource, i), 'quota_res_%d' % i)
|
||||||
|
deltas[resource] = i
|
||||||
|
return db.quota_reserve(context, resources, quotas, deltas,
|
||||||
|
datetime.utcnow(), datetime.utcnow(),
|
||||||
|
timedelta(days=1), project_id)
|
||||||
|
|
||||||
|
|
||||||
class ModelsObjectComparatorMixin(object):
|
class ModelsObjectComparatorMixin(object):
|
||||||
def _dict_from_object(self, obj, ignored_keys):
|
def _dict_from_object(self, obj, ignored_keys):
|
||||||
if ignored_keys is None:
|
if ignored_keys is None:
|
||||||
@ -361,33 +388,6 @@ class DBAPIReservationTestCase(BaseTest):
|
|||||||
'expire': datetime.utcnow() + timedelta(days=1),
|
'expire': datetime.utcnow() + timedelta(days=1),
|
||||||
'usage': {'id': 1}}
|
'usage': {'id': 1}}
|
||||||
|
|
||||||
def _quota_reserve(self):
|
|
||||||
"""Create sample Quota, QuotaUsage and Reservation objects.
|
|
||||||
|
|
||||||
There is no method db.quota_usage_create(), so we have to use
|
|
||||||
db.quota_reserve() for creating QuotaUsage objects.
|
|
||||||
|
|
||||||
Returns reservations uuids.
|
|
||||||
|
|
||||||
"""
|
|
||||||
def get_sync(resource, usage):
|
|
||||||
def sync(elevated, project_id, session):
|
|
||||||
return {resource: usage}
|
|
||||||
return sync
|
|
||||||
quotas = {}
|
|
||||||
resources = {}
|
|
||||||
deltas = {}
|
|
||||||
for i in xrange(3):
|
|
||||||
resource = 'resource%d' % i
|
|
||||||
quotas[resource] = db.quota_create(self.ctxt, 'project1',
|
|
||||||
resource, i)
|
|
||||||
resources[resource] = ReservableResource(resource,
|
|
||||||
get_sync(resource, i), 'quota_res_%d' % i)
|
|
||||||
deltas[resource] = i
|
|
||||||
return db.quota_reserve(self.ctxt, resources, quotas, deltas,
|
|
||||||
datetime.utcnow(), datetime.utcnow(),
|
|
||||||
timedelta(days=1), self.values['project_id'])
|
|
||||||
|
|
||||||
def test_reservation_create(self):
|
def test_reservation_create(self):
|
||||||
reservation = db.reservation_create(self.ctxt, **self.values)
|
reservation = db.reservation_create(self.ctxt, **self.values)
|
||||||
self._assertEqualObjects(self.values, reservation, ignored_keys=(
|
self._assertEqualObjects(self.values, reservation, ignored_keys=(
|
||||||
@ -407,11 +407,11 @@ class DBAPIReservationTestCase(BaseTest):
|
|||||||
self.ctxt, 'non-exitent-resevation-uuid')
|
self.ctxt, 'non-exitent-resevation-uuid')
|
||||||
|
|
||||||
def test_reservation_commit(self):
|
def test_reservation_commit(self):
|
||||||
reservations = self._quota_reserve()
|
reservations = _quota_reserve(self.ctxt, 'project1')
|
||||||
expected = {'project_id': 'project1',
|
expected = {'project_id': 'project1',
|
||||||
'resource0': {'reserved': 0, 'in_use': 0},
|
'res0': {'reserved': 0, 'in_use': 0},
|
||||||
'resource1': {'reserved': 1, 'in_use': 1},
|
'res1': {'reserved': 1, 'in_use': 1},
|
||||||
'resource2': {'reserved': 2, 'in_use': 2}}
|
'res2': {'reserved': 2, 'in_use': 2}}
|
||||||
self.assertEqual(expected, db.quota_usage_get_all_by_project(
|
self.assertEqual(expected, db.quota_usage_get_all_by_project(
|
||||||
self.ctxt, 'project1'))
|
self.ctxt, 'project1'))
|
||||||
db.reservation_get(self.ctxt, reservations[0])
|
db.reservation_get(self.ctxt, reservations[0])
|
||||||
@ -419,18 +419,18 @@ class DBAPIReservationTestCase(BaseTest):
|
|||||||
self.assertRaises(exception.ReservationNotFound,
|
self.assertRaises(exception.ReservationNotFound,
|
||||||
db.reservation_get, self.ctxt, reservations[0])
|
db.reservation_get, self.ctxt, reservations[0])
|
||||||
expected = {'project_id': 'project1',
|
expected = {'project_id': 'project1',
|
||||||
'resource0': {'reserved': 0, 'in_use': 0},
|
'res0': {'reserved': 0, 'in_use': 0},
|
||||||
'resource1': {'reserved': 0, 'in_use': 2},
|
'res1': {'reserved': 0, 'in_use': 2},
|
||||||
'resource2': {'reserved': 0, 'in_use': 4}}
|
'res2': {'reserved': 0, 'in_use': 4}}
|
||||||
self.assertEqual(expected, db.quota_usage_get_all_by_project(
|
self.assertEqual(expected, db.quota_usage_get_all_by_project(
|
||||||
self.ctxt, 'project1'))
|
self.ctxt, 'project1'))
|
||||||
|
|
||||||
def test_reservation_rollback(self):
|
def test_reservation_rollback(self):
|
||||||
reservations = self._quota_reserve()
|
reservations = _quota_reserve(self.ctxt, 'project1')
|
||||||
expected = {'project_id': 'project1',
|
expected = {'project_id': 'project1',
|
||||||
'resource0': {'reserved': 0, 'in_use': 0},
|
'res0': {'reserved': 0, 'in_use': 0},
|
||||||
'resource1': {'reserved': 1, 'in_use': 1},
|
'res1': {'reserved': 1, 'in_use': 1},
|
||||||
'resource2': {'reserved': 2, 'in_use': 2}}
|
'res2': {'reserved': 2, 'in_use': 2}}
|
||||||
self.assertEqual(expected, db.quota_usage_get_all_by_project(
|
self.assertEqual(expected, db.quota_usage_get_all_by_project(
|
||||||
self.ctxt, 'project1'))
|
self.ctxt, 'project1'))
|
||||||
db.reservation_get(self.ctxt, reservations[0])
|
db.reservation_get(self.ctxt, reservations[0])
|
||||||
@ -438,21 +438,106 @@ class DBAPIReservationTestCase(BaseTest):
|
|||||||
self.assertRaises(exception.ReservationNotFound,
|
self.assertRaises(exception.ReservationNotFound,
|
||||||
db.reservation_get, self.ctxt, reservations[0])
|
db.reservation_get, self.ctxt, reservations[0])
|
||||||
expected = {'project_id': 'project1',
|
expected = {'project_id': 'project1',
|
||||||
'resource0': {'reserved': 0, 'in_use': 0},
|
'res0': {'reserved': 0, 'in_use': 0},
|
||||||
'resource1': {'reserved': 0, 'in_use': 1},
|
'res1': {'reserved': 0, 'in_use': 1},
|
||||||
'resource2': {'reserved': 0, 'in_use': 2}}
|
'res2': {'reserved': 0, 'in_use': 2}}
|
||||||
self.assertEqual(expected, db.quota_usage_get_all_by_project(
|
self.assertEqual(expected, db.quota_usage_get_all_by_project(
|
||||||
self.ctxt, 'project1'))
|
self.ctxt, 'project1'))
|
||||||
|
|
||||||
@test.testtools.skip("bug 1185325")
|
@test.testtools.skip("bug 1185325")
|
||||||
def test_reservation_expire(self):
|
def test_reservation_expire(self):
|
||||||
self.values['expire'] = datetime.utcnow() + timedelta(days=1)
|
self.values['expire'] = datetime.utcnow() + timedelta(days=1)
|
||||||
reservations = self._quota_reserve()
|
reservations = _quota_reserve(self.ctxt, 'project1')
|
||||||
db.reservation_expire(self.ctxt)
|
db.reservation_expire(self.ctxt)
|
||||||
|
|
||||||
expected = {'project_id': 'project1',
|
expected = {'project_id': 'project1',
|
||||||
'resource0': {'reserved': 0, 'in_use': 0},
|
'res0': {'reserved': 0, 'in_use': 0},
|
||||||
'resource1': {'reserved': 0, 'in_use': 1},
|
'res1': {'reserved': 0, 'in_use': 1},
|
||||||
'resource2': {'reserved': 0, 'in_use': 2}}
|
'res2': {'reserved': 0, 'in_use': 2}}
|
||||||
self.assertEqual(expected, db.quota_usage_get_all_by_project(
|
self.assertEqual(expected, db.quota_usage_get_all_by_project(
|
||||||
self.ctxt, 'project1'))
|
self.ctxt, 'project1'))
|
||||||
|
|
||||||
|
|
||||||
|
class DBAPIQuotaTestCase(BaseTest):
|
||||||
|
|
||||||
|
"""Tests for db.api.reservation_* methods."""
|
||||||
|
|
||||||
|
def test_quota_create(self):
|
||||||
|
quota = db.quota_create(self.ctxt, 'project1', 'resource', 99)
|
||||||
|
self.assertEqual(quota.resource, 'resource')
|
||||||
|
self.assertEqual(quota.hard_limit, 99)
|
||||||
|
self.assertEqual(quota.project_id, 'project1')
|
||||||
|
|
||||||
|
def test_quota_get(self):
|
||||||
|
quota = db.quota_create(self.ctxt, 'project1', 'resource', 99)
|
||||||
|
quota_db = db.quota_get(self.ctxt, 'project1', 'resource')
|
||||||
|
self._assertEqualObjects(quota, quota_db)
|
||||||
|
|
||||||
|
def test_quota_get_all_by_project(self):
|
||||||
|
for i in range(3):
|
||||||
|
for j in range(3):
|
||||||
|
db.quota_create(self.ctxt, 'proj%d' % i, 'res%d' % j, j)
|
||||||
|
for i in range(3):
|
||||||
|
quotas_db = db.quota_get_all_by_project(self.ctxt, 'proj%d' % i)
|
||||||
|
self.assertEqual(quotas_db, {'project_id': 'proj%d' % i,
|
||||||
|
'res0': 0,
|
||||||
|
'res1': 1,
|
||||||
|
'res2': 2})
|
||||||
|
|
||||||
|
def test_quota_update(self):
|
||||||
|
db.quota_create(self.ctxt, 'project1', 'resource1', 41)
|
||||||
|
db.quota_update(self.ctxt, 'project1', 'resource1', 42)
|
||||||
|
quota = db.quota_get(self.ctxt, 'project1', 'resource1')
|
||||||
|
self.assertEqual(quota.hard_limit, 42)
|
||||||
|
self.assertEqual(quota.resource, 'resource1')
|
||||||
|
self.assertEqual(quota.project_id, 'project1')
|
||||||
|
|
||||||
|
def test_quota_update_nonexistent(self):
|
||||||
|
self.assertRaises(exception.ProjectQuotaNotFound,
|
||||||
|
db.quota_update, self.ctxt, 'project1', 'resource1', 42)
|
||||||
|
|
||||||
|
def test_quota_get_nonexistent(self):
|
||||||
|
self.assertRaises(exception.ProjectQuotaNotFound,
|
||||||
|
db.quota_get, self.ctxt, 'project1', 'resource1')
|
||||||
|
|
||||||
|
def test_quota_reserve(self):
|
||||||
|
reservations = _quota_reserve(self.ctxt, 'project1')
|
||||||
|
self.assertEqual(len(reservations), 3)
|
||||||
|
res_names = ['res0', 'res1', 'res2']
|
||||||
|
for uuid in reservations:
|
||||||
|
reservation = db.reservation_get(self.ctxt, uuid)
|
||||||
|
self.assertTrue(reservation.resource in res_names)
|
||||||
|
res_names.remove(reservation.resource)
|
||||||
|
|
||||||
|
def test_quota_destroy_all_by_project(self):
|
||||||
|
reservations = _quota_reserve(self.ctxt, 'project1')
|
||||||
|
db.quota_destroy_all_by_project(self.ctxt, 'project1')
|
||||||
|
self.assertEqual(db.quota_get_all_by_project(self.ctxt, 'project1'),
|
||||||
|
{'project_id': 'project1'})
|
||||||
|
self.assertEqual(db.quota_usage_get_all_by_project(
|
||||||
|
self.ctxt, 'project1'),
|
||||||
|
{'project_id': 'project1'})
|
||||||
|
for r in reservations:
|
||||||
|
self.assertRaises(exception.ReservationNotFound,
|
||||||
|
db.reservation_get, self.ctxt, r)
|
||||||
|
|
||||||
|
def test_quota_usage_get_nonexistent(self):
|
||||||
|
self.assertRaises(exception.QuotaUsageNotFound, db.quota_usage_get,
|
||||||
|
self.ctxt, 'p1', 'nonexitent_resource')
|
||||||
|
|
||||||
|
def test_quota_usage_get(self):
|
||||||
|
reservations = _quota_reserve(self.ctxt, 'p1')
|
||||||
|
quota_usage = db.quota_usage_get(self.ctxt, 'p1', 'res0')
|
||||||
|
expected = {'resource': 'res0', 'project_id': 'p1',
|
||||||
|
'in_use': 0, 'reserved': 0, 'total': 0}
|
||||||
|
for key, value in expected.iteritems():
|
||||||
|
self.assertEqual(value, quota_usage[key])
|
||||||
|
|
||||||
|
def test_quota_usage_get_all_by_project(self):
|
||||||
|
reservations = _quota_reserve(self.ctxt, 'p1')
|
||||||
|
expected = {'project_id': 'p1',
|
||||||
|
'res0': {'in_use': 0, 'reserved': 0},
|
||||||
|
'res1': {'in_use': 1, 'reserved': 1},
|
||||||
|
'res2': {'in_use': 2, 'reserved': 2}}
|
||||||
|
self.assertEqual(expected, db.quota_usage_get_all_by_project(
|
||||||
|
self.ctxt, 'p1'))
|
||||||
|
Loading…
Reference in New Issue
Block a user