From f717711ed2669f66c1d88c39354e080761cc3eb4 Mon Sep 17 00:00:00 2001 From: Eric K Date: Wed, 7 Sep 2016 22:50:48 -0700 Subject: [PATCH] give correct http error on getting non-existent policy Catch internal error and translate into proper webservice exception Avoids error 500 Change-Id: I40c55daff70f92d0a37c5d0d9868546c78c6cf0e partial-bug: 1621268 --- congress/policy_engines/agnostic.py | 10 ++++++---- congress/tests/api/test_policy_model.py | 12 ++++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/congress/policy_engines/agnostic.py b/congress/policy_engines/agnostic.py index 91dbcaa84..6996037fe 100644 --- a/congress/policy_engines/agnostic.py +++ b/congress/policy_engines/agnostic.py @@ -306,10 +306,12 @@ class Runtime (object): # Note(thread-safety): blocking function def persistent_get_policy(self, id_): # Note(thread-safety): blocking call - policy = db_policy_rules.get_policy(id_) - if not policy: - return - return policy.to_dict() + try: + policy = db_policy_rules.get_policy(id_) + return policy.to_dict() + except KeyError: + raise exception.NotFound( + 'No policy found with name or id %s' % id_) # Note(thread-safety): blocking function def persistent_get_rule(self, id_, policy_name): diff --git a/congress/tests/api/test_policy_model.py b/congress/tests/api/test_policy_model.py index 08e794207..cdeded4e6 100644 --- a/congress/tests/api/test_policy_model.py +++ b/congress/tests/api/test_policy_model.py @@ -85,8 +85,10 @@ class TestPolicyModel(base.SqlTestCase): self.assertEqual(expected_ret, ret) def test_get_invalid_item(self): - self.assertRaises(KeyError, self.policy_model.get_item, - 'invalid-id', {}) + self.assertRaisesRegexp(webservice.DataModelException, + '^Not Found', + self.policy_model.get_item, + 'invalid-id', {}) @mock.patch('oslo_utils.uuidutils.generate_uuid') def test_add_item(self, patched_gen_uuid): @@ -157,8 +159,10 @@ class TestPolicyModel(base.SqlTestCase): ret = self.policy_model.delete_item(policy_id, {}) self.assertEqual(expected_ret, ret) - self.assertRaises(KeyError, self.policy_model.get_item, - self.policy['id'], {}) + self.assertRaisesRegexp(webservice.DataModelException, + '^Not Found', + self.policy_model.get_item, + self.policy['id'], {}) # check that deleting the policy also deletes the rules self.assertRaises(webservice.DataModelException,