2011-12-07 64 views
0

我的客户端(基于双绞线)应该在连接丢失时自动重新连接到服务器,我需要对此功能进行测试,这里是我的测试方法,其中@todo评论非常清楚预期的行为:如何在Python中关闭和启动服务器扭曲?

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

连接成功中止,我的客户开始尝试重新连接如预期,但它从来没有得到的方式让我的服务器再次UP。

+0

让保罗,是的服务器仍然听我什么时候我abortConnection服务器端...我需要一种方法来停止听几秒钟,然后再次开始。 –

回答

1

您的服务器仍在运行(就任何人都可以从您的问题中的代码中知道)。关闭一个连接到客户端不会阻止服务器接受新的连接。

停止侦听端口的方法是使用port.stopListening()(注意它会返回Deferred)。您可以再次使用另一个reactor.listenTCP(或您以前第一次开始收听的任何API)呼叫在端口上开始收听。

+0

仍然无法中止服务器.. –

+0

对不起,我不明白你的意思。 –

相关问题