Skip to content

Commit bcf20bb

Browse files
b4handjrdavehunt
authored andcommitted
Add verify base URL timeouts (#4)
Fixes #3
1 parent e1ec0aa commit bcf20bb

File tree

2 files changed

+30
-14
lines changed

2 files changed

+30
-14
lines changed

pytest_base_url/plugin.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
import pytest
88
import requests
9+
from requests.packages.urllib3.util.retry import Retry
10+
from requests.adapters import HTTPAdapter
911

1012

1113
@pytest.fixture(scope='session')
@@ -22,12 +24,11 @@ def _verify_url(request, base_url):
2224
"""Verifies the base URL"""
2325
verify = request.config.option.verify_base_url
2426
if base_url and verify:
25-
response = requests.get(base_url, timeout=10)
26-
if not response.status_code == requests.codes.ok:
27-
raise pytest.UsageError(
28-
'Base URL failed verification!'
29-
'\nURL: {0}, Response status code: {1.status_code}'
30-
'\nResponse headers: {1.headers}'.format(base_url, response))
27+
session = requests.Session()
28+
retries = Retry(backoff_factor=0.1,
29+
status_forcelist=[500, 502, 503, 504])
30+
session.mount(base_url, HTTPAdapter(max_retries=retries))
31+
session.get(base_url)
3132

3233

3334
def pytest_configure(config):

tests/test_verify_base_url.py

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
44

55
import pytest
6+
from requests.packages.urllib3.util.retry import Retry
67

78

89
@pytest.fixture(autouse=True)
@@ -20,32 +21,32 @@ def test_ignore_bad_url_by_default(testdir, httpserver):
2021
def test_enable_verify_via_cli(testdir, httpserver, monkeypatch):
2122
testdir.makepyfile('def test_pass(): pass')
2223
monkeypatch.setenv('VERIFY_BASE_URL', False)
24+
monkeypatch.setattr(Retry, 'BACKOFF_MAX', 0.5)
2325
status_code = 500
2426
httpserver.serve_content(content='<h1>Error!</h1>', code=status_code)
2527
reprec = testdir.inline_run('--base-url', httpserver.url,
2628
'--verify-base-url')
2729
passed, skipped, failed = reprec.listoutcomes()
2830
assert len(failed) == 1
2931
out = failed[0].longrepr.reprcrash.message
30-
assert 'UsageError: Base URL failed verification!' in out
31-
assert 'URL: {0}'.format(httpserver.url) in out
32-
assert 'Response status code: {0}'.format(status_code) in out
33-
assert 'Response headers: ' in out
32+
assert 'Max retries exceeded with url:' in out
33+
assert 'Caused by ResponseError' in out
34+
assert 'too many 500 error responses' in out
3435

3536

3637
def test_enable_verify_via_env(testdir, httpserver, monkeypatch):
3738
testdir.makepyfile('def test_pass(): pass')
3839
monkeypatch.setenv('VERIFY_BASE_URL', True)
40+
monkeypatch.setattr(Retry, 'BACKOFF_MAX', 0.5)
3941
status_code = 500
4042
httpserver.serve_content(content='<h1>Error!</h1>', code=status_code)
4143
reprec = testdir.inline_run('--base-url', httpserver.url)
4244
passed, skipped, failed = reprec.listoutcomes()
4345
assert len(failed) == 1
4446
out = failed[0].longrepr.reprcrash.message
45-
assert 'UsageError: Base URL failed verification!' in out
46-
assert 'URL: {0}'.format(httpserver.url) in out
47-
assert 'Response status code: {0}'.format(status_code) in out
48-
assert 'Response headers: ' in out
47+
assert 'Max retries exceeded with url:' in out
48+
assert 'Caused by ResponseError' in out
49+
assert 'too many 500 error responses' in out
4950

5051

5152
def test_disable_verify_via_env(testdir, httpserver, monkeypatch):
@@ -54,3 +55,17 @@ def test_disable_verify_via_env(testdir, httpserver, monkeypatch):
5455
httpserver.serve_content(content='<h1>Error!</h1>', code=500)
5556
result = testdir.runpytest('--base-url', httpserver.url)
5657
assert result.ret == 0
58+
59+
60+
def test_url_fails(testdir, httpserver, monkeypatch):
61+
testdir.makepyfile('def test_pass(): pass')
62+
monkeypatch.setenv('VERIFY_BASE_URL', False)
63+
monkeypatch.setattr(Retry, 'BACKOFF_MAX', 0.5)
64+
reprec = testdir.inline_run('--base-url', 'http://foo',
65+
'--verify-base-url')
66+
passed, skipped, failed = reprec.listoutcomes()
67+
out = failed[0].longrepr.reprcrash.message
68+
assert len(failed) == 1
69+
assert 'Max retries exceeded with url:' in out
70+
assert 'Caused by NewConnectionError' in out
71+
assert 'Failed to establish a new connection' in out

0 commit comments

Comments
 (0)