diff options
author | Vlastimil Zíma <vlastimil.zima@nic.cz> | 2018-05-02 13:17:04 +0200 |
---|---|---|
committer | Vlastimil Zíma <vlastimil.zima@nic.cz> | 2018-05-02 13:17:04 +0200 |
commit | 05e4a307a0edcc38b4a5f902610f067b1e058645 (patch) | |
tree | d3347eeecac63cca96541c5c7f96205c09c28fbb /openid | |
parent | f7da776f0127f28e526dde3ac14bedcd2c98a526 (diff) | |
download | openid-05e4a307a0edcc38b4a5f902610f067b1e058645.tar.gz |
Update default fetcher selection
Diffstat (limited to 'openid')
-rw-r--r-- | openid/fetchers.py | 17 | ||||
-rw-r--r-- | openid/test/test_fetchers.py | 31 |
2 files changed, 43 insertions, 5 deletions
diff --git a/openid/fetchers.py b/openid/fetchers.py index fa25184..2328fc9 100644 --- a/openid/fetchers.py +++ b/openid/fetchers.py @@ -52,11 +52,20 @@ def fetch(url, body=None, headers=None): def createHTTPFetcher(): """Create a default HTTP fetcher instance - prefers Curl to urllib2.""" - if pycurl is None: - fetcher = Urllib2Fetcher() - else: + Preferences: + 1. requests + 2. curl + 3. httplib2 + 4. urllib2 + """ + if requests is not None: + fetcher = RequestsFetcher() + elif pycurl is not None: fetcher = CurlHTTPFetcher() + elif httplib2 is not None: + fetcher = HTTPLib2Fetcher() + else: + fetcher = Urllib2Fetcher() return fetcher diff --git a/openid/test/test_fetchers.py b/openid/test/test_fetchers.py index 36698ba..57b9089 100644 --- a/openid/test/test_fetchers.py +++ b/openid/test/test_fetchers.py @@ -7,7 +7,7 @@ from cStringIO import StringIO from urllib import addinfourl import responses -from mock import Mock +from mock import Mock, patch, sentinel from openid import fetchers @@ -18,6 +18,35 @@ except ImportError: else: from requests.exceptions import ConnectionError, InvalidSchema + +class TestHTTPLib2Fetcher(object): + """Mock of HTTPLib2Fetcher for test of fetcher selection.""" + + +class TestCreateHTTPFetcher(unittest.TestCase): + """Test default selection of `createHTTPFetcher` function.""" + + fetcher_selection = { + # (requests, pycurl, httplib2) -> fetcher + (sentinel.requests, sentinel.pycurl, sentinel.httplib2): fetchers.RequestsFetcher, + (sentinel.requests, sentinel.pycurl, None): fetchers.RequestsFetcher, + (sentinel.requests, None, sentinel.httplib2): fetchers.RequestsFetcher, + (sentinel.requests, None, None): fetchers.RequestsFetcher, + (None, sentinel.pycurl, sentinel.httplib2): fetchers.CurlHTTPFetcher, + (None, sentinel.pycurl, None): fetchers.CurlHTTPFetcher, + (None, None, sentinel.httplib2): TestHTTPLib2Fetcher, + (None, None, None): fetchers.Urllib2Fetcher, + } + + def test_requests(self): + for (requests, pycurl, httplib2), fetcher_cls in self.fetcher_selection.items(): + with patch.multiple(fetchers, requests=requests, pycurl=pycurl, httplib2=httplib2, + # HTTPLib2Fetcher actually calls httplib2 on init. + # Patch it as it's not necessary for selection test. + HTTPLib2Fetcher=TestHTTPLib2Fetcher): + self.assertIsInstance(fetchers.createHTTPFetcher(), fetcher_cls) + + # XXX: make these separate test cases |