pmbootstrap-meow/test/test_helpers_package.py
BO41 944f539dd6
args.logfd: remove (MR 2114)
Replace "args.logfd" with "pmb.helpers.logging.logfd" in order to avoid
passing "args" to all functions that only use it to write to logfd. This
is the first step to get rid of this args-passed-to-all-functions
pattern in pmbootstrap.
2021-10-10 16:59:17 +02:00

137 lines
4.5 KiB
Python

# Copyright 2021 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later
import sys
import pytest
import pmb_test # noqa
import pmb.helpers.logging
import pmb.helpers.package
@pytest.fixture
def args(request):
import pmb.parse
sys.argv = ["pmbootstrap", "init"]
args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt"
pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close)
return args
def test_helpers_package_get_pmaports_and_cache(args, monkeypatch):
""" Test pmb.helpers.package.get(): find in pmaports, use cached result """
# Fake APKBUILD data
def stub(args, pkgname, must_exist):
return {"arch": ["armv7"],
"depends": ["testdepend"],
"pkgname": "testpkgname",
"provides": ["testprovide"],
"options": [],
"checkdepends": [],
"subpackages": {},
"makedepends": [],
"pkgver": "1.0",
"pkgrel": "1"}
monkeypatch.setattr(pmb.helpers.pmaports, "get", stub)
package = {"arch": ["armv7"],
"depends": ["testdepend"],
"pkgname": "testpkgname",
"provides": ["testprovide"],
"version": "1.0-r1"}
func = pmb.helpers.package.get
assert func(args, "testpkgname", "armv7") == package
# Cached result
monkeypatch.delattr(pmb.helpers.pmaports, "get")
assert func(args, "testpkgname", "armv7") == package
def test_helpers_package_get_apkindex(args, monkeypatch):
""" Test pmb.helpers.package.get(): find in apkindex """
# Fake APKINDEX data
fake_apkindex_data = {"arch": "armv7",
"depends": ["testdepend"],
"pkgname": "testpkgname",
"provides": ["testprovide"],
"version": "1.0-r1"}
def stub(args, pkgname, arch, must_exist):
if arch != fake_apkindex_data["arch"]:
return None
return fake_apkindex_data
monkeypatch.setattr(pmb.parse.apkindex, "package", stub)
# Given arch
package = {"arch": ["armv7"],
"depends": ["testdepend"],
"pkgname": "testpkgname",
"provides": ["testprovide"],
"version": "1.0-r1"}
func = pmb.helpers.package.get
assert func(args, "testpkgname", "armv7") == package
# Other arch
assert func(args, "testpkgname", "x86_64") == package
def test_helpers_package_depends_recurse(args):
""" Test pmb.helpers.package.depends_recurse() """
# Put fake data into the pmb.helpers.package.get() cache
cache = {"a": {False: {"pkgname": "a", "depends": ["b", "c"]}},
"b": {False: {"pkgname": "b", "depends": []}},
"c": {False: {"pkgname": "c", "depends": ["d"]}},
"d": {False: {"pkgname": "d", "depends": ["b"]}}}
args.cache["pmb.helpers.package.get"]["armhf"] = cache
# Normal runs
func = pmb.helpers.package.depends_recurse
assert func(args, "a", "armhf") == ["a", "b", "c", "d"]
assert func(args, "d", "armhf") == ["b", "d"]
# Cached result
args.cache["pmb.helpers.package.get"]["armhf"] = {}
assert func(args, "d", "armhf") == ["b", "d"]
def test_helpers_package_check_arch_package(args):
""" Test pmb.helpers.package.check_arch(): binary = True """
# Put fake data into the pmb.helpers.package.get() cache
func = pmb.helpers.package.check_arch
cache = {"a": {False: {"arch": []}}}
args.cache["pmb.helpers.package.get"]["armhf"] = cache
cache["a"][False]["arch"] = ["all !armhf"]
assert func(args, "a", "armhf") is False
cache["a"][False]["arch"] = ["all"]
assert func(args, "a", "armhf") is True
cache["a"][False]["arch"] = ["noarch"]
assert func(args, "a", "armhf") is True
cache["a"][False]["arch"] = ["armhf"]
assert func(args, "a", "armhf") is True
cache["a"][False]["arch"] = ["aarch64"]
assert func(args, "a", "armhf") is False
def test_helpers_package_check_arch_pmaports(args, monkeypatch):
""" Test pmb.helpers.package.check_arch(): binary = False """
func = pmb.helpers.package.check_arch
fake_pmaport = {"arch": []}
def fake_pmaports_get(args, pkgname, must_exist=False):
return fake_pmaport
monkeypatch.setattr(pmb.helpers.pmaports, "get", fake_pmaports_get)
fake_pmaport["arch"] = ["armhf"]
assert func(args, "a", "armhf", False) is True
fake_pmaport["arch"] = ["all", "!armhf"]
assert func(args, "a", "armhf", False) is False