diff options
| author | Scott Moser <smoser@ubuntu.com> | 2015-03-04 17:10:52 -0500 | 
|---|---|---|
| committer | Scott Moser <smoser@ubuntu.com> | 2015-03-04 17:10:52 -0500 | 
| commit | 978991f5793f639f24c95df3beca5e4cdf98fd9c (patch) | |
| tree | b56e04c278b666b4d188ad5160d60044c4a6372d /tests | |
| parent | 56a594cb47342b89629e0876bd63b4e724d5e1a2 (diff) | |
| parent | 04a60cf949e085f06fa1f93b39a74b8d288f0e2e (diff) | |
| download | vyos-cloud-init-978991f5793f639f24c95df3beca5e4cdf98fd9c.tar.gz vyos-cloud-init-978991f5793f639f24c95df3beca5e4cdf98fd9c.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')
| -rw-r--r-- | tests/unittests/helpers.py | 37 | ||||
| -rw-r--r-- | tests/unittests/test_datasource/test_digitalocean.py | 3 | ||||
| -rw-r--r-- | tests/unittests/test_datasource/test_gce.py | 3 | ||||
| -rw-r--r-- | tests/unittests/test_datasource/test_openstack.py | 2 | ||||
| -rw-r--r-- | tests/unittests/test_ec2_util.py | 2 | 
5 files changed, 42 insertions, 5 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 diff --git a/tests/unittests/test_datasource/test_digitalocean.py b/tests/unittests/test_datasource/test_digitalocean.py index 98f9cfac..679d1b82 100644 --- a/tests/unittests/test_datasource/test_digitalocean.py +++ b/tests/unittests/test_datasource/test_digitalocean.py @@ -15,7 +15,6 @@  #    You should have received a copy of the GNU General Public License  #    along with this program.  If not, see <http://www.gnu.org/licenses/>. -import httpretty  import re  from six.moves.urllib_parse import urlparse @@ -26,6 +25,8 @@ from cloudinit.sources import DataSourceDigitalOcean  from .. import helpers as test_helpers +httpretty = test_helpers.import_httpretty() +  # Abbreviated for the test  DO_INDEX = """id             hostname diff --git a/tests/unittests/test_datasource/test_gce.py b/tests/unittests/test_datasource/test_gce.py index d28f3b08..4280abc4 100644 --- a/tests/unittests/test_datasource/test_gce.py +++ b/tests/unittests/test_datasource/test_gce.py @@ -15,7 +15,6 @@  #    You should have received a copy of the GNU General Public License  #    along with this program.  If not, see <http://www.gnu.org/licenses/>. -import httpretty  import re  from base64 import b64encode, b64decode @@ -27,6 +26,8 @@ from cloudinit.sources import DataSourceGCE  from .. import helpers as test_helpers +httpretty = test_helpers.import_httpretty() +  GCE_META = {      'instance/id': '123',      'instance/zone': 'foo/bar', diff --git a/tests/unittests/test_datasource/test_openstack.py b/tests/unittests/test_datasource/test_openstack.py index 81411ced..0aa1ba84 100644 --- a/tests/unittests/test_datasource/test_openstack.py +++ b/tests/unittests/test_datasource/test_openstack.py @@ -31,7 +31,7 @@ from cloudinit.sources import DataSourceOpenStack as ds  from cloudinit.sources.helpers import openstack  from cloudinit import util -import httpretty as hp +hp = test_helpers.import_httpretty()  BASE_URL = "http://169.254.169.254"  PUBKEY = u'ssh-rsa AAAAB3NzaC1....sIkJhq8wdX+4I3A4cYbYP ubuntu@server-460\n' diff --git a/tests/unittests/test_ec2_util.py b/tests/unittests/test_ec2_util.py index bd43accf..99fc54be 100644 --- a/tests/unittests/test_ec2_util.py +++ b/tests/unittests/test_ec2_util.py @@ -3,7 +3,7 @@ from . import helpers  from cloudinit import ec2_utils as eu  from cloudinit import url_helper as uh -import httpretty as hp +hp = helpers.import_httpretty()  class TestEc2Util(helpers.HttprettyTestCase): | 
