77 lines
2.5 KiB
Python
77 lines
2.5 KiB
Python
try:
|
|
import asyncio
|
|
except ImportError:
|
|
pass
|
|
import sys
|
|
import unittest
|
|
|
|
import six
|
|
try:
|
|
import tornado.web
|
|
except ImportError:
|
|
pass
|
|
if six.PY3:
|
|
from unittest import mock
|
|
else:
|
|
import mock
|
|
|
|
if sys.version_info >= (3, 5):
|
|
from engineio.async_drivers import tornado as async_tornado
|
|
|
|
|
|
def _run(coro):
|
|
"""Run the given coroutine."""
|
|
return asyncio.get_event_loop().run_until_complete(coro)
|
|
|
|
|
|
@unittest.skipIf(sys.version_info < (3, 5), 'only for Python 3.5+')
|
|
class TornadoTests(unittest.TestCase):
|
|
def test_get_tornado_handler(self):
|
|
mock_server = mock.MagicMock()
|
|
handler = async_tornado.get_tornado_handler(mock_server)
|
|
self.assertTrue(issubclass(handler,
|
|
tornado.websocket.WebSocketHandler))
|
|
|
|
def test_translate_request(self):
|
|
mock_handler = mock.MagicMock()
|
|
mock_handler.request.method = 'PUT'
|
|
mock_handler.request.path = '/foo/bar'
|
|
mock_handler.request.query = 'baz=1'
|
|
mock_handler.request.version = '1.1'
|
|
mock_handler.request.headers = {
|
|
'a': 'b',
|
|
'c': 'd',
|
|
'content-type': 'application/json',
|
|
'content-length': 123
|
|
}
|
|
mock_handler.request.body = b'hello world'
|
|
environ = async_tornado.translate_request(mock_handler)
|
|
expected_environ = {
|
|
'REQUEST_METHOD': 'PUT',
|
|
'PATH_INFO': '/foo/bar',
|
|
'QUERY_STRING': 'baz=1',
|
|
'CONTENT_TYPE': 'application/json',
|
|
'CONTENT_LENGTH': 123,
|
|
'HTTP_A': 'b',
|
|
'HTTP_C': 'd',
|
|
'RAW_URI': '/foo/bar?baz=1',
|
|
'SERVER_PROTOCOL': 'HTTP/1.1',
|
|
# 'wsgi.input': b'hello world',
|
|
'tornado.handler': mock_handler,
|
|
}
|
|
for k, v in expected_environ.items():
|
|
self.assertEqual(v, environ[k])
|
|
payload = _run(environ['wsgi.input'].read(1))
|
|
payload += _run(environ['wsgi.input'].read())
|
|
self.assertEqual(payload, b'hello world')
|
|
|
|
def test_make_response(self):
|
|
mock_handler = mock.MagicMock()
|
|
mock_environ = {'tornado.handler': mock_handler}
|
|
async_tornado.make_response('202 ACCEPTED', [('foo', 'bar')],
|
|
b'payload', mock_environ)
|
|
mock_handler.set_status.assert_called_once_with(202)
|
|
mock_handler.set_header.assert_called_once_with('foo', 'bar')
|
|
mock_handler.write.assert_called_once_with(b'payload')
|
|
mock_handler.finish.assert_called_once_with()
|