test suite: deterministic testing fixes

This commit is contained in:
The MMGen Project 2022-10-31 15:42:10 +00:00
commit 23214cf9bb
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
5 changed files with 38 additions and 18 deletions

26
mmgen/test.py Executable file
View file

@ -0,0 +1,26 @@
#!/usr/bin/env python3
#
# mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet
# Copyright (C)2013-2022 The MMGen Project <mmgen@tuta.io>
# Licensed under the GNU General Public License, Version 3:
# https://www.gnu.org/licenses
# Public project repositories:
# https://github.com/mmgen/mmgen
# https://gitlab.com/mmgen/mmgen
"""
test.py: functions required by the MMGen test suite
"""
import sys
from hashlib import sha256
rand_h = sha256('.'.join(sys.argv).encode())
def fake_urandom(n):
def gen(rounds):
for i in range(rounds):
rand_h.update(b'foo')
yield rand_h.digest()
return b''.join(gen(int(n/32)+1))[:n]

View file

@ -66,8 +66,8 @@ ref_kafile_hash_preset = '1'
def getrand(n):
if g.test_suite_deterministic:
from mmgen.crypto import overlay_fake_data
return overlay_fake_data.urandom(n)
from mmgen.test import fake_urandom
return fake_urandom(n)
else:
return os.urandom(n)

View file

@ -4,22 +4,9 @@ from .crypto_orig import *
if overlay_fake_os.getenv('MMGEN_TEST_SUITE_DETERMINISTIC'):
class overlay_fake_data:
import sys
from hashlib import sha256
rand_h = sha256('.'.join(sys.argv).encode())
get_random = get_random
add_user_random = add_user_random
def urandom(n):
def gen(rounds):
for i in range(rounds):
overlay_fake_data.rand_h.update(b'foo')
yield overlay_fake_data.rand_h.digest()
return b''.join(gen(int(n/32)+1))[:n]
from .test import fake_urandom as urandom
def get_random(length):
return overlay_fake_data.urandom(len(overlay_fake_data.get_random(length)))

View file

@ -6,9 +6,10 @@ if overlay_fake_os.getenv('MMGEN_TEST_SUITE_DETERMINISTIC'):
class overlay_fake_data:
make_timestamp = make_timestamp
make_timestr = make_timestr
time_iter = (1577836800 + (i*60) for i in range(1000000))
def make_timestamp(secs=None):
return overlay_fake_data.make_timestamp(1321009871)
return overlay_fake_data.make_timestamp( next(overlay_fake_data.time_iter) )
def make_timestr(secs=None):
return overlay_fake_data.make_timestr(1321009871)
return overlay_fake_data.make_timestr( next(overlay_fake_data.time_iter) )

View file

@ -195,6 +195,7 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
('fund_alice', "funding Alice's wallet"),
('generate', 'mining a block'),
('bob_bal1', "Bob's balance"),
('generate_extra_deterministic', "generate extra blocks for deterministic run"),
),
'msg': (
'message signing',
@ -519,6 +520,11 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
addr = self.get_addr_from_addrlist('alice',sid,mmtype,0,addr_range='1-5')
return self.fund_wallet_deterministic( 'alice', addr, '1-11', skip_passphrase=True )
def generate_extra_deterministic(self):
if not self.deterministic:
return 'skip'
return self.generate(num_blocks=2) # do this so block count matches non-deterministic run
async def bob_recreate_tracking_wallet(self):
if not self.deterministic:
return 'skip'