xref: /aosp_15_r20/tools/asuite/atest/test_finders/suite_plan_finder_unittest.py (revision c2e18aaa1096c836b086f94603d04f4eb9cf37f5)
1#!/usr/bin/env python3
2#
3# Copyright 2018, 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"""Unittests for suite_plan_finder."""
18
19import os
20import unittest
21from unittest import mock
22
23from atest import unittest_constants as uc
24from atest import unittest_utils
25from atest.test_finders import suite_plan_finder
26from atest.test_finders import test_finder_utils
27from atest.test_finders import test_info
28from atest.test_runners import suite_plan_test_runner
29
30
31# pylint: disable=protected-access
32class SuitePlanFinderUnittests(unittest.TestCase):
33  """Unit tests for suite_plan_finder.py"""
34
35  def setUp(self):
36    """Set up stuff for testing."""
37    self.suite_plan_finder = suite_plan_finder.SuitePlanFinder()
38    self.suite_plan_finder.suite_plan_dirs = [
39        os.path.join(uc.ROOT, uc.CTS_INT_DIR)
40    ]
41    self.suite_plan_finder.root_dir = uc.ROOT
42
43  def test_get_test_info_from_path(self):
44    """Test _get_test_info_from_path.
45
46    Strategy:
47
48        If suite_path is to cts file -->
49            test_info: test_name=cts,
50                       test_runner=TestSuiteTestRunner,
51                       build_target=set(['cts']
52                       suite='cts')
53        If suite_path is to cts-common file -->
54            test_info: test_name=cts-common,
55                       test_runner=TestSuiteTestRunner,
56                       build_target=set(['cts']
57                       suite='cts')
58        If suite_path is to common file --> test_info: None
59        If suite_path is to non-existing file --> test_info: None
60    """
61    suite_plan = 'cts'
62    path = os.path.join(uc.ROOT, uc.CTS_INT_DIR, suite_plan + '.xml')
63    want_info = test_info.TestInfo(
64        test_name=suite_plan,
65        test_runner=suite_plan_test_runner.SuitePlanTestRunner.NAME,
66        build_targets={suite_plan},
67        suite=suite_plan,
68    )
69    unittest_utils.assert_equal_testinfos(
70        self, want_info, self.suite_plan_finder._get_test_info_from_path(path)
71    )
72
73    suite_plan = 'cts-common'
74    path = os.path.join(uc.ROOT, uc.CTS_INT_DIR, suite_plan + '.xml')
75    want_info = test_info.TestInfo(
76        test_name=suite_plan,
77        test_runner=suite_plan_test_runner.SuitePlanTestRunner.NAME,
78        build_targets={'cts'},
79        suite='cts',
80    )
81    unittest_utils.assert_equal_testinfos(
82        self, want_info, self.suite_plan_finder._get_test_info_from_path(path)
83    )
84
85    suite_plan = 'common'
86    path = os.path.join(uc.ROOT, uc.CTS_INT_DIR, 'cts-common.xml')
87    want_info = None
88    unittest_utils.assert_equal_testinfos(
89        self,
90        want_info,
91        self.suite_plan_finder._get_test_info_from_path(path, suite_plan),
92    )
93
94    path = os.path.join(uc.ROOT, 'cts-common.xml')
95    want_info = None
96    unittest_utils.assert_equal_testinfos(
97        self, want_info, self.suite_plan_finder._get_test_info_from_path(path)
98    )
99
100  @mock.patch.object(test_finder_utils, 'search_integration_dirs')
101  def test_find_test_by_suite_name(self, _search):
102    """Test find_test_by_suite_name.
103
104    Strategy:
105
106        suite_name: cts --> test_info: test_name=cts,
107                                       test_runner=TestSuiteTestRunner,
108                                       build_target=set(['cts']
109                                       suite='cts')
110        suite_name: CTS --> test_info: None
111        suite_name: cts-common --> test_info: test_name=cts-common,
112                                              test_runner=TestSuiteTestRunner,
113                                              build_target=set(['cts'],
114                                              suite='cts')
115    """
116    suite_name = 'cts'
117    t_info = self.suite_plan_finder.find_test_by_suite_name(suite_name)
118    want_info = test_info.TestInfo(
119        test_name=suite_name,
120        test_runner=suite_plan_test_runner.SuitePlanTestRunner.NAME,
121        build_targets={suite_name},
122        suite=suite_name,
123    )
124    unittest_utils.assert_equal_testinfos(self, t_info[0], want_info)
125
126    suite_name = 'CTS'
127    _search.return_value = None
128    t_info = self.suite_plan_finder.find_test_by_suite_name(suite_name)
129    want_info = None
130    unittest_utils.assert_equal_testinfos(self, t_info, want_info)
131
132    suite_name = 'cts-common'
133    suite = 'cts'
134    _search.return_value = [
135        os.path.join(uc.ROOT, uc.CTS_INT_DIR, suite_name + '.xml')
136    ]
137    t_info = self.suite_plan_finder.find_test_by_suite_name(suite_name)
138    want_info = test_info.TestInfo(
139        test_name=suite_name,
140        test_runner=suite_plan_test_runner.SuitePlanTestRunner.NAME,
141        build_targets=set([suite]),
142        suite=suite,
143    )
144    unittest_utils.assert_equal_testinfos(self, t_info[0], want_info)
145
146  @mock.patch(
147      'os.path.realpath', side_effect=unittest_utils.realpath_side_effect
148  )
149  @mock.patch('os.path.isdir', return_value=True)
150  @mock.patch('os.path.isfile', return_value=True)
151  @mock.patch.object(test_finder_utils, 'get_int_dir_from_path')
152  @mock.patch('os.path.exists', return_value=True)
153  def test_find_suite_plan_test_by_suite_path(
154      self, _exists, _find, _isfile, _isdir, _real
155  ):
156    """Test find_test_by_suite_name.
157
158    Strategy:
159
160        suite_name: cts.xml --> test_info:
161                                    test_name=cts,
162                                    test_runner=TestSuiteTestRunner,
163                                    build_target=set(['cts']
164                                    suite='cts')
165        suite_name: cts-common.xml --> test_info:
166                                           test_name=cts-common,
167                                           test_runner=TestSuiteTestRunner,
168                                           build_target=set(['cts'],
169                                           suite='cts')
170        suite_name: cts-camera.xml --> test_info:
171                                           test_name=cts-camera,
172                                           test_runner=TestSuiteTestRunner,
173                                           build_target=set(['cts'],
174                                           suite='cts')
175    """
176    suite_int_name = 'cts'
177    suite = 'cts'
178    path = os.path.join(uc.CTS_INT_DIR, suite_int_name + '.xml')
179    _find.return_value = uc.CTS_INT_DIR
180    t_info = self.suite_plan_finder.find_test_by_suite_path(path)
181    want_info = test_info.TestInfo(
182        test_name=suite_int_name,
183        test_runner=suite_plan_test_runner.SuitePlanTestRunner.NAME,
184        build_targets=set([suite]),
185        suite=suite,
186    )
187    unittest_utils.assert_equal_testinfos(self, t_info[0], want_info)
188
189    suite_int_name = 'cts-common'
190    suite = 'cts'
191    path = os.path.join(uc.CTS_INT_DIR, suite_int_name + '.xml')
192    _find.return_value = uc.CTS_INT_DIR
193    t_info = self.suite_plan_finder.find_test_by_suite_path(path)
194    want_info = test_info.TestInfo(
195        test_name=suite_int_name,
196        test_runner=suite_plan_test_runner.SuitePlanTestRunner.NAME,
197        build_targets=set([suite]),
198        suite=suite,
199    )
200    unittest_utils.assert_equal_testinfos(self, t_info[0], want_info)
201
202    suite_int_name = 'cts-camera'
203    suite = 'cts'
204    path = os.path.join(uc.CTS_INT_DIR, suite_int_name + '.xml')
205    _find.return_value = uc.CTS_INT_DIR
206    t_info = self.suite_plan_finder.find_test_by_suite_path(path)
207    want_info = test_info.TestInfo(
208        test_name=suite_int_name,
209        test_runner=suite_plan_test_runner.SuitePlanTestRunner.NAME,
210        build_targets=set([suite]),
211        suite=suite,
212    )
213    unittest_utils.assert_equal_testinfos(self, t_info[0], want_info)
214
215
216if __name__ == '__main__':
217  unittest.main()
218