diff --git a/neutron/plugins/ml2/drivers/l2pop/mech_driver.py b/neutron/plugins/ml2/drivers/l2pop/mech_driver.py index fc413fe95a4..99f56988999 100644 --- a/neutron/plugins/ml2/drivers/l2pop/mech_driver.py +++ b/neutron/plugins/ml2/drivers/l2pop/mech_driver.py @@ -107,7 +107,7 @@ def update_port_postcommit(self, context): context.status == const.PORT_STATUS_ACTIVE): LOG.warning(_LW("unable to modify mac_address of ACTIVE port " "%s"), port['id']) - raise ml2_exc.MechansimDriverError(method='update_port_postcommit') + raise ml2_exc.MechanismDriverError(method='update_port_postcommit') diff_ips = self._get_diff_ips(orig, port) if diff_ips: self._fixed_ips_changed(context, orig, port, diff_ips) diff --git a/neutron/tests/unit/ml2/drivers/test_l2population.py b/neutron/tests/unit/ml2/drivers/test_l2population.py index 12f0f6b21aa..479df6cfd3a 100644 --- a/neutron/tests/unit/ml2/drivers/test_l2population.py +++ b/neutron/tests/unit/ml2/drivers/test_l2population.py @@ -14,6 +14,7 @@ # under the License. import contextlib +import testtools import mock from oslo_utils import timeutils @@ -26,6 +27,8 @@ from neutron.extensions import portbindings from neutron.extensions import providernet as pnet from neutron import manager +from neutron.plugins.ml2.common import exceptions as ml2_exc +from neutron.plugins.ml2 import driver_context from neutron.plugins.ml2.drivers.l2pop import db as l2pop_db from neutron.plugins.ml2.drivers.l2pop import mech_driver as l2pop_mech_driver from neutron.plugins.ml2.drivers.l2pop import rpc as l2pop_rpc @@ -994,3 +997,25 @@ def test_create_agent_fdb_only_tunnels(self): {'10.0.0.1': [constants.FLOODING_ENTRY]}} self.assertEqual(expected_result, result) + + 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)