forked from Mirror/pmbootstrap
When installing pmboostrap, all tests are installed alongside it. There doesn't seem to be any way to selectively exclude some files inside python modules, so move all test into a separate module instead. This is the typical convention in python projects. See: https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/79862 Fixes: https://gitlab.postmarketos.org/postmarketOS/pmbootstrap/-/issues/2541
107 lines
3 KiB
Python
107 lines
3 KiB
Python
# Copyright 2024 Caleb Connolly
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from pmb.core.arch import Arch
|
|
from pmb.core.context import get_context
|
|
from pmb.parse.apkindex import ApkindexBlock
|
|
|
|
from pmb.chroot.apk import packages_get_locally_built_apks
|
|
import pmb.config.pmaports
|
|
|
|
|
|
@pytest.fixture
|
|
def apk_mocks(monkeypatch) -> dict | None:
|
|
def _pmaports_config(_aports=None):
|
|
return {
|
|
"channel": "edge",
|
|
}
|
|
|
|
monkeypatch.setattr(pmb.config.pmaports, "read_config", _pmaports_config)
|
|
|
|
def _apkindex_package(
|
|
_package: str, _arch: Arch, _must_exist: bool = False, indexes=None
|
|
) -> ApkindexBlock | None:
|
|
if _package == "package1":
|
|
return ApkindexBlock(
|
|
arch=_arch,
|
|
depends=["package2"],
|
|
origin=None,
|
|
pkgname=_package,
|
|
provides=[],
|
|
provider_priority=None,
|
|
timestamp=None,
|
|
version="5.5-r0",
|
|
)
|
|
if _package == "package2":
|
|
return ApkindexBlock(
|
|
arch=_arch,
|
|
depends=[],
|
|
origin=None,
|
|
pkgname=_package,
|
|
provides=[],
|
|
provider_priority=None,
|
|
timestamp=None,
|
|
version="5.5-r0",
|
|
)
|
|
if _package == "package3":
|
|
return ApkindexBlock(
|
|
arch=_arch,
|
|
depends=["package1", "package4"],
|
|
origin=None,
|
|
pkgname=_package,
|
|
provides=[],
|
|
provider_priority=None,
|
|
timestamp=None,
|
|
version="5.5-r0",
|
|
)
|
|
# Test recursive dependency
|
|
if _package == "package4":
|
|
return ApkindexBlock(
|
|
arch=_arch,
|
|
depends=["package3"],
|
|
origin=None,
|
|
pkgname=_package,
|
|
provides=[],
|
|
provider_priority=None,
|
|
timestamp=None,
|
|
version="5.5-r0",
|
|
)
|
|
|
|
return None
|
|
|
|
monkeypatch.setattr(pmb.parse.apkindex, "package", _apkindex_package)
|
|
return None
|
|
|
|
|
|
def create_apk(pkgname: str, arch: Arch) -> Path:
|
|
apk_file = get_context().config.work / "packages" / "edge" / arch / f"{pkgname}-5.5-r0.apk"
|
|
apk_file.parent.mkdir(parents=True, exist_ok=True)
|
|
apk_file.touch()
|
|
return apk_file
|
|
|
|
|
|
def test_get_local_apks(pmb_args, apk_mocks) -> None:
|
|
"""Ensure packages_get_locally_built_apks() returns paths for local apks"""
|
|
|
|
pkgname = "package1"
|
|
arch = Arch.x86_64
|
|
|
|
apk_file = create_apk(pkgname, arch)
|
|
|
|
local = packages_get_locally_built_apks([pkgname, "fake-package"], arch)
|
|
print(local)
|
|
assert len(local) == 1
|
|
assert local[0].parts[-2:] == apk_file.parts[-2:]
|
|
|
|
create_apk("package2", arch)
|
|
create_apk("package3", arch)
|
|
create_apk("package4", arch)
|
|
|
|
# Test recursive dependencies
|
|
local = packages_get_locally_built_apks(["package3"], arch)
|
|
print(local)
|
|
assert len(local) == 4
|