From 2061d109cc19163b399751533e0b6807a48d6947 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Sat, 5 Feb 2022 13:32:55 +0000 Subject: [PATCH] test.py: always check output when spawned script exits with non-zero value --- mmgen/main.py | 5 ++++ test/test_py_d/ts_ethdev.py | 16 ++++------- test/test_py_d/ts_misc.py | 1 + test/test_py_d/ts_regtest.py | 3 +- test/test_py_d/ts_seedsplit.py | 50 ++++++++++++++++++++++++---------- test/test_py_d/ts_tool.py | 2 +- 6 files changed, 49 insertions(+), 28 deletions(-) diff --git a/mmgen/main.py b/mmgen/main.py index a2b052d0..fc4e97b3 100755 --- a/mmgen/main.py +++ b/mmgen/main.py @@ -58,3 +58,8 @@ def launch(mod): ][e.mmcode if hasattr(e,'mmcode') else 0] d[0](d[1],d[2].format(n=type(e).__name__,m=m)) + except SystemExit as e: + if os.getenv('MMGEN_EXEC_WRAPPER') and e.code != 0: + from mmgen.color import red + sys.stdout.write(red(f'{type(e).__name__}: {e}\n')) + raise diff --git a/test/test_py_d/ts_ethdev.py b/test/test_py_d/ts_ethdev.py index 0adba3b5..bb7fe6f0 100755 --- a/test/test_py_d/ts_ethdev.py +++ b/test/test_py_d/ts_ethdev.py @@ -486,11 +486,9 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared): fn = self.get_file_with_ext(ext,no_dot=True,delete=False) t = self.spawn('mmgen-addrimport', self.eth_args[1:-1] + add_args + [fn]) if bad_input: - t.read() return t t.expect('Importing') t.expect(expect) - t.read() return t def addrimport_one_addr(self,addr=None,extra_args=[]): @@ -637,7 +635,6 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared): t.expect(expect_str) if expect_str2: t.expect(expect_str2) - t.read() t.req_exit_val = exit_val return t @@ -898,11 +895,13 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared): def token_addrimport_badaddr1(self): t = self.addrimport(ext='[11-13]{}.regtest.addrs',add_args=['--token=abc'],bad_input=True) + t.expect('could not be resolved') t.req_exit_val = 2 return t def token_addrimport_badaddr2(self): t = self.addrimport(ext='[11-13]{}.regtest.addrs',add_args=['--token='+'00deadbeef'*4],bad_input=True) + t.expect('could not be resolved') t.req_exit_val = 2 return t @@ -967,12 +966,10 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared): def token_bal2(self): return self.token_bal(n='2') - def twview(self,args=[],expect_str='',tool_args=[],exit_val=0): + def twview(self,args=[],expect_str='',tool_args=[]): t = self.spawn('mmgen-tool', self.eth_args + args + ['twview'] + tool_args) if expect_str: t.expect(expect_str,regex=True) - t.read() - t.req_exit_val = exit_val return t def token_txcreate2(self): @@ -1024,11 +1021,8 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared): def bal9(self): return self.bal(n='9') def token_bal6(self): return self.token_bal(n='6') - def listaddresses(self,args=[],tool_args=['all_labels=1'],exit_val=0): - t = self.spawn('mmgen-tool', self.eth_args + args + ['listaddresses'] + tool_args) - t.read() - t.req_exit_val = exit_val - return t + def listaddresses(self,args=[],tool_args=['all_labels=1']): + return self.spawn('mmgen-tool', self.eth_args + args + ['listaddresses'] + tool_args) def listaddresses1(self): return self.listaddresses() diff --git a/test/test_py_d/ts_misc.py b/test/test_py_d/ts_misc.py index 5de9e544..603f8ee9 100755 --- a/test/test_py_d/ts_misc.py +++ b/test/test_py_d/ts_misc.py @@ -59,6 +59,7 @@ class TestSuiteHelp(TestSuiteBase): def usage(self): t = self.spawn(f'mmgen-walletgen',['foo']) t.expect('USAGE: mmgen-walletgen') + t.expect('SystemExit: 1') t.req_exit_val = 1 return t diff --git a/test/test_py_d/ts_regtest.py b/test/test_py_d/ts_regtest.py index 2ce3ff2a..38c997b7 100755 --- a/test/test_py_d/ts_regtest.py +++ b/test/test_py_d/ts_regtest.py @@ -469,13 +469,12 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared): def bob_twview1(self): return self.user_twview('bob', chk = ('1',rtAmts[0]) ) - def user_bal(self,user,bal,args=['showempty=1'],skip_check=False,exit_val=0): + def user_bal(self,user,bal,args=['showempty=1'],skip_check=False): t = self.spawn('mmgen-tool',['--'+user,'listaddresses'] + args) if skip_check: t.read() else: cmp_or_die(f'{bal} {self.proto.coin}',strip_ansi_escapes(t.expect_getend('TOTAL: '))) - t.req_exit_val = exit_val return t def alice_bal1(self): diff --git a/test/test_py_d/ts_seedsplit.py b/test/test_py_d/ts_seedsplit.py index 39f46527..4a9a9979 100755 --- a/test/test_py_d/ts_seedsplit.py +++ b/test/test_py_d/ts_seedsplit.py @@ -134,7 +134,6 @@ class TestSuiteSeedSplit(TestSuiteBase): + (['--label','Joined Wallet Label','-r0'] if ofmt == 'w' else []) + shares) if bad_invocation: - t.read() return t icls = ( MMGenWallet if 'mmdat' in in_exts else IncogWallet if 'mmincog' in in_exts @@ -209,10 +208,10 @@ class TestSuiteSeedSplit(TestSuiteBase): return self.ss_join(self.tdir2,'seed', ['mmhex','bip39'], ['-H',self.get_hincog_arg(self.tdir2,'-master7')],master=7,id_str='φυβαρ') - def ss_bad_invocation(self,cmd,args,exit_val): + def ss_bad_invocation(self,cmd,args,exit_val,errmsg): t = self.spawn(cmd,args) - t.read() t.req_exit_val = exit_val + t.expect(errmsg) return t def ss_3way_join_dfl_bad_invocation(self): @@ -220,28 +219,51 @@ class TestSuiteSeedSplit(TestSuiteBase): ['mmwords','mmincox','bip39'], id_str='foo', bad_invocation=True) + t.expect('option meaningless') t.req_exit_val = 1 return t + def ss_bad_invocation1(self): - return self.ss_bad_invocation('mmgen-seedsplit',[],1) + return self.ss_bad_invocation( + 'mmgen-seedsplit',[],1,'SystemExit: 1') + def ss_bad_invocation2(self): - return self.ss_bad_invocation('mmgen-seedsplit',['-M1','1:9'],1) + return self.ss_bad_invocation( + 'mmgen-seedsplit',['-M1','1:9'],1,'SystemExit: 1') + def ss_bad_invocation3(self): - return self.ss_bad_invocation('mmgen-seedsplit',[self.tmpdir+'/no.mmdat','1:9'],1) + return self.ss_bad_invocation( + 'mmgen-seedsplit',[self.tmpdir+'/no.mmdat','1:9'],1,'exception.FileNotFound') + def ss_bad_invocation4(self): - return self.ss_bad_invocation('mmgen-seedsplit',[self.tmpdir+'/dfl.sid','1:9'],1) + return self.ss_bad_invocation( + 'mmgen-seedsplit',[self.tmpdir+'/dfl.sid','1:9'],1,'exception.BadFileExtension') + def ss_bad_invocation5(self): - return self.ss_bad_invocation('mmgen-seedjoin',[],1) + return self.ss_bad_invocation( + 'mmgen-seedjoin',[],1,'SystemExit: 1') + def ss_bad_invocation6(self): - return self.ss_bad_invocation('mmgen-seedjoin',[self.tmpdir+'/a'],1) + return self.ss_bad_invocation( + 'mmgen-seedjoin',[self.tmpdir+'/a'],1,'SystemExit: 1') + def ss_bad_invocation7(self): - return self.ss_bad_invocation('mmgen-seedjoin',[self.tmpdir+'/a',self.tmpdir+'/b'],1) + return self.ss_bad_invocation( + 'mmgen-seedjoin',[self.tmpdir+'/a',self.tmpdir+'/b'],1,'exception.BadFileExtension') + def ss_bad_invocation8(self): - return self.ss_bad_invocation('mmgen-seedjoin',[self.tmpdir+'/a.mmdat',self.tmpdir+'/b.mmdat'],1) + return self.ss_bad_invocation( + 'mmgen-seedjoin',[self.tmpdir+'/a.mmdat',self.tmpdir+'/b.mmdat'],1,'exception.FileNotFound') + def ss_bad_invocation9(self): - return self.ss_bad_invocation('mmgen-seedsplit',['x'],1) + return self.ss_bad_invocation( + 'mmgen-seedsplit',['x'],1,'SystemExit: 1') + def ss_bad_invocation10(self): - return self.ss_bad_invocation('mmgen-seedsplit',[self.tmpdir+'/a.mmdat','1:2'],1) + return self.ss_bad_invocation( + 'mmgen-seedsplit',[self.tmpdir+'/a.mmdat','1:2'],1,'exception.FileNotFound') + def ss_bad_invocation11(self): - return self.ss_bad_invocation('mmgen-seedsplit',[self.tmpdir+'/dfl.sid','1:2'],1) + return self.ss_bad_invocation( + 'mmgen-seedsplit',[self.tmpdir+'/dfl.sid','1:2'],1,'exception.BadFileExtension') diff --git a/test/test_py_d/ts_tool.py b/test/test_py_d/ts_tool.py index 181884f7..6bae336a 100755 --- a/test/test_py_d/ts_tool.py +++ b/test/test_py_d/ts_tool.py @@ -81,7 +81,7 @@ class TestSuiteTool(TestSuiteMain,TestSuiteBase): def tool_twview_bad_comment(self): # test correct operation of get_tw_label() os.environ['MMGEN_BOGUS_WALLET_DATA'] = joinpath(ref_dir,'bad-comment-unspent.json') t = self.spawn('mmgen-tool',['twview']) - t.read() + t.expect('cannot be converted to TwComment') t.req_exit_val = 2 return t