]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Fix Prefix delegation router deletion key error
authorAssaf Muller <amuller@redhat.com>
Thu, 27 Aug 2015 21:44:50 +0000 (17:44 -0400)
committerAssaf Muller <amuller@redhat.com>
Thu, 27 Aug 2015 21:44:50 +0000 (17:44 -0400)
Change-Id: I1b7008bc6a9dd7d23a651023fd540eec3e46f072
Closes-Bug: #1489576

neutron/agent/linux/pd.py
neutron/tests/unit/agent/linux/test_pd.py [new file with mode: 0644]

index b9289286fc981c6d4eb17556000aa71c4f6b7b66..cfed4936f1b25349d54589c6b49182777cfa7dfe 100644 (file)
@@ -302,10 +302,17 @@ class PrefixDelegation(object):
 
 @utils.synchronized("l3-agent-pd")
 def remove_router(resource, event, l3_agent, **kwargs):
-    router = l3_agent.pd.routers.get(kwargs['router'].router_id)
+    router_id = kwargs['router'].router_id
+    router = l3_agent.pd.routers.get(router_id)
     l3_agent.pd.delete_router_pd(router)
-    del l3_agent.pd.routers[router['id']]['subnets']
-    del l3_agent.pd.routers[router['id']]
+    del l3_agent.pd.routers[router_id]['subnets']
+    del l3_agent.pd.routers[router_id]
+
+
+def get_router_entry(ns_name):
+    return {'gw_interface': None,
+            'ns_name': ns_name,
+            'subnets': {}}
 
 
 @utils.synchronized("l3-agent-pd")
@@ -313,10 +320,8 @@ def add_router(resource, event, l3_agent, **kwargs):
     added_router = kwargs['router']
     router = l3_agent.pd.routers.get(added_router.router_id)
     if not router:
-        l3_agent.pd.routers[added_router.router_id] = {
-                            'gw_interface': None,
-                            'ns_name': added_router.ns_name,
-                            'subnets': {}}
+        l3_agent.pd.routers[added_router.router_id] = (
+            get_router_entry(added_router.ns_name))
     else:
         # This will happen during l3 agent restart
         router['ns_name'] = added_router.ns_name
diff --git a/neutron/tests/unit/agent/linux/test_pd.py b/neutron/tests/unit/agent/linux/test_pd.py
new file mode 100644 (file)
index 0000000..e121067
--- /dev/null
@@ -0,0 +1,31 @@
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import mock
+
+from neutron.agent.linux import pd
+from neutron.tests import base as tests_base
+
+
+class FakeRouter(object):
+    def __init__(self, router_id):
+        self.router_id = router_id
+
+
+class TestPrefixDelegation(tests_base.DietTestCase):
+    def test_remove_router(self):
+        l3_agent = mock.Mock()
+        router_id = 1
+        l3_agent.pd.routers = {router_id: pd.get_router_entry(None)}
+        pd.remove_router(None, None, l3_agent, router=FakeRouter(router_id))
+        self.assertTrue(l3_agent.pd.delete_router_pd.called)
+        self.assertEqual({}, l3_agent.pd.routers)