nt_BlocksInfo.py 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #!/usr/bin/env python3
  2. """
  3. test.unit_tests_d.nt_BlocksInfo:
  4. BlocksInfo unit test for the MMGen Node Tools suite
  5. """
  6. from mmgen.common import *
  7. from mmgen.exception import *
  8. from mmgen.node_tools.BlocksInfo import BlocksInfo
  9. tip = 50000
  10. range_vecs = (
  11. # First Last FromTip nBlocks Step First Last BlockList
  12. ( (), (), (tip, tip, None) ),
  13. ( (199,2,37), (), (None, None, [199,2,37]) ),
  14. ( '0', (0, 0, None, None, None), (0, 0, None) ),
  15. ( '0-0', (0, 0, None, None, None), (0, 0, None) ),
  16. (f'-{tip}', (0, 0, tip, None, None), (0, 0, None) ),
  17. ( '0-10', (0, 10, None, None, None), (0, 10, None) ),
  18. ( '0+10', (0, 9, None, 10, None), (0, 9, None) ),
  19. ( '0+10+2', (0, 9, None, 10, 2 ), (0, 9, [0,2,4,6,8]) ),
  20. ( '1', (1, 1, None, None, None), (1, 1, None) ),
  21. ( '1-1', (1, 1, None, None, None), (1, 1, None) ),
  22. ( '1-10', (1, 10, None, None, None), (1, 10, None) ),
  23. ( '1+10', (1, 10, None, 10, None), (1, 10, None) ),
  24. ( '1+10+2', (1, 10, None, 10, 2 ), (1, 10, [1,3,5,7,9]) ),
  25. ( '+1', (tip, tip, None, 1, None), (tip, tip, None) ),
  26. ( '+10', (tip-9, tip, None, 10, None), (tip-9, tip, None) ),
  27. ( '-1', (tip-1, tip-1, 1, None, None), (tip-1, tip-1, None) ),
  28. ( '-1+1', (tip-1, tip-1, 1, 1, None), (tip-1, tip-1, None) ),
  29. ( '-1+2', (tip-1, tip, 1, 2, None), (tip-1, tip, None) ),
  30. ( '-10', (tip-10, tip-10, 10, None, None), (tip-10, tip-10, None) ),
  31. ( '-10+11', (tip-10, tip, 10, 11, None), (tip-10, tip, None) ),
  32. ( '-10+11+2', (tip-10, tip, 10, 11, 2 ), (tip-10, tip, list(range(tip-10,tip+1,2))) ),
  33. ( 'cUr', (tip, tip, None, None, None), (tip, tip, None) ),
  34. ( 'cur-cUR', (tip, tip, None, None, None), (tip, tip, None) ),
  35. ( '0-cur', (0, tip, None, None, None), (0, tip, None) ),
  36. (f'{tip-1}-cur', (tip-1, tip, None, None, None), (tip-1, tip, None) ),
  37. ( '0-cur+3000', (0, tip, None, None, 3000 ), (0, tip, list(range(0,tip+1,3000))) ),
  38. ( '+1440+144', (tip-1439, tip, None, 1440, 144 ), (tip-1439, tip, list(range(tip-1439,tip+1,144))) ),
  39. ( '+144*10+12*12', (tip-1439, tip, None, 1440, 144 ), (tip-1439, tip, list(range(tip-1439,tip+1,144))) ),
  40. )
  41. class dummyRPC:
  42. blockcount = tip
  43. class dummyOpt:
  44. fields = None
  45. stats = None
  46. miner_info = None
  47. header_info = None
  48. full_stats = None
  49. class unit_tests:
  50. def parse_rangespec(self,name,ut):
  51. b = BlocksInfo(0,dummyOpt(),dummyRPC())
  52. def test(spec,chk,foo):
  53. ret = b.parse_rangespec(spec)
  54. vmsg(f'{spec:13} => {BlocksInfo.range_data(*chk)}')
  55. assert ret == chk, f'{ret} != {chk}'
  56. for vec in range_vecs:
  57. if vec[1]:
  58. test(*vec)
  59. return True
  60. def parse_cmd_args(self,name,ut):
  61. def test(spec,foo,chk):
  62. b = BlocksInfo(spec if type(spec) == tuple else [spec],dummyOpt(),dummyRPC())
  63. ret = (b.first,b.last,b.block_list)
  64. vmsg('{:13} => {}'.format(repr(spec) if type(spec) == tuple else spec,chk))
  65. assert ret == chk, f'{ret} != {chk}'
  66. for vec in range_vecs:
  67. test(*vec)
  68. return True