1
0
Fork 1
mirror of https://gitlab.postmarketos.org/postmarketOS/pmbootstrap.git synced 2025-07-13 19:39:51 +03:00
pmbootstrap/test/test_parse_depends.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

162 lines
5 KiB
Python

# Copyright 2021 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later
""" Test pmb.parse.depends """
import collections
import pytest
import sys
import pmb_test # noqa
import pmb.config
import pmb.config.init
import pmb.helpers.logging
import pmb.parse.depends
@pytest.fixture
def args(tmpdir, 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_package_from_aports(args):
func = pmb.parse.depends.package_from_aports
assert func(args, "invalid-package") is None
assert func(args, "hello-world") == {"pkgname": "hello-world",
"depends": [],
"version": "1-r6"}
def test_package_provider(args, monkeypatch):
# Override pmb.parse.apkindex.providers()
providers = collections.OrderedDict()
def return_providers(*args, **kwargs):
return providers
monkeypatch.setattr(pmb.parse.apkindex, "providers", return_providers)
# Override pmb.chroot.apk.installed()
installed = {}
def return_installed(*args, **kwards):
return installed
monkeypatch.setattr(pmb.chroot.apk, "installed", return_installed)
# 0. No provider
pkgname = "test"
pkgnames_install = []
func = pmb.parse.depends.package_provider
assert func(args, pkgname, pkgnames_install) is None
# 1. Only one provider
package = {"pkgname": "test", "version": "1234"}
providers = {"test": package}
assert func(args, pkgname, pkgnames_install) == package
# 2. Provider with the same package name
package_two = {"pkgname": "test-two", "provides": ["test"]}
providers = {"test-two": package_two, "test": package}
assert func(args, pkgname, pkgnames_install) == package
# 3. Pick a package that will be installed anyway
providers = {"test_": package, "test-two": package_two}
installed = {"test_": package}
pkgnames_install = ["test-two"]
assert func(args, pkgname, pkgnames_install) == package_two
# 4. Pick a package that is already installed
pkgnames_install = []
assert func(args, pkgname, pkgnames_install) == package
# 5. Pick package with highest priority
package_with_priority = {"pkgname": "test-priority", "provides": ["test"],
"provider_priority": 100}
providers = {"test-two": package_two,
"test-priority": package_with_priority}
assert func(args, pkgname, pkgnames_install) == package_with_priority
# 6. Pick the first one
providers = {"test_": package, "test-two": package_two}
installed = {}
assert func(args, pkgname, pkgnames_install) == package
def test_package_from_index(args, monkeypatch):
# Override pmb.parse.depends.package_provider()
provider = None
def return_provider(*args, **kwargs):
return provider
monkeypatch.setattr(pmb.parse.depends, "package_provider",
return_provider)
func = pmb.parse.depends.package_from_index
aport = {"pkgname": "test", "version": "2"}
pkgname = "test"
pkgnames_install = []
# No binary package providers
assert func(args, pkgname, pkgnames_install, aport) is aport
# Binary package outdated
provider = {"pkgname": "test", "version": "1"}
assert func(args, pkgname, pkgnames_install, aport) is aport
# Binary package up-to-date
for version in ["2", "3"]:
provider = {"pkgname": "test", "version": version}
assert func(args, pkgname, pkgnames_install, aport) is provider
def test_recurse_invalid(args, monkeypatch):
func = pmb.parse.depends.recurse
# Invalid package
with pytest.raises(RuntimeError) as e:
func(args, ["invalid-pkgname"])
assert str(e.value).startswith("Could not find dependency")
def return_none(*args, **kwargs):
return None
def test_recurse(args, monkeypatch):
"""
Test recursing through the following dependencies:
test:
libtest
so:libtest.so.1
libtest:
libtest_depend
libtest_depend:
so:libtest.so.1:
libtest_depend
"""
# Override finding the package in aports: always no result
monkeypatch.setattr(pmb.parse.depends, "package_from_aports",
return_none)
# Override depends returned from APKINDEX
depends = {
"test": ["libtest", "so:libtest.so.1"],
"libtest": ["libtest_depend"],
"libtest_depend": [],
"so:libtest.so.1": ["libtest_depend"],
}
def package_from_index(args, pkgname, install, aport, suffix):
return {"pkgname": pkgname, "depends": depends[pkgname]}
monkeypatch.setattr(pmb.parse.depends, "package_from_index",
package_from_index)
# Run
func = pmb.parse.depends.recurse
pkgnames = ["test", "so:libtest.so.1"]
result = ["test", "so:libtest.so.1", "libtest", "libtest_depend"]
assert func(args, pkgnames) == result