Skip to content

Commit

Permalink
Call the ESME disconnect callback in the right place.
Browse files Browse the repository at this point in the history
  • Loading branch information
jerith committed Oct 21, 2013
1 parent 1dd7923 commit 7e44486
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 6 deletions.
2 changes: 1 addition & 1 deletion vumi/transports/smpp/clientserver/client.py
Expand Up @@ -189,6 +189,7 @@ def connectionLost(self, *args, **kwargs):
self.stop_enquire_link()
self.cancel_drop_connection_call()
log.msg('STATE: %s' % (self.state))
self.esme_callbacks.disconnect()

def dataReceived(self, data):
self.datastream += data
Expand Down Expand Up @@ -543,7 +544,6 @@ def buildProtocol(self, addr):
@inlineCallbacks
def clientConnectionLost(self, connector, reason):
log.msg('Lost connection. Reason:', reason)
yield self.esme_callbacks.disconnect()
ClientFactory.clientConnectionLost(self, connector, reason)

def clientConnectionFailed(self, connector, reason):
Expand Down
43 changes: 39 additions & 4 deletions vumi/transports/smpp/clientserver/tests/test_client.py
Expand Up @@ -12,16 +12,18 @@


class FakeTransport(object):
def __init__(self):
def __init__(self, protocol):
self.connected = True
self.protocol = protocol

def loseConnection(self):
self.connected = False
self.protocol.connectionLost()


class FakeEsmeMixin(object):
def setup_fake(self):
self.transport = FakeTransport()
self.transport = FakeTransport(self)
self.clock = Clock()
self.callLater = self.clock.callLater
self.fake_sent_pdus = []
Expand Down Expand Up @@ -133,33 +135,66 @@ class EsmeGenericMixin(object):

@inlineCallbacks
def test_bind_timeout(self):
esme = yield self.get_unbound_esme()
callbacks_called = []
esme = yield self.get_unbound_esme(callbacks={
'connect': lambda client: callbacks_called.append('connect'),
'disconnect': lambda: callbacks_called.append('disconnect'),
})
yield esme.connectionMade()

self.assertEqual([], callbacks_called)
self.assertEqual(True, esme.transport.connected)
self.assertNotEqual(None, esme._lose_conn)

esme.clock.advance(esme.smpp_bind_timeout)

self.assertEqual(['disconnect'], callbacks_called)
self.assertEqual(False, esme.transport.connected)
self.assertEqual(None, esme._lose_conn)

@inlineCallbacks
def test_bind_no_timeout(self):
esme = yield self.get_unbound_esme()
callbacks_called = []
esme = yield self.get_unbound_esme(callbacks={
'connect': lambda client: callbacks_called.append('connect'),
'disconnect': lambda: callbacks_called.append('disconnect'),
})
yield esme.connectionMade()

self.assertEqual([], callbacks_called)
self.assertEqual(True, esme.transport.connected)
self.assertNotEqual(None, esme._lose_conn)

esme.handle_bind_transceiver_resp(unpack_pdu(
BindTransceiverResp(1).get_bin()))

self.assertEqual(['connect'], callbacks_called)
self.assertEqual(True, esme.transport.connected)
self.assertEqual(None, esme._lose_conn)
esme.lc_enquire.stop()
yield esme.lc_enquire.deferred

@inlineCallbacks
def test_bind_and_disconnect(self):
callbacks_called = []
esme = yield self.get_unbound_esme(callbacks={
'connect': lambda client: callbacks_called.append('connect'),
'disconnect': lambda: callbacks_called.append('disconnect'),
})
yield esme.connectionMade()

esme.handle_bind_transceiver_resp(unpack_pdu(
BindTransceiverResp(1).get_bin()))

self.assertEqual(['connect'], callbacks_called)
esme.lc_enquire.stop()
yield esme.lc_enquire.deferred

yield esme.transport.loseConnection()

self.assertEqual(['connect', 'disconnect'], callbacks_called)
self.assertEqual(False, esme.transport.connected)

@inlineCallbacks
def test_sequence_rollover(self):
esme = yield self.get_unbound_esme()
Expand Down
2 changes: 1 addition & 1 deletion vumi/transports/smpp/transport.py
Expand Up @@ -228,7 +228,7 @@ def _submit_outbound_message(self, message):

def esme_disconnected(self):
log.msg("ESME Disconnected")
self.pause_connectors()
return self.pause_connectors()

# Redis message storing methods

Expand Down

0 comments on commit 7e44486

Please sign in to comment.