Raise error if response is malformed. Issue #115

This commit is contained in:
Raphael Deem 2016-12-13 12:20:16 -08:00
parent ef9d8710f5
commit c2622511ce
2 changed files with 21 additions and 2 deletions

View File

@ -6,6 +6,7 @@ from signal import SIGINT, SIGTERM
from time import time from time import time
from httptools import HttpRequestParser from httptools import HttpRequestParser
from httptools.parser.errors import HttpParserError from httptools.parser.errors import HttpParserError
from .exceptions import ServerError
try: try:
import uvloop as async_loop import uvloop as async_loop
@ -173,8 +174,9 @@ class HttpProtocol(asyncio.Protocol):
"Writing error failed, connection closed {}".format(e)) "Writing error failed, connection closed {}".format(e))
def bail_out(self, message): def bail_out(self, message):
log.debug(message) exception = ServerError(message)
self.transport.close() self.write_error(exception)
log.error(message)
def cleanup(self): def cleanup(self):
self.parser = None self.parser = None

View File

@ -2,6 +2,7 @@ from json import loads as json_loads, dumps as json_dumps
from sanic import Sanic from sanic import Sanic
from sanic.response import json, text from sanic.response import json, text
from sanic.utils import sanic_endpoint_test from sanic.utils import sanic_endpoint_test
from sanic.exceptions import ServerError
# ------------------------------------------------------------ # # ------------------------------------------------------------ #
@ -32,6 +33,22 @@ def test_text():
assert response.text == 'Hello' assert response.text == 'Hello'
def test_invalid_response():
app = Sanic('test_invalid_response')
@app.exception(ServerError)
def handler_exception(request, exception):
return text('Internal Server Error.', 500)
@app.route('/')
async def handler(request):
return 'This should fail'
request, response = sanic_endpoint_test(app)
assert response.status == 500
assert response.text == "Internal Server Error."
def test_json(): def test_json():
app = Sanic('test_json') app = Sanic('test_json')