Merge "[Functional tests] Add logging router interfaces in metadata IPv6 tests"

This commit is contained in:
Zuul
2024-09-27 14:02:37 +00:00
committed by Gerrit Code Review

View File

@@ -17,16 +17,20 @@ import time
import netaddr
from neutron_lib import constants
from oslo_log import log as logging
import webob
import webob.dec
import webob.exc
from neutron.agent.linux import ip_lib
from neutron.agent.linux import utils
from neutron.tests.common import machine_fixtures
from neutron.tests.common import net_helpers
from neutron.tests.functional.agent.l3 import framework
from neutron.tests.functional.agent.linux import helpers
LOG = logging.getLogger(__name__)
METADATA_REQUEST_TIMEOUT = 60
METADATA_REQUEST_SLEEP = 5
TOO_MANY_REQUESTS_CODE = '429'
@@ -100,7 +104,14 @@ class MetadataL3AgentTestCase(framework.L3AgentTestFramework):
interface,))
return interface
def _query_metadata_proxy(self, machine, ipv6=False, interface=None):
def _log_router_interfaces_configuration(self, router):
router_ip_wrapper = ip_lib.IPWrapper(router.ns_name)
ip_a_output = router_ip_wrapper.netns.execute(["ip", "addr"])
LOG.debug("Interfaces in the router namespace (%s): %s",
router.ns_name, ip_a_output)
def _query_metadata_proxy(self, machine, ipv6=False, interface=None,
router=None):
cmd = self._get_command(machine, ipv6, interface)
i = 0
CONNECTION_REFUSED_TIMEOUT = METADATA_REQUEST_TIMEOUT // 2
@@ -113,6 +124,9 @@ class MetadataL3AgentTestCase(framework.L3AgentTestFramework):
time.sleep(METADATA_REQUEST_SLEEP)
i += METADATA_REQUEST_SLEEP
else:
if router:
self._log_router_interfaces_configuration(router)
self.fail('metadata proxy unreachable '
'on %s before timeout' % cmd[-1])
@@ -139,15 +153,16 @@ class MetadataL3AgentTestCase(framework.L3AgentTestFramework):
router_ifs = router_info[constants.INTERFACE_KEY]
qr_lla = str(
netaddr.EUI(router_ifs[0]['mac_address']).ipv6_link_local())
return machine, qr_lla
return machine, qr_lla, router
def _test_access_to_metadata_proxy(self, ipv6=False):
machine, qr_lla = self._create_resources()
machine, qr_lla, router = self._create_resources()
interface = self._setup_for_ipv6(machine, qr_lla) if ipv6 else None
# Query metadata proxy
firstline = self._query_metadata_proxy(machine, ipv6=ipv6,
interface=interface)
interface=interface,
router=router)
# Check status code
self.assertIn(str(webob.exc.HTTPOk.code), firstline.split())
@@ -158,21 +173,23 @@ class MetadataL3AgentTestCase(framework.L3AgentTestFramework):
if ipv6:
self.conf.set_override('ip_versions', [6],
'metadata_rate_limiting')
machine, qr_lla = self._create_resources()
machine, qr_lla, router = self._create_resources()
interface = self._setup_for_ipv6(machine, qr_lla) if ipv6 else None
return machine, interface
return machine, interface, router
def _test_rate_limiting(self, limit, machine, ipv6=False, interface=None,
exceed=True):
exceed=True, router=None):
# The first "limit" requests should succeed
for _ in range(limit):
firstline = self._query_metadata_proxy(machine, ipv6=ipv6,
interface=interface)
interface=interface,
router=router)
self.assertIn(str(webob.exc.HTTPOk.code), firstline.split())
if exceed:
firstline = self._query_metadata_proxy(machine, ipv6=ipv6,
interface=interface)
interface=interface,
router=router)
self.assertIn(TOO_MANY_REQUESTS_CODE, firstline.split())
def test_access_to_metadata_proxy(self):
@@ -184,14 +201,16 @@ class MetadataL3AgentTestCase(framework.L3AgentTestFramework):
def test_metadata_proxy_rate_limiting(self):
self.conf.set_override('base_query_rate_limit', 2,
'metadata_rate_limiting')
machine, _ = self._set_up_for_rate_limiting_test()
machine, _, _ = self._set_up_for_rate_limiting_test()
self._test_rate_limiting(2, machine)
def test_metadata_proxy_rate_limiting_ipv6(self):
self.conf.set_override('base_query_rate_limit', 2,
'metadata_rate_limiting')
machine, interface = self._set_up_for_rate_limiting_test(ipv6=True)
self._test_rate_limiting(2, machine, ipv6=True, interface=interface)
machine, interface, router = self._set_up_for_rate_limiting_test(
ipv6=True)
self._test_rate_limiting(2, machine, ipv6=True, interface=interface,
router=router)
def test_metadata_proxy_burst_rate_limiting(self):
self.conf.set_override('base_query_rate_limit', 10,
@@ -202,7 +221,7 @@ class MetadataL3AgentTestCase(framework.L3AgentTestFramework):
'metadata_rate_limiting')
self.conf.set_override('burst_window_duration', 5,
'metadata_rate_limiting')
machine, _ = self._set_up_for_rate_limiting_test()
machine, _, _ = self._set_up_for_rate_limiting_test()
# Since the number of metadata requests don't exceed the base or the
# burst query rate limit, all of them should get "OK" response
@@ -222,7 +241,7 @@ class MetadataL3AgentTestCase(framework.L3AgentTestFramework):
'metadata_rate_limiting')
self.conf.set_override('burst_window_duration', 5,
'metadata_rate_limiting')
machine, _ = self._set_up_for_rate_limiting_test()
machine, _, _ = self._set_up_for_rate_limiting_test()
# Since the number of metadata requests don't exceed the base or the
# burst query rate limit, all of them should get "OK" response
@@ -238,7 +257,7 @@ class MetadataL3AgentTestCase(framework.L3AgentTestFramework):
'metadata_rate_limiting')
self.conf.set_override('ip_versions', [4, 6],
'metadata_rate_limiting')
machine, _ = self._set_up_for_rate_limiting_test()
machine, _, _ = self._set_up_for_rate_limiting_test()
# Since we are passing an invalid ip_versions configuration, rate
# limiting will not be configuerd and more than 2 requests should
# succeed