123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- #!/usr/bin/python
- # This script confirms both that the register report "adds up", and that its
- # final balance is the same as what the balance report shows.
- import sys
- import re
- from difflib import ndiff
- multiproc = False
- try:
- from multiprocessing import Pool
- multiproc = True
- except:
- pass
- args = sys.argv
- jobs = 1
- match = re.match('-j([0-9]+)?', args[1])
- if match:
- args = [args[0]] + args[2:]
- if match.group(1):
- jobs = int(match.group(1))
- if jobs == 1:
- multiproc = False
- from LedgerHarness import LedgerHarness
- harness = LedgerHarness(args)
- #def normalize(line):
- # match = re.match("((\s*)([A-Za-z]+)?(\s*)([-0-9.]+)(\s*)([A-Za-z]+)?)( (.+))?$", line)
- # if match:
- # if match.group(3):
- # prefix = match.group(3) + " " + match.group(5)
- # if match.group(8):
- # return prefix + match.group(8)
- # return prefix
- # elif match.group(7):
- # prefix = match.group(7) + " " + match.group(5)
- # if match.group(8):
- # return prefix + match.group(8)
- # return prefix
- # return line
- def generation_test(seed):
- p_gen = harness.run('$ledger --seed=%d generate' % seed)
- cout = harness.read(p_gen.stdout)
- if not harness.wait(p_gen, msg=("Generation for seed %d failed:" % seed)):
- return False
- p_print = harness.run('$ledger --actual -f - print')
- p_print.stdin.write(cout)
- p_print.stdin.close()
- p_print_out = p_print.stdout.read()
- if not harness.wait(p_print, msg=("Print for seed %d failed:" % seed)):
- return False
- #p_cerr_bal = Popen("%s --args-only -f - bal" % ledger, shell=True,
- # stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
- #p_cerr_bal.stdin.write(cerr)
- #p_cerr_bal.stdin.close()
- #
- #cerr_lines = [normalize(line) for line in p_cerr_bal.stdout.readlines()]
- #
- #if p_cerr_bal.wait() != 0:
- # print "Stderr balance for seed %d failed due to error:" % seed
- # print p_cerr_bal.stderr.read()
- # del p_cerr_bal
- # return False
- #del p_cerr_bal
- p_cout_bal = harness.run('$ledger -f - bal')
- p_cout_bal.stdin.write(cout)
- p_cout_bal.stdin.close()
- cout_lines = harness.readlines(p_cout_bal.stdout)
- if len(cout_lines) == 0:
- return False
- #norm_cout_lines = [normalize(line) for line in cout_lines]
- if not harness.wait(p_cout_bal, msg=("Stdout balance for seed %d failed:" % seed)):
- return False
- p_print_bal = harness.run('$ledger -f - bal')
- p_print_bal.stdin.write(p_print_out)
- p_print_bal.stdin.close()
- print_lines = harness.readlines(p_print_bal.stdout)
- if len(print_lines) == 0:
- return False
- if not harness.wait(p_print_bal, msg=("Print balance for seed %d failed:" % seed)):
- return False
- success = True
- #printed = False
- #for line in ndiff(cerr_lines, norm_cout_lines, charjunk=None):
- # if line[:2] == " ":
- # continue
- # if not printed:
- # if success: print
- # print "Generation failure in output from seed %d (cerr vs. cout):" % seed
- # if success: failed += 1
- # success = False
- # printed = True
- # print " ", line
- printed = False
- for line in ndiff(cout_lines, print_lines, charjunk=None):
- if line[:2] == " ":
- continue
- if not printed:
- if success: print
- print "Generation failure in output from seed %d (cout vs. print):" % seed
- success = False
- printed = True
- print " ", line
- return success
- beg_range = 1
- end_range = 20
- if len(args) > 4:
- beg_range = int(args[3])
- end_range = int(args[4])
- def run_gen_test(i):
- if generation_test(i):
- harness.success()
- else:
- harness.failure()
- return harness.failed
- if multiproc:
- pool = Pool(jobs*2)
- else:
- pool = None
- if pool:
- pool.map(run_gen_test, range(beg_range, end_range))
- else:
- for i in range(beg_range, end_range):
- run_gen_test(i)
- if pool:
- pool.close()
- pool.join()
- harness.exit()
|