diff options
author | Chad Smith <chad.smith@canonical.com> | 2017-08-29 10:32:38 -0600 |
---|---|---|
committer | Scott Moser <smoser@brickies.net> | 2017-08-30 15:41:17 -0400 |
commit | b931a6473ee929193c0048640bf34876ce831a15 (patch) | |
tree | 319c9bdb5f5d109c24a338cca168e8f1c92e12ab /cloudinit/tests | |
parent | 502082f6f21fb7592a798087a4c49f90d886ad14 (diff) | |
download | vyos-cloud-init-b931a6473ee929193c0048640bf34876ce831a15.tar.gz vyos-cloud-init-b931a6473ee929193c0048640bf34876ce831a15.zip |
url_helper: dynamically import oauthlib import from inside oauth_headers
oauth_headers is the only function which requires oauthlib, move the
import and ImportError handling inside this function to only attempt
loading at runtime if called. This will allow us to build on platforms
that don't have python-oauthlib installed by default. Add simple unittests
around the missing oauthlib dependencies to make sure the function
performs as intended and raises and NotImplementedError if oauthlib can't
be imported.
Diffstat (limited to 'cloudinit/tests')
-rw-r--r-- | cloudinit/tests/__init__.py | 0 | ||||
-rw-r--r-- | cloudinit/tests/test_url_helper.py | 40 |
2 files changed, 40 insertions, 0 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) |