ts_misc.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #!/usr/bin/env python3
  2. #
  3. # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
  4. # Copyright (C)2013-2020 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 TestSuiteHelp(TestSuiteBase):
  27. 'help, info and usage screens'
  28. networks = ('btc','ltc','bch','eth')
  29. tmpdir_nums = []
  30. passthru_opts = ('daemon_data_dir','rpc_port','coin','testnet')
  31. cmd_group = (
  32. ('helpscreens', (1,'help screens', [])),
  33. ('longhelpscreens', (1,'help screens (--longhelp)',[])),
  34. ('opt_show_hash_presets', (1,'info screen (--show-hash-presets)',[])),
  35. ('tool_help', (1,"'mmgen-tool' usage screen",[])),
  36. ('test_help', (1,"'test.py' help screens",[])),
  37. )
  38. def helpscreens(self,
  39. arg = '--help',
  40. scripts = ( 'walletgen','walletconv','walletchk','passchg','subwalletgen',
  41. 'addrgen','keygen','passgen',
  42. 'seedsplit','seedjoin',
  43. 'txcreate','txsign','txsend','txdo','txbump',
  44. 'addrimport','tool','regtest','autosign')):
  45. for s in scripts:
  46. t = self._run_cmd('mmgen-'+s,[arg],extra_desc='(mmgen-{})'.format(s),no_output=True)
  47. return t
  48. def longhelpscreens(self):
  49. return self.helpscreens(arg='--longhelp')
  50. def opt_show_hash_presets(self):
  51. return self.helpscreens(
  52. arg = '--show-hash-presets',
  53. scripts = (
  54. 'walletgen','walletconv','walletchk','passchg','subwalletgen',
  55. 'addrgen','keygen','passgen',
  56. 'txsign','txdo','txbump'))
  57. def _run_cmd( self, cmd_name,
  58. cmd_args = [],
  59. no_msg = False,
  60. extra_desc = '',
  61. cmd_dir = 'cmds',
  62. no_output = False):
  63. t = self.spawn( cmd_name,
  64. args = cmd_args,
  65. no_msg = no_msg,
  66. extra_desc = extra_desc,
  67. cmd_dir = cmd_dir,
  68. no_output = no_output)
  69. t.read()
  70. ret = t.p.wait()
  71. if ret == 0:
  72. msg('OK')
  73. else:
  74. rdie(1,"\n'{}' returned {}".format(self.test_name,ret))
  75. t.skip_ok = True
  76. return t
  77. def tool_help(self):
  78. self._run_cmd('mmgen-tool',['help'],extra_desc="('mmgen-tool help')")
  79. return self._run_cmd('mmgen-tool',['usage'],extra_desc="('mmgen-tool usage')")
  80. def test_help(self):
  81. self._run_cmd('test.py',['-h'],cmd_dir='test')
  82. self._run_cmd('test.py',['-L'],cmd_dir='test',extra_desc='(cmd group list)')
  83. return self._run_cmd('test.py',['-l'],cmd_dir='test',extra_desc='(cmd list)')
  84. class TestSuiteOutput(TestSuiteBase):
  85. 'screen output'
  86. networks = ('btc',)
  87. tmpdir_nums = []
  88. cmd_group = (
  89. ('output_gr', (1,"Greek text", [])),
  90. ('output_ru', (1,"Russian text", [])),
  91. ('output_zh', (1,"Chinese text", [])),
  92. ('output_jp', (1,"Japanese text", []))
  93. )
  94. def screen_output(self,lang):
  95. t = self.spawn('test/misc/utf8_output.py',[lang],cmd_dir='.')
  96. t.read()
  97. return t
  98. def output_gr(self): return self.screen_output('gr')
  99. def output_ru(self): return self.screen_output('ru')
  100. def output_zh(self): return self.screen_output('zh')
  101. def output_jp(self): return self.screen_output('jp')
  102. class TestSuiteRefTX(TestSuiteMain,TestSuiteBase):
  103. 'create a reference transaction file (administrative command)'
  104. segwit_opts_ok = False
  105. passthru_opts = ('daemon_data_dir','rpc_port','coin','testnet')
  106. tmpdir_nums = [31,32,33,34]
  107. cmd_group = (
  108. ('ref_tx_addrgen1', (31,'address generation (legacy)', [[[],1]])),
  109. ('ref_tx_addrgen2', (32,'address generation (compressed)', [[[],1]])),
  110. ('ref_tx_addrgen3', (33,'address generation (segwit)', [[[],1]])),
  111. ('ref_tx_addrgen4', (34,'address generation (bech32)', [[[],1]])),
  112. ('ref_tx_txcreate', (31,'transaction creation',
  113. ([['addrs'],31],[['addrs'],32],[['addrs'],33],[['addrs'],34]))),
  114. )
  115. def __init__(self,trunner,cfgs,spawn):
  116. if cfgs:
  117. for n in self.tmpdir_nums:
  118. cfgs[str(n)].update({ 'addr_idx_list': '1-2',
  119. 'segwit': n in (33,34),
  120. 'dep_generators': { 'addrs':'ref_tx_addrgen'+str(n)[-1] }})
  121. return TestSuiteMain.__init__(self,trunner,cfgs,spawn)
  122. def ref_tx_addrgen(self,atype):
  123. if atype not in g.proto.mmtypes: return
  124. t = self.spawn('mmgen-addrgen',['--outdir='+self.tmpdir,'--type='+atype,dfl_words_file,'1-2'])
  125. t.read()
  126. return t
  127. def ref_tx_addrgen1(self): return self.ref_tx_addrgen(atype='L')
  128. def ref_tx_addrgen2(self): return self.ref_tx_addrgen(atype='C')
  129. def ref_tx_addrgen3(self): return self.ref_tx_addrgen(atype='S')
  130. def ref_tx_addrgen4(self): return self.ref_tx_addrgen(atype='B')
  131. def ref_tx_txcreate(self,f1,f2,f3,f4):
  132. sources = ['31','32']
  133. if 'S' in g.proto.mmtypes: sources += ['33']
  134. if 'B' in g.proto.mmtypes: sources += ['34']
  135. return self.txcreate_common(
  136. addrs_per_wallet = 2,
  137. sources = sources,
  138. add_args = ['--locktime=1320969600'],
  139. do_label = True )