Esempio n. 1
0
    def setUp(self):
        super(TunnelTest, self).setUp()
        self.useFixture(test_vlanmanager.LocalVlanManagerFixture())
        conn_patcher = mock.patch('neutron.agent.ovsdb.impl_idl._connection')
        conn_patcher.start()
        mock.patch('neutron.api.rpc.handlers.resources_rpc.ResourcesPullRpcApi'
                   ).start()
        self.addCleanup(conn_patcher.stop)
        cfg.CONF.set_default('firewall_driver',
                             'neutron.agent.firewall.NoopFirewallDriver',
                             group='SECURITYGROUP')
        cfg.CONF.set_override('report_interval', 0, 'AGENT')

        self.INT_BRIDGE = 'integration_bridge'
        self.TUN_BRIDGE = 'tunnel_bridge'
        self.MAP_TUN_BRIDGE = 'tun_br_map'
        self.AUX_BRIDGE = 'ancillary_bridge'
        self.NET_MAPPING = ['net1:%s' % self.MAP_TUN_BRIDGE]
        self.INT_OFPORT = 11111
        self.TUN_OFPORT = 22222
        self.MAP_TUN_INT_OFPORT = 33333
        self.MAP_TUN_PHY_OFPORT = 44444

        self.LVM_DATA = (LV_ID, 'gre', None, LS_ID, VIF_PORTS)
        self.LVM_FLAT_DATA = (LV_ID, 'flat', 'net1', LS_ID, VIF_PORTS)
        self.LVM_VLAN_DATA = (LV_ID, 'vlan', 'net1', LS_ID, VIF_PORTS)

        self.inta = mock.Mock()
        self.intb = mock.Mock()

        mock.patch.object(ovs_lib.BaseOVS,
                          'config',
                          new_callable=mock.PropertyMock,
                          return_value={}).start()

        mock.patch('neutron.agent.ovsdb.impl_idl._connection').start()
        self.ovs_bridges = {
            self.INT_BRIDGE: mock.create_autospec(self.br_int_cls('br-int')),
            self.TUN_BRIDGE: mock.create_autospec(self.br_tun_cls('br-tun')),
            self.MAP_TUN_BRIDGE:
            mock.create_autospec(self.br_phys_cls('br-phys')),
            self.AUX_BRIDGE: mock.create_autospec(ovs_lib.OVSBridge('br-aux')),
        }
        self.ovs_int_ofports = {
            'patch-tun': self.TUN_OFPORT,
            'int-%s' % self.MAP_TUN_BRIDGE: self.MAP_TUN_INT_OFPORT
        }

        mock.patch('neutron.agent.rpc.PluginReportStateAPI.'
                   'has_alive_neutron_server').start()

        def lookup_br(br_name, *args, **kwargs):
            return self.ovs_bridges[br_name]

        self.mock_int_bridge_cls = mock.patch(self._BR_INT_CLASS,
                                              autospec=True).start()
        self.mock_int_bridge_cls.side_effect = lookup_br
        self.mock_phys_bridge_cls = mock.patch(self._BR_PHYS_CLASS,
                                               autospec=True).start()
        self.mock_phys_bridge_cls.side_effect = lookup_br
        self.mock_tun_bridge_cls = mock.patch(self._BR_TUN_CLASS,
                                              autospec=True).start()
        self.mock_tun_bridge_cls.side_effect = lookup_br
        self.mock_aux_bridge_cls = mock.patch(
            'neutron.agent.common.ovs_lib.OVSBridge', autospec=True).start()
        self.mock_aux_bridge_cls.side_effect = lookup_br

        self.mock_int_bridge = self.ovs_bridges[self.INT_BRIDGE]
        self.mock_int_bridge.add_port.return_value = self.MAP_TUN_INT_OFPORT
        self.mock_int_bridge.add_patch_port.side_effect = (
            lambda tap, peer: self.ovs_int_ofports[tap])
        self.mock_int_bridge.port_exists.return_value = False
        self.mock_int_bridge.get_vif_ports.return_value = []
        self.mock_int_bridge.get_ports_attributes.return_value = []
        self.mock_int_bridge.db_get_val.return_value = {}

        self.mock_map_tun_bridge = self.ovs_bridges[self.MAP_TUN_BRIDGE]
        self.mock_map_tun_bridge.br_name = self.MAP_TUN_BRIDGE
        self.mock_map_tun_bridge.add_port.return_value = (
            self.MAP_TUN_PHY_OFPORT)
        self.mock_map_tun_bridge.add_patch_port.return_value = (
            self.MAP_TUN_PHY_OFPORT)
        self.mock_map_tun_bridge.port_exists.return_value = False

        self.mock_tun_bridge = self.ovs_bridges[self.TUN_BRIDGE]
        self.mock_tun_bridge.add_port.return_value = self.INT_OFPORT
        self.mock_tun_bridge.add_patch_port.return_value = self.INT_OFPORT

        self.ipdevice = mock.patch.object(ip_lib, 'IPDevice').start()

        self.ipwrapper = mock.patch.object(ip_lib, 'IPWrapper').start()
        add_veth = self.ipwrapper.return_value.add_veth
        add_veth.return_value = [self.inta, self.intb]

        self.get_bridges = mock.patch.object(ovs_lib.BaseOVS,
                                             'get_bridges').start()
        self.get_bridges.return_value = [
            self.INT_BRIDGE, self.TUN_BRIDGE, self.MAP_TUN_BRIDGE,
            self.AUX_BRIDGE
        ]
        self.get_bridge_external_bridge_id = mock.patch.object(
            ovs_lib.BaseOVS, 'get_bridge_external_bridge_id').start()
        self.get_bridge_external_bridge_id.side_effect = (
            lambda bridge: bridge if bridge in self.ovs_bridges else None)

        self.execute = mock.patch('neutron.agent.common.utils.execute').start()
        self.mock_check_bridge_datapath_id = mock.patch.object(
            self.mod_agent.OVSNeutronAgent,
            '_check_bridge_datapath_id').start()
        self._define_expected_calls()
    def setUp(self):
        super(TestL2populationRpcCallBackTunnelMixinBase, self).setUp()
        self.vlan_manager = self.useFixture(
            test_vlanmanager.LocalVlanManagerFixture()).manager
        self.fakeagent = FakeNeutronAgent()
        self.fakebr = mock.Mock()
        Port = collections.namedtuple('Port', 'ip, ofport')
        LVM = collections.namedtuple(
            'LVM', 'net, vlan, phys, segid, mac, ip, vif, port')

        self.local_ip = '127.0.0.1'
        self.type_gre = 'gre'
        self.ports = [
            Port(ip='10.1.0.1', ofport='ofport1'),
            Port(ip='10.1.0.2', ofport='ofport2'),
            Port(ip='10.1.0.3', ofport='ofport3')
        ]
        self.ofports = {
            self.type_gre: {
                self.ports[0].ip: self.ports[0].ofport,
                self.ports[1].ip: self.ports[1].ofport,
                self.ports[2].ip: self.ports[2].ofport,
            }
        }

        self.lvms = [
            LVM(net='net1',
                vlan=1,
                phys='phys1',
                segid='tun1',
                mac='mac1',
                ip='1.1.1.1',
                vif='vifid1',
                port='port1'),
            LVM(net='net2',
                vlan=2,
                phys='phys2',
                segid='tun2',
                mac='mac2',
                ip='2.2.2.2',
                vif='vifid2',
                port='port2'),
            LVM(net='net3',
                vlan=3,
                phys='phys3',
                segid='tun3',
                mac='mac3',
                ip='3.3.3.3',
                vif='vifid3',
                port='port3')
        ]

        self.agent_ports = {
            self.ports[0].ip: [(self.lvms[0].mac, self.lvms[0].ip)],
            self.ports[1].ip: [(self.lvms[1].mac, self.lvms[1].ip)],
            self.ports[2].ip: [(self.lvms[2].mac, self.lvms[2].ip)],
        }

        self.fdb_entries1 = {
            self.lvms[0].net: {
                'network_type': self.type_gre,
                'segment_id': self.lvms[0].segid,
                'ports': {
                    self.local_ip: [],
                    self.ports[0].ip: [(self.lvms[0].mac, self.lvms[0].ip)]
                },
            },
            self.lvms[1].net: {
                'network_type': self.type_gre,
                'segment_id': self.lvms[1].segid,
                'ports': {
                    self.local_ip: [],
                    self.ports[1].ip: [(self.lvms[1].mac, self.lvms[1].ip)]
                },
            },
            self.lvms[2].net: {
                'network_type': self.type_gre,
                'segment_id': self.lvms[2].segid,
                'ports': {
                    self.local_ip: [],
                    self.ports[2].ip: [(self.lvms[2].mac, self.lvms[2].ip)]
                },
            },
        }

        for i in range(3):
            self.vlan_manager.add(self.lvms[i].net, self.lvms[i].vlan,
                                  self.type_gre, self.lvms[i].phys,
                                  self.lvms[i].segid,
                                  {self.lvms[i].vif: self.lvms[i].port})
            setattr(self, 'lvm%d' % i, self.vlan_manager.get(self.lvms[i].net))

        self.upd_fdb_entry1_val = {
            self.lvms[0].net: {
                self.ports[0].ip: {
                    'before':
                    [l2pop_rpc.PortInfo(self.lvms[0].mac, self.lvms[0].ip)],
                    'after':
                    [l2pop_rpc.PortInfo(self.lvms[1].mac, self.lvms[1].ip)],
                },
                self.ports[1].ip: {
                    'before':
                    [l2pop_rpc.PortInfo(self.lvms[0].mac, self.lvms[0].ip)],
                    'after':
                    [l2pop_rpc.PortInfo(self.lvms[1].mac, self.lvms[1].ip)],
                },
            },
            self.lvms[1].net: {
                self.ports[2].ip: {
                    'before':
                    [l2pop_rpc.PortInfo(self.lvms[0].mac, self.lvms[0].ip)],
                    'after':
                    [l2pop_rpc.PortInfo(self.lvms[2].mac, self.lvms[2].ip)],
                },
            },
        }
        self.upd_fdb_entry1 = {'chg_ip': self.upd_fdb_entry1_val}