From 21f150dc5d3f049dfcc3732febbb7f1371caab50 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. Conflicts: neutron/tests/functional/agent/l3/framework.py Change-Id: I459ce4b791c27b1e3d977e0de9fbdb21a8a379f5 Closes-Bug: #1829889 (cherry picked from commit 62b2f2b1b1e2d8c0c2ffc1fd2ae9467eb2c1ef07) --- .../tests/functional/agent/l3/framework.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/neutron/tests/functional/agent/l3/framework.py b/neutron/tests/functional/agent/l3/framework.py index 56cddb4be2d..d08c2c2961d 100644 --- a/neutron/tests/functional/agent/l3/framework.py +++ b/neutron/tests/functional/agent/l3/framework.py @@ -224,14 +224,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) != n_const.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) != n_const.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):