123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #!/usr/bin/env python3
- import sys
- from include.tests_header import repo_root
- from mmgen.common import *
- from mmgen.daemon import CoinDaemon
- from mmgen.regtest import MMGenRegtest
- action = g.prog_name.split('-')[0]
- opts_data = {
- 'sets': [('debug',True,'verbose',True)],
- 'text': {
- 'desc': '{} coin daemons for the MMGen test suite'.format(action.capitalize()),
- 'usage':'[opts] <network IDs>',
- 'options': """
- -h, --help Print this help message
- --, --longhelp Print help message for long options (common options)
- -d, --debug Produce debugging output (implies --verbose)
- -D, --no-daemonize Don't fork daemon to background
- -r, --regtest-user=U {a} a regtest daemon for user 'U'
- -s, --get-state Get the state of the daemon(s) and exit
- -t, --testing Testing mode. Print commands but don't execute them
- -v, --verbose Produce more verbose output
- -W, --no-wait Don't wait for daemons to change state before exiting
- """,
- 'notes': """
- Valid network IDs: {nid}, all, or no_xmr
- Valid Regtest network IDs: {rid}, or all
- Valid Regtest users: {ru}
- """
- },
- 'code': {
- 'options': lambda s: s.format(a=action.capitalize(),pn=g.prog_name),
- 'notes': lambda s: s.format(
- nid=', '.join(CoinDaemon.network_ids),
- rid=', '.join(MMGenRegtest.coins),
- ru=', '.join(MMGenRegtest.users),
- )
- }
- }
- cmd_args = opts.init(opts_data)
- if 'all' in cmd_args or 'no_xmr' in cmd_args:
- if len(cmd_args) != 1:
- die(1,"'all' or 'no_xmr' must be the sole argument")
- if opt.regtest_user:
- ids = MMGenRegtest.coins
- else:
- ids = list(CoinDaemon.network_ids)
- if cmd_args[0] == 'no_xmr':
- ids.remove('xmr')
- else:
- ids = cmd_args
- if not ids:
- opts.usage()
- for i in ids:
- if i not in CoinDaemon.network_ids:
- die(1,'{!r}: invalid network ID'.format(i))
- if 'eth' in ids and 'etc' in ids:
- msg('Cannot run ETH and ETC simultaneously, so skipping ETC')
- ids.remove('etc')
- for network_id in ids:
- network_id = network_id.lower()
- if opt.regtest_user:
- d = MMGenRegtest(network_id).test_daemon(opt.regtest_user)
- else:
- if network_id.endswith('_rt'):
- continue
- d = CoinDaemon(network_id,test_suite=True,flags=['no_daemonize'] if opt.no_daemonize else None)
- d.debug = opt.debug
- d.wait = not opt.no_wait
- if opt.get_state:
- print('{} {} is {}'.format(d.net_desc,d.desc,d.state))
- elif opt.testing:
- print(' '.join(getattr(d,action+'_cmd')))
- else:
- d.cmd(action)
|