| # Copyright 2014 The ChromiumOS Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Unit tests for dep_tracker.py.""" |
| |
| import os |
| |
| from chromite.lib import cros_test_lib |
| from chromite.lib import osutils |
| from chromite.lib import unittest_lib |
| from chromite.scripts import dep_tracker |
| |
| |
| pytestmark = cros_test_lib.pytestmark_inside_only |
| |
| |
| # Allow access private members for testing: |
| # pylint: disable=protected-access |
| |
| |
| class MainTest(cros_test_lib.OutputTestCase): |
| """Tests for the main() function.""" |
| |
| def testHelp(self) -> None: |
| """Test that --help is functioning.""" |
| argv = ["--help"] |
| |
| with self.OutputCapturer() as output: |
| # Running with --help should exit with code==0. |
| self.AssertFuncSystemExitZero(dep_tracker.main, argv) |
| |
| # Verify that a message beginning with "usage: " was printed. |
| stdout = output.GetStdout() |
| self.assertTrue(stdout.startswith("usage: ")) |
| |
| |
| class DepTrackerTest(cros_test_lib.TempDirTestCase): |
| """Tests for the DepTracker() class.""" |
| |
| def testSimpleDep(self) -> None: |
| unittest_lib.BuildELF( |
| os.path.join(self.tempdir, "libabc.so"), |
| ["func_a", "func_b", "func_c"], |
| ) |
| unittest_lib.BuildELF( |
| os.path.join(self.tempdir, "abc_main"), |
| undefined_symbols=["func_b"], |
| used_libs=["abc"], |
| executable=True, |
| ) |
| dt = dep_tracker.DepTracker(self.tempdir) |
| dt.Init() |
| dt.ComputeELFFileDeps() |
| |
| self.assertEqual(sorted(dt._files.keys()), ["abc_main", "libabc.so"]) |
| |
| def testFiletypeSet(self) -> None: |
| """Tests that the 'ftype' member is set for ELF files first.""" |
| unittest_lib.BuildELF( |
| os.path.join(self.tempdir, "libabc.so"), |
| ["func_a", "func_b", "func_c"], |
| ) |
| osutils.WriteFile( |
| os.path.join(self.tempdir, "pyscript"), |
| "#!/usr/bin/python\nimport sys\nsys.exit(42)\n", |
| ) |
| dt = dep_tracker.DepTracker(self.tempdir) |
| dt.Init() |
| |
| # ComputeELFFileDeps() should compute the file type of ELF files so we |
| # don't need to parse them again. |
| dt.ComputeELFFileDeps() |
| self.assertTrue("ftype" in dt._files["libabc.so"]) |
| self.assertFalse("ftype" in dt._files["pyscript"]) |
| |
| # ComputeFileTypes() shold compute the file type of every file. |
| dt.ComputeFileTypes() |
| self.assertTrue("ftype" in dt._files["libabc.so"]) |
| self.assertTrue("ftype" in dt._files["pyscript"]) |