utils: fix logging details of http errors (#30069)
This commit is contained in:
parent
bfb8fdff41
commit
4ba28f811b
|
@ -244,7 +244,7 @@ class Request(RequestSession):
|
|||
if request.body:
|
||||
extra['request_payload'] = repr(request.body)
|
||||
log_function = self.logger.info
|
||||
if response:
|
||||
if response is not None:
|
||||
message = message + ' (=> %s)' % response.status_code
|
||||
extra['response_status'] = response.status_code
|
||||
if self.logger.level == 10: # DEBUG
|
||||
|
|
|
@ -74,7 +74,7 @@ def test_log_on_connector_availability_change(db, connector):
|
|||
with HTTMock(down_mock): # set connector as down
|
||||
connector.availability()
|
||||
assert len(ResourceLog.objects.all()) == 2
|
||||
assert ResourceLog.objects.all()[0].message == 'GET http://example.net/'
|
||||
assert ResourceLog.objects.all()[0].message == 'GET http://example.net/ (=> 404)'
|
||||
assert ResourceLog.objects.all()[1].level == 'error'
|
||||
assert ResourceLog.objects.all()[1].message == u'connector "éléphant" (Feed) is now down'
|
||||
|
||||
|
|
|
@ -37,6 +37,11 @@ def httpbin_mock(url, request):
|
|||
return response(200, {"message": "Are you really josh ?"},
|
||||
headers={"Content-Type": "application/json"}, request=request)
|
||||
|
||||
@urlmatch(netloc=r'(.*\.)?httperror\.org$')
|
||||
def http400_mock(url, request):
|
||||
return response(400, {"foo": "bar"},
|
||||
headers={"Content-Type": "application/json"}, request=request)
|
||||
|
||||
|
||||
def test_log_level(caplog, log_level):
|
||||
url = 'https://httpbin.org/post'
|
||||
|
@ -69,6 +74,37 @@ def test_log_level(caplog, log_level):
|
|||
assert not hasattr(record, 'response_content')
|
||||
assert not hasattr(record, 'response_headers')
|
||||
|
||||
def test_log_error(caplog, log_level):
|
||||
url = 'https://httperror.org/plop'
|
||||
|
||||
logger = logging.getLogger('requests')
|
||||
logger.setLevel(log_level)
|
||||
|
||||
with HTTMock(http400_mock):
|
||||
requests = Request(logger=logger)
|
||||
response = requests.post(url, json={'name':'josh'})
|
||||
|
||||
records = [record for record in caplog.records if record.name == 'requests']
|
||||
|
||||
records_length = len(records)
|
||||
|
||||
if logger.level > 40:
|
||||
assert records_length == 0
|
||||
else:
|
||||
assert records_length == 1
|
||||
|
||||
record = records[0]
|
||||
assert record.request_url == url
|
||||
assert record.response_status == response.status_code
|
||||
if logger.level == 10: # DEBUG
|
||||
assert record.request_payload == '\'{"name": "josh"}\''
|
||||
assert record.response_content == repr(response.content)
|
||||
assert record.response_headers
|
||||
else:
|
||||
assert not hasattr(record, 'request_payload')
|
||||
assert not hasattr(record, 'response_content')
|
||||
assert not hasattr(record, 'response_headers')
|
||||
|
||||
@pytest.fixture(params=['xml', 'whatever', 'jpeg', 'pdf'])
|
||||
def endpoint_response(request):
|
||||
response_request = mock.Mock(
|
||||
|
|
Loading…
Reference in New Issue