Пример #1
0
    def setUp(self):
        super(L3LoggingExtBaseTestCase, self).setUp()
        self.agent = l3_agent.L3NATAgent('test_host', self.conf)
        self.context = context.get_admin_context()
        self.connection = mock.Mock()
        self.ex_gw_port = {'id': _uuid()}
        self.router = {
            'id': _uuid(),
            'gw_port': self.ex_gw_port,
            'ha': False,
            'distributed': False
        }

        self.router_info = l3router.RouterInfo(self.agent, _uuid(),
                                               self.router, **self.ri_kwargs)
        self.router_info.ex_gw_port = self.ex_gw_port
        self.agent.router_info[self.router['id']] = self.router_info

        def _mock_get_router_info(router_id):
            return self.router_info

        self.get_router_info = mock.patch(
            'neutron.agent.l3.l3_agent_extension_api.'
            'L3AgentExtensionAPI.get_router_info').start()
        self.get_router_info.side_effect = _mock_get_router_info
        self.agent_api = l3_ext_api.L3AgentExtensionAPI(None, None)
        mock.patch(
            'neutron.manager.NeutronManager.load_class_for_provider').start()
    def test__set_subnet_arp_info(self):
        agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
        router = l3_test_common.prepare_router_data(num_internal_ports=2)
        router['distributed'] = True
        ri = dvr_router.DvrLocalRouter(agent, HOSTNAME, router['id'], router,
                                       **self.ri_kwargs)
        ports = ri.router.get(lib_constants.INTERFACE_KEY, [])
        subnet_id = l3_test_common.get_subnet_id(ports[0])
        test_ports = [{
            'mac_address':
            '00:11:22:33:44:55',
            'device_owner':
            lib_constants.DEVICE_OWNER_DHCP,
            'fixed_ips': [{
                'ip_address': '1.2.3.4',
                'prefixlen': 24,
                'subnet_id': subnet_id
            }]
        }]

        self.plugin_api.get_ports_by_subnet.return_value = test_ports

        # Test basic case
        ports[0]['subnets'] = [{'id': subnet_id, 'cidr': '1.2.3.0/24'}]
        with mock.patch.object(ri,
                               '_process_arp_cache_for_internal_port') as parp:
            ri._set_subnet_arp_info(subnet_id)
        self.assertEqual(1, parp.call_count)
        self.mock_ip_dev.neigh.add.assert_called_once_with(
            '1.2.3.4', '00:11:22:33:44:55')

        # Test negative case
        router['distributed'] = False
        ri._set_subnet_arp_info(subnet_id)
        self.mock_ip_dev.neigh.add.never_called()
Пример #3
0
    def test_process_router_dist_floating_ip_add(self):
        fake_floatingips = {'floatingips': [
            {'id': _uuid(),
             'host': HOSTNAME,
             'floating_ip_address': '15.1.2.3',
             'fixed_ip_address': '192.168.0.1',
             'floating_network_id': mock.sentinel.ext_net_id,
             'port_id': _uuid()},
            {'id': _uuid(),
             'host': 'some-other-host',
             'floating_ip_address': '15.1.2.4',
             'fixed_ip_address': '192.168.0.10',
             'floating_network_id': mock.sentinel.ext_net_id,
             'port_id': _uuid()}]}

        router = l3_test_common.prepare_router_data(enable_snat=True)
        router[lib_constants.FLOATINGIP_KEY] = fake_floatingips['floatingips']
        router['distributed'] = True
        agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
        self._set_ri_kwargs(agent, router['id'], router)
        ri = dvr_router.DvrLocalRouter(HOSTNAME, **self.ri_kwargs)
        ri.iptables_manager.ipv4['nat'] = mock.MagicMock()
        fip_ns = agent.get_fip_ns(mock.sentinel.ext_net_id)
        subnet_id = _uuid()
        fip_ns.agent_gateway_port = (
            {'fixed_ips': [{'ip_address': '20.0.0.30',
                            'subnet_id': subnet_id}],
             'subnets': [{'id': subnet_id,
                          'cidr': '20.0.0.0/24',
                          'gateway_ip': '20.0.0.1'}],
             'id': _uuid(),
             'network_id': _uuid(),
             'mac_address': 'ca:fe:de:ad:be:ef'}
        )
