From e2d5be1cb3094ffbfc979aa04262f3dbc43f38ec Mon Sep 17 00:00:00 2001 From: Assaf Muller Date: Thu, 23 Apr 2015 13:43:29 -0400 Subject: [PATCH] Fix L3 agent functional tests random failures The test_ha_router_failover tests were not being unmocked. This is because the same object was being mocked twice, but unmocked once. The mock.patch.stopall call in the tests base class was rewinding the value of the object from the second mock to the first mock. Follow up tests in the same worker were using namespace names defined via the first mock in the failover test. Closes-Bug: #1446261 Change-Id: I8f24b8bb3a6a501dbe210c2cc67c47fa4b76257c --- .../tests/functional/agent/test_l3_agent.py | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/neutron/tests/functional/agent/test_l3_agent.py b/neutron/tests/functional/agent/test_l3_agent.py index 87cef79c1..f628e4b00 100755 --- a/neutron/tests/functional/agent/test_l3_agent.py +++ b/neutron/tests/functional/agent/test_l3_agent.py @@ -719,11 +719,11 @@ class L3HATestFramework(L3AgentTestFramework): def test_ha_router_failover(self): router_info = self.generate_router_info(enable_ha=True) - ns_name = "%s%s%s" % ( - namespaces.RouterNamespace._get_ns_name(router_info['id']), - self.NESTED_NAMESPACE_SEPARATOR, self.agent.host) - mock.patch.object(namespaces.RouterNamespace, '_get_ns_name', - return_value=ns_name).start() + get_ns_name = mock.patch.object( + namespaces.RouterNamespace, '_get_ns_name').start() + get_ns_name.return_value = "%s%s%s" % ( + namespaces.RouterNamespace._get_ns_name(router_info['id']), + self.NESTED_NAMESPACE_SEPARATOR, self.agent.host) router1 = self.manage_router(self.agent, router_info) router_info_2 = copy.deepcopy(router_info) @@ -731,19 +731,15 @@ class L3HATestFramework(L3AgentTestFramework): test_l3_agent.get_ha_interface(ip='169.254.192.2', mac='22:22:22:22:22:22')) - ns_name = "%s%s%s" % ( - namespaces.RouterNamespace._get_ns_name(router_info_2['id']), - self.NESTED_NAMESPACE_SEPARATOR, self.failover_agent.host) - mock.patch.object(namespaces.RouterNamespace, '_get_ns_name', - return_value=ns_name).start() + get_ns_name.return_value = "%s%s%s" % ( + namespaces.RouterNamespace._get_ns_name(router_info_2['id']), + self.NESTED_NAMESPACE_SEPARATOR, self.failover_agent.host) router2 = self.manage_router(self.failover_agent, router_info_2) utils.wait_until_true(lambda: router1.ha_state == 'master') utils.wait_until_true(lambda: router2.ha_state == 'backup') - device_name = router1.get_ha_device_name() - ha_device = ip_lib.IPDevice(device_name, namespace=router1.ns_name) - ha_device.link.set_down() + self.fail_ha_router(router1) utils.wait_until_true(lambda: router2.ha_state == 'master') utils.wait_until_true(lambda: router1.ha_state == 'backup') -- 2.45.2