Fwaas can't run in operating system without namespace feature

Adding the check before generating the local_ns_list
to fix the issue.

Change-Id: If8edb5c0bb0fc0fd9aaf48a3441287f99bcdcf13
Closes-Bug: #1252201
This commit is contained in:
zhhuabj 2013-11-18 18:09:54 +08:00
parent 304965004b
commit a18190c902
2 changed files with 60 additions and 1 deletions

View File

@ -89,7 +89,8 @@ class FWaaSL3AgentRpcCallback(api.FWaaSAgentRpcCallbackMixin):
router['id']
for router in routers
if router['tenant_id'] == tenant_id]
local_ns_list = root_ip.get_namespaces(self.root_helper)
local_ns_list = root_ip.get_namespaces(
self.root_helper) if self.conf.use_namespaces else []
router_info_list = []
# Pick up namespaces for Tenant Routers

View File

@ -19,10 +19,14 @@
# @author: Dan Florea, dflorea@cisco.com, Cisco Systems, Inc.
import contextlib
import uuid
import mock
from oslo.config import cfg
from neutron.agent.common import config as agent_config
from neutron.agent import l3_agent
from neutron.agent.linux import ip_lib
from neutron.common import config as base_config
from neutron import context
from neutron.plugins.common import constants
@ -47,6 +51,7 @@ class TestFwaasL3AgentRpcCallback(base.BaseTestCase):
self.conf = cfg.ConfigOpts()
self.conf.register_opts(base_config.core_opts)
self.conf.register_opts(l3_agent.L3NATAgent.OPTS)
agent_config.register_root_helper(self.conf)
self.conf.root_helper = 'sudo'
self.api = FWaasAgent(self.conf)
@ -262,3 +267,56 @@ class TestFwaasL3AgentRpcCallback(base.BaseTestCase):
mock_firewall_deleted.assert_called_once_with(
ctx,
fake_firewall_list[0]['id'])
def _prepare_router_data(self, use_namespaces):
router = {'id': str(uuid.uuid4()), 'tenant_id': str(uuid.uuid4())}
return l3_agent.RouterInfo(router['id'], self.conf.root_helper,
use_namespaces, router=router)
def _get_router_info_list_with_namespace_helper(self,
router_use_namespaces):
self.conf.set_override('use_namespaces', True)
ri = self._prepare_router_data(
use_namespaces=router_use_namespaces)
routers = [ri.router]
self.api.router_info = {ri.router_id: ri}
with mock.patch.object(ip_lib.IPWrapper,
'get_namespaces') as mock_get_namespaces:
mock_get_namespaces.return_value = ri.ns_name()
router_info_list = self.api._get_router_info_list_for_tenant(
routers,
ri.router['tenant_id'])
self.assertEqual([ri], router_info_list)
mock_get_namespaces.assert_called_once_with(
self.conf.root_helper)
def _get_router_info_list_without_namespace_helper(self,
router_use_namespaces):
self.conf.set_override('use_namespaces', False)
ri = self._prepare_router_data(
use_namespaces=router_use_namespaces)
routers = [ri.router]
self.api.router_info = {ri.router_id: ri}
router_info_list = self.api._get_router_info_list_for_tenant(
routers,
ri.router['tenant_id'])
if router_use_namespaces:
self.assertFalse(router_info_list)
else:
self.assertEqual([ri], router_info_list)
def test_get_router_info_list_for_tenant_for_namespaces_enabled(self):
self._get_router_info_list_with_namespace_helper(
router_use_namespaces=True)
def test_get_router_info_list_for_tenant_for_namespaces_disabled(self):
self._get_router_info_list_without_namespace_helper(
router_use_namespaces=False)
def test_get_router_info_list_tenant_with_namespace_router_without(self):
self._get_router_info_list_with_namespace_helper(
router_use_namespaces=False)
def test_get_router_info_list_tenant_without_namespace_router_with(self):
self._get_router_info_list_without_namespace_helper(
router_use_namespaces=True)