diff --git a/minode/tests/test_structure.py b/minode/tests/test_structure.py index 5d476d7..5488c53 100644 --- a/minode/tests/test_structure.py +++ b/minode/tests/test_structure.py @@ -1,9 +1,10 @@ """Tests for structures""" import unittest import struct +import time from binascii import unhexlify -from minode import structure +from minode import message, proofofwork, shared, structure # host pregenerated by pybitmessage.protocol.encodeHost() @@ -13,6 +14,12 @@ sample_addr_data = unhexlify( '0000000060f420b3000000010000000000000001' '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): """Testing structures serializing and deserializing""" @@ -85,3 +92,33 @@ class TestStructure(unittest.TestCase): addr = structure.NetAddr(1, '2607:5300:201:3000::57ae', 8080, 1) 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())