]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Fix L3 agent functional tests random failures
authorAssaf Muller <amuller@redhat.com>
Thu, 23 Apr 2015 17:43:29 +0000 (13:43 -0400)
committerAssaf Muller <amuller@redhat.com>
Thu, 23 Apr 2015 19:00:09 +0000 (15:00 -0400)
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

neutron/tests/functional/agent/test_l3_agent.py

index 87cef79c1e7d73edfc971fb728970cbd13ce8848..f628e4b00a90d954bc0099ae4966fd09f1d4eb5f 100755 (executable)
@@ -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')