Add constant.py.

Bug: 292453652
Test: ./parse_cts_report.py -r REPORT -d OUTPUT_DIR &&
  ./aggregate_cts_reports.py -r REPORT [REPORT ...] -d OUTPUT_DIR &&
  ./compare_cts_reports.py [-r CTS_REPORTS [CTS_REPORTS ...]] \
  [--folder CTS_REPORTS] --mode {1,2,n} --output-dir OUTPUT_DIR [--csv CSV] [--output-files]
Change-Id: I96a135feb84b8f5e4dad939500865a65c000351d
This commit is contained in:
Zoe Tsou
2023-09-19 07:04:30 +00:00
parent 83445923e5
commit 52b17faace
4 changed files with 53 additions and 26 deletions

View File

@@ -72,7 +72,7 @@ def aggregate_cts_reports(report_files):
def main(): def main():
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('--report-files', required=True, nargs='+', parser.add_argument('-r', '--report', required=True, nargs='+',
help=('Path to cts report(s), where a cts report could ' help=('Path to cts report(s), where a cts report could '
'be a zip archive or a xml file.')) 'be a zip archive or a xml file.'))
parser.add_argument('-d', '--output-dir', required=True, parser.add_argument('-d', '--output-dir', required=True,
@@ -80,7 +80,7 @@ def main():
args = parser.parse_args() args = parser.parse_args()
report_files = args.report_files report_files = args.report
output_dir = args.output_dir output_dir = args.output_dir
if not os.path.exists(output_dir): if not os.path.exists(output_dir):

View File

@@ -47,10 +47,7 @@ import tempfile
import aggregate_cts_reports import aggregate_cts_reports
import parse_cts_report import parse_cts_report
import constant
TESTED_ITEMS = 'tested_items'
PASS_RATE = 'pass_rate'
def one_way_compare(reports, diff_csv): def one_way_compare(reports, diff_csv):
@@ -113,7 +110,7 @@ def two_way_compare(reports, diff_csv):
result = report.get_test_status(module_name, abi, class_name, test_name) result = report.get_test_status(module_name, abi, class_name, test_name)
if test_name not in tests: if test_name not in tests:
tests[test_name] = [parse_cts_report.NO_DATA, parse_cts_report.NO_DATA] tests[test_name] = [constant.NO_DATA, constant.NO_DATA]
tests[test_name][i] = result tests[test_name][i] = result
@@ -163,10 +160,10 @@ def gen_summary_row(reports, module_with_abi, item):
summary = module_summary[abi] if abi in module_summary else None summary = module_summary[abi] if abi in module_summary else None
if not summary: if not summary:
row.append(0.0 if item == PASS_RATE else 0) row.append(0.0 if item == constant.PASS_RATE else 0)
elif item == TESTED_ITEMS: elif item == constant.TESTED_ITEMS:
row.append(summary.tested_items) row.append(summary.tested_items)
elif item == PASS_RATE: elif item == constant.PASS_RATE:
row.append(summary.pass_rate) row.append(summary.pass_rate)
elif item in parse_cts_report.CtsReport.STATUS_ORDER: elif item in parse_cts_report.CtsReport.STATUS_ORDER:
row.append(summary.counter[item]) row.append(summary.counter[item])
@@ -215,7 +212,10 @@ def n_way_compare(reports, diff_csv):
module_names, key=lambda module_name: modules_min_rate[module_name] module_names, key=lambda module_name: modules_min_rate[module_name]
) )
items = parse_cts_report.CtsReport.STATUS_ORDER + [TESTED_ITEMS, PASS_RATE] items = parse_cts_report.CtsReport.STATUS_ORDER + [
constant.TESTED_ITEMS,
constant.PASS_RATE,
]
with open(diff_csv, 'w') as diff_csvfile: with open(diff_csv, 'w') as diff_csvfile:
diff_writer = csv.writer(diff_csvfile) diff_writer = csv.writer(diff_csvfile)
@@ -238,7 +238,7 @@ def load_parsed_report(report_dir):
for f in [info_path, result_path]: for f in [info_path, result_path]:
if not os.path.exists(f): if not os.path.exists(f):
raise FileNotFoundError(f'file {f} doesn\'t exist.') raise FileNotFoundError(f"file {f} doesn't exist.")
with open(info_path, 'r') as info_jsonfile: with open(info_path, 'r') as info_jsonfile:
info = json.load(info_jsonfile) info = json.load(info_jsonfile)
@@ -254,11 +254,11 @@ def load_parsed_report(report_dir):
def main(): def main():
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('--reports', '-r', nargs='+', parser.add_argument('-r', '--report', nargs='+',
dest='cts_reports', action='append', dest='cts_reports', action='append',
help=('Path to cts reports. Each flag -r is followed by ' help=('Path to cts reports. Each flag -r is followed by '
'a group of files to be aggregated as one report.')) 'a group of files to be aggregated as one report.'))
parser.add_argument('--folder', '-f', parser.add_argument('-f', '--folder',
dest='cts_reports', action='append', dest='cts_reports', action='append',
help=('Path to folder that stores intermediate files ' help=('Path to folder that stores intermediate files '
'of parsed reports.')) 'of parsed reports.'))

