mirror of https://github.com/google/oss-fuzz.git
infra: generate summary.json file for python coverage runs (#9650)
Fixes: https://github.com/google/oss-fuzz/issues/9441 Signed-off-by: David Korczynski <david@adalogics.com> --------- Signed-off-by: David Korczynski <david@adalogics.com> Co-authored-by: jonathanmetzman <31354670+jonathanmetzman@users.noreply.github.com>
This commit is contained in:
parent
57638caa86
commit
3d2ec74dba
|
@ -333,16 +333,18 @@ elif [[ $FUZZING_LANGUAGE == "python" ]]; then
|
||||||
cd $PYCOVDIR
|
cd $PYCOVDIR
|
||||||
python3 /usr/local/bin/python_coverage_runner_help.py combine .coverage_*
|
python3 /usr/local/bin/python_coverage_runner_help.py combine .coverage_*
|
||||||
python3 /usr/local/bin/python_coverage_runner_help.py html
|
python3 /usr/local/bin/python_coverage_runner_help.py html
|
||||||
|
# Produce all_cov file used by fuzz introspector.
|
||||||
python3 /usr/local/bin/python_coverage_runner_help.py json -o ${TEXTCOV_REPORT_DIR}/all_cov.json
|
python3 /usr/local/bin/python_coverage_runner_help.py json -o ${TEXTCOV_REPORT_DIR}/all_cov.json
|
||||||
|
|
||||||
|
# Generate .json with similar format to llvm-cov output.
|
||||||
|
python3 /usr/local/bin/python_coverage_runner_help.py \
|
||||||
|
convert-to-summary-json ${TEXTCOV_REPORT_DIR}/all_cov.json $SUMMARY_FILE
|
||||||
|
|
||||||
# Copy coverage date out
|
# Copy coverage date out
|
||||||
cp htmlcov/status.json ${TEXTCOV_REPORT_DIR}/html_status.json
|
cp htmlcov/status.json ${TEXTCOV_REPORT_DIR}/html_status.json
|
||||||
|
|
||||||
mv htmlcov/* $REPORT_PLATFORM_DIR/
|
mv htmlcov/* $REPORT_PLATFORM_DIR/
|
||||||
mv .coverage_* $REPORT_PLATFORM_DIR/
|
mv .coverage_* $REPORT_PLATFORM_DIR/
|
||||||
|
|
||||||
# Create an empty summary file for now
|
|
||||||
echo "{}" >> $SUMMARY_FILE
|
|
||||||
elif [[ $FUZZING_LANGUAGE == "jvm" ]]; then
|
elif [[ $FUZZING_LANGUAGE == "jvm" ]]; then
|
||||||
|
|
||||||
# From this point on the script does not tolerate any errors.
|
# From this point on the script does not tolerate any errors.
|
||||||
|
|
|
@ -19,6 +19,7 @@ paths that match local files. This is needed for html report creation.
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import json
|
||||||
import sys
|
import sys
|
||||||
from coverage.cmdline import main as coverage_main
|
from coverage.cmdline import main as coverage_main
|
||||||
from coverage.data import CoverageData
|
from coverage.data import CoverageData
|
||||||
|
@ -59,6 +60,40 @@ def translate_coverage(all_file_paths):
|
||||||
covdata_post_translation.write()
|
covdata_post_translation.write()
|
||||||
|
|
||||||
|
|
||||||
|
def convert_coveragepy_cov_to_summary_json(src, dst):
|
||||||
|
"""
|
||||||
|
Converts a json file produced by coveragepy into a summary.json file
|
||||||
|
similary to llvm-cov output. `src` is the source coveragepy json file,
|
||||||
|
`dst` is the destination json file, which will be overwritten.
|
||||||
|
"""
|
||||||
|
dst_dict = {'data': {'files': {}}}
|
||||||
|
with open(src, "r") as src_f:
|
||||||
|
src_json = json.loads(src_f.read())
|
||||||
|
if 'files' in src_json:
|
||||||
|
for elem in src_json.get('files'):
|
||||||
|
if 'summary' not in src_json['files'][elem]:
|
||||||
|
continue
|
||||||
|
src_dict = src_json['files'][elem]['summary']
|
||||||
|
count = src_dict['covered_lines'] + src_dict['missing_lines']
|
||||||
|
covered = src_dict['covered_lines']
|
||||||
|
notcovered = src_dict['missing_lines']
|
||||||
|
percent = src_dict['percent_covered']
|
||||||
|
|
||||||
|
dst_dict['data']['files'][elem] = {
|
||||||
|
'summary': {
|
||||||
|
'lines': {
|
||||||
|
'count': count,
|
||||||
|
'covered': covered,
|
||||||
|
'notcovered': notcovered,
|
||||||
|
'percent': percent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
with open(dst, 'w') as dst_f:
|
||||||
|
dst_f.write(json.dumps(dst_dict))
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
"""
|
"""
|
||||||
Main handler.
|
Main handler.
|
||||||
|
@ -73,6 +108,10 @@ def main():
|
||||||
all_file_paths.append(abs_file_path)
|
all_file_paths.append(abs_file_path)
|
||||||
print('Done with path walk')
|
print('Done with path walk')
|
||||||
translate_coverage(all_file_paths)
|
translate_coverage(all_file_paths)
|
||||||
|
elif sys.argv[1] == 'convert-to-summary-json':
|
||||||
|
src = sys.argv[2]
|
||||||
|
dst = sys.argv[3]
|
||||||
|
convert_coveragepy_cov_to_summary_json(src, dst)
|
||||||
else:
|
else:
|
||||||
# Pass commands into coverage package
|
# Pass commands into coverage package
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
|
Loading…
Reference in New Issue