]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Fix showing nonexistent NetworkGateway throws 500 instead of 404
authorberlin <linb@vmware.com>
Tue, 26 Nov 2013 01:02:27 +0000 (09:02 +0800)
committerberlin <linb@vmware.com>
Tue, 26 Nov 2013 07:57:22 +0000 (15:57 +0800)
Change-Id: I5304bd52f7a5ae22fbc0d48206d7c1d282b34a91
Closes-Bug: #1252921

neutron/plugins/nicira/NeutronPlugin.py
neutron/plugins/nicira/dbexts/nicira_networkgw_db.py
neutron/tests/unit/nicira/test_nicira_plugin.py

index 5fe7bbc95ca7798fa2b8c4dca944241214c8fec2..a5caaf30da532d4999be03d359662b8be55ff08f 100644 (file)
@@ -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',
index 6829df1629d79428bf820f72d7e090742e8406c5..fb9abb60a10033553f6c679dd6d4caf26c19dd63 100644 (file)
@@ -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'],
index 203b70e668a5e27773b84216e3184b46ae340959..a239235becbec644f0b8af1f2552abd15ddc5329 100644 (file)
@@ -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):