예제 #1
0
    def _test_create_agent_fdb(self, fdb_network_ports_query, agent_ips):
        mech_driver = l2pop_mech_driver.L2populationMechanismDriver()
        tunnel_network_ports_query, tunnel_agent = (
            self._mock_network_ports_query(HOST + '1', None))
        agent_ips[tunnel_agent] = '10.0.0.1'

        def agent_ip_side_effect(agent):
            return agent_ips[agent]

        with contextlib.nested(
                mock.patch.object(l2pop_db.L2populationDbMixin,
                                  'get_agent_ip',
                                  side_effect=agent_ip_side_effect),
                mock.patch.object(l2pop_db.L2populationDbMixin,
                                  'get_nondvr_active_network_ports',
                                  new=fdb_network_ports_query),
                mock.patch.object(l2pop_db.L2populationDbMixin,
                                  'get_dvr_active_network_ports',
                                  new=tunnel_network_ports_query)):
            session = mock.Mock()
            agent = mock.Mock()
            agent.host = HOST
            segment = {'segmentation_id': 1, 'network_type': 'vxlan'}
            return mech_driver._create_agent_fdb(session,
                                                 agent,
                                                 segment,
                                                 'network_id')
예제 #2
0
    def _test_create_agent_fdb(self, fdb_network_ports, agent_ips):
        mech_driver = l2pop_mech_driver.L2populationMechanismDriver()
        tunnel_network_ports, tunnel_agent = (
            self._mock_network_ports(HOST + '1', [None]))
        agent_ips[tunnel_agent] = '10.0.0.1'

        def agent_ip_side_effect(agent):
            return agent_ips[agent]

        with mock.patch.object(l2pop_db, 'get_agent_ip',
                               side_effect=agent_ip_side_effect),\
                mock.patch.object(l2pop_db,
                                  'get_nondistributed_active_network_ports',
                                  return_value=fdb_network_ports),\
                mock.patch.object(l2pop_db,
                                  'get_distributed_active_network_ports',
                                  return_value=tunnel_network_ports):
            session = mock.Mock()
            agent = mock.Mock()
            agent.host = HOST
            segment = {'segmentation_id': 1, 'network_type': 'vxlan'}
            return mech_driver._create_agent_fdb(session,
                                                 agent,
                                                 segment,
                                                 'network_id')
예제 #3
0
 def _test_get_tunnels(self, agent_ip, exclude_host=True):
     mech_driver = l2pop_mech_driver.L2populationMechanismDriver()
     agent = mock.Mock()
     agent.host = HOST
     network_ports = ((None, agent), )
     with mock.patch.object(l2pop_db, 'get_agent_ip',
                            return_value=agent_ip):
         excluded_host = HOST + '-EXCLUDE' if exclude_host else HOST
         return mech_driver._get_tunnels(network_ports, excluded_host)
예제 #4
0
 def test_delete_port_invokes_update_device_down(self):
     l2pop_mech = l2pop_mech_driver.L2populationMechanismDriver()
     l2pop_mech.L2PopulationAgentNotify = mock.Mock()
     l2pop_mech.rpc_ctx = mock.Mock()
     with mock.patch.object(l2pop_mech,
                            '_get_agent_fdb',
                            return_value=None) as upd_port_down,\
             mock.patch.object(l2pop_mech.L2PopulationAgentNotify,
                               'remove_fdb_entries'):
         l2pop_mech.delete_port_postcommit(mock.Mock())
         self.assertTrue(upd_port_down.called)
예제 #5
0
    def test_delete_unbound_port(self):
        l2pop_mech = l2pop_mech_driver.L2populationMechanismDriver()
        l2pop_mech.initialize()

        with self.port() as port:
            port_context = driver_context.PortContext(
                self.driver, self.context, port['port'],
                self.driver.get_network(self.context,
                                        port['port']['network_id']), None,
                None)
            # The point is to provide coverage and to assert that no exceptions
            # are raised.
            l2pop_mech.delete_port_postcommit(port_context)
예제 #6
0
    def test_fixed_ips_change_unbound_port_no_rpc(self):
        l2pop_mech = l2pop_mech_driver.L2populationMechanismDriver()
        l2pop_mech.initialize()
        l2pop_mech.L2populationAgentNotify = mock.Mock()

        with self.port() as port:
            port_context = driver_context.PortContext(
                self.driver, self.context, port['port'],
                self.driver.get_network(self.context,
                                        port['port']['network_id']), None,
                None)
            l2pop_mech._fixed_ips_changed(port_context, None, port['port'],
                                          (set(['10.0.0.1']), set()))

        # There's no need to send an RPC update if the IP address for an
        # unbound port changed.
        self.assertFalse(
            l2pop_mech.L2populationAgentNotify.update_fdb_entries.called)
예제 #7
0
    def test_update_port_postcommit_mac_address_changed_raises(self):
        port = {'status': u'ACTIVE',
                'device_owner': u'compute:None',
                'mac_address': u'12:34:56:78:4b:0e',
                'id': u'1'}

        original_port = port.copy()
        original_port['mac_address'] = u'12:34:56:78:4b:0f'

        with mock.patch.object(driver_context.db, 'get_network_segments'):
            ctx = driver_context.PortContext(mock.Mock(),
                                             mock.Mock(),
                                             port,
                                             mock.MagicMock(),
                                             mock.Mock(),
                                             None,
                                             original_port=original_port)

        mech_driver = l2pop_mech_driver.L2populationMechanismDriver()
        with testtools.ExpectedException(ml2_exc.MechanismDriverError):
            mech_driver.update_port_postcommit(ctx)