| #!/usr/bin/env python |
| # Copyright 2024 The Pigweed Authors |
| # |
| # 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 |
| # |
| # https://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 pw_zephyr's manifest subcommand""" |
| import pathlib |
| |
| import unittest |
| import os |
| import shutil |
| import subprocess |
| import tempfile |
| from pw_env_setup_zephyr import zephyr |
| |
| |
| class ZephyrManifestTest(unittest.TestCase): |
| """Tests the manifest subcommand for Zephyr""" |
| |
| def setUp(self) -> None: |
| super().setUp() |
| self._pw_dir = tempfile.mkdtemp() |
| self._pw_path = pathlib.Path(self._pw_dir) |
| self._zephyr_path = ( |
| self._pw_path / 'environment' / 'packages' / 'zephyr' |
| ) |
| self.init_git_dir(self._pw_path, 'pigweed') |
| |
| os.environ['PW_ROOT'] = str(self._pw_dir) |
| |
| def tearDown(self) -> None: |
| super().tearDown() |
| shutil.rmtree(self._pw_dir) |
| |
| def _init_zephyr(self) -> None: |
| self._zephyr_path.mkdir(parents=True) |
| self.init_git_dir(self._zephyr_path, 'zephyr') |
| |
| @staticmethod |
| def git_get_revision(path: pathlib.Path) -> str: |
| result = subprocess.run( |
| ['git', 'log', '--pretty=format:"%H"', '-n', '1'], |
| stdout=subprocess.PIPE, |
| cwd=path, |
| ) |
| assert result.returncode == 0 |
| return result.stdout.decode('utf-8').strip().strip('"') |
| |
| @staticmethod |
| def init_git_dir(path: pathlib.Path, name: str) -> None: |
| subprocess.check_call(['git', 'init'], cwd=path) |
| subprocess.check_call( |
| ['git', 'remote', 'add', 'origin', f'http://fake.path/{name}'], |
| cwd=path, |
| ) |
| subprocess.check_call( |
| ['git', 'commit', '--allow-empty', '-m', '"Test commit"'], cwd=path |
| ) |
| |
| def test_pigweed_only_manifest(self) -> None: |
| yaml = zephyr.generate_manifest() |
| assert yaml.get('manifest') is not None |
| assert yaml['manifest'].get('remotes') is not None |
| remotes: list = yaml['manifest']['remotes'] |
| assert len(remotes) == 1 |
| assert remotes[0].get('name') == 'pigweed' |
| assert remotes[0].get('url-base') == 'http://fake.path/pigweed' |
| assert yaml['manifest'].get('projects') is not None |
| projects: list = yaml['manifest']['projects'] |
| assert len(projects) == 1 |
| assert projects[0].get('name') == 'pigweed' |
| assert projects[0].get('remote') == 'pigweed' |
| assert projects[0].get('revision') == self.git_get_revision( |
| self._pw_path |
| ) |
| assert projects[0].get('path') == str( |
| self._pw_path.relative_to( |
| os.path.commonpath([self._pw_path, os.getcwd()]) |
| ) |
| ) |
| assert projects[0].get('import') is False |
| |
| def test_pigweed_and_zephyr_manifest(self) -> None: |
| yaml = zephyr.generate_manifest() |
| assert yaml.get('manifest') is not None |
| assert yaml['manifest'].get('remotes') is not None |
| remotes: list = yaml['manifest']['remotes'] |
| assert len(remotes) == 2 |
| zephyr_remote = [it for it in remotes if it.get('name') == 'zephyr'][0] |
| assert zephyr_remote.get('url-base') == 'http://fake.path/zephyr' |
| assert yaml['manifest'].get('projects') is not None |
| projects: list = yaml['manifest']['projects'] |
| zephyr_project = [it for it in projects if it.get('name') == 'zephyr'][ |
| 0 |
| ] |
| assert zephyr_project.get('remote') == 'zephyr' |
| assert zephyr_project.get('revision') == self.git_get_revision( |
| self._zephyr_path |
| ) |
| assert zephyr_project.get('path') == str( |
| self._zephyr_path.relative_to( |
| os.path.commonpath([self._zephyr_path, os.getcwd()]) |
| ) |
| ) |
| assert zephyr_project.get('import') is True |