import copy
import functools
import os.path
+import time
import mock
import netaddr
_uuid = uuidutils.generate_uuid
METADATA_REQUEST_TIMEOUT = 60
+METADATA_REQUEST_SLEEP = 5
def get_ovs_bridge(br_name):
self.agent.conf.metadata_proxy_socket,
workers=0, backlog=4096, mode=self.SOCKET_MODE)
+ def _query_metadata_proxy(self, machine):
+ url = 'http://%(host)s:%(port)s' % {'host': dhcp.METADATA_DEFAULT_IP,
+ 'port': dhcp.METADATA_PORT}
+ cmd = 'curl', '--max-time', METADATA_REQUEST_TIMEOUT, '-D-', url
+ i = 0
+ CONNECTION_REFUSED_TIMEOUT = METADATA_REQUEST_TIMEOUT // 2
+ while i <= CONNECTION_REFUSED_TIMEOUT:
+ try:
+ raw_headers = machine.execute(cmd)
+ break
+ except RuntimeError as e:
+ if 'Connection refused' in str(e):
+ time.sleep(METADATA_REQUEST_SLEEP)
+ i += METADATA_REQUEST_SLEEP
+ else:
+ self.fail('metadata proxy unreachable '
+ 'on %s before timeout' % url)
+
+ if i > CONNECTION_REFUSED_TIMEOUT:
+ self.fail('Timed out waiting metadata proxy to become available')
+ return raw_headers.splitlines()[0]
+
def test_access_to_metadata_proxy(self):
"""Test access to the l3-agent metadata proxy.
router_ip_cidr.partition('/')[0]))
# Query metadata proxy
- url = 'http://%(host)s:%(port)s' % {'host': dhcp.METADATA_DEFAULT_IP,
- 'port': dhcp.METADATA_PORT}
- cmd = 'curl', '--max-time', METADATA_REQUEST_TIMEOUT, '-D-', url
- try:
- raw_headers = machine.execute(cmd)
- except RuntimeError:
- self.fail('metadata proxy unreachable on %s before timeout' % url)
+ firstline = self._query_metadata_proxy(machine)
# Check status code
- firstline = raw_headers.splitlines()[0]
self.assertIn(str(webob.exc.HTTPOk.code), firstline.split())