From 4dceb53a242a82b49df2777eeb8396395ada6761 Mon Sep 17 00:00:00 2001 From: gongysh Date: Tue, 27 Nov 2012 09:59:40 +0800 Subject: [PATCH] Make sure we can update when there is no gateway port linked to it Bug #1083387 Change-Id: I7e56d072a6e430ddde816781fe480c6028577c5f --- quantum/db/l3_db.py | 10 ++++------ quantum/tests/unit/test_l3_plugin.py | 29 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/quantum/db/l3_db.py b/quantum/db/l3_db.py index d4ac563a5..dcf91becf 100644 --- a/quantum/db/l3_db.py +++ b/quantum/db/l3_db.py @@ -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() diff --git a/quantum/tests/unit/test_l3_plugin.py b/quantum/tests/unit/test_l3_plugin.py index 8dd1096e1..eb7b06a9c 100644 --- a/quantum/tests/unit/test_l3_plugin.py +++ b/quantum/tests/unit/test_l3_plugin.py @@ -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']) -- 2.45.2