Improved test coverage
Fixed possible exception in UDP socket maintainance thread during shutdownmaster
parent
0f53577143
commit
09a2e81d3d
10
bencode.py
10
bencode.py
|
@ -92,6 +92,7 @@ def bdecode_proc(msg, pos):
|
||||||
v, pos = bdecode_proc(msg, pos)
|
v, pos = bdecode_proc(msg, pos)
|
||||||
result.append(v)
|
result.append(v)
|
||||||
return (result, pos + 1)
|
return (result, pos + 1)
|
||||||
|
raise BTFailure("invalid bencoded data (invalid token)! %r" % msg)
|
||||||
|
|
||||||
def bdecode_extra(msg):
|
def bdecode_extra(msg):
|
||||||
try:
|
try:
|
||||||
|
@ -110,6 +111,13 @@ def bdecode(msg):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
import logging
|
||||||
|
logging.basicConfig()
|
||||||
test = {b'k1': 145, b'k2': {b'sk1': list(range(10)), b'sk2': b'0'*60}}
|
test = {b'k1': 145, b'k2': {b'sk1': list(range(10)), b'sk2': b'0'*60}}
|
||||||
for x in range(100000):
|
for x in range(100):
|
||||||
assert(bdecode(bencode(test)) == test)
|
assert(bdecode(bencode(test)) == test)
|
||||||
|
for test_bytes in [b'd5:keyi0ee', b'x3:keyi0ee', b'd3:keyi0ee...']:
|
||||||
|
try:
|
||||||
|
bdecode(test_bytes)
|
||||||
|
except BTFailure as ex:
|
||||||
|
logging.exception('expected bdecode exception')
|
||||||
|
|
12
krpc.py
12
krpc.py
|
@ -156,10 +156,20 @@ class KRPCPeer(object):
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
logging.basicConfig()
|
logging.basicConfig()
|
||||||
logging.getLogger().setLevel(logging.INFO)
|
logging.getLogger().setLevel(logging.DEBUG)
|
||||||
# Implement an echo message
|
# Implement an echo message
|
||||||
peer = KRPCPeer(('0.0.0.0', 1111), handle_query = lambda send_krpc_response, rec, source_connection:
|
peer = KRPCPeer(('0.0.0.0', 1111), handle_query = lambda send_krpc_response, rec, source_connection:
|
||||||
send_krpc_response(message = 'Hello %s!' % rec[b'a'][b'message']))
|
send_krpc_response(message = 'Hello %s!' % rec[b'a'][b'message']))
|
||||||
query = peer.send_krpc_query(('localhost', 1111), 'echo', message = 'World')
|
query = peer.send_krpc_query(('localhost', 1111), 'echo', message = 'World')
|
||||||
logging.getLogger().critical('result = %r' % query.get_result(2))
|
logging.getLogger().critical('result = %r' % query.get_result(2))
|
||||||
|
query1 = peer.send_krpc_query(('localhost', 1111), 'echo', message = 'World')
|
||||||
peer.shutdown()
|
peer.shutdown()
|
||||||
|
query2 = peer.send_krpc_query(('localhost', 1111), 'echo', message = 'World')
|
||||||
|
try:
|
||||||
|
query1.get_result()
|
||||||
|
except Exception:
|
||||||
|
logging.exception('expected query exception')
|
||||||
|
try:
|
||||||
|
query2.get_result()
|
||||||
|
except Exception:
|
||||||
|
logging.exception('expected query exception')
|
||||||
|
|
2
utils.py
2
utils.py
|
@ -185,6 +185,8 @@ class NetworkSocket(object):
|
||||||
def close(self):
|
def close(self):
|
||||||
with self._lock:
|
with self._lock:
|
||||||
self._threads.shutdown()
|
self._threads.shutdown()
|
||||||
|
self._send_queue.clear()
|
||||||
|
self._recv_queue.clear()
|
||||||
self._send_event.set()
|
self._send_event.set()
|
||||||
self._recv_event.set()
|
self._recv_event.set()
|
||||||
self._close()
|
self._close()
|
||||||
|
|
Loading…
Reference in New Issue