diff --git a/neutron/tests/common/net_helpers.py b/neutron/tests/common/net_helpers.py index 08b02d81e15..7e58d495d0a 100644 --- a/neutron/tests/common/net_helpers.py +++ b/neutron/tests/common/net_helpers.py @@ -768,6 +768,19 @@ class PortFixture(fixtures.Fixture, metaclass=abc.ABCMeta): return VethPortFixture(bridge, namespace) tools.fail('Unexpected bridge type: %s' % type(bridge)) + def set_port_mac_address(self): + + def set_mac_address(): + self.port.link.set_address(self.mac) + return self.port.link.address.lower() == self.mac.lower() + + try: + common_utils.wait_until_true(set_mac_address, timeout=10) + except common_utils.WaitTimeout: + LOG.error("MAC address of the port %s not set properly. " + "Requested MAC: %s; Actual MAC: %s", + self.port, self.mac, self.port.link.address) + class OVSBridgeFixture(fixtures.Fixture): """Create an OVS bridge. @@ -883,7 +896,7 @@ class OVSPortFixture(PortFixture): bridge_port.link.set_up() self.qbr.addif(bridge_port.name) - self.port.link.set_address(self.mac) + self.set_port_mac_address() self.port.link.set_up() # NOTE(jlibosva): Methods below are taken from nova.virt.libvirt.vif @@ -974,8 +987,7 @@ class LinuxBridgePortFixture(PortFixture): self.veth_fixture = self.useFixture(VethFixture()) self.br_port, self.port = self.veth_fixture.ports - if self.mac: - self.port.link.set_address(self.mac) + self.set_port_mac_address() # bridge side br_ip_wrapper = ip_lib.IPWrapper(self.bridge.namespace)