Пример #4
0
    def test_get_floating_agent_gw_interfaces(self):
        fake_network_id = _uuid()
        subnet_id = _uuid()
        agent_gateway_port = ([{
            'fixed_ips': [{
                'ip_address': '20.0.0.30',
                'prefixlen': 24,
                'subnet_id': subnet_id
            }],
            'subnets': [{
                'id': subnet_id,
                'cidr': '20.0.0.0/24',
                'gateway_ip': '20.0.0.1'
            }],
            'id':
            _uuid(),
            portbindings.HOST_ID:
            'myhost',
            'device_owner':
            lib_constants.DEVICE_OWNER_AGENT_GW,
            'network_id':
            fake_network_id,
            'mac_address':
            'ca:fe:de:ad:be:ef'
        }])

        router = l3_test_common.prepare_router_data(enable_snat=True)
        router[lib_constants.FLOATINGIP_AGENT_INTF_KEY] = agent_gateway_port
        router['distributed'] = True
        agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
        self._set_ri_kwargs(agent, router['id'], router)
        ri = dvr_router.DvrLocalRouter(HOSTNAME, **self.ri_kwargs)
        self.assertEqual(agent_gateway_port[0],
                         ri.get_floating_agent_gw_interface(fake_network_id))
    def test_initialize_dvr_ha_router_reset_state(self):
        agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
        agent.conf.agent_mode = lib_constants.L3_AGENT_MODE_DVR_SNAT
        router = l3_test_common.prepare_router_data(num_internal_ports=2,
                                                    enable_ha=True)
        router['gw_port_host'] = HOSTNAME
        router[lib_constants.HA_INTERFACE_KEY]['status'] = 'ACTIVE'
        self.mock_driver.unplug.reset_mock()
        self._set_ri_kwargs(agent, router['id'], router)

        ri = dvr_edge_ha_rtr.DvrEdgeHaRouter(HOSTNAME, [], **self.ri_kwargs)
        ri._ha_state_path = self.get_temp_file_path('router_ha_state')

        with open(ri._ha_state_path, "w") as f:
            f.write("primary")

        ri._create_snat_namespace = mock.Mock()
        ri.update_initial_state = mock.Mock()
        ri._plug_external_gateway = mock.Mock()
        with mock.patch(
                "neutron.agent.linux.keepalived."
                "KeepalivedManager.check_processes",
                return_value=False):
            ri.initialize(mock.Mock())
            with open(ri._ha_state_path, "r") as f:
                state = f.readline()
                self.assertEqual("backup", state)
Пример #6
0
    def test_add_centralized_floatingip(self,
                                        super_add_centralized_floatingip):
        agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
        agent.conf.agent_mode = lib_constants.L3_AGENT_MODE_DVR_SNAT
        router = l3_test_common.prepare_router_data(num_internal_ports=2)
        router['gw_port_host'] = HOSTNAME
        self.mock_driver.unplug.reset_mock()
        self._set_ri_kwargs(agent, router['id'], router)
        fip = {'id': _uuid()}
        fip_cidr = '11.22.33.44/24'

        ri = dvr_edge_ha_rtr.DvrEdgeHaRouter(HOSTNAME, [], **self.ri_kwargs)
        ri.is_router_master = mock.Mock(return_value=False)
        ri._add_vip = mock.Mock()
        interface_name = ri.get_snat_external_device_interface_name(
            ri.get_ex_gw_port())
        ri.add_centralized_floatingip(fip, fip_cidr)
        ri._add_vip.assert_called_once_with(fip_cidr, interface_name)
        super_add_centralized_floatingip.assert_not_called()

        ri1 = dvr_edge_ha_rtr.DvrEdgeHaRouter(HOSTNAME, [], **self.ri_kwargs)
        ri1.is_router_master = mock.Mock(return_value=True)
        ri1._add_vip = mock.Mock()
        interface_name = ri1.get_snat_external_device_interface_name(
            ri1.get_ex_gw_port())
        ri1.add_centralized_floatingip(fip, fip_cidr)
        ri1._add_vip.assert_called_once_with(fip_cidr, interface_name)
        super_add_centralized_floatingip.assert_called_once_with(fip, fip_cidr)
