Mike Frysinger | f1ba7ad | 2022-09-12 05:42:57 -0400 | [diff] [blame^] | 1 | # Copyright 2014 The ChromiumOS Authors |
Alex Deymo | 3cfb9cd | 2014-08-18 15:56:35 -0700 | [diff] [blame] | 2 | # Use of this source code is governed by a BSD-style license that can be |
| 3 | # found in the LICENSE file. |
| 4 | |
| 5 | """Unit tests for dep_tracker.py.""" |
| 6 | |
| 7 | import os |
| 8 | |
Alex Deymo | 3cfb9cd | 2014-08-18 15:56:35 -0700 | [diff] [blame] | 9 | from chromite.lib import cros_test_lib |
Alex Deymo | 365b10c | 2014-08-25 13:14:28 -0700 | [diff] [blame] | 10 | from chromite.lib import osutils |
Alex Deymo | 3cfb9cd | 2014-08-18 15:56:35 -0700 | [diff] [blame] | 11 | from chromite.lib import unittest_lib |
| 12 | from chromite.scripts import dep_tracker |
| 13 | |
Mike Frysinger | 807d828 | 2022-04-28 22:45:17 -0400 | [diff] [blame] | 14 | |
Greg Edelston | a4c9b3b | 2020-01-07 17:51:13 -0700 | [diff] [blame] | 15 | pytestmark = cros_test_lib.pytestmark_inside_only |
| 16 | |
Mike Frysinger | 03b983f | 2020-02-21 02:31:49 -0500 | [diff] [blame] | 17 | |
Alex Deymo | 3cfb9cd | 2014-08-18 15:56:35 -0700 | [diff] [blame] | 18 | # Allow access private members for testing: |
Mike Frysinger | 27e21b7 | 2018-07-12 14:20:21 -0400 | [diff] [blame] | 19 | # pylint: disable=protected-access |
Alex Deymo | 3cfb9cd | 2014-08-18 15:56:35 -0700 | [diff] [blame] | 20 | |
| 21 | |
Mike Frysinger | 68b6504 | 2014-12-07 01:21:22 -0500 | [diff] [blame] | 22 | class MainTest(cros_test_lib.OutputTestCase): |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 23 | """Tests for the main() function.""" |
Alex Deymo | 3cfb9cd | 2014-08-18 15:56:35 -0700 | [diff] [blame] | 24 | |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 25 | def testHelp(self): |
| 26 | """Test that --help is functioning.""" |
| 27 | argv = ["--help"] |
Alex Deymo | 3cfb9cd | 2014-08-18 15:56:35 -0700 | [diff] [blame] | 28 | |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 29 | with self.OutputCapturer() as output: |
| 30 | # Running with --help should exit with code==0. |
| 31 | self.AssertFuncSystemExitZero(dep_tracker.main, argv) |
Alex Deymo | 3cfb9cd | 2014-08-18 15:56:35 -0700 | [diff] [blame] | 32 | |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 33 | # Verify that a message beginning with "usage: " was printed. |
| 34 | stdout = output.GetStdout() |
| 35 | self.assertTrue(stdout.startswith("usage: ")) |
Alex Deymo | 3cfb9cd | 2014-08-18 15:56:35 -0700 | [diff] [blame] | 36 | |
| 37 | |
| 38 | class DepTrackerTest(cros_test_lib.TempDirTestCase): |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 39 | """Tests for the DepTracker() class.""" |
Alex Deymo | 3cfb9cd | 2014-08-18 15:56:35 -0700 | [diff] [blame] | 40 | |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 41 | def testSimpleDep(self): |
| 42 | unittest_lib.BuildELF( |
| 43 | os.path.join(self.tempdir, "libabc.so"), |
| 44 | ["func_a", "func_b", "func_c"], |
| 45 | ) |
| 46 | unittest_lib.BuildELF( |
| 47 | os.path.join(self.tempdir, "abc_main"), |
| 48 | undefined_symbols=["func_b"], |
| 49 | used_libs=["abc"], |
| 50 | executable=True, |
| 51 | ) |
| 52 | dt = dep_tracker.DepTracker(self.tempdir) |
| 53 | dt.Init() |
| 54 | dt.ComputeELFFileDeps() |
Alex Deymo | 3cfb9cd | 2014-08-18 15:56:35 -0700 | [diff] [blame] | 55 | |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 56 | self.assertEqual(sorted(dt._files.keys()), ["abc_main", "libabc.so"]) |
Alex Deymo | 3cfb9cd | 2014-08-18 15:56:35 -0700 | [diff] [blame] | 57 | |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 58 | def testFiletypeSet(self): |
| 59 | """Tests that the 'ftype' member is set for ELF files first.""" |
| 60 | unittest_lib.BuildELF( |
| 61 | os.path.join(self.tempdir, "libabc.so"), |
| 62 | ["func_a", "func_b", "func_c"], |
| 63 | ) |
| 64 | osutils.WriteFile( |
| 65 | os.path.join(self.tempdir, "pyscript"), |
| 66 | "#!/usr/bin/python\nimport sys\nsys.exit(42)\n", |
| 67 | ) |
| 68 | dt = dep_tracker.DepTracker(self.tempdir) |
| 69 | dt.Init() |
Alex Deymo | 365b10c | 2014-08-25 13:14:28 -0700 | [diff] [blame] | 70 | |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 71 | # ComputeELFFileDeps() should compute the file type of ELF files so we |
| 72 | # don't need to parse them again. |
| 73 | dt.ComputeELFFileDeps() |
| 74 | self.assertTrue("ftype" in dt._files["libabc.so"]) |
| 75 | self.assertFalse("ftype" in dt._files["pyscript"]) |
Alex Deymo | 365b10c | 2014-08-25 13:14:28 -0700 | [diff] [blame] | 76 | |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 77 | # ComputeFileTypes() shold compute the file type of every file. |
| 78 | dt.ComputeFileTypes() |
| 79 | self.assertTrue("ftype" in dt._files["libabc.so"]) |
| 80 | self.assertTrue("ftype" in dt._files["pyscript"]) |