test suite: deterministic testing fixes
This commit is contained in:
parent
2fc54bd1e1
commit
23214cf9bb
5 changed files with 38 additions and 18 deletions
26
mmgen/test.py
Executable file
26
mmgen/test.py
Executable 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]
|
||||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)))
|
||||
|
|
|
|||
|
|
@ -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) )
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue