This is done using the multiprocessing library in Python 2.6. If that's unavailable, this feature does nothing.
148 lines
3.9 KiB
Python
Executable file
148 lines
3.9 KiB
Python
Executable file
#!/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)
|
|
#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 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()
|
|
|
|
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()
|