From 122ac435731e036aba9e6be2a07dc0e164a82699 Mon Sep 17 00:00:00 2001 From: MMGen Date: Sat, 23 Mar 2019 14:30:47 +0000 Subject: [PATCH] minor changes --- mmgen/obj.py | 5 +++-- mmgen/seed.py | 2 +- test/pexpect.py | 16 +++++++++++----- test/test.py | 1 + test/test_py_d/ts_ethdev.py | 12 +++++++++--- test/test_py_d/ts_main.py | 4 ++-- test/test_py_d/ts_shared.py | 5 ++++- 7 files changed, 31 insertions(+), 14 deletions(-) diff --git a/mmgen/obj.py b/mmgen/obj.py index 7947f050..4b6153ab 100755 --- a/mmgen/obj.py +++ b/mmgen/obj.py @@ -724,8 +724,9 @@ class MMGenLabel(str,Hilite,InitErrors): # Allow: (L)etter,(N)umber,(P)unctuation,(S)ymbol,(Z)space # Disallow: (C)ontrol,(M)combining # Combining characters create width formatting issues, so disallow them for now - assert unicodedata.category(ch)[0] not in 'CM','{!r}: {} characters not allowed'.format( - ch,('control','combining')[unicodedata.category(ch)[0]=='M']) + if unicodedata.category(ch)[0] in 'CM': + t = { 'C':'control', 'M':'combining' }[unicodedata.category(ch)[0]] + raise ValueError('{}: {} characters not allowed'.format(ascii(ch),t)) assert len(s) <= cls.max_len, 'too long (>{} symbols)'.format(cls.max_len) assert len(s) >= cls.min_len, 'too short (<{} symbols)'.format(cls.min_len) assert not cls.allowed or set(list(s)).issubset(set(cls.allowed)),\ diff --git a/mmgen/seed.py b/mmgen/seed.py index ae8b1dd3..6572dcbb 100755 --- a/mmgen/seed.py +++ b/mmgen/seed.py @@ -781,7 +781,7 @@ class Brainwallet (SeedSourceEnc): seed_len = opt.seed_len qmsg_r('Hashing brainwallet data. Please wait...') # Use buflen arg of scrypt.hash() to get seed of desired length - seed = scrypt_hash_passphrase(self.brainpasswd,'',d.hash_preset,buflen=seed_len//8) + seed = scrypt_hash_passphrase(self.brainpasswd.encode(),b'',d.hash_preset,buflen=seed_len//8) qmsg('Done') self.seed = Seed(seed) msg('Seed ID: {}'.format(self.seed.sid)) diff --git a/test/pexpect.py b/test/pexpect.py index 3813f8d6..e481eb1e 100755 --- a/test/pexpect.py +++ b/test/pexpect.py @@ -67,6 +67,8 @@ class MMGenPexpect(object): self.req_exit_val = 0 self.skip_ok = False + self.timeout = int(opt.pexpect_timeout or 0) or (60,5)[bool(opt.debug_pexpect)] + self.sent_value = None def do_decrypt_ka_data(self,hp,pw,desc='key-address data',check=True,have_yes_opt=False): # self.hash_preset(desc,hp) @@ -170,8 +172,7 @@ class MMGenPexpect(object): if not silent: if opt.verbose: - quo = ('',"'")[type(s) == str] - msg_r('EXPECT {}'.format(yellow(quo+str(s)+quo))) + msg_r('EXPECT ' + yellow(str(s))) elif not opt.exact_output: msg_r('+') try: @@ -179,11 +180,13 @@ class MMGenPexpect(object): ret = 0 else: f = (self.p.expect_exact,self.p.expect)[bool(regex)] - ret = f(s,timeout=(60,5)[bool(opt.debug_pexpect)]) + ret = f(s,self.timeout) except pexpect.TIMEOUT: if opt.debug_pexpect: raise - quo = ('',"'")[type(s) == str] - rdie(1,red('\nERROR. Expect {}{}{} timed out. Exiting'.format(quo,s,quo))) + m1 = red('\nERROR. Expect {!r} timed out. Exiting\n'.format(s)) + m2 = 'before: [{}]\n'.format(self.p.before) + m3 = 'sent value: [{}]'.format(self.sent_value) if self.sent_value != None else '' + rdie(1,m1+m2+m3) debug_pexpect_msg(self.p) @@ -200,9 +203,12 @@ class MMGenPexpect(object): return ret def send(self,t,delay=None,s=False): + self.sent_value = None delay = delay or (0,0.3)[bool(opt.buf_keypress)] if delay: time.sleep(delay) ret = self.p.send(t) # returns num bytes written + if ret: + self.sent_value = t if delay: time.sleep(delay) if opt.verbose: ls = (' ','')[bool(opt.debug or not s)] diff --git a/test/test.py b/test/test.py index 38e27195..716ba8b9 100755 --- a/test/test.py +++ b/test/test.py @@ -115,6 +115,7 @@ opts_data = lambda: { -S, --skip-deps Skip dependency checking for command -u, --usr-random Get random data interactively from user -t, --traceback Run the command inside the '{tbc}' script +-T, --pexpect-timeout=T Set the timeout for pexpect -v, --verbose Produce more verbose output -W, --no-dw-delete Don't remove default wallet from data dir after dw tests are done -X, --exit-after=C Exit after command 'C' diff --git a/test/test_py_d/ts_ethdev.py b/test/test_py_d/ts_ethdev.py index 30122f49..5a003c92 100755 --- a/test/test_py_d/ts_ethdev.py +++ b/test/test_py_d/ts_ethdev.py @@ -44,9 +44,13 @@ parity_pid_fn = 'parity.pid' parity_key_fn = 'parity.devkey' # Token sends require varying amounts of gas, depending on compiler version -solc_ver = re.search(r'Version:\s*(.*)', - subprocess.Popen(['solc','--version'],stdout=subprocess.PIPE - ).stdout.read().decode()).group(1) +try: + solc_ver = re.search(r'Version:\s*(.*)', + subprocess.Popen(['solc','--version'],stdout=subprocess.PIPE + ).stdout.read().decode()).group(1) +except: + solc_ver = '' + if re.match(r'\b0.5.1\b',solc_ver): # Raspbian Stretch vbal1 = '1.2288337' @@ -58,6 +62,8 @@ elif re.match(r'\b0.5.3\b',solc_ver): # Ubuntu Bionic vbal2 = '99.997092733' vbal3 = '1.23142915' vbal4 = '127.0287987' +else: + vbal1 = vbal2 = vbal3 = vbal4 = None bals = { '1': [ ('98831F3A:E:1','123.456')], diff --git a/test/test_py_d/ts_main.py b/test/test_py_d/ts_main.py index 10d882e4..d1992f72 100755 --- a/test/test_py_d/ts_main.py +++ b/test/test_py_d/ts_main.py @@ -440,7 +440,7 @@ class TestSuiteMain(TestSuiteBase,TestSuiteShared): t.written_to_file('Transaction') os.unlink(txfile) # our tx file replaces the original cmd = 'touch ' + joinpath(self.tmpdir,'txbump') - os.system(cmd.encode()) + os.system(cmd) return t def txsend(self,sigfile,bogus_send=True,extra_opts=[]): @@ -656,7 +656,7 @@ class TestSuiteMain(TestSuiteBase,TestSuiteShared): self.txsend_ui_common(t) cmd = 'touch ' + joinpath(self.tmpdir,'txdo') - os.system(cmd.encode()) + os.system(cmd) return t def txbump4(self,f1,f2,f3,f4,f5,f6,f7,f8,f9): # f7:txfile,f9:'txdo' diff --git a/test/test_py_d/ts_shared.py b/test/test_py_d/ts_shared.py index 1c2fb840..67722448 100755 --- a/test/test_py_d/ts_shared.py +++ b/test/test_py_d/ts_shared.py @@ -63,7 +63,10 @@ class TestSuiteShared(object): if have_est_fee and not interactive_fee: t.send('y') else: - if have_est_fee: t.send('n') + if have_est_fee: + t.send('n') + if g.proto.base_coin == 'ETH': # TODO: pexpect race condition? + time.sleep(0.05) if eth_fee_res: t.expect('or gas price: ',interactive_fee+'\n') else: