Cover the main proofofwork call and worker procedure

This commit is contained in:
Lee Miller 2023-08-22 01:17:19 +03:00
parent b806906af4
commit 2145f5839e
Signed by untrusted user: lee.miller
GPG Key ID: 4F97A5EA88F4AB63

View File

@ -1,7 +1,10 @@
"""Tests for structures""" """Tests for structures"""
import unittest import base64
import logging
import queue
import struct import struct
import time import time
import unittest
from binascii import unhexlify from binascii import unhexlify
from minode import message, proofofwork, shared, structure from minode import message, proofofwork, shared, structure
@ -20,10 +23,18 @@ sample_addr_data = unhexlify(
sample_object_data = unhexlify( sample_object_data = unhexlify(
'000000000000000000000000652724030000002a010248454c4c4f') '000000000000000000000000652724030000002a010248454c4c4f')
logging.basicConfig(
level=shared.log_level,
format='[%(asctime)s] [%(levelname)s] %(message)s')
class TestStructure(unittest.TestCase): class TestStructure(unittest.TestCase):
"""Testing structures serializing and deserializing""" """Testing structures serializing and deserializing"""
@classmethod
def setUpClass(cls):
shared.objects = {}
def test_varint(self): def test_varint(self):
"""Test varint serializing and deserializing""" """Test varint serializing and deserializing"""
s = structure.VarInt(0) s = structure.VarInt(0)
@ -122,3 +133,41 @@ class TestStructure(unittest.TestCase):
obj.object_payload = \ obj.object_payload = \
b'TIGER, tiger, burning bright. In the forests of the night' b'TIGER, tiger, burning bright. In the forests of the night'
self.assertFalse(obj.is_valid()) self.assertFalse(obj.is_valid())
def test_proofofwork(self):
"""Check the main proofofwork call and worker"""
shared.vector_advertise_queue = queue.Queue()
obj = structure.Object(
b'\x00' * 8, int(time.time() + 300), 42, 1,
shared.stream, b'HELLO')
start_time = time.time()
proofofwork.do_pow_and_publish(obj)
try:
vector = shared.vector_advertise_queue.get(timeout=300)
except queue.Empty:
self.fail("Couldn't make work in 300 sec")
else:
time.sleep(1)
try:
result = shared.objects[vector]
except KeyError:
self.fail(
"Couldn't found object with vector %s"
" %s sec after pow start" % (
base64.b16encode(vector), time.time() - start_time))
self.assertTrue(result.is_valid())
self.assertEqual(result.object_type, 42)
self.assertEqual(result.object_payload, b'HELLO')
q = queue.Queue()
# pylint: disable=protected-access
proofofwork._pow_worker(obj.pow_target(), obj.pow_initial_hash(), q)
try:
nonce = q.get(timeout=5)
except queue.Empty:
self.fail("No nonce found in the queue")
obj = structure.Object(
nonce, obj.expires_time, obj.object_type, obj.version,
obj.stream_number, obj.object_payload)
self.assertTrue(obj.is_valid())