diff options
author | Daniel Watkins <daniel.watkins@canonical.com> | 2015-03-04 12:29:29 +0000 |
---|---|---|
committer | Daniel Watkins <daniel.watkins@canonical.com> | 2015-03-04 12:29:29 +0000 |
commit | 04a60cf949e085f06fa1f93b39a74b8d288f0e2e (patch) | |
tree | bfc12529adefacd279aa784041d8ffd19fe117b6 /tests/unittests/helpers.py | |
parent | 48297d2a5d5cd41286135e6c17b37e67fc1bc40d (diff) | |
download | vyos-cloud-init-04a60cf949e085f06fa1f93b39a74b8d288f0e2e.tar.gz vyos-cloud-init-04a60cf949e085f06fa1f93b39a74b8d288f0e2e.zip |
Fix hang caused by HTTPretty on Python 3.4.2.
HTTPretty can causes hangs on Python 3.4.2 (and maybe Python 3.4.1), due
to a Python bug (fixed in Python 3.4.3). This works around the problem
in the appropriate Python versions.
See https://github.com/gabrielfalcao/HTTPretty/pull/193 and
https://github.com/gabrielfalcao/HTTPretty/issues/221 for details.
Diffstat (limited to 'tests/unittests/helpers.py')
-rw-r--r-- | tests/unittests/helpers.py | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/tests/unittests/helpers.py b/tests/unittests/helpers.py index 24e1e881..61a1f6ff 100644 --- a/tests/unittests/helpers.py +++ b/tests/unittests/helpers.py @@ -1,5 +1,6 @@ from __future__ import print_function +import functools import os import sys import shutil @@ -25,9 +26,10 @@ PY2 = False PY26 = False PY27 = False PY3 = False +FIX_HTTPRETTY = False _PY_VER = sys.version_info -_PY_MAJOR, _PY_MINOR = _PY_VER[0:2] +_PY_MAJOR, _PY_MINOR, _PY_MICRO = _PY_VER[0:3] if (_PY_MAJOR, _PY_MINOR) <= (2, 6): if (_PY_MAJOR, _PY_MINOR) == (2, 6): PY26 = True @@ -39,6 +41,8 @@ else: PY2 = True if (_PY_MAJOR, _PY_MINOR) >= (3, 0): PY3 = True + if _PY_MINOR == 4 and _PY_MICRO < 3: + FIX_HTTPRETTY = True if PY26: # For now add these on, taken from python 2.7 + slightly adjusted. Drop @@ -268,6 +272,37 @@ class FilesystemMockingTestCase(ResourceUsingTestCase): mock.patch.object(sys, 'stderr', stderr)) +def import_httpretty(): + """Import HTTPretty and monkey patch Python 3.4 issue. + See https://github.com/gabrielfalcao/HTTPretty/pull/193 and + as well as https://github.com/gabrielfalcao/HTTPretty/issues/221. + + Lifted from + https://github.com/inveniosoftware/datacite/blob/master/tests/helpers.py + """ + if not FIX_HTTPRETTY: + import httpretty + else: + import socket + old_SocketType = socket.SocketType + + import httpretty + from httpretty import core + + def sockettype_patch(f): + @functools.wraps(f) + def inner(*args, **kwargs): + f(*args, **kwargs) + socket.SocketType = old_SocketType + socket.__dict__['SocketType'] = old_SocketType + return inner + + core.httpretty.disable = sockettype_patch( + httpretty.httpretty.disable + ) + return httpretty + + class HttprettyTestCase(TestCase): # necessary as http_proxy gets in the way of httpretty # https://github.com/gabrielfalcao/HTTPretty/issues/122 |