forked from Mirror/pmbootstrap
Adjust to pkgrel bump of the hello-world package in pmaports. Of course it would be best if the tests did not depend on specific versions in pmaports.git, but as long as they do, we need to keep them in sync. This fixes the currently failing CI.
162 lines
5 KiB
Python
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(args.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
|