| #!/usr/bin/env python3 |
| |
| # Copyright (C) 2022 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| """Tests for build_cleaner.""" |
| |
| # This test requires buildozer installed in $HOME, which is not accessible |
| # via `bazel test`. Hence, execute this test with |
| # build/kernel/kleaf/build_cleaner_test.py |
| # TODO(b/257176147): Move this to bazel py_test, then use: |
| # absl.testing.parameterized |
| # absltest.main |
| # TODO(b/257176147): Add this test to kernel_aarch64_additional_tests |
| |
| import os |
| import tempfile |
| import unittest |
| |
| import build_cleaner |
| |
| _TEST_DATA = "build/kernel/kleaf/tests/build_cleaner_test_data" |
| |
| |
| class BuildCleanerTest(unittest.TestCase): |
| def setUp(self) -> None: |
| self.environ = os.environ.copy() |
| |
| self.stdout = tempfile.TemporaryFile('w+') |
| self.addCleanup(self.stdout.close) |
| |
| self.stderr = tempfile.TemporaryFile('w+') |
| self.addCleanup(self.stderr.close) |
| |
| def _run_cleaner(self, argv): |
| argv = ["--stdout"] + argv |
| args = build_cleaner.parse_args(argv) |
| cleaner = build_cleaner.BuildCleaner( |
| args=args, |
| stdout=self.stdout, |
| stderr=self.stderr, |
| environ=self.environ |
| ) |
| cleaner.run() |
| |
| def _read_stdout(self): |
| self.stdout.seek(0) |
| return self.stdout.read() |
| |
| |
| class DdkModuleDepTest(BuildCleanerTest): |
| def test_ddk_module_dep_good(self): |
| self._run_cleaner([ |
| f"//{_TEST_DATA}/ddk_module_dep/good:modules_install" |
| ]) |
| self.assertIn('deps = [":parent"],', self._read_stdout()) |
| |
| def test_ddk_module_dep_unresolved(self): |
| with self.assertRaises(build_cleaner.BuildCleanerError) as cm: |
| self._run_cleaner([f"//{_TEST_DATA}/ddk_module_dep/unresolved:child"]) |
| |
| self.assertEquals( |
| f'//{_TEST_DATA}/ddk_module_dep/unresolved:child: "parent_func" ' |
| f'[../{_TEST_DATA}/ddk_module_dep/unresolved/child.ko] undefined!', |
| str(cm.exception)) |
| |
| |
| if __name__ == '__main__': |
| unittest.main(verbosity=2) |