import unittest from onionrblocks import universalrules from onionrblocks.generators import anonvdf import kasten from time import time from math import floor class TestUniversalRules(unittest.TestCase): def test_block_is_sane_max_size(self): packed = kasten.generator.pack.pack(b"1"*1000000000, b"tst", 0) self.assertRaises( universalrules.BlockTooLarge, universalrules.check_block_sanity, packed) def test_block_future_skew_ok(self): t = floor(time()) + 120 packed = kasten.generator.pack.pack(b"1"*10, b"tst", timestamp=t) universalrules.check_block_sanity(packed) def test_block_future_skew_not_ok(self): t = floor(time()) + 121 packed = kasten.generator.pack.pack(b"1"*10, b"tst", timestamp=t) self.assertRaises( universalrules.BlockFutureSkewedBeyondMax, universalrules.check_block_sanity, packed) def test_block_not_expired(self): packed = kasten.generator.pack.pack(b"1"*10, b"tst", app_metadata={"expire": 7}) self.assertRaises( universalrules.BlockExpired, universalrules.check_block_sanity, packed) def test_block_expired(self): t = floor(time()) - 6 packed = kasten.generator.pack.pack(b"1"*10, b"tst", timestamp=t, app_metadata={"expire": 6}) self.assertRaises( universalrules.BlockExpired, universalrules.check_block_sanity, packed) def test_not_in_set(self): t = floor(time()) - 6 bls = [] for i in range(3): packed = kasten.generator.pack.pack(b"1"*2*i, b"tst", timestamp=t, app_metadata={"ttl": 10000}) k = anonvdf.AnonVDFGenerator.generate(packed, 10000) bls.append(k.id) packed = kasten.generator.pack.pack(b"1"*2*1, b"tst", timestamp=t, app_metadata={"ttl": 10000}) k = anonvdf.AnonVDFGenerator.generate(packed, 1000) self.assertRaises(universalrules.BlockExistsError, universalrules.checksum_exists_in_list, k.id, bls) unittest.main()