Пример #7
0
    def setUp(self):
        super(ConntrackHelperExtensionBaseTestCase, self).setUp()

        self.cth_ext = cth.ConntrackHelperAgentExtension()

        self.context = context.get_admin_context()
        self.connection = mock.Mock()

        self.router_id = uuidutils.generate_uuid()
        self.conntrack_helper1 = cth_obj.ConntrackHelper(
            context=None,
            id=uuidutils.generate_uuid(),
            protocol='udp',
            port=69,
            helper='tftp',
            router_id=self.router_id)

        self.agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
        self.router = {'id': self.router_id, 'ha': False, 'distributed': False}
        self.router_info = l3router.RouterInfo(self.agent, self.router_id,
                                               self.router, **self.ri_kwargs)
        self.agent.router_info[self.router['id']] = self.router_info

        self.get_router_info = mock.patch(
            'neutron.agent.l3.l3_agent_extension_api.'
            'L3AgentExtensionAPI.get_router_info').start()
        self.get_router_info.return_value = self.router_info

        self.agent_api = l3_ext_api.L3AgentExtensionAPI(None, None)
        self.cth_ext.consume_api(self.agent_api)

        self.conntrack_helpers = [self.conntrack_helper1]
    def test_external_gateway_removed_ext_gw_port_and_fip(self):
        self.conf.set_override('state_path', '/tmp')

        agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
        agent.conf.agent_mode = 'dvr'
        router = l3_test_common.prepare_router_data(num_internal_ports=2)
        router['gw_port_host'] = HOSTNAME
        self.mock_driver.unplug.reset_mock()

        external_net_id = router['gw_port']['network_id']
        ri = dvr_router.DvrLocalRouter(agent, HOSTNAME, router['id'], router,
                                       **self.ri_kwargs)
        ri.remove_floating_ip = mock.Mock()
        agent._fetch_external_net_id = mock.Mock(return_value=external_net_id)
        ri.ex_gw_port = ri.router['gw_port']
        del ri.router['gw_port']
        ri.fip_ns = None
        nat = ri.iptables_manager.ipv4['nat']
        nat.clear_rules_by_tag = mock.Mock()
        nat.add_rule = mock.Mock()

        ri.fip_ns = agent.get_fip_ns(external_net_id)
        subnet_id = _uuid()
        ri.fip_ns.agent_gateway_port = {
            'fixed_ips': [{
                'ip_address': '20.0.0.30',
                'prefixlen': 24,
                'subnet_id': subnet_id
            }],
            'subnets': [{
                'id': subnet_id,
                'cidr': '20.0.0.0/24',
                'gateway_ip': '20.0.0.1'
            }],
            'id':
            _uuid(),
            'network_id':
            external_net_id,
            'mac_address':
            'ca:fe:de:ad:be:ef'
        }

        vm_floating_ip = '19.4.4.2'
        ri.floating_ips_dict[vm_floating_ip] = FIP_PRI
        ri.dist_fip_count = 1
        ri.rtr_fip_subnet = ri.fip_ns.local_subnets.allocate(ri.router_id)
        _, fip_to_rtr = ri.rtr_fip_subnet.get_pair()
        self.mock_ip.get_devices.return_value = [
            l3_test_common.FakeDev(ri.fip_ns.get_ext_device_name(_uuid()))
        ]
        ri.get_router_cidrs = mock.Mock(
            return_value={vm_floating_ip + '/32', '19.4.4.1/24'})
        self.device_exists.return_value = True

        ri.external_gateway_removed(
            ri.ex_gw_port, ri.get_external_device_name(ri.ex_gw_port['id']))

        ri.remove_floating_ip.assert_called_once_with(self.mock_ip_dev,
                                                      '19.4.4.2/32')
Пример #9
0
    def test_spawn_metadata_proxy(self):
        router_id = _uuid()
        router_ns = 'qrouter-%s' % router_id
        ip_class_path = 'neutron.agent.linux.ip_lib.IPWrapper'

        cfg.CONF.set_override('metadata_proxy_user', self.EUNAME)
        cfg.CONF.set_override('metadata_proxy_group', self.EGNAME)
        cfg.CONF.set_override('metadata_proxy_socket', self.METADATA_SOCKET)
        cfg.CONF.set_override('debug', True)

        agent = l3_agent.L3NATAgent('localhost')
        with mock.patch(ip_class_path) as ip_mock,\
                mock.patch(
                    'neutron.agent.linux.external_process.'
                    'ProcessManager.get_pid_file_name',
                    return_value=self.PIDFILE),\
                mock.patch('pwd.getpwnam',
                           return_value=test_utils.FakeUser(self.EUNAME)),\
                mock.patch('grp.getgrnam',
                           return_value=test_utils.FakeGroup(self.EGNAME)),\
                mock.patch('os.makedirs'):
            cfg_file = os.path.join(
                metadata_driver.HaproxyConfigurator.get_config_path(
                    agent.conf.state_path), "%s.conf" % router_id)
            mock_open = self.useFixture(tools.OpenFixture(cfg_file)).mock_open
            agent.metadata_driver.spawn_monitored_metadata_proxy(
                agent.process_monitor,
                router_ns,
                self.METADATA_PORT,
                agent.conf,
                router_id=router_id)

            netns_execute_args = ['haproxy', '-f', cfg_file]

            log_tag = ("haproxy-" + metadata_driver.METADATA_SERVICE_NAME +
                       "-" + router_id)
            cfg_contents = metadata_driver._HAPROXY_CONFIG_TEMPLATE % {
                'user': self.EUNAME,
                'group': self.EGNAME,
                'port': self.METADATA_PORT,
                'unix_socket_path': self.METADATA_SOCKET,
                'res_type': 'Router',
                'res_id': router_id,
                'pidfile': self.PIDFILE,
                'log_level': 'debug',
                'log_tag': log_tag
            }

            mock_open.assert_has_calls(
                [mock.call(cfg_file, 'w'),
                 mock.call().write(cfg_contents)],
                any_order=True)

            ip_mock.assert_has_calls([
                mock.call(namespace=router_ns),
                mock.call().netns.execute(netns_execute_args,
                                          addl_env=None,
                                          run_as_root=True)
            ])
