Add a test for object covering also proofofwork

This commit is contained in:
Lee Miller 2023-08-11 20:21:47 +03:00
parent e4887734a0
commit 218905739c
Signed by: lee.miller
GPG Key ID: 4F97A5EA88F4AB63

View File

@ -1,9 +1,10 @@
"""Tests for structures""" """Tests for structures"""
import unittest import unittest
import struct import struct
import time
from binascii import unhexlify from binascii import unhexlify
from minode import structure from minode import message, proofofwork, shared, structure
# host pregenerated by pybitmessage.protocol.encodeHost() # host pregenerated by pybitmessage.protocol.encodeHost()
@ -13,6 +14,12 @@ sample_addr_data = unhexlify(
'0000000060f420b3000000010000000000000001' '0000000060f420b3000000010000000000000001'
'260753000201300000000000000057ae1f90') '260753000201300000000000000057ae1f90')
# data for an object with expires_time 1697063939
# structure.Object(
# b'\x00' * 8, expires_time, 42, 1, 2, b'HELLO').to_bytes()
sample_object_data = unhexlify(
'000000000000000000000000652724030000002a010248454c4c4f')
class TestStructure(unittest.TestCase): class TestStructure(unittest.TestCase):
"""Testing structures serializing and deserializing""" """Testing structures serializing and deserializing"""
@ -85,3 +92,33 @@ class TestStructure(unittest.TestCase):
addr = structure.NetAddr(1, '2607:5300:201:3000::57ae', 8080, 1) addr = structure.NetAddr(1, '2607:5300:201:3000::57ae', 8080, 1)
self.assertEqual(addr.to_bytes()[8:], sample_addr_data[8:]) self.assertEqual(addr.to_bytes()[8:], sample_addr_data[8:])
def test_object(self):
"""Create and check objects"""
obj = structure.Object.from_message(
message.Message(b'object', sample_object_data))
self.assertEqual(obj.object_type, 42)
self.assertEqual(obj.stream_number, 2)
self.assertEqual(obj.expires_time, 1697063939)
self.assertEqual(obj.object_payload, b'HELLO')
obj = structure.Object(
b'\x00' * 8, int(time.time() + 3000000), 42, 1, 1, b'HELLO')
self.assertFalse(obj.is_valid())
obj.expires_time = int(time.time() - 11000)
self.assertFalse(obj.is_valid())
obj = structure.Object(
b'\x00' * 8, int(time.time() + 300), 42, 1, 2, b'HELLO')
vector = obj.vector
proofofwork._worker(obj) # pylint: disable=protected-access
obj = shared.objects.popitem()[1]
self.assertNotEqual(obj.vector, vector)
self.assertFalse(obj.is_expired())
self.assertFalse(obj.is_valid())
shared.stream = 2
self.assertTrue(obj.is_valid())
obj.object_payload = \
b'TIGER, tiger, burning bright. In the forests of the night'
self.assertFalse(obj.is_valid())