diff --git a/neutron/plugins/nicira/NeutronPlugin.py b/neutron/plugins/nicira/NeutronPlugin.py index d82952b8d48..70b880ec31b 100644 --- a/neutron/plugins/nicira/NeutronPlugin.py +++ b/neutron/plugins/nicira/NeutronPlugin.py @@ -222,7 +222,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 6829df1629d..fb9abb60a10 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 203b70e668a..a239235becb 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):