Пример #10
0
 def _create_router(self, router=None, **kwargs):
     agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
     self.router_id = _uuid()
     if not router:
         router = mock.MagicMock()
     return dvr_router.DvrLocalRouter(agent, HOSTNAME,
                                      self.router_id, router, self.conf,
                                      mock.Mock(), **kwargs)
Пример #11
0
 def test__migrate_python_ns_metadata_proxy_if_needed_not_called(self):
     agent = l3_agent.L3NATAgent('localhost')
     with mock.patch(
         'neutron.agent.linux.external_process.ProcessManager')\
         as mock_pm:
         mock_pm.cmdline = ('haproxy -f foo.cfg')
         (agent.metadata_driver._migrate_python_ns_metadata_proxy_if_needed(
             mock_pm))
         mock_pm.disable.assert_not_called()
Пример #12
0
 def _setup_test_for_arp_entry_cache(self):
     agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
     router = l3_test_common.prepare_router_data(num_internal_ports=2)
     router['distributed'] = True
     ri = dvr_router.DvrLocalRouter(agent, HOSTNAME, router['id'], router,
                                    **self.ri_kwargs)
     subnet_id = l3_test_common.get_subnet_id(
         ri.router[lib_constants.INTERFACE_KEY][0])
     return ri, subnet_id
Пример #13
0
 def _create_router(self, router=None, **kwargs):
     agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
     self.router_id = _uuid()
     if not router:
         router = mock.MagicMock()
     kwargs['agent'] = agent
     kwargs['router_id'] = self.router_id
     kwargs['router'] = router
     kwargs['agent_conf'] = self.conf
     kwargs['interface_driver'] = mock.Mock()
     return dvr_router.DvrLocalRouter(HOSTNAME, **kwargs)
Пример #14
0
    def test_add_arp_entry_no_routerinfo(self):
        agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
        router = l3_test_common.prepare_router_data(num_internal_ports=2)
        subnet_id = l3_test_common.get_subnet_id(
            router[lib_constants.INTERFACE_KEY][0])
        arp_table = {'ip_address': '1.7.23.11',
                     'mac_address': '00:11:22:33:44:55',
                     'subnet_id': subnet_id}

        payload = {'arp_table': arp_table, 'router_id': router['id']}
        agent.add_arp_entry(None, payload)
Пример #15
0
    def setUp(self):
        super(PortForwardingExtensionBaseTestCase, self).setUp()

        self.fip_pf_ext = pf.PortForwardingAgentExtension()

        self.context = context.get_admin_context()
        self.connection = mock.Mock()
        self.floatingip2 = router.FloatingIP(context=None, id=_uuid(),
                                             floating_ip_address='172.24.6.12',
                                             floating_network_id=_uuid(),
                                             router_id=_uuid(),
                                             status='ACTIVE')
        self.portforwarding1 = pf_obj.PortForwarding(
            context=None, id=_uuid(), floatingip_id=self.floatingip2.id,
            external_port=1111, protocol='tcp', internal_port_id=_uuid(),
            external_port_range='1111:1111',
            internal_port_range='11111:11111',
            internal_ip_address='1.1.1.1', internal_port=11111,
            floating_ip_address=self.floatingip2.floating_ip_address,
            router_id=self.floatingip2.router_id)

        self.agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
        self.ex_gw_port = {'id': _uuid()}
        self.fip = {'id': _uuid(),
                    'floating_ip_address': TEST_FIP,
                    'fixed_ip_address': '192.168.0.1',
                    'floating_network_id': _uuid(),
                    'port_id': _uuid(),
                    'host': HOSTNAME}
        self.router = {'id': self.floatingip2.router_id,
                       'gw_port': self.ex_gw_port,
                       'ha': False,
                       'distributed': False,
                       lib_const.FLOATINGIP_KEY: [self.fip]}
        self.router_info = l3router.RouterInfo(
            self.agent, self.floatingip2.router_id, self.router,
            **self.ri_kwargs)
        self.centralized_port_forwarding_fip_set = set(
            [str(self.floatingip2.floating_ip_address) + '/32'])
        self.pf_managed_fips = [self.floatingip2.id]
        self.router_info.ex_gw_port = self.ex_gw_port
        self.router_info.fip_managed_by_port_forwardings = self.pf_managed_fips
        self.agent.router_info[self.router['id']] = self.router_info

        self.get_router_info = mock.patch(
            'neutron.agent.l3.l3_agent_extension_api.'
            'L3AgentExtensionAPI.get_router_info').start()
        self.get_router_info.return_value = self.router_info

        self.agent_api = l3_ext_api.L3AgentExtensionAPI(None, None)
        self.fip_pf_ext.consume_api(self.agent_api)

        self.port_forwardings = [self.portforwarding1]
Пример #16
0
 def test_after_router_updated_called_on_agent_process_update(self):
     with mock.patch.object(metadata_driver, 'after_router_updated') as f,\
             mock.patch.object(router_info.RouterInfo, 'process'):
         agent = l3_agent.L3NATAgent('localhost')
         router_id = _uuid()
         router = {'id': router_id}
         ri = router_info.RouterInfo(mock.Mock(), router_id, router,
                                     agent.conf, mock.ANY)
         agent.router_info[router_id] = ri
         agent._process_updated_router(router)
         f.assert_called_once_with(
             'router', 'after_update', agent, router=ri)
