ts_misc.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #!/usr/bin/env python3
  2. #
  3. # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
  4. # Copyright (C)2013-2021 The MMGen Project <mmgen@tuta.io>
  5. #
  6. # This program is free software: you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation, either version 3 of the License, or
  9. # (at your option) any later version.
  10. #
  11. # This program is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. # GNU General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License
  17. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. """
  19. ts_misc.py: Miscellaneous test groups for the test.py test suite
  20. """
  21. from mmgen.globalvars import g
  22. from ..include.common import *
  23. from .common import *
  24. from .ts_base import *
  25. from .ts_main import TestSuiteMain
  26. class TestSuiteMisc(TestSuiteBase):
  27. 'miscellaneous tests (RPC backends)'
  28. networks = ('btc',)
  29. tmpdir_nums = [99]
  30. passthru_opts = ('daemon_data_dir','rpc_port')
  31. cmd_group = (
  32. ('rpc_backends', 'RPC backends'),
  33. )
  34. def _run_cmd( self, cmd_name,
  35. cmd_args = [],
  36. no_msg = False,
  37. extra_desc = '',
  38. cmd_dir = 'cmds',
  39. no_output = False):
  40. t = self.spawn( cmd_name,
  41. args = cmd_args,
  42. no_msg = no_msg,
  43. extra_desc = extra_desc,
  44. cmd_dir = cmd_dir,
  45. no_output = no_output)
  46. t.read()
  47. ret = t.p.wait()
  48. if ret == 0:
  49. msg('OK')
  50. else:
  51. rdie(1,"\n'{}' returned {}".format(self.test_name,ret))
  52. t.skip_ok = True
  53. return t
  54. def rpc_backends(self):
  55. backends = g.autoset_opts['rpc_backend'][1]
  56. for backend in backends:
  57. t = self._run_cmd('mmgen-tool',[f'--rpc-backend={backend}','daemon_version'],extra_desc=f' ({backend})')
  58. return t
  59. class TestSuiteHelp(TestSuiteMisc,TestSuiteBase):
  60. 'help, info and usage screens'
  61. networks = ('btc','ltc','bch','eth')
  62. tmpdir_nums = []
  63. passthru_opts = ('daemon_data_dir','rpc_port','coin','testnet')
  64. cmd_group = (
  65. ('helpscreens', (1,'help screens', [])),
  66. ('longhelpscreens', (1,'help screens (--longhelp)',[])),
  67. ('opt_show_hash_presets', (1,'info screen (--show-hash-presets)',[])),
  68. ('tool_help', (1,"'mmgen-tool' usage screen",[])),
  69. ('test_help', (1,"'test.py' help screens",[])),
  70. )
  71. def helpscreens(self,
  72. arg = '--help',
  73. scripts = ( 'walletgen','walletconv','walletchk','passchg','subwalletgen',
  74. 'addrgen','keygen','passgen',
  75. 'seedsplit','seedjoin',
  76. 'txcreate','txsign','txsend','txdo','txbump',
  77. 'addrimport','autosign')
  78. ):
  79. if self.test_name == 'helpscreens' and self.proto.base_coin != 'ETH':
  80. scripts += ('regtest',)
  81. for s in scripts:
  82. t = self._run_cmd('mmgen-'+s,[arg],extra_desc='(mmgen-{})'.format(s),no_output=True)
  83. return t
  84. def longhelpscreens(self):
  85. return self.helpscreens(arg='--longhelp')
  86. def opt_show_hash_presets(self):
  87. return self.helpscreens(
  88. arg = '--show-hash-presets',
  89. scripts = (
  90. 'walletgen','walletconv','walletchk','passchg','subwalletgen',
  91. 'addrgen','keygen','passgen',
  92. 'txsign','txdo','txbump'))
  93. def tool_help(self):
  94. self._run_cmd('mmgen-tool',['--help'],extra_desc="('mmgen-tool --help')")
  95. self._run_cmd('mmgen-tool',['--longhelp'],extra_desc="('mmgen-tool --longhelp')")
  96. self._run_cmd('mmgen-tool',['help'],extra_desc="('mmgen-tool help')")
  97. self._run_cmd('mmgen-tool',['usage'],extra_desc="('mmgen-tool usage')")
  98. return self._run_cmd('mmgen-tool',['help','randpair'],extra_desc="('mmgen-tool help randpair')")
  99. def test_help(self):
  100. self._run_cmd('test.py',['-h'],cmd_dir='test')
  101. self._run_cmd('test.py',['-L'],cmd_dir='test',extra_desc='(cmd group list)')
  102. return self._run_cmd('test.py',['-l'],cmd_dir='test',extra_desc='(cmd list)')
  103. class TestSuiteOutput(TestSuiteBase):
  104. 'screen output'
  105. networks = ('btc',)
  106. tmpdir_nums = []
  107. cmd_group = (
  108. ('output_gr', (1,"Greek text", [])),
  109. ('output_ru', (1,"Russian text", [])),
  110. ('output_zh', (1,"Chinese text", [])),
  111. ('output_jp', (1,"Japanese text", []))
  112. )
  113. def screen_output(self,lang):
  114. t = self.spawn('test/misc/utf8_output.py',[lang],cmd_dir='.')
  115. t.read()
  116. return t
  117. def output_gr(self): return self.screen_output('gr')
  118. def output_ru(self): return self.screen_output('ru')
  119. def output_zh(self): return self.screen_output('zh')
  120. def output_jp(self): return self.screen_output('jp')
  121. class TestSuiteRefTX(TestSuiteMain,TestSuiteBase):
  122. 'create a reference transaction file (administrative command)'
  123. segwit_opts_ok = False
  124. passthru_opts = ('daemon_data_dir','rpc_port','coin','testnet')
  125. tmpdir_nums = [31,32,33,34]
  126. cmd_group = (
  127. ('ref_tx_addrgen1', (31,'address generation (legacy)', [[[],1]])),
  128. ('ref_tx_addrgen2', (32,'address generation (compressed)', [[[],1]])),
  129. ('ref_tx_addrgen3', (33,'address generation (segwit)', [[[],1]])),
  130. ('ref_tx_addrgen4', (34,'address generation (bech32)', [[[],1]])),
  131. ('ref_tx_txcreate', (31,'transaction creation',
  132. ([['addrs'],31],[['addrs'],32],[['addrs'],33],[['addrs'],34]))),
  133. )
  134. def __init__(self,trunner,cfgs,spawn):
  135. if cfgs:
  136. for n in self.tmpdir_nums:
  137. cfgs[str(n)].update({ 'addr_idx_list': '1-2',
  138. 'segwit': n in (33,34),
  139. 'dep_generators': { 'addrs':'ref_tx_addrgen'+str(n)[-1] }})
  140. return TestSuiteMain.__init__(self,trunner,cfgs,spawn)
  141. def ref_tx_addrgen(self,atype):
  142. if atype not in self.proto.mmtypes:
  143. return
  144. t = self.spawn('mmgen-addrgen',['--outdir='+self.tmpdir,'--type='+atype,dfl_words_file,'1-2'])
  145. t.read()
  146. return t
  147. def ref_tx_addrgen1(self): return self.ref_tx_addrgen(atype='L')
  148. def ref_tx_addrgen2(self): return self.ref_tx_addrgen(atype='C')
  149. def ref_tx_addrgen3(self): return self.ref_tx_addrgen(atype='S')
  150. def ref_tx_addrgen4(self): return self.ref_tx_addrgen(atype='B')
  151. def ref_tx_txcreate(self,f1,f2,f3,f4):
  152. sources = ['31','32']
  153. if 'S' in self.proto.mmtypes: sources += ['33']
  154. if 'B' in self.proto.mmtypes: sources += ['34']
  155. return self.txcreate_common(
  156. addrs_per_wallet = 2,
  157. sources = sources,
  158. add_args = ['--locktime=1320969600'],
  159. do_label = True )