Fail unit tests without errors

This commit is contained in:
Roy Hyunjin Han 2015-02-22 18:59:05 -05:00
commit 5806f23492
3 changed files with 25 additions and 18 deletions

View file

@ -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

View file

@ -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 = []

View file

@ -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