Пример #17
0
 def _create_router(self, router=None, **kwargs):
     agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
     self.router_id = _uuid()
     if not router:
         router = mock.MagicMock()
     kwargs['agent'] = agent
     kwargs['router_id'] = self.router_id
     kwargs['router'] = router
     kwargs['agent_conf'] = self.conf
     kwargs['interface_driver'] = mock.Mock()
     with mock.patch.object(dvr_router.DvrLocalRouter,
                            'load_used_fip_information'):
         return dvr_router.DvrLocalRouter(HOSTNAME, **kwargs)
Пример #18
0
    def _test_spawn_metadata_proxy(self,
                                   expected_user,
                                   expected_group,
                                   user='',
                                   group='',
                                   watch_log=True):
        router_id = _uuid()
        router_ns = 'qrouter-%s' % router_id
        metadata_port = 8080
        ip_class_path = 'neutron.agent.linux.ip_lib.IPWrapper'
        is_effective_user = '******'
        fake_is_effective_user = lambda x: x in [self.EUNAME, str(self.EUID)]

        cfg.CONF.set_override('metadata_proxy_user', user)
        cfg.CONF.set_override('metadata_proxy_group', group)
        cfg.CONF.set_override('log_file', 'test.log')
        cfg.CONF.set_override('debug', True)

        agent = l3_agent.L3NATAgent('localhost')
        with contextlib.nested(
                mock.patch('os.geteuid', return_value=self.EUID),
                mock.patch('os.getegid', return_value=self.EGID),
                mock.patch(is_effective_user,
                           side_effect=fake_is_effective_user),
                mock.patch(ip_class_path)) as (geteuid, getegid,
                                               is_effective_user, ip_mock):
            agent.metadata_driver.spawn_monitored_metadata_proxy(
                agent.process_monitor,
                router_ns,
                metadata_port,
                agent.conf,
                router_id=router_id)
            netns_execute_args = [
                'neutron-ns-metadata-proxy', mock.ANY, mock.ANY,
                '--router_id=%s' % router_id, mock.ANY,
                '--metadata_port=%s' % metadata_port,
                '--metadata_proxy_user=%s' % expected_user,
                '--metadata_proxy_group=%s' % expected_group, '--debug',
                '--verbose',
                '--log-file=neutron-ns-metadata-proxy-%s.log' % router_id
            ]
            if not watch_log:
                netns_execute_args.append('--nometadata_proxy_watch_log')
            ip_mock.assert_has_calls([
                mock.call(namespace=router_ns),
                mock.call().netns.execute(netns_execute_args,
                                          addl_env=None,
                                          run_as_root=False)
            ])
Пример #19
0
 def test_initialize_dvr_ha_router_snat_ns_once(self):
     agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
     agent.conf.agent_mode = lib_constants.L3_AGENT_MODE_DVR_SNAT
     router = l3_test_common.prepare_router_data(num_internal_ports=2,
                                                 enable_ha=True)
     router['gw_port_host'] = HOSTNAME
     router[lib_constants.HA_INTERFACE_KEY]['status'] = 'ACTIVE'
     self.mock_driver.unplug.reset_mock()
     self._set_ri_kwargs(agent, router['id'], router)
     ri = dvr_edge_ha_rtr.DvrEdgeHaRouter(HOSTNAME, **self.ri_kwargs)
     ri._create_snat_namespace = mock.Mock()
     ri._plug_external_gateway = mock.Mock()
     ri.initialize(mock.Mock())
     ri._create_dvr_gateway(mock.Mock(), mock.Mock())
     ri._create_snat_namespace.assert_called_once_with()
Пример #20
0
    def test_add_arp_entry(self):
        agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
        router = l3_test_common.prepare_router_data(num_internal_ports=2)
        router['distributed'] = True
        subnet_id = l3_test_common.get_subnet_id(
            router[lib_constants.INTERFACE_KEY][0])
        arp_table = {'ip_address': '1.7.23.11',
                     'mac_address': '00:11:22:33:44:55',
                     'subnet_id': subnet_id}

        payload = {'arp_table': arp_table, 'router_id': router['id']}
        agent._router_added(router['id'], router)
        agent.add_arp_entry(None, payload)
        agent.router_deleted(None, router['id'])
        self.mock_ip_dev.neigh.add.assert_called_once_with(
            '1.7.23.11', '00:11:22:33:44:55')
