Мой клиент (на основе витой) должен автоматически переподключаться к серверу, когда соединение потеряно, мне нужно протестировать эту функцию, вот мой метод тестирования, где в комментарии @todo очень четко указано, какое поведение ожидается:
@defer.inlineCallbacks
def test_reconnect_on_connection_loss(self):
client = SMPPClientFactory(self.config)
client.reConnect = mock.Mock(wraps=client.reConnect)
# Connect
smpp = yield client.connect()
# Bind
yield smpp.bindAsTransmitter()
# @todo: A connection loss is expected here
# the client is supposed to try reconnections
# for a while, the server then shall start
# again and the client will get connected.
# Unbind & Disconnect
yield smpp.unbindAndDisconnect()
##############
# Assertions :
# Protocol verification
self.assertNotEqual(0, client.reConnect.call_count)
На стороне сервера я пытаюсь прервать соединение сразу после получения запроса bindAsTransmitter:
class LooseConnectionOnBindSMSC(SMSC):
def handleBindAsTransmitter(self, reqPDU):
self.sendSuccessResponse(reqPDU)
# Connection is aborted here:
self.transport.abortConnection()
Соединение успешно прервано, мой клиент пытается восстановить соединение, как и ожидалось, но ему так и не удалось снова запустить мой сервер.