diff --git a/src/gossip/server/acceptstem.py b/src/gossip/server/acceptstem.py index e77a52e2..2fe24685 100644 --- a/src/gossip/server/acceptstem.py +++ b/src/gossip/server/acceptstem.py @@ -1,12 +1,11 @@ from typing import TYPE_CHECKING -from typing import List, Tuple +from typing import List import secrets -from time import time from asyncio import wait_for from onionrblocks import Block -from ..dandelion import DandelionPhase, StemAcceptResult +from ..dandelion import StemAcceptResult from ..constants import BLOCK_ID_SIZE, BLOCK_MAX_SIZE from ..constants import MAX_INBOUND_DANDELION_EDGE, MAX_STEM_BLOCKS_PER_STREAM from ..blockqueues import gossip_block_queues @@ -16,7 +15,6 @@ block_size_digits = len(str(BLOCK_MAX_SIZE)) base_wait_timeout = 30 if TYPE_CHECKING: - from queue import Queue from asyncio import StreamWriter, StreamReader @@ -33,7 +31,6 @@ async def accept_stem_blocks( # Start getting the first block read_routine = reader.readexactly(BLOCK_ID_SIZE) - stream_start_time = int(time()) block_queue_to_use = secrets.choice(gossip_block_queues) @@ -63,6 +60,7 @@ async def accept_stem_blocks( block_queue_to_use.put( Block(block_id, raw_block, auto_verify=True) ) + # Regardless of stem phase, we add to queue # Client will decide if they are to be stemmed diff --git a/tests/gossip-unittests/test_put_block_one.py b/tests/gossip-unittests/test_put_block_one.py new file mode 100644 index 00000000..72daea4f --- /dev/null +++ b/tests/gossip-unittests/test_put_block_one.py @@ -0,0 +1,62 @@ +import os, uuid +from queue import Empty +TEST_DIR = 'testdata/%s-%s' % (uuid.uuid4(), os.path.basename(__file__)) + '/' +print("Test directory:", TEST_DIR) +os.environ["ONIONR_HOME"] = TEST_DIR + +from time import sleep +from threading import Thread +import asyncio +import unittest +import sys +sys.path.append(".") +sys.path.append("src/") + +from ordered_set import OrderedSet +import onionrblocks + +import blockdb +from gossip.server import gossip_server +from gossip.blockqueues import gossip_block_queues +from filepaths import gossip_server_socket_file + + +BLOCK_MAX_SIZE = 1024 * 2000 +BLOCK_MAX_SIZE_LEN = len(str(BLOCK_MAX_SIZE)) +BLOCK_ID_SIZE = 128 +BLOCK_STREAM_OFFSET_DIGITS = 8 + + +class OnionrServerPutBlockTest(unittest.TestCase): + + + def test_put_block(self): + + Thread(target=gossip_server, daemon=True).start() + sleep(0.01) + + bl = onionrblocks.blockcreator.create_anonvdf_block( + b"my test block", b"txt", 2800) + + async def block_put_client(): + reader, writer = await asyncio.open_unix_connection( + gossip_server_socket_file) + writer.write(int(5).to_bytes(1, 'big')) + await writer.drain() + + writer.write(bl.id) + writer.write( + str(len(bl.raw)).zfill(BLOCK_MAX_SIZE_LEN).encode('utf-8')) + writer.write(bl.raw) + await writer.drain() + + sleep(0.03) + try: + self.assertEqual(gossip_block_queues[0].get_nowait().raw, bl.raw) + except Empty: + self.assertEqual(gossip_block_queues[1].get_nowait().raw, bl.raw) + + + asyncio.run(block_put_client()) + +unittest.main()