From da991f3bbebff7e0bbba94c4377b403c45afce87 Mon Sep 17 00:00:00 2001 From: Hsin-Yi Chen Date: Wed, 5 Jun 2019 14:38:53 +0800 Subject: Show the library names in the assertion messages of vts-vndk This commit makes the 4 modules in vts-vndk show the library names in the assertion messages so that developers don't have to search the host log. Test: vts-tradefed run vts-vndk Bug: 141088935 Change-Id: I4dcef63014e86821180c46c2505c355cc9d98edd --- abi/VtsVndkAbiTest.py | 18 +++++++++++------- dependency/VtsVndkDependencyTest.py | 18 +++++++++++++----- files/VtsVndkFilesTest.py | 22 ++++++++++++++++++---- open_libraries/VtsVndkOpenLibrariesTest.py | 9 +++++++-- 4 files changed, 49 insertions(+), 18 deletions(-) diff --git a/abi/VtsVndkAbiTest.py b/abi/VtsVndkAbiTest.py index 89d12e2..1fcbd64 100644 --- a/abi/VtsVndkAbiTest.py +++ b/abi/VtsVndkAbiTest.py @@ -240,9 +240,9 @@ class VtsVndkAbiTest(base_test.BaseTestClass): with the dump directories of the given version. Returns: - An integer, number of incompatible libraries. + A list of strings, the incompatible libraries. """ - error_count = 0 + error_list = [] dump_paths = dict() lib_paths = dict() for parent_dir, dump_name in utils.iterate_files(dump_dir): @@ -292,10 +292,10 @@ class VtsVndkAbiTest(base_test.BaseTestClass): rel_path, "\n".join(" ".join(e) for e in vtable_diff)) if (has_exception or missing_symbols or vtable_diff): - error_count += 1 + error_list.append(rel_path) else: logging.info("%s: Pass", rel_path) - return error_count + return error_list @staticmethod def _GetLinkerSearchIndex(target_path): @@ -343,9 +343,13 @@ class VtsVndkAbiTest(base_test.BaseTestClass): for target_dir, host_dir in zip(target_dirs, host_dirs): self._PullOrCreateDir(target_dir, host_dir) - error_count = self._ScanLibDirs(dump_dir, host_dirs, dump_version) - asserts.assertEqual(error_count, 0, - "Total number of errors: " + str(error_count)) + assert_lines = self._ScanLibDirs(dump_dir, host_dirs, dump_version) + if assert_lines: + error_count = len(assert_lines) + if error_count > 20: + assert_lines = assert_lines[:20] + ["..."] + assert_lines.append("Total number of errors: " + str(error_count)) + asserts.fail("\n".join(assert_lines)) if __name__ == "__main__": diff --git a/dependency/VtsVndkDependencyTest.py b/dependency/VtsVndkDependencyTest.py index 4878978..728c29a 100644 --- a/dependency/VtsVndkDependencyTest.py +++ b/dependency/VtsVndkDependencyTest.py @@ -406,18 +406,26 @@ class VtsVndkDependencyTest(base_test.BaseTestClass): if self._dut.is64Bit: dep_errors.extend(self._TestElfDependency(64, objs)) + assert_lines = [] if read_errors: - error_lines = ("%s: %s" % (x[0], x[1]) for x in read_errors) + error_lines = ["%s: %s" % (x[0], x[1]) for x in read_errors] logging.error("%d read errors:\n%s", len(read_errors), "\n".join(error_lines)) + assert_lines.extend(error_lines[:20]) + if dep_errors: - error_lines = ("%s: %s" % (x[0], ", ".join(x[1])) - for x in dep_errors) + error_lines = ["%s: %s" % (x[0], ", ".join(x[1])) + for x in dep_errors] logging.error("%d disallowed dependencies:\n%s", len(dep_errors), "\n".join(error_lines)) + assert_lines.extend(error_lines[:20]) + error_count = len(read_errors) + len(dep_errors) - asserts.assertEqual(error_count, 0, - "Total number of errors: " + str(error_count)) + if error_count: + if error_count > len(assert_lines): + assert_lines.append("...") + assert_lines.append("Total number of errors: " + str(error_count)) + asserts.fail("\n".join(assert_lines)) if __name__ == "__main__": diff --git a/files/VtsVndkFilesTest.py b/files/VtsVndkFilesTest.py index d88cd8a..41e6386 100644 --- a/files/VtsVndkFilesTest.py +++ b/files/VtsVndkFilesTest.py @@ -68,6 +68,22 @@ class VtsVndkFilesTest(base_test.BaseTestClass): return target_file_utils.FindFiles(self._shell, dir_path, "*", "! -type d") + @staticmethod + def _Fail(unexpected_paths): + """Logs error and fails current test. + + Args: + unexpected_paths: A list of strings, the paths to be shown in the + log message. + """ + logging.error("Unexpected files:\n%s", "\n".join(unexpected_paths)) + assert_lines = unexpected_paths[:20] + if len(unexpected_paths) > 20: + assert_lines.append("...") + assert_lines.append( + "Total number of errors: %d" % len(unexpected_paths)) + asserts.fail("\n".join(assert_lines)) + def _TestVndkDirectory(self, vndk_dir, vndk_list_names): """Verifies that the VNDK directory doesn't contain extra files. @@ -84,8 +100,7 @@ class VtsVndkFilesTest(base_test.BaseTestClass): unexpected = [x for x in self._ListFiles(vndk_dir) if path_utils.TargetBaseName(x) not in vndk_set] if unexpected: - logging.error("Unexpected files:\n%s", "\n".join(unexpected)) - asserts.fail("Total number of errors: %d" % len(unexpected)) + self._Fail(unexpected) def _TestNotInVndkDirecotory(self, vndk_dir, vndk_list_names, except_libs): """Verifies that VNDK directory doesn't contain specific files. @@ -106,8 +121,7 @@ class VtsVndkFilesTest(base_test.BaseTestClass): unexpected = [x for x in self._ListFiles(vndk_dir) if path_utils.TargetBaseName(x) in vndk_set] if unexpected: - logging.error("Unexpected files:\n%s", "\n".join(unexpected)) - asserts.fail("Total number of errors: %d" % len(unexpected)) + self._Fail(unexpected) def testVndkCoreDirectory(self): """Verifies that VNDK-core directory doesn't contain extra files.""" diff --git a/open_libraries/VtsVndkOpenLibrariesTest.py b/open_libraries/VtsVndkOpenLibrariesTest.py index 8dbfda6..5a7bc33 100644 --- a/open_libraries/VtsVndkOpenLibrariesTest.py +++ b/open_libraries/VtsVndkOpenLibrariesTest.py @@ -129,8 +129,13 @@ class VtsVndkOpenLibrariesTest(base_test.BaseTestClass): error_lines = ["%s %s %s" % (pid, cmds[pid], libs) for pid, libs in deps.iteritems()] logging.error("pid command libraries\n%s", "\n".join(error_lines)) - asserts.fail("Number of vendor processes using system libraries: " + - str(len(deps))) + + assert_lines = ["pid command libraries"] + error_lines[:20] + if len(deps) > 20: + assert_lines.append("...") + assert_lines.append("Number of vendor processes using system " + "libraries: " + str(len(deps))) + asserts.fail("\n".join(assert_lines)) if __name__ == "__main__": -- cgit v1.2.3