Add missing tests for cinder.db.api.quota_

blueprint db-api-tests

Change-Id: Ib47c1620ce124919d9f3365a0abaa53b4b3e5cd4
This commit is contained in:
Sergey Skripnick 2013-05-29 18:02:56 +03:00 committed by Gerrit Code Review
parent 9a87bb6381
commit b7044c891b

View File

@ -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'))