import os
import sys
+import re
from getopt import getopt
from tempfile import mkstemp
from subprocess import Popen, PIPE
raise E_syntax
pd_spec = {
'name': f.pop(0),
- 'probes': [],
+ 'channels': [],
'options': [],
}
while len(f):
if '=' not in b:
raise E_syntax
opt, val = b.split('=')
- if a == 'probe':
+ if a == 'channel':
try:
val = int(val)
except:
raise E_syntax
- pd_spec['probes'].append([opt, val])
+ pd_spec['channels'].append([opt, val])
elif a == 'option':
pd_spec['options'].append([opt, val])
else:
# Set up PD stack for this test.
for spd in tc['pdlist']:
args.extend(['-P', spd['name']])
- for label, probe in spd['probes']:
- args.extend(['-p', "%s=%d" % (label, probe)])
+ for label, channel in spd['channels']:
+ args.extend(['-p', "%s=%d" % (label, channel)])
for option, value in spd['options']:
args.extend(['-o', "%s=%s" % (option, value)])
args.extend(['-i', os.path.join(dumps_dir, tc['input'])])
if coverage:
results[-1]['coverage_report'] = coverage
os.unlink(outfile)
+ if op['type'] == 'exception' and 'error' in results[-1]:
+ # filter out the exception we were looking for
+ reg = "^Error: srd: %s:" % op['match']
+ if re.match(reg, results[-1]['error']):
+ # found it, not an error
+ results[-1].pop('error')
if VERBOSE:
if 'diff' in results[-1]:
INFO("Output mismatch")
for cvg in results[-1]['coverage']:
if cvg['scope'] == pd:
pd_cvg.append(cvg)
- if VERBOSE and opt_coverage and len(pd_cvg) > 1:
+ if opt_coverage and len(pd_cvg) > 1:
# report total coverage of this PD, across all the tests
# that were done on it.
total_lines, missed_lines = coverage_sum(pd_cvg)
pd_coverage = 100 - (float(len(missed_lines)) / total_lines * 100)
if VERBOSE:
dots = '.' * (54 - len(pd) - 2)
- INFO("%s total %s %d%%" % (pd, dots, pd_coverage))
+ INFO("%s total %s %d%%" % (pd, dots, pd_coverage))
+ if report_dir:
+ # generate a missing lines list across all the files in
+ # the PD
+ files = {}
+ for entry in missed_lines:
+ filename, line = entry.split(':')
+ if filename not in files:
+ files[filename] = []
+ files[filename].append(line)
+ text = ''
+ for filename in sorted(files.keys()):
+ line_list = ','.join(sorted(files[filename], key=int))
+ text += "%s: %s\n" % (filename, line_list)
+ open(os.path.join(report_dir, pd + "_total"), 'w').write(text)
+
return results, errors
print("Testcase: %s/%s" % (tc['pd'], tc['name']))
for pd in tc['pdlist']:
print(" Protocol decoder: %s" % pd['name'])
- for label, probe in pd['probes']:
- print(" Probe %s=%d" % (label, probe))
+ for label, channel in pd['channels']:
+ print(" Channel %s=%d" % (label, channel))
for option, value in pd['options']:
print(" Option %s=%d" % (option, value))
if 'stack' in tc: