Skip to content

Commit 0ecfbf5

Browse files
v5 protocol: server unit tests
1 parent 0c91e92 commit 0ecfbf5

File tree

5 files changed

+330
-331
lines changed

5 files changed

+330
-331
lines changed

socketio/asyncio_server.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -423,15 +423,11 @@ async def _handle_connect(self, eio_sid, namespace):
423423
self.manager.pre_disconnect(sid, namespace)
424424
await self._send_packet(eio_sid, packet.Packet(
425425
packet.DISCONNECT, data=fail_reason, namespace=namespace))
426-
elif namespace != '/':
426+
else:
427427
await self._send_packet(eio_sid, packet.Packet(
428428
packet.CONNECT_ERROR, data=fail_reason,
429429
namespace=namespace))
430430
self.manager.disconnect(sid, namespace)
431-
if namespace == '/' and \
432-
eio_sid in self.environ: # pragma: no cover
433-
del self.environ[eio_sid]
434-
return fail_reason or False
435431
elif not self.always_connect:
436432
await self._send_packet(eio_sid, packet.Packet(
437433
packet.CONNECT, {'sid': sid}, namespace=namespace))
@@ -440,10 +436,11 @@ async def _handle_disconnect(self, eio_sid, namespace):
440436
"""Handle a client disconnect."""
441437
namespace = namespace or '/'
442438
sid = self.manager.sid_from_eio_sid(eio_sid, namespace)
443-
if self.manager.is_connected(sid, namespace):
444-
self.manager.pre_disconnect(sid, namespace=namespace)
445-
await self._trigger_event('disconnect', namespace, sid)
446-
self.manager.disconnect(sid, namespace)
439+
if not self.manager.is_connected(sid, namespace): # pragma: no cover
440+
return
441+
self.manager.pre_disconnect(sid, namespace=namespace)
442+
await self._trigger_event('disconnect', namespace, sid)
443+
self.manager.disconnect(sid, namespace)
447444

448445
async def _handle_event(self, eio_sid, namespace, id, data):
449446
"""Handle an incoming client event."""
@@ -544,7 +541,8 @@ async def _handle_eio_message(self, eio_sid, data):
544541

545542
async def _handle_eio_disconnect(self, eio_sid):
546543
"""Handle Engine.IO disconnect event."""
547-
await self._handle_disconnect(eio_sid, '/')
544+
for n in list(self.manager.get_namespaces()).copy():
545+
await self._handle_disconnect(eio_sid, n)
548546
if eio_sid in self.environ:
549547
del self.environ[eio_sid]
550548

socketio/base_manager.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ def is_connected(self, sid, namespace):
6060
pass
6161

6262
def sid_from_eio_sid(self, eio_sid, namespace):
63-
return self.rooms[namespace][None].inverse.get(eio_sid)
63+
if namespace in self.rooms:
64+
return self.rooms[namespace][None].inverse.get(eio_sid)
6465

6566
def can_disconnect(self, sid, namespace):
6667
return self.is_connected(sid, namespace)

socketio/server.py

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,7 @@ def __init__(self, client_manager=None, logger=False, json=None,
116116
self.logger = logger
117117
else:
118118
self.logger = default_logger
119-
if not logging.root.handlers and \
120-
self.logger.level == logging.NOTSET:
119+
if self.logger.level == logging.NOTSET:
121120
if logger:
122121
self.logger.setLevel(logging.INFO)
123122
else:
@@ -621,15 +620,11 @@ def _handle_connect(self, eio_sid, namespace):
621620
self.manager.pre_disconnect(sid, namespace)
622621
self._send_packet(eio_sid, packet.Packet(
623622
packet.DISCONNECT, data=fail_reason, namespace=namespace))
624-
elif namespace != '/':
623+
else:
625624
self._send_packet(eio_sid, packet.Packet(
626625
packet.CONNECT_ERROR, data=fail_reason,
627626
namespace=namespace))
628627
self.manager.disconnect(sid, namespace)
629-
if namespace == '/' and \
630-
eio_sid in self.environ: # pragma: no cover
631-
del self.environ[eio_sid]
632-
return fail_reason or False
633628
elif not self.always_connect:
634629
self._send_packet(eio_sid, packet.Packet(
635630
packet.CONNECT, {'sid': sid}, namespace=namespace))
@@ -638,10 +633,11 @@ def _handle_disconnect(self, eio_sid, namespace):
638633
"""Handle a client disconnect."""
639634
namespace = namespace or '/'
640635
sid = self.manager.sid_from_eio_sid(eio_sid, namespace)
641-
if self.manager.is_connected(sid, namespace):
642-
self.manager.pre_disconnect(sid, namespace=namespace)
643-
self._trigger_event('disconnect', namespace, sid)
644-
self.manager.disconnect(sid, namespace)
636+
if not self.manager.is_connected(sid, namespace): # pragma: no cover
637+
return
638+
self.manager.pre_disconnect(sid, namespace=namespace)
639+
self._trigger_event('disconnect', namespace, sid)
640+
self.manager.disconnect(sid, namespace)
645641

646642
def _handle_event(self, eio_sid, namespace, id, data):
647643
"""Handle an incoming client event."""
@@ -731,7 +727,8 @@ def _handle_eio_message(self, eio_sid, data):
731727

732728
def _handle_eio_disconnect(self, eio_sid):
733729
"""Handle Engine.IO disconnect event."""
734-
self._handle_disconnect(eio_sid, '/')
730+
for n in list(self.manager.get_namespaces()).copy():
731+
self._handle_disconnect(eio_sid, n)
735732
if eio_sid in self.environ:
736733
del self.environ[eio_sid]
737734

0 commit comments

Comments
 (0)