Пример #21
0
    def test_handle_snat_rule_for_centralized_fip(self, _add_snat_rules,
                                                  _handle_router_snat_rules):
        agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
        agent.conf.agent_mode = lib_constants.L3_AGENT_MODE_DVR_SNAT
        self.mock_driver.unplug.reset_mock()

        router = l3_test_common.prepare_router_data(enable_floating_ip=True)
        router['gw_port_host'] = HOSTNAME
        self._set_ri_kwargs(agent, router['id'], router)
        ri = dvr_edge_rtr.DvrEdgeRouter(HOSTNAME, **self.ri_kwargs)
        ri.snat_iptables_manager = mock.MagicMock()
        ipv4_nat = ri.snat_iptables_manager.ipv4['nat']
        interface_name, ex_gw_port = l3_test_common.prepare_ext_gw_test(
            self, ri)
        ri._handle_router_snat_rules(ex_gw_port, interface_name)
        ipv4_nat.add_rule.assert_called_once_with('snat', '-j $float-snat')
Пример #22
0
 def test_dvr_router_add_fips_on_restarted_agent(self):
     self.agent.conf.agent_mode = 'dvr'
     router_info = self.generate_dvr_router_info()
     router = self.manage_router(self.agent, router_info)
     floating_ips = router.router[l3_constants.FLOATINGIP_KEY]
     router_ns = router.ns_name
     fip_rule_prio_1 = self._get_fixed_ip_rule_priority(
         router_ns, floating_ips[0]['fixed_ip_address'])
     restarted_agent = neutron_l3_agent.L3NATAgent(self.agent.host,
                                                   self.agent.conf)
     floating_ips[0]['floating_ip_address'] = '21.4.4.2'
     floating_ips[0]['fixed_ip_address'] = '10.0.0.2'
     self.manage_router(restarted_agent, router_info)
     fip_rule_prio_2 = self._get_fixed_ip_rule_priority(
         router_ns, floating_ips[0]['fixed_ip_address'])
     self.assertNotEqual(fip_rule_prio_1, fip_rule_prio_2)
Пример #23
0
 def test_after_router_updated_should_not_call_add_metadata_rules(self):
     with mock.patch.object(iptables_manager.IptablesTable,
                            'add_rule') as f,\
             mock.patch.object(iptables_manager.IptablesManager,
                               'apply'),\
             mock.patch.object(metadata_driver.MetadataDriver,
                               'spawn_monitored_metadata_proxy'),\
             mock.patch.object(router_info.RouterInfo, 'process'):
         agent = l3_agent.L3NATAgent('localhost')
         router_id = _uuid()
         router = {'id': router_id}
         ri = router_info.RouterInfo(mock.Mock(), router_id, router,
                                     agent.conf, mock.ANY)
         agent.router_info[router_id] = ri
         f.reset_mock()
         agent._process_updated_router(router)
         f.assert_not_called()
Пример #24
0
    def test_after_router_updated_called_on_agent_process_update(self):
        with mock.patch.object(metadata_driver, 'after_router_updated') as f,\
                mock.patch.object(router_info.RouterInfo, 'process'):
            agent = l3_agent.L3NATAgent('localhost')
            router_id = _uuid()
            router = {'id': router_id}
            ri = router_info.RouterInfo(mock.Mock(), router_id, router,
                                        agent.conf, mock.ANY)
            agent.router_info[router_id] = ri
            agent._process_updated_router(router)
            f.assert_called_once_with('router',
                                      'after_update',
                                      agent,
                                      payload=mock.ANY)

            payload = f.call_args_list[0][1]['payload']
            self.assertEqual(ri, payload.latest_state)
            self.assertEqual(router_id, payload.resource_id)
Пример #25
0
    def _test_ext_gw_updated_dvr_agent_mode(self, host, agent_mode,
                                            expected_call_count):
        router = l3_test_common.prepare_router_data(num_internal_ports=2)
        agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
        ri = dvr_router.DvrLocalRouter(agent, HOSTNAME, router['id'], router,
                                       **self.ri_kwargs)

        interface_name, ex_gw_port = l3_test_common.prepare_ext_gw_test(
            self, ri)
        ri._external_gateway_added = mock.Mock()

        # test agent mode = dvr (compute node)
        router['gw_port_host'] = host
        agent.conf.agent_mode = agent_mode

        ri.external_gateway_updated(ex_gw_port, interface_name)
        # no gateway should be added on dvr node
        self.assertEqual(expected_call_count,
                         ri._external_gateway_added.call_count)
