From 09a2e81d3d8289f8826181bbacf466aff9042bc9 Mon Sep 17 00:00:00 2001 From: Fred Stober Date: Sun, 31 Jan 2016 05:42:35 +0100 Subject: [PATCH] Improved test coverage Fixed possible exception in UDP socket maintainance thread during shutdown --- bencode.py | 10 +++++++++- krpc.py | 12 +++++++++++- utils.py | 2 ++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/bencode.py b/bencode.py index d125859..13f7cde 100644 --- a/bencode.py +++ b/bencode.py @@ -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') diff --git a/krpc.py b/krpc.py index f2ba388..88fc673 100644 --- a/krpc.py +++ b/krpc.py @@ -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') diff --git a/utils.py b/utils.py index 1a4ca7e..eaca5c1 100644 --- a/utils.py +++ b/utils.py @@ -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()