mirror of
https://gitlab.com/kupfer/kupferbootstrap.git
synced 2025-06-26 02:18:21 -04:00
164 lines
4.6 KiB
Python
164 lines
4.6 KiB
Python
import click
|
|
import os
|
|
import pytest
|
|
|
|
from glob import glob
|
|
from subprocess import CompletedProcess
|
|
|
|
from kupferbootstrap.config.state import config, CONFIG_DEFAULTS
|
|
from kupferbootstrap.constants import SRCINFO_METADATA_FILE
|
|
from kupferbootstrap.exec.cmd import run_cmd
|
|
from kupferbootstrap.exec.file import get_temp_dir
|
|
from kupferbootstrap.logger import setup_logging
|
|
from kupferbootstrap.packages.cli import (
|
|
SRCINFO_CACHE_FILES,
|
|
cmd_build,
|
|
cmd_clean,
|
|
cmd_init,
|
|
cmd_update,
|
|
)
|
|
from kupferbootstrap.utils import git_get_branch
|
|
|
|
tempdir = None
|
|
config.try_load_file()
|
|
setup_logging(True)
|
|
|
|
PKG_TEST_PATH = "device/device-sdm845-oneplus-enchilada"
|
|
PKG_TEST_NAME = "device-sdm845-xiaomi-beryllium-ebbg"
|
|
|
|
INTEGRATION_TESTS_ENABLE_ENV_VAR = "INTEGRATION_TESTS_ENABLE"
|
|
|
|
|
|
integration_enabled = False
|
|
try:
|
|
integration_enabled = bool(
|
|
int(os.environ.get(INTEGRATION_TESTS_ENABLE_ENV_VAR, 0)) > 0
|
|
)
|
|
except Exception:
|
|
pass
|
|
|
|
|
|
pytestmark = [
|
|
pytest.mark.skipif(
|
|
condition=not integration_enabled,
|
|
reason=(
|
|
"Integration tests disabled by default, "
|
|
f"set env var {INTEGRATION_TESTS_ENABLE_ENV_VAR}=1 to enable."
|
|
),
|
|
),
|
|
pytest.mark.integration(),
|
|
pytest.mark.order("first"),
|
|
]
|
|
|
|
|
|
@pytest.fixture()
|
|
def ctx() -> click.Context:
|
|
global tempdir
|
|
if not tempdir:
|
|
tempdir = get_temp_dir()
|
|
if (
|
|
not os.environ.get(
|
|
"INTEGRATION_TESTS_USE_GLOBAL_CONFIG", "false"
|
|
).lower()
|
|
== "true"
|
|
):
|
|
config.file.paths.update(
|
|
CONFIG_DEFAULTS.paths | {"cache_dir": tempdir}
|
|
)
|
|
config_path = os.path.join(tempdir, "kupferbootstrap.toml")
|
|
config.runtime.config_file = config_path
|
|
if not os.path.exists(config_path):
|
|
config.write()
|
|
config.try_load_file(config_path)
|
|
print(f"cache_dir: {config.file.paths.cache_dir}")
|
|
return click.Context(click.Command("integration_tests"))
|
|
|
|
|
|
def test_main_import():
|
|
from kupferbootstrap.main import cli
|
|
|
|
assert cli
|
|
|
|
|
|
def test_config_load(ctx: click.Context):
|
|
path = config.runtime.config_file
|
|
assert path
|
|
assert path.startswith("/tmp/")
|
|
assert os.path.exists(path)
|
|
config.enforce_config_loaded()
|
|
|
|
|
|
def test_packages_update(ctx: click.Context):
|
|
pkgbuilds_path = config.get_path("pkgbuilds")
|
|
assert config.runtime.script_source_dir
|
|
kbs_branch = git_get_branch(
|
|
os.path.join(config.runtime.script_source_dir, "../..")
|
|
)
|
|
# Gitlab CI integration: the CI checks out a detached commit, branch comes back empty.
|
|
if not kbs_branch and os.environ.get("CI", "false") == "true":
|
|
kbs_branch = os.environ.get("CI_COMMIT_BRANCH", "")
|
|
branches: dict[str, bool] = {"main": False, "dev": False}
|
|
if kbs_branch:
|
|
branches[kbs_branch] = True
|
|
for branch, may_fail in branches.items():
|
|
config.file.pkgbuilds.git_branch = branch
|
|
try:
|
|
ctx.invoke(
|
|
cmd_init,
|
|
update=True,
|
|
non_interactive=True,
|
|
switch_branch=True,
|
|
discard_changes=True,
|
|
init_caches=False,
|
|
)
|
|
except Exception as ex:
|
|
print(f"may_fail: {may_fail}; Exception: {ex}")
|
|
if not may_fail:
|
|
raise ex
|
|
# check branch really doesn't exist
|
|
res = run_cmd(
|
|
f"git ls-remote {CONFIG_DEFAULTS.pkgbuilds.git_repo} 'refs/heads/*' | grep 'refs/heads/{branch}'"
|
|
)
|
|
assert isinstance(res, CompletedProcess)
|
|
assert res.returncode != 0
|
|
continue
|
|
assert git_get_branch(pkgbuilds_path) == branch
|
|
|
|
|
|
def test_packages_clean(ctx: click.Context):
|
|
if not glob(
|
|
os.path.join(
|
|
config.get_path("pkgbuilds"), "*", "*", SRCINFO_METADATA_FILE
|
|
)
|
|
):
|
|
ctx.invoke(cmd_update, non_interactive=True)
|
|
ctx.invoke(cmd_clean, what=["git"], force=True)
|
|
|
|
|
|
def test_packages_cache_init(ctx: click.Context):
|
|
ctx.invoke(
|
|
cmd_update,
|
|
non_interactive=True,
|
|
switch_branch=False,
|
|
discard_changes=False,
|
|
init_caches=True,
|
|
)
|
|
|
|
for f in SRCINFO_CACHE_FILES:
|
|
assert os.path.exists(
|
|
os.path.join(config.get_path("pkgbuilds"), PKG_TEST_PATH, f)
|
|
)
|
|
|
|
|
|
def build_pkgs(
|
|
_ctx: click.Context, query: list[str], arch: str = "aarch64", **kwargs
|
|
):
|
|
_ctx.invoke(cmd_build, paths=query, arch=arch, **kwargs)
|
|
|
|
|
|
def test_packages_build_by_path(ctx: click.Context):
|
|
build_pkgs(ctx, [PKG_TEST_PATH], force=True)
|
|
|
|
|
|
def test_split_package_build_by_name(ctx: click.Context):
|
|
build_pkgs(ctx, [PKG_TEST_NAME])
|