123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- #!/usr/bin/env python3
- """
- test.unit_tests_d.ut_tx: TX unit tests for the MMGen suite
- """
- import os,re
- from mmgen.devtools import get_diff,get_ndiff
- from mmgen.tx import NewTX,CompletedTX,UnsignedTX
- from mmgen.tx.file import MMGenTxFile
- from mmgen.daemon import CoinDaemon
- from mmgen.protocol import init_proto
- from ..include.common import cfg,qmsg,vmsg
- async def do_txfile_test(desc,fns):
- qmsg(f' Testing CompletedTX initializer ({desc})')
- for fn in fns:
- qmsg(f' parsing: {os.path.basename(fn)}')
- fpath = os.path.join('test','ref',fn)
- tx = await CompletedTX( cfg=cfg, filename=fpath, quiet_open=True )
- vmsg(tx.info.format())
- f = MMGenTxFile(tx)
- fn_gen = f.make_filename()
- if cfg.debug_utf8:
- fn_gen = fn_gen.replace('-α','')
- assert fn_gen == os.path.basename(fn), f'{fn_gen} != {fn}'
- text = f.format()
- continue # TODO: check disabled after label -> comment patch
- with open(fpath) as fp:
- chk = fp.read()
- # remove Python2 'u' string prefixes from ref files:
- # New in version 3.3: Support for the unicode legacy literal (u'value') was
- # reintroduced to simplify the maintenance of dual Python 2.x and 3.x codebases.
- # See PEP 414 for more information.
- chk = chk.replace("'label':","'comment':") # TODO
- chk = re.subn( r"\bu(['\"])", r'\1', chk )[0]
- diff = get_ndiff(chk,text)
- print(get_diff(chk,text,from_json=False))
- nLines = len([i for i in diff if i.startswith('-')])
- assert nLines in (0,1), f'{nLines} lines differ: only checksum line may differ'
- qmsg(' OK')
- return True
- class unit_tests:
- altcoin_deps = ('txfile_alt',)
- async def tx(self,name,ut):
- qmsg(' Testing NewTX initializer')
- d = CoinDaemon( cfg, 'btc', test_suite=True )
- d.start()
- proto = init_proto( cfg, 'btc', need_amt=True )
- await NewTX( cfg=cfg, proto=proto )
- d.stop()
- qmsg(' OK')
- return True
- async def txfile(self,name,ut):
- return await do_txfile_test(
- 'Bitcoin',
- (
- '0B8D5A[15.31789,14,tl=1320969600].rawtx',
- '542169[5.68152,34].sigtx',
- '0C7115[15.86255,14,tl=1320969600].testnet.rawtx',
- '25EFA3[2.34].testnet.rawtx',
- )
- )
- async def txfile_alt(self,name,ut):
- return await do_txfile_test(
- 'altcoins',
- (
- '460D4D-BCH[10.19764,tl=1320969600].rawtx',
- 'ethereum/5881D2-MM1[1.23456,50000].rawtx',
- 'ethereum/6BDB25-MM1[1.23456,50000].testnet.rawtx',
- 'ethereum/88FEFD-ETH[23.45495,40000].rawtx',
- 'ethereum/B472BD-ETH[23.45495,40000].testnet.rawtx',
- 'ethereum/B472BD-ETH[23.45495,40000].testnet.sigtx',
- 'litecoin/A5A1E0-LTC[1454.64322,1453,tl=1320969600].testnet.rawtx',
- 'litecoin/AF3CDF-LTC[620.76194,1453,tl=1320969600].rawtx',
- )
- )
- def errors(self,name,ut):
- async def bad1():
- await CompletedTX(cfg, filename='foo')
- def bad2():
- UnsignedTX(cfg, filename='foo')
- bad_data = (
- ('forbidden positional args', 'TypeError', 'positional arguments', bad1),
- ('forbidden positional args', 'TypeError', 'positional arguments', bad2),
- )
- ut.process_bad_data(bad_data)
- return True
|