Improved test coverage

Fixed possible exception in UDP socket maintainance thread during shutdown
master
Fred Stober 2016-01-31 05:42:35 +01:00
parent 0f53577143
commit 09a2e81d3d
3 changed files with 22 additions and 2 deletions

View File

@ -92,6 +92,7 @@ def bdecode_proc(msg, pos):
v, pos = bdecode_proc(msg, pos)
result.append(v)
return (result, pos + 1)
raise BTFailure("invalid bencoded data (invalid token)! %r" % msg)
def bdecode_extra(msg):
try:
@ -110,6 +111,13 @@ def bdecode(msg):
return result
if __name__ == '__main__':
import logging
logging.basicConfig()
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)
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
View File

@ -156,10 +156,20 @@ class KRPCPeer(object):
if __name__ == '__main__':
logging.basicConfig()
logging.getLogger().setLevel(logging.INFO)
logging.getLogger().setLevel(logging.DEBUG)
# Implement an echo message
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']))
query = peer.send_krpc_query(('localhost', 1111), 'echo', message = 'World')
logging.getLogger().critical('result = %r' % query.get_result(2))
query1 = peer.send_krpc_query(('localhost', 1111), 'echo', message = 'World')
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')

View File

@ -185,6 +185,8 @@ class NetworkSocket(object):
def close(self):
with self._lock:
self._threads.shutdown()
self._send_queue.clear()
self._recv_queue.clear()
self._send_event.set()
self._recv_event.set()
self._close()