Пример #26
0
 def setUp(self):
     super(NDPProxyExtensionLegacyDVRNoExternalTestCaseBase, self).setUp()
     self.conf.host = HOSTNAME
     self.conf.agent_mode = lib_const.L3_AGENT_MODE_DVR_SNAT
     self.agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
     self.ext_device_name = 'qg-%s' % self.ext_port_id[0:11]
     self.internal_ports = [{'subnets': [{'cidr': '2001::1:0/112'}]}]
     self.router = {
         'id': self.fake_router_id,
         'gw_port': self.ex_gw_port,
         'gw_port_host': HOSTNAME,
         'ha': False,
         'distributed': True,
         'enable_ndp_proxy': True
     }
     interface_driver = mock.Mock()
     interface_driver.DEV_NAME_LEN = 14
     kwargs = {
         'agent': self.agent,
         'router_id': self.fake_router_id,
         'router': self.router,
         'agent_conf': self.conf,
         'interface_driver': interface_driver
     }
     self._mock_load_fip = mock.patch.object(
         dvr_edge_router.DvrEdgeRouter,
         '_load_used_fip_information').start()
     self.router_info = dvr_edge_router.DvrEdgeRouter(HOSTNAME, **kwargs)
     self.iptables_manager = iptables_manager.IptablesManager(
         namespace=self.router_info.snat_namespace.name,
         use_ipv6=self.router_info.use_ipv6)
     self.router_info.snat_iptables_manager = self.iptables_manager
     self.router_info.internal_ports = self.internal_ports
     self.router_info.ex_gw_port = self.ex_gw_port
     self.iptables_manager.ipv6['filter'].chains = []
     self.iptables_manager.ipv6['filter'].rules = []
     self.agent.router_info[self.router['id']] = self.router_info
     self.wrap_name = self.iptables_manager.wrap_name
     self.namespace = "snat-" + self.fake_router_id
     self._mock_iptables_actions()
     self.ip_wrapper.reset_mock()
Пример #27
0
 def setUp(self):
     super(NDPProxyExtensionDVRTestCase, self).setUp()
     self.conf.host = HOSTNAME
     self.conf.agent_mode = lib_const.L3_AGENT_MODE_DVR
     self.agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
     self.add_route = mock.MagicMock()
     self.delete_route = mock.MagicMock()
     mock_route_cmd = mock.MagicMock()
     mock_route_cmd.add_route = self.add_route
     mock_route_cmd.delete_route = self.delete_route
     self.mock_ip_dev.route = mock_route_cmd
     self.lladdr = "fe80::f816:3eff:fe5f:9d67"
     get_ipv6_lladdr = mock.patch("neutron.agent.linux.ip_lib."
                                  "get_ipv6_lladdr").start()
     get_ipv6_lladdr.return_value = "%s/64" % self.lladdr
     self.router = {
         'id': self.fake_router_id,
         'gw_port': self.ex_gw_port,
         'ha': False,
         'distributed': True,
         'enable_ndp_proxy': True
     }
     kwargs = {
         'agent': self.agent,
         'router_id': self.fake_router_id,
         'router': self.router,
         'agent_conf': self.conf,
         'interface_driver': mock.Mock()
     }
     self.router_info = dvr_router.DvrLocalRouter(HOSTNAME, **kwargs)
     self.get_router_info = mock.patch(
         'neutron.agent.l3.l3_agent_extension_api.'
         'L3AgentExtensionAPI.get_router_info').start()
     self.get_router_info.return_value = self.router_info
     self.router_info.fip_ns = self.agent.get_fip_ns(self.ex_net_id)
     agent_ext_port_id = _uuid()
     self.router_info.fip_ns.agent_gateway_port = {'id': agent_ext_port_id}
     self.namespace = "fip-%s" % self.ex_net_id
     self.agent_ext_dvice = "fg-%s" % agent_ext_port_id[:11]
     self.ip_wrapper.reset_mock()
Пример #28
0
    def _test_spawn_metadata_proxy(self,
                                   expected_user,
                                   expected_group,
                                   user='',
                                   group=''):
        router_id = _uuid()
        router_ns = 'qrouter-%s' % router_id
        metadata_port = 8080
        ip_class_path = 'neutron.agent.linux.ip_lib.IPWrapper'

        cfg.CONF.set_override('metadata_proxy_user', user)
        cfg.CONF.set_override('metadata_proxy_group', group)
        cfg.CONF.set_override('log_file', 'test.log')
        cfg.CONF.set_override('debug', True)

        agent = l3_agent.L3NATAgent('localhost')
        with contextlib.nested(
                mock.patch('os.geteuid', return_value=self.EUID),
                mock.patch('os.getegid', return_value=self.EGID),
                mock.patch(ip_class_path)) as (geteuid, getegid, ip_mock):
            agent.metadata_driver.spawn_monitored_metadata_proxy(
                agent.process_monitor,
                router_ns,
                metadata_port,
                agent.conf,
                router_id=router_id)
            ip_mock.assert_has_calls([
                mock.call(namespace=router_ns),
                mock.call().netns.execute([
                    'neutron-ns-metadata-proxy', mock.ANY, mock.ANY,
                    '--router_id=%s' % router_id, mock.ANY,
                    '--metadata_port=%s' % metadata_port,
                    '--metadata_proxy_user=%s' % expected_user,
                    '--metadata_proxy_group=%s' % expected_group, '--debug',
                    '--verbose',
                    '--log-file=neutron-ns-metadata-proxy-%s.log' % router_id
                ],
                                          addl_env=None)
            ])
