From 9f25291c3aa14c7de4054237ca60ffa7051de8e4 Mon Sep 17 00:00:00 2001 From: Kevin F Date: Wed, 18 May 2022 23:39:14 -0500 Subject: [PATCH] Finished client announce tests --- .../gossip-unittests/test_client_announce.py | 123 ++++++++++++++++++ ..._peers.py => test_client_peer_exchange.py} | 2 - tests/gossip-unittests/test_peer_announce.py | 1 - 3 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 tests/gossip-unittests/test_client_announce.py rename tests/gossip-unittests/{test_client_get_new_peers.py => test_client_peer_exchange.py} (99%) diff --git a/tests/gossip-unittests/test_client_announce.py b/tests/gossip-unittests/test_client_announce.py new file mode 100644 index 00000000..9d81e85e --- /dev/null +++ b/tests/gossip-unittests/test_client_announce.py @@ -0,0 +1,123 @@ +import os, uuid +from unittest.mock import Mock +from time import sleep +import secrets +import socket + +TEST_DIR = 'testdata/%s-%s' % (uuid.uuid4(), os.path.basename(__file__)) + '/' +print("Test directory:", TEST_DIR) +os.environ["ONIONR_HOME"] = TEST_DIR + +from threading import Thread +import asyncio +import unittest +import sys +sys.path.append(".") +sys.path.append("src/") +from unittest.mock import patch + +from ordered_set import OrderedSet +from gossip import peerset + + +import onionrblocks + +import blockdb +from gossip.server import gossip_server +from gossip.peer import Peer + + +from filepaths import gossip_server_socket_file +from gossip.peerset import gossip_peer_set +from gossip.client.announce import do_announce + + +BLOCK_MAX_SIZE = 1024 * 2000 +BLOCK_MAX_SIZE_LEN = len(str(BLOCK_MAX_SIZE)) +BLOCK_ID_SIZE = 128 +BLOCK_STREAM_OFFSET_DIGITS = 8 +MAX_PEERS = 10 +TRANSPORT_SIZE_BYTES = 64 + +class MockPeer(Peer): + def __init__(self): + self.transport_address = secrets.token_hex(16) + def __hash__(self): + return hash(self.transport_address) + def get_socket(self, timeout): + s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + s.settimeout(30) + s.connect(server_file) + return s + +server_file = TEST_DIR + 'test_serv.sock' + +reced_address = [''] + +def _announce_server(): + with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s: + s.bind(server_file) + while True: + + s.listen(1) + conn, _ = s.accept() + + with conn: + conn.recv(1) + for _ in range(TRANSPORT_SIZE_BYTES): + dat = conn.recv(1).decode('utf-8') + if dat == '\n': + conn.sendall(int(1).to_bytes(1, 'big')) + break + reced_address[0] += dat + else: + conn.sendall(int(0).to_bytes(1, 'big')) + + + +Thread(target=_announce_server, daemon=True).start() + + +class OnionrClientAnnounce(unittest.TestCase): + + def test_client_announce_too_long(self): + sleep(1) + import onionrplugins + + our_address = "testtransport" * 100 + + def event_func(event, *args, data={}, **kwargs): + data['callback'](data['peer'], "testtransport" * 100) + + onionrplugins.events.event = event_func + + reced_address[0] = '' + gossip_peer_set.clear() + p = MockPeer() + gossip_peer_set.append(p) + + do_announce() + self.assertNotEqual(our_address, reced_address[0]) + + def test_client_announce(self): + sleep(1) + import onionrplugins + + our_address = "testtransport" + + def event_func(event, *args, data={}, **kwargs): + data['callback'](data['peer'], "testtransport") + + onionrplugins.events.event = event_func + + gossip_peer_set.clear() + reced_address[0] = '' + p = MockPeer() + gossip_peer_set.append(p) + + do_announce() + self.assertEqual(our_address, reced_address[0]) + + + +unittest.main() diff --git a/tests/gossip-unittests/test_client_get_new_peers.py b/tests/gossip-unittests/test_client_peer_exchange.py similarity index 99% rename from tests/gossip-unittests/test_client_get_new_peers.py rename to tests/gossip-unittests/test_client_peer_exchange.py index 20e75bd1..6766095b 100644 --- a/tests/gossip-unittests/test_client_get_new_peers.py +++ b/tests/gossip-unittests/test_client_peer_exchange.py @@ -67,8 +67,6 @@ def _server(): pass - - class OnionrGossipClientGetNewPeers(unittest.TestCase): def test_get_new_peers_no_peers(self): diff --git a/tests/gossip-unittests/test_peer_announce.py b/tests/gossip-unittests/test_peer_announce.py index 7651d68f..12895588 100644 --- a/tests/gossip-unittests/test_peer_announce.py +++ b/tests/gossip-unittests/test_peer_announce.py @@ -27,7 +27,6 @@ from gossip.server import gossip_server from gossip.peer import Peer - from filepaths import gossip_server_socket_file