1#!/usr/bin/python3 2# 3# Copyright (C) 2023 The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); you may not 6# use this file except in compliance with the License. You may obtain a copy of 7# the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 13# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 14# License for the specific language governing permissions and limitations under 15# the License. 16# 17 18import filecmp 19import os 20import tempfile 21import unittest 22 23import constant 24import parse_cts_report 25 26 27class TestParse(unittest.TestCase): 28 29 def test_set(self): 30 info = {} 31 report = parse_cts_report.CtsReport(info) 32 test_item = ('module', 'abi', 'class', 'test') 33 34 report.set_test_status(*test_item, 'IGNORED') 35 report.set_test_status(*test_item, 'fail') 36 37 self.assertEqual(report.get_test_status(*test_item), 'IGNORED') 38 39 report.set_test_status(*test_item, 'pass') 40 41 self.assertEqual(report.get_test_status(*test_item), 'pass') 42 43 def test_select_abi(self): 44 report_file = 'testdata/test_result_multiple_abis.xml' 45 report_all_abi = parse_cts_report.parse_report_file(report_file) 46 report_selected_abi = parse_cts_report.parse_report_file(report_file, 47 ['arm64-v8a']) 48 test_item_arm = ('module', 'armeabi-v7a', 'class', 'test') 49 test_item_arm64 = ('module', 'arm64-v8a', 'class', 'test') 50 self.assertEqual(report_all_abi.get_test_status(*test_item_arm), 'pass') 51 self.assertEqual(report_all_abi.get_test_status(*test_item_arm64), 'pass') 52 self.assertEqual(report_selected_abi.get_test_status(*test_item_arm), 53 constant.NO_DATA) 54 self.assertEqual(report_selected_abi.get_test_status(*test_item_arm64), 55 'pass') 56 57 def test_parse_xml(self): 58 report_file = 'testdata/test_result_1.xml' 59 report = parse_cts_report.parse_report_file(report_file) 60 61 self.check_ctsreport(report) 62 63 def test_parse_zip(self): 64 report_file = 'testdata/report.zip' 65 report = parse_cts_report.parse_report_file(report_file) 66 67 self.check_ctsreport(report) 68 69 def check_ctsreport(self, report): 70 self.assertEqual( 71 report.get_test_status('module_1', 'arm64-v8a', 'testcase_1', 'test_1'), 72 'pass', 73 ) 74 self.assertEqual( 75 report.get_test_status('module_1', 'arm64-v8a', 'testcase_1', 'test_2'), 76 'fail', 77 ) 78 self.assertEqual( 79 report.get_test_status('module_2', 'arm64-v8a', 'testcase_2', 'test_3'), 80 'pass', 81 ) 82 self.assertEqual( 83 report.get_test_status('module_2', 'arm64-v8a', 'testcase_3', 'test_4'), 84 'ASSUMPTION_FAILURE', 85 ) 86 self.assertEqual( 87 report.get_test_status('module_2', 'arm64-v8a', 'testcase_3', 'test_5'), 88 'fail', 89 ) 90 self.assertEqual( 91 report.get_test_status('module_2', 'arm64-v8a', 'testcase_4', 'test_6'), 92 'IGNORED', 93 ) 94 self.assertEqual( 95 report.get_test_status('module_2', 'arm64-v8a', 'testcase_4', 'test_7'), 96 'fail', 97 ) 98 self.assertEqual( 99 report.get_test_status('module_2', 'arm64-v8a', 'testcase_4', 'test_8'), 100 'TEST_STATUS_UNSPECIFIED', 101 ) 102 self.assertEqual( 103 report.get_test_status('module_3', 'arm64-v8a', 'testcase_5', 'test_9'), 104 'pass', 105 ) 106 self.assertEqual( 107 report.get_test_status( 108 'module_3', 'arm64-v8a', 'testcase_5', 'test_10' 109 ), 110 'TEST_ERROR', 111 ) 112 113 self.assertEqual(report.info['build_model'], 'this_model') 114 self.assertEqual(report.info['build_id'], '1412') 115 self.assertEqual(report.info['build_fingerprint'], 'this_build_fingerprint') 116 self.assertEqual(report.info['build_device'], 'this_device') 117 self.assertEqual(report.info['build_version_sdk'], '34') 118 self.assertEqual(report.info['build_version_security_patch'], '2023-06-05') 119 self.assertEqual(report.info['build_board'], 'this_board') 120 self.assertEqual(report.info['build_type'], 'userdebug') 121 self.assertEqual(report.info['build_version_release'], '14') 122 self.assertEqual(report.info['suite_name'], 'CTS') 123 self.assertEqual(report.info['suite_version'], '14_r1') 124 self.assertEqual(report.info['suite_plan'], 'cts') 125 self.assertEqual(report.info['suite_build_number'], '1234567') 126 127 module_summaries = report.module_summaries 128 summary = module_summaries['module_1']['arm64-v8a'] 129 self.assertEqual(summary.counter['pass'], 1) 130 self.assertEqual(summary.counter['fail'], 1) 131 132 summary = module_summaries['module_2']['arm64-v8a'] 133 self.assertEqual(summary.counter['pass'], 1) 134 self.assertEqual(summary.counter['IGNORED'], 1) 135 self.assertEqual( 136 summary.counter['ASSUMPTION_FAILURE'], 137 1, 138 ) 139 self.assertEqual(summary.counter['fail'], 2) 140 self.assertEqual( 141 summary.counter['TEST_STATUS_UNSPECIFIED'], 142 1, 143 ) 144 145 summary = module_summaries['module_3']['arm64-v8a'] 146 self.assertEqual(summary.counter['pass'], 1) 147 self.assertEqual(summary.counter['TEST_ERROR'], 1) 148 149 def test_output(self): 150 report_file = 'testdata/test_result_1.xml' 151 report = parse_cts_report.parse_report_file(report_file) 152 153 with tempfile.TemporaryDirectory() as temp_dir: 154 report.output_files(temp_dir) 155 156 parsed_info_path = os.path.join(temp_dir, 'info.json') 157 parsed_result_path = os.path.join(temp_dir, 'result.csv') 158 parsed_summary_path = os.path.join(temp_dir, 'summary.csv') 159 160 self.assertTrue( 161 filecmp.cmp('testdata/output/info_1.json', parsed_info_path) 162 ) 163 self.assertTrue( 164 filecmp.cmp('testdata/output/result_1.csv', parsed_result_path) 165 ) 166 self.assertTrue( 167 filecmp.cmp('testdata/output/summary_1.csv', parsed_summary_path) 168 ) 169 170 171if __name__ == '__main__': 172 unittest.main() 173