186 lines
6.0 KiB
Python
186 lines
6.0 KiB
Python
"""
|
|
Copyright 2018 Oliver Smith
|
|
|
|
This file is part of pmbootstrap.
|
|
|
|
pmbootstrap is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
pmbootstrap is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with pmbootstrap. If not, see <http://www.gnu.org/licenses/>.
|
|
"""
|
|
import os
|
|
import sys
|
|
import pytest
|
|
|
|
# Import from parent directory
|
|
sys.path.insert(0, os.path.realpath(
|
|
os.path.join(os.path.dirname(__file__) + "/..")))
|
|
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(args.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": ["armhf"],
|
|
"depends": ["testdepend"],
|
|
"pkgname": "testpkgname",
|
|
"provides": ["testprovide"],
|
|
"options": [],
|
|
"checkdepends": [],
|
|
"subpackages": [],
|
|
"makedepends": [],
|
|
"pkgver": "1.0",
|
|
"pkgrel": "1"}
|
|
monkeypatch.setattr(pmb.helpers.pmaports, "get", stub)
|
|
|
|
package = {"arch": ["armhf"],
|
|
"depends": ["testdepend"],
|
|
"pkgname": "testpkgname",
|
|
"provides": ["testprovide"],
|
|
"version": "1.0-r1"}
|
|
func = pmb.helpers.package.get
|
|
assert func(args, "testpkgname", "armhf") == package
|
|
|
|
# Cached result
|
|
monkeypatch.delattr(pmb.helpers.pmaports, "get")
|
|
assert func(args, "testpkgname", "armhf") == package
|
|
|
|
|
|
def test_helpers_package_get_apkindex(args, monkeypatch):
|
|
""" Test pmb.helpers.package.get(): find in apkindex """
|
|
|
|
# Fake APKINDEX data
|
|
fake_apkindex_data = {"arch": "armhf",
|
|
"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": ["armhf"],
|
|
"depends": ["testdepend"],
|
|
"pkgname": "testpkgname",
|
|
"provides": ["testprovide"],
|
|
"version": "1.0-r1"}
|
|
func = pmb.helpers.package.get
|
|
assert func(args, "testpkgname", "armhf") == 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": {"depends": ["b", "c"]},
|
|
"b": {"depends": []},
|
|
"c": {"depends": ["d"]},
|
|
"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": {"arch": []}}
|
|
args.cache["pmb.helpers.package.get"]["armhf"] = cache
|
|
|
|
cache["a"]["arch"] = ["all !armhf"]
|
|
assert func(args, "a", "armhf") is False
|
|
|
|
cache["a"]["arch"] = ["all"]
|
|
assert func(args, "a", "armhf") is True
|
|
|
|
cache["a"]["arch"] = ["noarch"]
|
|
assert func(args, "a", "armhf") is True
|
|
|
|
cache["a"]["arch"] = ["armhf"]
|
|
assert func(args, "a", "armhf") is True
|
|
|
|
cache["a"]["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
|
|
|
|
|
|
def test_helpers_package_check_arch_recurse(args, monkeypatch):
|
|
""" Test pmb.helpers.package.check_arch_recurse() """
|
|
# Test data
|
|
func = pmb.helpers.package.check_arch_recurse
|
|
depends = ["a", "b", "c"]
|
|
arch_check_results = {}
|
|
|
|
def fake_depends_recurse(args, pkgname, arch):
|
|
return depends
|
|
monkeypatch.setattr(pmb.helpers.package, "depends_recurse",
|
|
fake_depends_recurse)
|
|
|
|
def fake_check_arch(args, pkgname, arch):
|
|
return arch_check_results[pkgname]
|
|
monkeypatch.setattr(pmb.helpers.package, "check_arch", fake_check_arch)
|
|
|
|
# Result: True
|
|
arch_check_results = {"a": True,
|
|
"b": True,
|
|
"c": True}
|
|
assert func(args, "a", "armhf") is True
|
|
|
|
# Result: False
|
|
arch_check_results = {"a": True,
|
|
"b": False,
|
|
"c": True}
|
|
assert func(args, "a", "armhf") is False
|