forked from Mirror/pmbootstrap
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.
137 lines
4.5 KiB
Python
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
|