2011-12-07 87 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

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

相關問題