View File

@@ -0,0 +1,24 @@
#!/usr/bin/python3
#
# Copyright (C) 2023 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
#
"""Constants for development/tools/compare_cts_reports/."""
VERSION = '1.0'
NO_DATA = 'null'
TESTED_ITEMS = 'tested_items'
PASS_RATE = 'pass_rate'

View File

@@ -28,14 +28,12 @@ import shutil
import tempfile import tempfile
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
import zipfile import zipfile
import constant
# TODO(b/293809772): Logging. # TODO(b/293809772): Logging.
NO_DATA = 'null'
class CtsReport: class CtsReport:
"""Class to record the test result of a cts report.""" """Class to record the test result of a cts report."""
@@ -57,7 +55,7 @@ class CtsReport:
@staticmethod @staticmethod
def is_fail(status): def is_fail(status):
if status == NO_DATA: if status == constant.NO_DATA:
return False return False
else: else:
return CtsReport.STATUS_ORDER.index(status) >= CtsReport.FAIL_INDEX return CtsReport.STATUS_ORDER.index(status) >= CtsReport.FAIL_INDEX
@@ -84,19 +82,20 @@ class CtsReport:
"""Get test status from the CtsReport object.""" """Get test status from the CtsReport object."""
if module_name not in self.result_tree: if module_name not in self.result_tree:
return NO_DATA return constant.NO_DATA
abis = self.result_tree[module_name] abis = self.result_tree[module_name]
if abi not in abis: if abi not in abis:
return NO_DATA return constant.NO_DATA
test_classes = abis[abi] test_classes = abis[abi]
if class_name not in test_classes: if class_name not in test_classes:
return NO_DATA return constant.NO_DATA
tests = test_classes[class_name] tests = test_classes[class_name]
if test_name not in tests: if test_name not in tests:
return NO_DATA return constant.NO_DATA
return tests[test_name] return tests[test_name]
@@ -111,7 +110,7 @@ class CtsReport:
test_classes = abis.setdefault(abi, {}) test_classes = abis.setdefault(abi, {})
tests = test_classes.setdefault(class_name, {}) tests = test_classes.setdefault(class_name, {})
if previous == NO_DATA: if previous == constant.NO_DATA:
tests[test_name] = test_status tests[test_name] = test_status
module_summary = self.module_summaries.setdefault(module_name, {}) module_summary = self.module_summaries.setdefault(module_name, {})
@@ -290,7 +289,10 @@ def get_test_info_xml(test_result_path):
tree = ET.parse(test_result_path) tree = ET.parse(test_result_path)
root = tree.getroot() root = tree.getroot()
test_info = {'source_path': test_result_path} test_info = {
'tool_version': constant.VERSION,
'source_path': test_result_path,
}
for attrib_path in ATTRS_TO_SHOW: for attrib_path in ATTRS_TO_SHOW:
tags, attr_name = parse_attrib_path(attrib_path) tags, attr_name = parse_attrib_path(attrib_path)
@@ -359,7 +361,8 @@ def main():
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument( parser.add_argument(
'--report-file', '-r',
'--report',
required=True, required=True,
help=( help=(
'Path to a cts report, where a cts report could ' 'Path to a cts report, where a cts report could '
@@ -375,7 +378,7 @@ def main():
args = parser.parse_args() args = parser.parse_args()
report_file = args.report_file report_file = args.report
output_dir = args.output_dir output_dir = args.output_dir
if not os.path.exists(output_dir): if not os.path.exists(output_dir):