Jim Tang | 0dbd46d | 2019-11-27 11:21:03 +0800 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
Jim Tang | dcbcc17 | 2019-11-25 17:21:28 +0800 | [diff] [blame] | 2 | # |
| 3 | # Copyright 2019, The Android Open Source Project |
| 4 | # |
| 5 | # Licensed under the Apache License, Version 2.0 (the "License"); |
| 6 | # you may not use this file except in compliance with the License. |
| 7 | # You may obtain a copy of 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, |
| 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 14 | # See the License for the specific language governing permissions and |
| 15 | # limitations under the License. |
| 16 | |
| 17 | """Unittest for atest_execution_info.""" |
| 18 | |
Jim Tang | fe33dbb | 2019-12-06 14:04:22 +0800 | [diff] [blame] | 19 | # pylint: disable=line-too-long |
| 20 | |
Jim Tang | dcbcc17 | 2019-11-25 17:21:28 +0800 | [diff] [blame] | 21 | import time |
| 22 | import unittest |
| 23 | |
Jim Tang | dcbcc17 | 2019-11-25 17:21:28 +0800 | [diff] [blame] | 24 | import atest_execution_info as aei |
| 25 | import result_reporter |
| 26 | |
Jim Tang | 20413ce | 2019-12-17 10:01:45 +0800 | [diff] [blame] | 27 | from test_runners import test_runner_base |
| 28 | |
Jim Tang | dcbcc17 | 2019-11-25 17:21:28 +0800 | [diff] [blame] | 29 | RESULT_TEST_TEMPLATE = test_runner_base.TestResult( |
| 30 | runner_name='someRunner', |
| 31 | group_name='someModule', |
| 32 | test_name='someClassName#sostName', |
| 33 | status=test_runner_base.PASSED_STATUS, |
| 34 | details=None, |
| 35 | test_count=1, |
| 36 | test_time='(10ms)', |
| 37 | runner_total=None, |
| 38 | group_total=2, |
| 39 | additional_info={}, |
| 40 | test_run_name='com.android.UnitTests' |
| 41 | ) |
| 42 | |
| 43 | # pylint: disable=protected-access |
| 44 | class AtestRunInfoUnittests(unittest.TestCase): |
| 45 | """Unit tests for atest_execution_info.py""" |
| 46 | |
| 47 | def test_arrange_test_result_one_module(self): |
| 48 | """Test _arrange_test_result method with only one module.""" |
| 49 | pass_1 = self._create_test_result(status=test_runner_base.PASSED_STATUS) |
| 50 | pass_2 = self._create_test_result(status=test_runner_base.PASSED_STATUS) |
| 51 | pass_3 = self._create_test_result(status=test_runner_base.PASSED_STATUS) |
| 52 | fail_1 = self._create_test_result(status=test_runner_base.FAILED_STATUS) |
| 53 | fail_2 = self._create_test_result(status=test_runner_base.FAILED_STATUS) |
| 54 | ignore_1 = self._create_test_result(status=test_runner_base.IGNORED_STATUS) |
| 55 | reporter_1 = result_reporter.ResultReporter() |
| 56 | reporter_1.all_test_results.extend([pass_1, pass_2, pass_3]) |
| 57 | reporter_2 = result_reporter.ResultReporter() |
| 58 | reporter_2.all_test_results.extend([fail_1, fail_2, ignore_1]) |
| 59 | info_dict = {} |
| 60 | aei.AtestExecutionInfo._arrange_test_result(info_dict, [reporter_1, reporter_2]) |
| 61 | expect_summary = {aei._STATUS_IGNORED_KEY : 1, |
| 62 | aei._STATUS_FAILED_KEY : 2, |
| 63 | aei._STATUS_PASSED_KEY : 3} |
| 64 | self.assertEqual(expect_summary, info_dict[aei._TOTAL_SUMMARY_KEY]) |
| 65 | |
| 66 | def test_arrange_test_result_multi_module(self): |
| 67 | """Test _arrange_test_result method with multi module.""" |
| 68 | group_a_pass_1 = self._create_test_result(group_name='grpup_a', |
| 69 | status=test_runner_base.PASSED_STATUS) |
| 70 | group_b_pass_1 = self._create_test_result(group_name='grpup_b', |
| 71 | status=test_runner_base.PASSED_STATUS) |
| 72 | group_c_pass_1 = self._create_test_result(group_name='grpup_c', |
| 73 | status=test_runner_base.PASSED_STATUS) |
| 74 | group_b_fail_1 = self._create_test_result(group_name='grpup_b', |
| 75 | status=test_runner_base.FAILED_STATUS) |
| 76 | group_c_fail_1 = self._create_test_result(group_name='grpup_c', |
| 77 | status=test_runner_base.FAILED_STATUS) |
| 78 | group_c_ignore_1 = self._create_test_result(group_name='grpup_c', |
| 79 | status=test_runner_base.IGNORED_STATUS) |
| 80 | reporter_1 = result_reporter.ResultReporter() |
| 81 | reporter_1.all_test_results.extend([group_a_pass_1, group_b_pass_1, group_c_pass_1]) |
| 82 | reporter_2 = result_reporter.ResultReporter() |
| 83 | reporter_2.all_test_results.extend([group_b_fail_1, group_c_fail_1, group_c_ignore_1]) |
| 84 | |
| 85 | info_dict = {} |
| 86 | aei.AtestExecutionInfo._arrange_test_result(info_dict, [reporter_1, reporter_2]) |
| 87 | expect_group_a_summary = {aei._STATUS_IGNORED_KEY : 0, |
| 88 | aei._STATUS_FAILED_KEY : 0, |
| 89 | aei._STATUS_PASSED_KEY : 1} |
| 90 | self.assertEqual( |
| 91 | expect_group_a_summary, |
| 92 | info_dict[aei._TEST_RUNNER_KEY]['someRunner']['grpup_a'][aei._SUMMARY_KEY]) |
| 93 | |
| 94 | expect_group_b_summary = {aei._STATUS_IGNORED_KEY : 0, |
| 95 | aei._STATUS_FAILED_KEY : 1, |
| 96 | aei._STATUS_PASSED_KEY : 1} |
| 97 | self.assertEqual( |
| 98 | expect_group_b_summary, |
| 99 | info_dict[aei._TEST_RUNNER_KEY]['someRunner']['grpup_b'][aei._SUMMARY_KEY]) |
| 100 | |
| 101 | expect_group_c_summary = {aei._STATUS_IGNORED_KEY : 1, |
| 102 | aei._STATUS_FAILED_KEY : 1, |
| 103 | aei._STATUS_PASSED_KEY : 1} |
| 104 | self.assertEqual( |
| 105 | expect_group_c_summary, |
| 106 | info_dict[aei._TEST_RUNNER_KEY]['someRunner']['grpup_c'][aei._SUMMARY_KEY]) |
| 107 | |
| 108 | expect_total_summary = {aei._STATUS_IGNORED_KEY : 1, |
| 109 | aei._STATUS_FAILED_KEY : 2, |
| 110 | aei._STATUS_PASSED_KEY : 3} |
| 111 | self.assertEqual(expect_total_summary, info_dict[aei._TOTAL_SUMMARY_KEY]) |
| 112 | |
| 113 | def test_preparation_time(self): |
| 114 | """Test preparation_time method.""" |
| 115 | start_time = time.time() |
| 116 | aei.PREPARE_END_TIME = None |
| 117 | self.assertTrue(aei.preparation_time(start_time) is None) |
| 118 | aei.PREPARE_END_TIME = time.time() |
| 119 | self.assertFalse(aei.preparation_time(start_time) is None) |
| 120 | |
| 121 | def test_arrange_test_result_multi_runner(self): |
| 122 | """Test _arrange_test_result method with multi runner.""" |
| 123 | runner_a_pass_1 = self._create_test_result(runner_name='runner_a', |
| 124 | status=test_runner_base.PASSED_STATUS) |
| 125 | runner_a_pass_2 = self._create_test_result(runner_name='runner_a', |
| 126 | status=test_runner_base.PASSED_STATUS) |
| 127 | runner_a_pass_3 = self._create_test_result(runner_name='runner_a', |
| 128 | status=test_runner_base.PASSED_STATUS) |
| 129 | runner_b_fail_1 = self._create_test_result(runner_name='runner_b', |
| 130 | status=test_runner_base.FAILED_STATUS) |
| 131 | runner_b_fail_2 = self._create_test_result(runner_name='runner_b', |
| 132 | status=test_runner_base.FAILED_STATUS) |
| 133 | runner_b_ignore_1 = self._create_test_result(runner_name='runner_b', |
| 134 | status=test_runner_base.IGNORED_STATUS) |
| 135 | |
| 136 | reporter_1 = result_reporter.ResultReporter() |
| 137 | reporter_1.all_test_results.extend([runner_a_pass_1, runner_a_pass_2, runner_a_pass_3]) |
| 138 | reporter_2 = result_reporter.ResultReporter() |
| 139 | reporter_2.all_test_results.extend([runner_b_fail_1, runner_b_fail_2, runner_b_ignore_1]) |
| 140 | info_dict = {} |
| 141 | aei.AtestExecutionInfo._arrange_test_result(info_dict, [reporter_1, reporter_2]) |
| 142 | expect_group_a_summary = {aei._STATUS_IGNORED_KEY : 0, |
| 143 | aei._STATUS_FAILED_KEY : 0, |
| 144 | aei._STATUS_PASSED_KEY : 3} |
| 145 | self.assertEqual( |
| 146 | expect_group_a_summary, |
| 147 | info_dict[aei._TEST_RUNNER_KEY]['runner_a']['someModule'][aei._SUMMARY_KEY]) |
| 148 | |
| 149 | expect_group_b_summary = {aei._STATUS_IGNORED_KEY : 1, |
| 150 | aei._STATUS_FAILED_KEY : 2, |
| 151 | aei._STATUS_PASSED_KEY : 0} |
| 152 | self.assertEqual( |
| 153 | expect_group_b_summary, |
| 154 | info_dict[aei._TEST_RUNNER_KEY]['runner_b']['someModule'][aei._SUMMARY_KEY]) |
| 155 | |
| 156 | expect_total_summary = {aei._STATUS_IGNORED_KEY : 1, |
| 157 | aei._STATUS_FAILED_KEY : 2, |
| 158 | aei._STATUS_PASSED_KEY : 3} |
| 159 | self.assertEqual(expect_total_summary, info_dict[aei._TOTAL_SUMMARY_KEY]) |
| 160 | |
| 161 | def _create_test_result(self, **kwargs): |
| 162 | """A Helper to create TestResult""" |
| 163 | test_info = test_runner_base.TestResult(**RESULT_TEST_TEMPLATE._asdict()) |
| 164 | return test_info._replace(**kwargs) |
| 165 | |
| 166 | if __name__ == "__main__": |
| 167 | unittest.main() |