1 #!/usr/bin/env python 2 # 3 # Copyright (C) 2017 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 18 import logging 19 import os 20 21 from vts.runners.host import keys 22 from vts.runners.host import test_runner 23 from vts.utils.python.controllers import adb 24 from vts.utils.python.controllers import android_device 25 from vts.utils.python.common import vts_spec_utils 26 27 from vts.testcases.fuzz.template.libfuzzer_test import libfuzzer_test_config as config 28 from vts.testcases.fuzz.template.libfuzzer_test import libfuzzer_test_case 29 from vts.testcases.fuzz.template.func_fuzzer_test import func_fuzzer_test 30 31 32 class IfaceFuzzerTest(func_fuzzer_test.FuncFuzzerTest): 33 """Runs iface_fuzzer tests on target. 34 35 Attributes: 36 See func_fuzzer_test. 37 """ 38 _VTS_SPEC_DIR_TARGET = os.path.join(config.FUZZER_TEST_DIR, 'spec') 39 40 def _PushVtsResources(self, hal_name, hal_version): 41 """Pushes resources needed for test to target device. 42 43 Args: 44 hal_name: string, name of the hal, e.g. 'vibrator'. 45 hal_version: string, version of the hal, e.g '7.4' 46 """ 47 # Push .vts spec files. 48 hal_name_dir = hal_name.replace('.', '/') 49 src_dir = os.path.join(self.data_file_path, 'spec', 'hardware', 50 'interfaces', hal_name_dir, hal_version, 'vts') 51 52 # Push corresponding VTS drivers. 53 driver_name = 'android.hardware.%s@%s-vts.driver.so' % (hal_name, 54 hal_version) 55 driver32 = os.path.join(self.data_file_path, 'DATA', 'lib', driver_name) 56 driver64 = os.path.join(self.data_file_path, 'DATA', 'lib64', 57 driver_name) 58 try: 59 self._dut.adb.push(src_dir, self._VTS_SPEC_DIR_TARGET) 60 self._dut.adb.push(driver32, 'data/local/tmp/32') 61 self._dut.adb.push(driver64, 'data/local/tmp/64') 62 except adb.AdbError as e: 63 logging.exception(e) 64 65 # Override 66 def CreateTestCases(self): 67 """See base class.""" 68 hal_package = self.hal_hidl_package_name 69 hal_name, hal_version = vts_spec_utils.HalPackageToNameAndVersion( 70 hal_package) 71 self._PushVtsResources(hal_name, hal_version) 72 vts_spec_names = self._vts_spec_parser.VtsSpecNames(hal_name, 73 hal_version) 74 registered_interfaces = self._RegisteredInterfaces( 75 self.hal_hidl_package_name) 76 77 test_cases = [] 78 for iface in registered_interfaces: 79 additional_params = { 80 'vts_spec_dir': self._VTS_SPEC_DIR_TARGET, 81 'vts_exec_size': 128, 82 'vts_target_iface': iface, 83 } 84 libfuzzer_params = { 85 'max_len': 65536, 86 'max_total_time': 1, 87 } 88 bin_host_path = os.path.join(self.data_file_path, 'DATA', 'bin', 89 'vts_proto_fuzzer') 90 test_case = libfuzzer_test_case.LibFuzzerTestCase( 91 bin_host_path, libfuzzer_params, additional_params) 92 test_case.test_name = iface 93 test_cases.append(test_case) 94 95 return test_cases 96 97 98 if __name__ == '__main__': 99 test_runner.main() 100