From 62b2f2b1b1e2d8c0c2ffc1fd2ae9467eb2c1ef07 Mon Sep 17 00:00:00 2001 From: Slawek Kaplonski Date: Wed, 22 May 2019 13:49:55 +0200 Subject: [PATCH] Wait to ipv6 accept_ra be really changed by L3 agent In functional tests for L3 HA agent, like e.g. L3HATestFailover.test_ha_router_failover it may happen that L3 agent will not change ipv6 accept_ra knob and test fails because it checks that only once just after router state is change. This patch fixes that race by adding wait for 60 seconds to ipv6 accept_ra change. Change-Id: I459ce4b791c27b1e3d977e0de9fbdb21a8a379f5 Closes-Bug: #1829889 --- .../tests/functional/agent/l3/framework.py | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/neutron/tests/functional/agent/l3/framework.py b/neutron/tests/functional/agent/l3/framework.py index 417d6824f79..e91b6801a8f 100644 --- a/neutron/tests/functional/agent/l3/framework.py +++ b/neutron/tests/functional/agent/l3/framework.py @@ -227,15 +227,25 @@ class L3AgentTestFramework(base.BaseSudoTestCase): def _assert_external_device(self, router): self.assertTrue(self._check_external_device(router)) + def _wait_until_ipv6_accept_ra_has_state( + self, ns_name, device_name, enabled): + ip_wrapper = ip_lib.IPWrapper(namespace=ns_name) + + def _ipv6_accept_ra_state(): + ra_state = ip_wrapper.netns.execute(['sysctl', '-b', + 'net.ipv6.conf.%s.accept_ra' % device_name]) + return ( + enabled == (int(ra_state) != constants.ACCEPT_RA_DISABLED)) + + common_utils.wait_until_true(_ipv6_accept_ra_state) + def _assert_ipv6_accept_ra(self, router, enabled=True): external_port = router.get_ex_gw_port() external_device_name = router.get_external_device_name( external_port['id']) - ip_wrapper = ip_lib.IPWrapper(namespace=router.ns_name) - ra_state = ip_wrapper.netns.execute(['sysctl', '-b', - 'net.ipv6.conf.%s.accept_ra' % external_device_name]) - self.assertEqual( - enabled, int(ra_state) != constants.ACCEPT_RA_DISABLED) + + self._wait_until_ipv6_accept_ra_has_state( + router.ns_name, external_device_name, enabled) def _wait_until_ipv6_forwarding_has_state(self, ns_name, dev_name, state):