From 68369fe6789d4ab053eb382458562394ce632de8 Mon Sep 17 00:00:00 2001 From: berlin Date: Tue, 26 Nov 2013 09:02:27 +0800 Subject: [PATCH] Fix showing nonexistent NetworkGateway throws 500 instead of 404 Change-Id: I5304bd52f7a5ae22fbc0d48206d7c1d282b34a91 Closes-Bug: #1252921 --- neutron/plugins/nicira/NeutronPlugin.py | 2 +- neutron/plugins/nicira/dbexts/nicira_networkgw_db.py | 10 +++++++++- neutron/tests/unit/nicira/test_nicira_plugin.py | 6 ++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/neutron/plugins/nicira/NeutronPlugin.py b/neutron/plugins/nicira/NeutronPlugin.py index 5fe7bbc95..a5caaf30d 100644 --- a/neutron/plugins/nicira/NeutronPlugin.py +++ b/neutron/plugins/nicira/NeutronPlugin.py @@ -223,7 +223,7 @@ class NvpPluginV2(addr_pair_db.AllowedAddressPairsMixin, try: def_network_gw = self._get_network_gateway(ctx, def_l2_gw_uuid) - except sa_exc.NoResultFound: + except networkgw_db.GatewayNotFound: # Create in DB only - don't go on NVP def_gw_data = {'id': def_l2_gw_uuid, 'name': 'default L2 gateway service', diff --git a/neutron/plugins/nicira/dbexts/nicira_networkgw_db.py b/neutron/plugins/nicira/dbexts/nicira_networkgw_db.py index 6829df162..fb9abb60a 100644 --- a/neutron/plugins/nicira/dbexts/nicira_networkgw_db.py +++ b/neutron/plugins/nicira/dbexts/nicira_networkgw_db.py @@ -48,6 +48,10 @@ class GatewayInUse(exceptions.InUse): "with one or more neutron networks.") +class GatewayNotFound(exceptions.NotFound): + message = _("Network Gateway %(gateway_id)s could not be found") + + class NetworkGatewayPortInUse(exceptions.InUse): message = _("Port '%(port_id)s' is owned by '%(device_owner)s' and " "therefore cannot be deleted directly via the port API.") @@ -130,7 +134,11 @@ class NetworkGatewayMixin(nvp_networkgw.NetworkGatewayPluginBase): resource = nvp_networkgw.RESOURCE_NAME.replace('-', '_') def _get_network_gateway(self, context, gw_id): - return self._get_by_id(context, NetworkGateway, gw_id) + try: + gw = self._get_by_id(context, NetworkGateway, gw_id) + except sa_orm_exc.NoResultFound: + raise GatewayNotFound(gateway_id=gw_id) + return gw def _make_gw_connection_dict(self, gw_conn): return {'port_id': gw_conn['port_id'], diff --git a/neutron/tests/unit/nicira/test_nicira_plugin.py b/neutron/tests/unit/nicira/test_nicira_plugin.py index 203b70e66..a239235be 100644 --- a/neutron/tests/unit/nicira/test_nicira_plugin.py +++ b/neutron/tests/unit/nicira/test_nicira_plugin.py @@ -1421,6 +1421,12 @@ class TestNiciraNetworkGateway(test_l2_gw.NetworkGatewayDbTestCase, # The default gateway must still be there self._test_delete_network_gateway(1) + def test_show_network_gateway_nvp_error_returns_404(self): + invalid_id = 'b5afd4a9-eb71-4af7-a082-8fc625a35b61' + req = self.new_show_request(nvp_networkgw.COLLECTION_NAME, invalid_id) + res = req.get_response(self.ext_api) + self.assertEqual(webob.exc.HTTPNotFound.code, res.status_int) + class TestNiciraMultiProviderNetworks(NiciraPluginV2TestCase): -- 2.45.2