2016-04-22 1 views
0

Я хочу, чтобы симулировать тайм-аут ping веб-памяти в тесте.Метод объекта патча Python

Сначала я попытался закрыть TCP-разъем тихо, но это невозможно из-за FIN отправлен в любом случае. iptables - это не вариант.

Я использую библиотеку торнадо, чтобы издеваться над клиентом websocket.

Я прочитал, как заменить метод в уже созданном объекте. Он работает в простой демонстрации, но торнадо, похоже, игнорирует мои манипуляции.

Что это может быть?

import types 

ws.websocket_connect(url, callback=openCallback, 
      on_message_callback=messageCallback) 

def openCallback(future): 
    ws = future.result() 
    inst = ws.protocol 

    def stub(self, x): 
     print "STUB" 
    inst.write_ping = types.MethodType(stub, inst, inst.__class__) 

Нет никаких ошибок, но заглушка не вызывается, и клиент все еще отвечает за запросы на сервер ping.

ответ

0

Я понял, что хочу отключить неправильный метод.

write_ping используется сервером для отправки запроса звона, но клиента пишет понг, так что я отменяю _write_frame метода (плавник, опкод) и вперед управление первоначальной реализации, если опкод! = 0xA.