diff options
-rw-r--r-- | cloudinit/tests/__init__.py | 0 | ||||
-rw-r--r-- | cloudinit/tests/test_url_helper.py | 40 | ||||
-rw-r--r-- | cloudinit/url_helper.py | 10 |
3 files changed, 43 insertions, 7 deletions
diff --git a/cloudinit/tests/__init__.py b/cloudinit/tests/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/cloudinit/tests/__init__.py diff --git a/cloudinit/tests/test_url_helper.py b/cloudinit/tests/test_url_helper.py new file mode 100644 index 00000000..349110d9 --- /dev/null +++ b/cloudinit/tests/test_url_helper.py @@ -0,0 +1,40 @@ +# This file is part of cloud-init. See LICENSE file for license information. + +from cloudinit.url_helper import oauth_headers +from tests.unittests.helpers import CiTestCase, mock, skipIf + + +try: + import oauthlib + assert oauthlib # avoid pyflakes error F401: import unused + _missing_oauthlib_dep = False +except ImportError: + _missing_oauthlib_dep = True + + +class TestOAuthHeaders(CiTestCase): + + def test_oauth_headers_raises_not_implemented_when_oathlib_missing(self): + """oauth_headers raises a NotImplemented error when oauth absent.""" + with mock.patch.dict('sys.modules', {'oauthlib': None}): + with self.assertRaises(NotImplementedError) as context_manager: + oauth_headers(1, 2, 3, 4, 5) + self.assertEqual( + 'oauth support is not available', + str(context_manager.exception)) + + @skipIf(_missing_oauthlib_dep, "No python-oauthlib dependency") + @mock.patch('oauthlib.oauth1.Client') + def test_oauth_headers_calls_oathlibclient_when_available(self, m_client): + """oauth_headers calls oaut1.hClient.sign with the provided url.""" + class fakeclient(object): + def sign(self, url): + # The first and 3rd item of the client.sign tuple are ignored + return ('junk', url, 'junk2') + + m_client.return_value = fakeclient() + + return_value = oauth_headers( + 'url', 'consumer_key', 'token_key', 'token_secret', + 'consumer_secret') + self.assertEqual('url', return_value) diff --git a/cloudinit/url_helper.py b/cloudinit/url_helper.py index c83061a9..0e0f5b4c 100644 --- a/cloudinit/url_helper.py +++ b/cloudinit/url_helper.py @@ -17,11 +17,6 @@ import time from email.utils import parsedate from functools import partial -try: - import oauthlib.oauth1 as oauth1 -except ImportError: - oauth1 = None - from requests import exceptions from six.moves.urllib.parse import ( @@ -492,8 +487,9 @@ class OauthUrlHelper(object): def oauth_headers(url, consumer_key, token_key, token_secret, consumer_secret, timestamp=None): - - if oauth1 is None: + try: + import oauthlib.oauth1 as oauth1 + except ImportError: raise NotImplementedError('oauth support is not available') if timestamp: |