Finished client announce tests
This commit is contained in:
parent
15a4744a70
commit
9f25291c3a
123
tests/gossip-unittests/test_client_announce.py
Normal file
123
tests/gossip-unittests/test_client_announce.py
Normal file
@ -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()
|
@ -67,8 +67,6 @@ def _server():
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class OnionrGossipClientGetNewPeers(unittest.TestCase):
|
class OnionrGossipClientGetNewPeers(unittest.TestCase):
|
||||||
|
|
||||||
def test_get_new_peers_no_peers(self):
|
def test_get_new_peers_no_peers(self):
|
@ -27,7 +27,6 @@ from gossip.server import gossip_server
|
|||||||
from gossip.peer import Peer
|
from gossip.peer import Peer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
from filepaths import gossip_server_socket_file
|
from filepaths import gossip_server_socket_file
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user