blob: e6da633fb1a529b5103a345a4f2ad2e13d4b598b [file] [log] [blame]
#!/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