to check whether all available ledger options documented and are being tested. Signed-off-by: Alexis Hildebrandt <afh@surryhill.net>
154 lines
4 KiB
Python
Executable file
154 lines
4 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)
|
|
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()
|