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