]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Make sure we can update when there is no gateway port linked to it
authorgongysh <gongysh@cn.ibm.com>
Tue, 27 Nov 2012 01:59:40 +0000 (09:59 +0800)
committergongysh <gongysh@cn.ibm.com>
Tue, 27 Nov 2012 02:25:00 +0000 (10:25 +0800)
Bug #1083387

Change-Id: I7e56d072a6e430ddde816781fe480c6028577c5f

quantum/db/l3_db.py
quantum/tests/unit/test_l3_plugin.py

index d4ac563a5fec939aaaefa6c3f140afa378f99e12..dcf91becf5a3cc9a8328b6c7295bc5f7b5e4af08 100644 (file)
@@ -720,13 +720,11 @@ class L3_NAT_db_mixin(l3.RouterPluginBase):
             # must make sure we do not have any external gateway ports
             # (and thus, possible floating IPs) on this network before
             # allow it to be update to external=False
-            try:
-                context.session.query(models_v2.Port).filter_by(
-                    device_owner=DEVICE_OWNER_ROUTER_GW,
-                    network_id=net_id).first()
+            port = context.session.query(models_v2.Port).filter_by(
+                device_owner=DEVICE_OWNER_ROUTER_GW,
+                network_id=net_id).first()
+            if port:
                 raise l3.ExternalNetworkInUse(net_id=net_id)
-            except exc.NoResultFound:
-                pass  # expected
 
             context.session.query(ExternalNetwork).filter_by(
                 network_id=net_id).delete()
index 8dd1096e1d68d7144933716af367d05ad0e24ec4..eb7b06a9c15c950287335b250101b36adbcc9d8e 100644 (file)
@@ -631,6 +631,35 @@ class L3NatDBTestCase(test_db_plugin.QuantumDbPluginV2TestCase):
                                                  expected_code=exc.
                                                  HTTPBadRequest.code)
 
+    def test_network_update_external_failure(self):
+        with self.router() as r:
+            with self.subnet() as s1:
+                self._set_net_external(s1['subnet']['network_id'])
+                self._add_external_gateway_to_router(
+                    r['router']['id'],
+                    s1['subnet']['network_id'])
+                self._update('networks', s1['subnet']['network_id'],
+                             {'network': {'router:external': False}},
+                             expected_code=exc.HTTPConflict.code)
+                self._remove_external_gateway_from_router(
+                    r['router']['id'],
+                    s1['subnet']['network_id'])
+
+    def test_network_update_external(self):
+        with self.router() as r:
+            with self.network('test_net') as testnet:
+                self._set_net_external(testnet['network']['id'])
+                with self.subnet() as s1:
+                    self._set_net_external(s1['subnet']['network_id'])
+                    self._add_external_gateway_to_router(
+                        r['router']['id'],
+                        s1['subnet']['network_id'])
+                    self._update('networks', testnet['network']['id'],
+                                 {'network': {'router:external': False}})
+                    self._remove_external_gateway_from_router(
+                        r['router']['id'],
+                        s1['subnet']['network_id'])
+
     def test_create_router_with_gwinfo(self):
         with self.subnet() as s:
             self._set_net_external(s['subnet']['network_id'])