From a75b8f0f031b3ea0a861f961c934b8b876cde110 Mon Sep 17 00:00:00 2001 From: Vilobh Meshram Date: Thu, 27 Aug 2015 12:06:26 -0700 Subject: [PATCH] Correct exception raised in few db APIs This patch corrects wrong exception raised in below db APIs: 1. get_rcs_by_bay_uuid 2. get_services_by_bay_uuid Co-Authored-By: Vilobh Meshram Closes-bug: #1475556 Change-Id: I7c3307747f6ae905a9eecc2e755e5c7d6ddde91d --- magnum/db/sqlalchemy/api.py | 8 ++++++-- magnum/objects/service.py | 3 ++- magnum/tests/unit/db/test_replicationcontroller.py | 9 ++++++--- magnum/tests/unit/db/test_service.py | 9 ++++++--- magnum/tests/unit/objects/test_service.py | 11 +++++++++++ 5 files changed, 31 insertions(+), 9 deletions(-) diff --git a/magnum/db/sqlalchemy/api.py b/magnum/db/sqlalchemy/api.py index 772de9551b..22561efd8a 100644 --- a/magnum/db/sqlalchemy/api.py +++ b/magnum/db/sqlalchemy/api.py @@ -781,7 +781,9 @@ class Connection(api.Connection): except NoResultFound: raise exception.ServiceNotFound(service=service_uuid) - def get_services_by_bay_uuid(self, bay_uuid): + def get_services_by_bay_uuid(self, context, bay_uuid): + # First verify whether the Bay exists + self.get_bay_by_uuid(context, bay_uuid) query = model_query(models.Service).filter_by(bay_uuid=bay_uuid) try: return query.all() @@ -886,7 +888,9 @@ class Connection(api.Connection): except NoResultFound: raise exception.ReplicationControllerNotFound(rc=rc_uuid) - def get_rcs_by_bay_uuid(self, bay_uuid): + def get_rcs_by_bay_uuid(self, context, bay_uuid): + # First verify whether the Bay exists + self.get_bay_by_uuid(context, bay_uuid) query = model_query(models.ReplicationController).filter_by( bay_uuid=bay_uuid) try: diff --git a/magnum/objects/service.py b/magnum/objects/service.py index 45306e86db..beab00f26a 100644 --- a/magnum/objects/service.py +++ b/magnum/objects/service.py @@ -107,7 +107,8 @@ class Service(base.MagnumPersistentObject, base.MagnumObject, :param context: Security context :returns: a list of class:`Service` object. """ - db_services = cls.dbapi.get_services_by_bay_uuid(bay_uuid) + db_services = cls.dbapi.get_services_by_bay_uuid(context, + bay_uuid) return Service._from_db_object_list(db_services, cls, context) @base.remotable_classmethod diff --git a/magnum/tests/unit/db/test_replicationcontroller.py b/magnum/tests/unit/db/test_replicationcontroller.py index 8ce41da550..7d71640075 100644 --- a/magnum/tests/unit/db/test_replicationcontroller.py +++ b/magnum/tests/unit/db/test_replicationcontroller.py @@ -106,12 +106,15 @@ class DbRCTestCase(base.DbTestCase): self.assertEqual(0, len(rc)) def test_get_rcs_by_bay_uuid(self): - rc = self.dbapi.get_rcs_by_bay_uuid(self.bay.uuid) + rc = self.dbapi.get_rcs_by_bay_uuid(self.context, + self.bay.uuid) self.assertEqual(self.rc.id, rc[0].id) def test_get_rcs_by_bay_uuid_that_does_not_exist(self): - res = self.dbapi.get_rcs_by_bay_uuid(magnum_utils.generate_uuid()) - self.assertEqual([], res) + self.assertRaises(exception.BayNotFound, + self.dbapi.get_rcs_by_bay_uuid, + self.context, + magnum_utils.generate_uuid()) def test_destroy_rc(self): self.dbapi.destroy_rc(self.rc.id) diff --git a/magnum/tests/unit/db/test_service.py b/magnum/tests/unit/db/test_service.py index 0d91ed9dee..8091533f63 100644 --- a/magnum/tests/unit/db/test_service.py +++ b/magnum/tests/unit/db/test_service.py @@ -148,12 +148,15 @@ class DbServiceTestCase(base.DbTestCase): self.assertEqual(0, len(res)) def test_get_services_by_bay_uuid(self): - res = self.dbapi.get_services_by_bay_uuid(self.bay.uuid) + res = self.dbapi.get_services_by_bay_uuid(self.context, + self.bay.uuid) self.assertEqual(self.service.id, res[0].id) def test_get_services_by_bay_uuid_that_does_not_exist(self): - res = self.dbapi.get_services_by_bay_uuid(magnum_utils.generate_uuid()) - self.assertEqual([], res) + self.assertRaises(exception.BayNotFound, + self.dbapi.get_services_by_bay_uuid, + self.context, + magnum_utils.generate_uuid()) def test_destroy_service(self): self.dbapi.destroy_service(self.service.id) diff --git a/magnum/tests/unit/objects/test_service.py b/magnum/tests/unit/objects/test_service.py index 9275c5b9e8..4012c7900f 100644 --- a/magnum/tests/unit/objects/test_service.py +++ b/magnum/tests/unit/objects/test_service.py @@ -55,6 +55,17 @@ class TestServiceObject(base.DbTestCase): mock_get_service.assert_called_once_with(self.context, name) self.assertEqual(self.context, service._context) + def test_list_by_bay_uuid(self): + bay_uuid = self.fake_service['bay_uuid'] + with mock.patch.object(self.dbapi, 'get_services_by_bay_uuid', + autospec=True) as mock_get_service: + mock_get_service.return_value = [self.fake_service] + services = objects.Service.list_by_bay_uuid(self.context, + bay_uuid) + self.assertThat(services, HasLength(1)) + mock_get_service.assert_called_once_with(self.context, + bay_uuid) + def test_list(self): with mock.patch.object(self.dbapi, 'get_service_list', autospec=True) as mock_get_list: