Skip to content

Commit

Permalink
suppress queue empty errors
Browse files Browse the repository at this point in the history
Fixes #65
  • Loading branch information
miguelgrinberg committed Mar 13, 2018
1 parent e070a91 commit 861dd52
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 8 deletions.
11 changes: 7 additions & 4 deletions engineio/asyncio_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import six
from six.moves import urllib

from .exceptions import EngineIOError
from . import exceptions
from . import packet
from . import server
from . import asyncio_socket
Expand Down Expand Up @@ -148,7 +148,7 @@ async def handle_request(self, *args, **kwargs):
r = self._ok(packets, b64=b64)
else:
r = packets
except EngineIOError:
except exceptions.EngineIOError:
if sid in self.sockets: # pragma: no cover
await self.disconnect(sid)
r = self._bad_request()
Expand All @@ -163,7 +163,7 @@ async def handle_request(self, *args, **kwargs):
try:
await socket.handle_post_request(environ)
r = self._ok()
except EngineIOError:
except exceptions.EngineIOError:
if sid in self.sockets: # pragma: no cover
await self.disconnect(sid)
r = self._bad_request()
Expand Down Expand Up @@ -250,7 +250,10 @@ async def _handle_connect(self, environ, transport, b64=False):
headers = None
if self.cookie:
headers = [('Set-Cookie', self.cookie + '=' + sid)]
return self._ok(await s.poll(), headers=headers, b64=b64)
try:
return self._ok(await s.poll(), headers=headers, b64=b64)
except exceptions.QueueEmpty:
return self._bad_request()

async def _trigger_event(self, event, *args, **kwargs):
"""Invoke an event handler."""
Expand Down
11 changes: 7 additions & 4 deletions engineio/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import six
from six.moves import urllib

from .exceptions import EngineIOError
from . import exceptions
from . import packet
from . import payload
from . import socket
Expand Down Expand Up @@ -276,7 +276,7 @@ def handle_request(self, environ, start_response):
r = self._ok(packets, b64=b64)
else:
r = packets
except EngineIOError:
except exceptions.EngineIOError:
if sid in self.sockets: # pragma: no cover
self.disconnect(sid)
r = self._bad_request()
Expand All @@ -291,7 +291,7 @@ def handle_request(self, environ, start_response):
try:
socket.handle_post_request(environ)
r = self._ok()
except EngineIOError:
except exceptions.EngineIOError:
if sid in self.sockets: # pragma: no cover
self.disconnect(sid)
r = self._bad_request()
Expand Down Expand Up @@ -384,7 +384,10 @@ def _handle_connect(self, environ, start_response, transport, b64=False):
headers = None
if self.cookie:
headers = [('Set-Cookie', self.cookie + '=' + sid)]
return self._ok(s.poll(), headers=headers, b64=b64)
try:
return self._ok(s.poll(), headers=headers, b64=b64)
except exceptions.QueueEmpty:
return self._bad_request()

def _upgrades(self, sid, transport):
"""Return the list of possible upgrades for a client connection."""
Expand Down
13 changes: 13 additions & 0 deletions tests/test_asyncio_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,19 @@ def test_connect_custom_ping_times(self, import_module):
self.assertEqual(packets[0].data['pingTimeout'], 123000)
self.assertEqual(packets[0].data['pingInterval'], 456000)

@mock.patch('engineio.asyncio_socket.AsyncSocket')
@mock.patch('importlib.import_module')
def test_connect_bad_poll(self, import_module, AsyncSocket):
a = self.get_async_mock()
import_module.side_effect = [a]
AsyncSocket.return_value = self._get_mock_socket()
AsyncSocket.return_value.poll.side_effect = [exceptions.QueueEmpty]
s = asyncio_server.AsyncServer()
_run(s.handle_request('request'))
self.assertEqual(a._async['make_response'].call_count, 1)
self.assertEqual(a._async['make_response'].call_args[0][0],
'400 BAD REQUEST')

@mock.patch('engineio.asyncio_socket.AsyncSocket')
@mock.patch('importlib.import_module')
def test_connect_transport_websocket(self, import_module, AsyncSocket):
Expand Down
10 changes: 10 additions & 0 deletions tests/test_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,16 @@ def test_connect_custom_ping_times(self):
self.assertEqual(packets[0].data['pingTimeout'], 123000)
self.assertEqual(packets[0].data['pingInterval'], 456000)

@mock.patch('engineio.socket.Socket.poll',
side_effect=exceptions.QueueEmpty)
def test_connect_bad_poll(self, poll):
s = server.Server()
environ = {'REQUEST_METHOD': 'GET', 'QUERY_STRING': ''}
start_response = mock.MagicMock()
s.handle_request(environ, start_response)
self.assertEqual(start_response.call_args[0][0],
'400 BAD REQUEST')

@mock.patch('engineio.socket.Socket',
return_value=mock.MagicMock(connected=False, closed=False))
def test_connect_transport_websocket(self, Socket):
Expand Down

0 comments on commit 861dd52

Please sign in to comment.