ut_addrlist.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #!/usr/bin/env python3
  2. """
  3. test.unit_tests_d.ut_addrlist: address list unit tests for the MMGen suite
  4. """
  5. from mmgen.common import *
  6. from mmgen.seed import Seed
  7. from mmgen.addr import MMGenAddrType
  8. from mmgen.addrlist import AddrIdxList,AddrList,KeyList,KeyAddrList
  9. from mmgen.passwdlist import PasswordList
  10. from mmgen.protocol import init_proto
  11. def do_test(list_type,chksum,idx_spec=None,pw_id_str=None,add_kwargs=None):
  12. qmsg(blue(f'Testing {list_type.__name__}'))
  13. proto = init_proto('btc')
  14. seed = Seed(seed_bin=bytes.fromhex('feedbead'*8))
  15. mmtype = MMGenAddrType(proto,'C')
  16. idxs = AddrIdxList(idx_spec or '1-3')
  17. if opt.verbose:
  18. debug_addrlist_save = g.debug_addrlist
  19. g.debug_addrlist = True
  20. kwargs = {
  21. 'seed': seed,
  22. 'pw_idxs': idxs,
  23. 'pw_id_str': pw_id_str,
  24. 'pw_fmt': 'b58',
  25. } if pw_id_str else {
  26. 'seed': seed,
  27. 'addr_idxs': idxs,
  28. 'mmtype': mmtype,
  29. }
  30. if add_kwargs:
  31. kwargs.update(add_kwargs)
  32. al = list_type( proto, **kwargs )
  33. af = al.get_file()
  34. af.format()
  35. qmsg(f'Filename: {af.filename}\n')
  36. # af.write('-')
  37. vmsg(f'------------\n{af.fmt_data}\n------------')
  38. if chksum:
  39. assert al.chksum == chksum, f'{al.chksum} != {chksum}'
  40. if opt.verbose:
  41. g.debug_addrlist = debug_addrlist_save
  42. return True
  43. class unit_tests:
  44. def addr(self,name,ut):
  45. return (
  46. do_test(AddrList,'BCE8 082C 0973 A525','1-3') and
  47. do_test(AddrList,'88FA B04B A380 C1CB','199999,99-101,77-78,7,3,2-9')
  48. )
  49. def key(self,name,ut):
  50. return do_test(KeyList,None)
  51. def keyaddr(self,name,ut):
  52. return do_test(KeyAddrList,'4A36 AA65 8C2B 7C35')
  53. def passwd(self,name,ut):
  54. return do_test(PasswordList,'FF4A B716 4513 8F8F',pw_id_str='foo')
  55. def passwd_bip39(self,name,ut):
  56. return do_test(PasswordList,'C3A8 B2B2 1AA1 FB40',pw_id_str='foo',add_kwargs={'pw_fmt':'bip39'})