Пример #29
0
    def test_remove_centralized_floatingip(
            self, super_remove_centralized_floatingip):
        agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
        agent.conf.agent_mode = lib_constants.L3_AGENT_MODE_DVR_SNAT
        router = l3_test_common.prepare_router_data(num_internal_ports=2)
        router['gw_port_host'] = HOSTNAME
        self.mock_driver.unplug.reset_mock()
        self._set_ri_kwargs(agent, router['id'], router)
        fip_cidr = '11.22.33.44/24'

        ri = dvr_edge_ha_rtr.DvrEdgeHaRouter(HOSTNAME, **self.ri_kwargs)
        ri.is_router_primary = mock.Mock(return_value=False)
        ri._remove_vip = mock.Mock()
        ri.remove_centralized_floatingip(fip_cidr)
        ri._remove_vip.assert_called_once_with(fip_cidr)
        super_remove_centralized_floatingip.assert_not_called()

        ri1 = dvr_edge_ha_rtr.DvrEdgeHaRouter(HOSTNAME, **self.ri_kwargs)
        ri1.is_router_primary = mock.Mock(return_value=True)
        ri1._remove_vip = mock.Mock()
        ri1.remove_centralized_floatingip(fip_cidr)
        ri1._remove_vip.assert_called_once_with(fip_cidr)
        super_remove_centralized_floatingip.assert_called_once_with(fip_cidr)
Пример #30
0
    def setUp(self):
        super(QosExtensionBaseTestCase, self).setUp()

        self.fip_qos_ext = fip_qos.FipQosAgentExtension()
        self.context = context.get_admin_context()
        self.connection = mock.Mock()

        self.policy = policy.QosPolicy(context=None, name='test1', id=_uuid())
        self.ingress_rule = (rule.QosBandwidthLimitRule(
            context=None,
            id=_uuid(),
            qos_policy_id=self.policy.id,
            max_kbps=1111,
            max_burst_kbps=2222,
            direction=lib_const.INGRESS_DIRECTION))
        self.egress_rule = (rule.QosBandwidthLimitRule(
            context=None,
            id=_uuid(),
            qos_policy_id=self.policy.id,
            max_kbps=3333,
            max_burst_kbps=4444,
            direction=lib_const.EGRESS_DIRECTION))
        self.policy.rules = [self.ingress_rule, self.egress_rule]

        self.new_ingress_rule = (rule.QosBandwidthLimitRule(
            context=None,
            id=_uuid(),
            qos_policy_id=self.policy.id,
            max_kbps=5555,
            max_burst_kbps=6666,
            direction=lib_const.INGRESS_DIRECTION))
        self.ingress_rule_only_has_max_kbps = (rule.QosBandwidthLimitRule(
            context=None,
            id=_uuid(),
            qos_policy_id=self.policy.id,
            max_kbps=5555,
            max_burst_kbps=0,
            direction=lib_const.INGRESS_DIRECTION))

        self.policy2 = policy.QosPolicy(context=None, name='test2', id=_uuid())
        self.policy2.rules = [self.ingress_rule]

        self.policy3 = policy.QosPolicy(context=None, name='test3', id=_uuid())
        self.policy3.rules = [self.egress_rule]

        self.policy4 = policy.QosPolicy(context=None, name='test4', id=_uuid())
        self.dscp = rule.QosDscpMarkingRule(context=None,
                                            id=_uuid(),
                                            qos_policy_id=self.policy4.id,
                                            dscp_mark=32)
        self.dscp.obj_reset_changes()
        self.policy4.rules = [self.dscp]

        self.qos_policies = {
            self.policy.id: self.policy,
            self.policy2.id: self.policy2,
            self.policy3.id: self.policy3,
            self.policy4.id: self.policy4
        }

        self.agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
        self.ex_gw_port = {'id': _uuid()}
        self.fip = {
            'id': _uuid(),
            'floating_ip_address': TEST_QOS_FIP,
            'fixed_ip_address': '192.168.0.1',
            'floating_network_id': _uuid(),
            'port_id': _uuid(),
            'host': HOSTNAME,
            'qos_policy_id': self.policy.id
        }
        self.router = {
            'id': _uuid(),
            'gw_port': self.ex_gw_port,
            'ha': False,
            'distributed': False,
            lib_const.FLOATINGIP_KEY: [self.fip]
        }
        self.router_info = l3router.RouterInfo(self.agent, _uuid(),
                                               self.router, **self.ri_kwargs)
        self.router_info.ex_gw_port = self.ex_gw_port
        self.agent.router_info[self.router['id']] = self.router_info

        def _mock_get_router_info(router_id):
            return self.router_info

        self.get_router_info = mock.patch(
            'neutron.agent.l3.l3_agent_extension_api.'
            'L3AgentExtensionAPI.get_router_info').start()
        self.get_router_info.side_effect = _mock_get_router_info

        self.agent_api = l3_ext_api.L3AgentExtensionAPI(None)
        self.fip_qos_ext.consume_api(self.agent_api)