From d4321674f875bea6acd7e6a379df335ad594a3bd Mon Sep 17 00:00:00 2001 From: Hsin-Yi Chen Date: Thu, 20 Sep 2018 14:27:54 +0800 Subject: Do not test ELF files that require special program interpreter Bug: 115567177 Test: vts-tradefed run vts -m VtsVndkDependency Change-Id: I788aa564d132c3c62692a91ef5be7587a5ed4fae Merged-In: I788aa564d132c3c62692a91ef5be7587a5ed4fae (cherry picked from commit 1d61b4b68250c5e97aa495083818a8092f6a9915) --- dependency/VtsVndkDependencyTest.py | 43 +++++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/dependency/VtsVndkDependencyTest.py b/dependency/VtsVndkDependencyTest.py index 76c6244..094d84a 100644 --- a/dependency/VtsVndkDependencyTest.py +++ b/dependency/VtsVndkDependencyTest.py @@ -65,6 +65,9 @@ class VtsVndkDependencyTest(base_test.BaseTestClass): "/odm/{LIB}/hw", "/odm/{LIB}/egl", "/odm/{LIB}", "/vendor/{LIB}/hw", "/vendor/{LIB}/egl", "/vendor/{LIB}" ] + _DEFAULT_PROGRAM_INTERPRETERS = [ + "/system/bin/linker", "/system/bin/linker64" + ] class ElfObject(object): """Contains dependencies of an ELF file on target device. @@ -124,6 +127,40 @@ class VtsVndkDependencyTest(base_test.BaseTestClass): logging.info("Delete %s", self._temp_dir) shutil.rmtree(self._temp_dir) + def _IsElfObjectForAp(self, elf, target_path, abi_list): + """Checks whether an ELF object is for application processor. + + Args: + elf: The object of elf_parser.ElfParser. + target_path: The path to the ELF file on target. + abi_list: A list of strings, the ABIs of the application processor. + + Returns: + A boolean, whether the ELF object is for application processor. + """ + if not any(elf.MatchCpuAbi(x) for x in abi_list): + logging.debug("%s does not match the ABI", target_path) + return False + + # b/115567177 Skip an ELF file if it meets the following 3 conditions: + # The ELF type is executable. + if not elf.IsExecutable(): + return True + + # It requires special program interpreter. + interp = elf.GetProgramInterpreter() + if not interp or interp in self._DEFAULT_PROGRAM_INTERPRETERS: + return True + + # It does not have execute permission in the file system. + permissions = target_file_utils.GetPermission(target_path, + self._dut.shell) + if target_file_utils.IsExecutable(permissions): + return True + + logging.debug("%s is not for application processor", target_path) + return False + def _LoadElfObjects(self, host_dir, target_dir, abi_list, elf_error_handler): """Scans a host directory recursively and loads all ELF files in it. @@ -150,11 +187,9 @@ class VtsVndkDependencyTest(base_test.BaseTestClass): except elf_parser.ElfError: logging.debug("%s is not an ELF file", target_path) continue - if not any(elf.MatchCpuAbi(x) for x in abi_list): - logging.debug("%s does not match the ABI", target_path) - elf.Close() - continue try: + if not self._IsElfObjectForAp(elf, target_path, abi_list): + continue deps = elf.ListDependencies() except elf_parser.ElfError as e: elf_error_handler(target_path, e) -- cgit v1.2.3 From 2d45004a269dca941e24efe86c7d752cb5d699c0 Mon Sep 17 00:00:00 2001 From: weijuncheng Date: Thu, 27 Dec 2018 10:23:09 +0800 Subject: Enlarge timeout value for vts one test case Test: run vts -m VtsVndkDependency -t VtsVndkDependency#testElfDependency Root cause: The case will pull /odm /vendor image in the test device, however, it will Interrupt main thread because the device didnot finish the pull command in 3min Solution: Enlarge timeout value for VtsVndkDependency test Bug:122028543 Change-Id: I6300c7eb8a3330930522847c05287cc7bae7a9d9 Signed-off-by: weijuncheng --- dependency/AndroidTest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/dependency/AndroidTest.xml b/dependency/AndroidTest.xml index 4f2176b..70c3138 100644 --- a/dependency/AndroidTest.xml +++ b/dependency/AndroidTest.xml @@ -21,6 +21,7 @@ -- cgit v1.2.3