Fail unit tests without errors
This commit is contained in:
parent
dec8e09327
commit
5806f23492
3 changed files with 25 additions and 18 deletions
|
|
@ -1,7 +1,9 @@
|
||||||
from .exceptions import ConnectionError, TimeoutError, PacketError
|
from .exceptions import ConnectionError, TimeoutError, PacketError
|
||||||
from .heartbeats import HeartbeatThread
|
from .heartbeats import HeartbeatThread
|
||||||
from .logs import LoggingMixin
|
from .logs import LoggingMixin
|
||||||
from .namespaces import EngineIONamespace, SocketIONamespace, find_callback
|
from .namespaces import (
|
||||||
|
EngineIONamespace, SocketIONamespace, LoggingSocketIONamespace,
|
||||||
|
find_callback)
|
||||||
from .parsers import (
|
from .parsers import (
|
||||||
parse_host, parse_engineIO_session,
|
parse_host, parse_engineIO_session,
|
||||||
format_socketIO_packet_data, parse_socketIO_packet_data,
|
format_socketIO_packet_data, parse_socketIO_packet_data,
|
||||||
|
|
@ -12,6 +14,8 @@ from .transports import XHR_PollingTransport, prepare_http_session, TRANSPORTS
|
||||||
|
|
||||||
__all__ = 'SocketIO', 'SocketIONamespace'
|
__all__ = 'SocketIO', 'SocketIONamespace'
|
||||||
__version__ = '0.6.1'
|
__version__ = '0.6.1'
|
||||||
|
BaseNamespace = SocketIONamespace
|
||||||
|
LoggingNamespace = LoggingSocketIONamespace
|
||||||
|
|
||||||
|
|
||||||
class EngineIO(LoggingMixin):
|
class EngineIO(LoggingMixin):
|
||||||
|
|
@ -34,24 +38,23 @@ class EngineIO(LoggingMixin):
|
||||||
@property
|
@property
|
||||||
def connected(self):
|
def connected(self):
|
||||||
try:
|
try:
|
||||||
transport = self.__transport
|
return self._connected
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
return False
|
return False
|
||||||
else:
|
|
||||||
return transport.connected
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _transport(self):
|
def _transport(self):
|
||||||
try:
|
try:
|
||||||
if self.connected:
|
if self.connected:
|
||||||
return self.__transport
|
return self._transport_instance
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
self._engineIO_session = self._get_engineIO_session()
|
self._engineIO_session = self._get_engineIO_session()
|
||||||
self._negotiate_transport()
|
self._negotiate_transport()
|
||||||
self._reset_heartbeat()
|
|
||||||
self._connect_namespaces()
|
self._connect_namespaces()
|
||||||
return self.__transport
|
self._connected = True
|
||||||
|
self._reset_heartbeat()
|
||||||
|
return self._transport_instance
|
||||||
|
|
||||||
def _get_engineIO_session(self):
|
def _get_engineIO_session(self):
|
||||||
warning_screen = self._yield_warning_screen()
|
warning_screen = self._yield_warning_screen()
|
||||||
|
|
@ -61,6 +64,7 @@ class EngineIO(LoggingMixin):
|
||||||
try:
|
try:
|
||||||
engineIO_packet_type, engineIO_packet_data = next(
|
engineIO_packet_type, engineIO_packet_data = next(
|
||||||
transport.recv_packet())
|
transport.recv_packet())
|
||||||
|
break
|
||||||
except (TimeoutError, ConnectionError) as e:
|
except (TimeoutError, ConnectionError) as e:
|
||||||
if not self._wait_for_connection:
|
if not self._wait_for_connection:
|
||||||
raise
|
raise
|
||||||
|
|
@ -71,7 +75,7 @@ class EngineIO(LoggingMixin):
|
||||||
|
|
||||||
def _negotiate_transport(self):
|
def _negotiate_transport(self):
|
||||||
transport_name = 'xhr-polling'
|
transport_name = 'xhr-polling'
|
||||||
self.__transport = self._get_transport(transport_name)
|
self._transport_instance = self._get_transport(transport_name)
|
||||||
self._transport_name = transport_name
|
self._transport_name = transport_name
|
||||||
|
|
||||||
def _reset_heartbeat(self):
|
def _reset_heartbeat(self):
|
||||||
|
|
@ -143,6 +147,7 @@ class EngineIO(LoggingMixin):
|
||||||
return
|
return
|
||||||
engineIO_packet_type = 1
|
engineIO_packet_type = 1
|
||||||
self._transport.send_packet(engineIO_packet_type, '')
|
self._transport.send_packet(engineIO_packet_type, '')
|
||||||
|
self._connected = False
|
||||||
|
|
||||||
def _ping(self, engineIO_packet_data=''):
|
def _ping(self, engineIO_packet_data=''):
|
||||||
engineIO_packet_type = 2
|
engineIO_packet_type = 2
|
||||||
|
|
@ -278,7 +283,7 @@ class SocketIO(EngineIO):
|
||||||
|
|
||||||
def _connect_namespaces(self):
|
def _connect_namespaces(self):
|
||||||
for path, namespace in self._namespace_by_path.items():
|
for path, namespace in self._namespace_by_path.items():
|
||||||
namespace._transport = self.__transport
|
namespace._transport = self._transport_instance
|
||||||
if path:
|
if path:
|
||||||
self.connect(path)
|
self.connect(path)
|
||||||
|
|
||||||
|
|
@ -294,7 +299,7 @@ class SocketIO(EngineIO):
|
||||||
|
|
||||||
def define(self, Namespace, path=''):
|
def define(self, Namespace, path=''):
|
||||||
if path:
|
if path:
|
||||||
self._connect(path)
|
self.connect(path)
|
||||||
self._namespace_by_path[path] = namespace = Namespace(self, path)
|
self._namespace_by_path[path] = namespace = Namespace(self, path)
|
||||||
return namespace
|
return namespace
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ def parse_socketIO_packet_data(socketIO_packet_data):
|
||||||
|
|
||||||
|
|
||||||
def get_namespace_path(socketIO_packet_data):
|
def get_namespace_path(socketIO_packet_data):
|
||||||
if '/' != get_character(socketIO_packet_data, 0):
|
if not socketIO_packet_data.startswith(b'/'):
|
||||||
return ''
|
return ''
|
||||||
# Loop incrementally in case there is binary data
|
# Loop incrementally in case there is binary data
|
||||||
parts = []
|
parts = []
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import logging
|
||||||
import time
|
import time
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from .. import SocketIO, LoggingSocketIONamespace, find_callback
|
from .. import SocketIO, LoggingNamespace, find_callback
|
||||||
|
|
||||||
|
|
||||||
HOST = 'localhost'
|
HOST = 'localhost'
|
||||||
|
|
@ -15,14 +15,16 @@ logging.basicConfig(level=logging.DEBUG)
|
||||||
class BaseMixin(object):
|
class BaseMixin(object):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
super(BaseMixin, self).setUp()
|
||||||
self.called_on_response = False
|
self.called_on_response = False
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
|
super(BaseMixin, self).tearDown()
|
||||||
del self.socketIO
|
del self.socketIO
|
||||||
|
|
||||||
def test_disconnect(self):
|
def test_disconnect(self):
|
||||||
'Disconnect'
|
'Disconnect'
|
||||||
self.socketIO.define(LoggingSocketIONamespace)
|
self.socketIO.define(LoggingNamespace)
|
||||||
self.assertTrue(self.socketIO.connected)
|
self.assertTrue(self.socketIO.connected)
|
||||||
self.socketIO.disconnect()
|
self.socketIO.disconnect()
|
||||||
self.assertFalse(self.socketIO.connected)
|
self.assertFalse(self.socketIO.connected)
|
||||||
|
|
@ -63,14 +65,14 @@ class BaseMixin(object):
|
||||||
|
|
||||||
def test_emit_with_callback(self):
|
def test_emit_with_callback(self):
|
||||||
'Emit with callback'
|
'Emit with callback'
|
||||||
self.socketIO.define(LoggingSocketIONamespace)
|
self.socketIO.define(LoggingNamespace)
|
||||||
self.socketIO.emit('emit_with_callback', self.on_response)
|
self.socketIO.emit('emit_with_callback', self.on_response)
|
||||||
self.socketIO.wait_for_callbacks(seconds=self.wait_time_in_seconds)
|
self.socketIO.wait_for_callbacks(seconds=self.wait_time_in_seconds)
|
||||||
self.assertTrue(self.called_on_response)
|
self.assertTrue(self.called_on_response)
|
||||||
|
|
||||||
def test_emit_with_callback_with_payload(self):
|
def test_emit_with_callback_with_payload(self):
|
||||||
'Emit with callback with payload'
|
'Emit with callback with payload'
|
||||||
self.socketIO.define(LoggingSocketIONamespace)
|
self.socketIO.define(LoggingNamespace)
|
||||||
self.socketIO.emit(
|
self.socketIO.emit(
|
||||||
'emit_with_callback_with_payload', self.on_response)
|
'emit_with_callback_with_payload', self.on_response)
|
||||||
self.socketIO.wait_for_callbacks(seconds=self.wait_time_in_seconds)
|
self.socketIO.wait_for_callbacks(seconds=self.wait_time_in_seconds)
|
||||||
|
|
@ -78,7 +80,7 @@ class BaseMixin(object):
|
||||||
|
|
||||||
def test_emit_with_callback_with_multiple_payloads(self):
|
def test_emit_with_callback_with_multiple_payloads(self):
|
||||||
'Emit with callback with multiple payloads'
|
'Emit with callback with multiple payloads'
|
||||||
self.socketIO.define(LoggingSocketIONamespace)
|
self.socketIO.define(LoggingNamespace)
|
||||||
self.socketIO.emit(
|
self.socketIO.emit(
|
||||||
'emit_with_callback_with_multiple_payloads', self.on_response)
|
'emit_with_callback_with_multiple_payloads', self.on_response)
|
||||||
self.socketIO.wait_for_callbacks(seconds=self.wait_time_in_seconds)
|
self.socketIO.wait_for_callbacks(seconds=self.wait_time_in_seconds)
|
||||||
|
|
@ -156,7 +158,7 @@ class BaseMixin(object):
|
||||||
self.called_on_response = True
|
self.called_on_response = True
|
||||||
|
|
||||||
|
|
||||||
class Test_XHR_PollingTransport(TestCase, BaseMixin):
|
class Test_XHR_PollingTransport(BaseMixin, TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(Test_XHR_PollingTransport, self).setUp()
|
super(Test_XHR_PollingTransport, self).setUp()
|
||||||
|
|
@ -164,7 +166,7 @@ class Test_XHR_PollingTransport(TestCase, BaseMixin):
|
||||||
self.wait_time_in_seconds = 1
|
self.wait_time_in_seconds = 1
|
||||||
|
|
||||||
|
|
||||||
class Namespace(LoggingSocketIONamespace):
|
class Namespace(LoggingNamespace):
|
||||||
|
|
||||||
def initialize(self):
|
def initialize(self):
|
||||||
self.called_on_disconnect = False
|
self.called_on_disconnect = False
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue