WIP: test: type annotate suffix + pathlib (MR 2252)

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
This commit is contained in:
Caleb Connolly 2024-03-13 02:31:01 +00:00 committed by Oliver Smith
parent 9301412f90
commit 3bfc6474bb
No known key found for this signature in database
GPG key ID: 5AE7F5513E0885CB
38 changed files with 164 additions and 128 deletions

View file

@ -3,6 +3,7 @@
""" Common code for git tests """ """ Common code for git tests """
import os import os
from pmb.core.types import PmbArgs
import pmb.helpers.git import pmb.helpers.git
import pmb.helpers.run import pmb.helpers.run
import shutil import shutil

View file

@ -7,7 +7,7 @@ import sys
import pmb_test # noqa import pmb_test # noqa
import pmb.build import pmb.build
import pmb.chroot.apk import pmb.chroot.apk
from pmb.core import Suffix from pmb.core import Chroot
@pytest.fixture @pytest.fixture
@ -15,7 +15,7 @@ def args(tmpdir, request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "init"] sys.argv = ["pmbootstrap.py", "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
@ -89,7 +89,7 @@ def test_install_run_apk(monkeypatch, args):
global cmds global cmds
func = pmb.chroot.apk.install_run_apk func = pmb.chroot.apk.install_run_apk
suffix = Suffix.native() suffix = Chroot.native()
def fake_chroot_root(args: PmbArgs, command, suffix): def fake_chroot_root(args: PmbArgs, command, suffix):
global cmds global cmds

View file

@ -12,6 +12,7 @@ import pmb.chroot.apk_static
import pmb.config import pmb.config
import pmb.parse.apkindex import pmb.parse.apkindex
import pmb.helpers.logging import pmb.helpers.logging
from pmb.core.types import PmbArgs
@pytest.fixture @pytest.fixture
@ -19,16 +20,16 @@ def args(request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "chroot"] sys.argv = ["pmbootstrap.py", "chroot"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
def test_read_signature_info(args): def test_read_signature_info(args: PmbArgs):
# Tempfolder inside chroot for fake apk files # Tempfolder inside chroot for fake apk files
tmp_path = "/tmp/test_read_signature_info" tmp_path = "/tmp/test_read_signature_info"
tmp_path_outside = args.work + "/chroot_native" + tmp_path tmp_path_outside = pmb.config.work / "chroot_native" + tmp_path
if os.path.exists(tmp_path_outside): if os.path.exists(tmp_path_outside):
pmb.chroot.root(args, ["rm", "-r", tmp_path]) pmb.chroot.root(args, ["rm", "-r", tmp_path])
pmb.chroot.user(args, ["mkdir", "-p", tmp_path]) pmb.chroot.user(args, ["mkdir", "-p", tmp_path])
@ -74,17 +75,17 @@ def test_read_signature_info(args):
def test_successful_extraction(args: PmbArgs, tmpdir): def test_successful_extraction(args: PmbArgs, tmpdir):
if os.path.exists(args.work + "/apk.static"): if os.path.exists(pmb.config.work / "apk.static"):
os.remove(args.work + "/apk.static") os.remove(pmb.config.work / "apk.static")
pmb.chroot.apk_static.init(args) pmb.chroot.apk_static.init(args)
assert os.path.exists(args.work + "/apk.static") assert os.path.exists(pmb.config.work / "apk.static")
os.remove(args.work + "/apk.static") os.remove(pmb.config.work / "apk.static")
def test_signature_verification(args: PmbArgs, tmpdir): def test_signature_verification(args: PmbArgs, tmpdir):
if os.path.exists(args.work + "/apk.static"): if os.path.exists(pmb.config.work / "apk.static"):
os.remove(args.work + "/apk.static") os.remove(pmb.config.work / "apk.static")
version = pmb.parse.apkindex.package(args, "apk-tools-static")["version"] version = pmb.parse.apkindex.package(args, "apk-tools-static")["version"]
apk_path = pmb.chroot.apk_static.download( apk_path = pmb.chroot.apk_static.download(
@ -117,8 +118,8 @@ def test_signature_verification(args: PmbArgs, tmpdir):
def test_outdated_version(args: PmbArgs, monkeypatch): def test_outdated_version(args: PmbArgs, monkeypatch):
if os.path.exists(args.work + "/apk.static"): if os.path.exists(pmb.config.work / "apk.static"):
os.remove(args.work + "/apk.static") os.remove(pmb.config.work / "apk.static")
# Change min version for all branches # Change min version for all branches
min_copy = copy.copy(pmb.config.apk_tools_min_version) min_copy = copy.copy(pmb.config.apk_tools_min_version)

View file

@ -2,6 +2,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import os import os
import sys import sys
from pmb.core.types import PmbArgs
import pytest import pytest
import shutil import shutil
import filecmp import filecmp
@ -21,7 +22,7 @@ def args(tmpdir, request):
cfg = f"{pmb_test.const.testdata}/channels.cfg" cfg = f"{pmb_test.const.testdata}/channels.cfg"
sys.argv = ["pmbootstrap.py", "--config-channels", cfg, "chroot"] sys.argv = ["pmbootstrap.py", "--config-channels", cfg, "chroot"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
args.fork_alpine = False args.fork_alpine = False
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
@ -84,7 +85,7 @@ def test_aportgen(args: PmbArgs, tmpdir):
os.mkdir(tmpdir + "/cross") os.mkdir(tmpdir + "/cross")
# Create aportgen folder -> code path where it still exists # Create aportgen folder -> code path where it still exists
pmb.helpers.run.user(args, ["mkdir", "-p", args.work + "/aportgen"]) pmb.helpers.run.user(args, ["mkdir", "-p", pmb.config.work / "aportgen"])
# Generate all valid packages (gcc twice -> different code path) # Generate all valid packages (gcc twice -> different code path)
pkgnames = ["musl-armv7", pkgnames = ["musl-armv7",
@ -95,7 +96,7 @@ def test_aportgen(args: PmbArgs, tmpdir):
pmb.aportgen.generate(args, pkgname) pmb.aportgen.generate(args, pkgname)
def test_aportgen_invalid_generator(args): def test_aportgen_invalid_generator(args: PmbArgs):
with pytest.raises(ValueError) as e: with pytest.raises(ValueError) as e:
pmb.aportgen.generate(args, "pkgname-with-no-generator") pmb.aportgen.generate(args, "pkgname-with-no-generator")
assert "No generator available" in str(e.value) assert "No generator available" in str(e.value)
@ -115,7 +116,7 @@ def test_aportgen_get_upstream_aport(args: PmbArgs, monkeypatch):
# Equal version # Equal version
func = pmb.aportgen.core.get_upstream_aport func = pmb.aportgen.core.get_upstream_aport
upstream = "gcc" upstream = "gcc"
upstream_full = args.work + "/cache_git/aports_upstream/main/" + upstream upstream_full = pmb.config.work / "cache_git/aports_upstream/main/" + upstream
apkbuild = {"pkgver": "2.0", "pkgrel": "0"} apkbuild = {"pkgver": "2.0", "pkgrel": "0"}
package = {"version": "2.0-r0"} package = {"version": "2.0-r0"}
assert func(args, upstream) == upstream_full assert func(args, upstream) == upstream_full

View file

@ -1,6 +1,7 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import logging import logging
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
import shutil import shutil
@ -20,7 +21,7 @@ def args(tmpdir, request):
sys.argv = ["pmbootstrap.py", "--config-channels", cfg, "build", "-i", sys.argv = ["pmbootstrap.py", "--config-channels", cfg, "build", "-i",
"device-testsuite-testdevice"] "device-testsuite-testdevice"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)

View file

@ -16,32 +16,32 @@ def args(request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "chroot"] sys.argv = ["pmbootstrap.py", "chroot"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
def test_bootimg_invalid_path(args): def test_bootimg_invalid_path(args: PmbArgs):
with pytest.raises(RuntimeError) as e: with pytest.raises(RuntimeError) as e:
pmb.parse.bootimg(args, "/invalid-path") pmb.parse.bootimg(args, "/invalid-path")
assert "Could not find file" in str(e.value) assert "Could not find file" in str(e.value)
def test_bootimg_kernel(args): def test_bootimg_kernel(args: PmbArgs):
path = pmb_test.const.testdata + "/bootimg/kernel-boot.img" path = pmb_test.const.testdata + "/bootimg/kernel-boot.img"
with pytest.raises(RuntimeError) as e: with pytest.raises(RuntimeError) as e:
pmb.parse.bootimg(args, path) pmb.parse.bootimg(args, path)
assert "heimdall-isorec" in str(e.value) assert "heimdall-isorec" in str(e.value)
def test_bootimg_invalid_file(args): def test_bootimg_invalid_file(args: PmbArgs):
with pytest.raises(RuntimeError) as e: with pytest.raises(RuntimeError) as e:
pmb.parse.bootimg(args, __file__) pmb.parse.bootimg(args, __file__)
assert "File is not an Android boot.img" in str(e.value) assert "File is not an Android boot.img" in str(e.value)
def test_bootimg_normal(args): def test_bootimg_normal(args: PmbArgs):
path = pmb_test.const.testdata + "/bootimg/normal-boot.img" path = pmb_test.const.testdata + "/bootimg/normal-boot.img"
output = {"header_version": "0", output = {"header_version": "0",
"base": "0x80000000", "base": "0x80000000",
@ -56,7 +56,7 @@ def test_bootimg_normal(args):
assert pmb.parse.bootimg(args, path) == output assert pmb.parse.bootimg(args, path) == output
def test_bootimg_qcdt(args): def test_bootimg_qcdt(args: PmbArgs):
path = pmb_test.const.testdata + "/bootimg/qcdt-boot.img" path = pmb_test.const.testdata + "/bootimg/qcdt-boot.img"
output = {"base": "0x80000000", output = {"base": "0x80000000",
"kernel_offset": "0x00008000", "kernel_offset": "0x00008000",
@ -70,7 +70,7 @@ def test_bootimg_qcdt(args):
assert pmb.parse.bootimg(args, path) == output assert pmb.parse.bootimg(args, path) == output
def test_bootimg_mtk(args): def test_bootimg_mtk(args: PmbArgs):
path = pmb_test.const.testdata + "/bootimg/mtk-boot.img" path = pmb_test.const.testdata + "/bootimg/mtk-boot.img"
output = {"header_version": "0", output = {"header_version": "0",
"base": "0x10000000", "base": "0x10000000",
@ -87,7 +87,7 @@ def test_bootimg_mtk(args):
assert pmb.parse.bootimg(args, path) == output assert pmb.parse.bootimg(args, path) == output
def test_bootimg_mtk_recovery(args): def test_bootimg_mtk_recovery(args: PmbArgs):
path = pmb_test.const.testdata + "/bootimg/mtk-boot-recovery.img" path = pmb_test.const.testdata + "/bootimg/mtk-boot-recovery.img"
output = {"header_version": "0", output = {"header_version": "0",
"base": "0x80000000", "base": "0x80000000",
@ -104,7 +104,7 @@ def test_bootimg_mtk_recovery(args):
assert pmb.parse.bootimg(args, path) == output assert pmb.parse.bootimg(args, path) == output
def test_bootimg_mtk_kernelonly(args): def test_bootimg_mtk_kernelonly(args: PmbArgs):
path = pmb_test.const.testdata + "/bootimg/mtk-boot-kernel-only.img" path = pmb_test.const.testdata + "/bootimg/mtk-boot-kernel-only.img"
output = {"header_version": "0", output = {"header_version": "0",
"base": "0x10000000", "base": "0x10000000",
@ -120,7 +120,7 @@ def test_bootimg_mtk_kernelonly(args):
assert pmb.parse.bootimg(args, path) == output assert pmb.parse.bootimg(args, path) == output
def test_bootimg_dtb_second(args): def test_bootimg_dtb_second(args: PmbArgs):
path = pmb_test.const.testdata + "/bootimg/dtb-second-boot.img" path = pmb_test.const.testdata + "/bootimg/dtb-second-boot.img"
output = {"header_version": "0", output = {"header_version": "0",
"base": "0x00000000", "base": "0x00000000",
@ -135,7 +135,7 @@ def test_bootimg_dtb_second(args):
assert pmb.parse.bootimg(args, path) == output assert pmb.parse.bootimg(args, path) == output
def test_bootimg_v2(args): def test_bootimg_v2(args: PmbArgs):
path = pmb_test.const.testdata + "/bootimg/boot-header-v2.img" path = pmb_test.const.testdata + "/bootimg/boot-header-v2.img"
output = {"header_version": "2", output = {"header_version": "2",
"base": "0x40078000", "base": "0x40078000",
@ -151,7 +151,7 @@ def test_bootimg_v2(args):
assert pmb.parse.bootimg(args, path) == output assert pmb.parse.bootimg(args, path) == output
def test_bootimg_v3(args): def test_bootimg_v3(args: PmbArgs):
path = pmb_test.const.testdata + "/bootimg/boot-header-v3.img" path = pmb_test.const.testdata + "/bootimg/boot-header-v3.img"
output = {"header_version": "3", output = {"header_version": "3",
"pagesize": "4096", "pagesize": "4096",

View file

@ -2,6 +2,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import os import os
import sys import sys
from pmb.core.types import PmbArgs
import pytest import pytest
import pmb_test # noqa import pmb_test # noqa
@ -14,7 +15,7 @@ def args(request, tmpdir):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "chroot"] sys.argv = ["pmbootstrap.py", "chroot"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
@ -41,7 +42,7 @@ def cache_apkindex(version):
providers["hello-world"]["version"] = version providers["hello-world"]["version"] = version
def test_build_is_necessary(args): def test_build_is_necessary(args: PmbArgs):
# Prepare APKBUILD and APKINDEX data # Prepare APKBUILD and APKINDEX data
aport = pmb.helpers.pmaports.find(args, "hello-world") aport = pmb.helpers.pmaports.find(args, "hello-world")
apkbuild = pmb.parse.apkbuild(f"{aport}/APKBUILD") apkbuild = pmb.parse.apkbuild(f"{aport}/APKBUILD")
@ -66,7 +67,7 @@ def test_build_is_necessary(args):
assert pmb.build.is_necessary(args, None, apkbuild, indexes) is False assert pmb.build.is_necessary(args, None, apkbuild, indexes) is False
def test_build_is_necessary_no_binary_available(args): def test_build_is_necessary_no_binary_available(args: PmbArgs):
""" """
APKINDEX cache is set up to fake an empty APKINDEX, which means that the APKINDEX cache is set up to fake an empty APKINDEX, which means that the
hello-world package has not been built yet. hello-world package has not been built yet.
@ -77,7 +78,7 @@ def test_build_is_necessary_no_binary_available(args):
assert pmb.build.is_necessary(args, None, apkbuild, indexes) is True assert pmb.build.is_necessary(args, None, apkbuild, indexes) is True
def test_build_is_necessary_cant_build_pmaport_for_arch(args): def test_build_is_necessary_cant_build_pmaport_for_arch(args: PmbArgs):
""" pmaport version is higher than Alpine's binary package, but pmaport """ pmaport version is higher than Alpine's binary package, but pmaport
can't be built for given arch. (#1897) """ can't be built for given arch. (#1897) """

View file

@ -4,6 +4,7 @@
import datetime import datetime
import glob import glob
import os import os
from pmb.core.types import PmbArgs
import pytest import pytest
import shutil import shutil
import sys import sys
@ -22,7 +23,7 @@ def args(tmpdir, request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap", "init"] sys.argv = ["pmbootstrap", "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
@ -57,7 +58,7 @@ def args_patched(monkeypatch, argv):
return pmb.parse.arguments() return pmb.parse.arguments()
def test_skip_already_built(args): def test_skip_already_built(args: PmbArgs):
func = pmb.build._package.skip_already_built func = pmb.build._package.skip_already_built
assert pmb.helpers.other.cache["built"] == {} assert pmb.helpers.other.cache["built"] == {}
assert func("test-package", "armhf") is False assert func("test-package", "armhf") is False
@ -65,7 +66,7 @@ def test_skip_already_built(args):
assert func("test-package", "armhf") is True assert func("test-package", "armhf") is True
def test_get_apkbuild(args): def test_get_apkbuild(args: PmbArgs):
func = pmb.build._package.get_apkbuild func = pmb.build._package.get_apkbuild
# Valid aport # Valid aport
@ -314,7 +315,7 @@ def test_finish(args: PmbArgs, monkeypatch):
func(args, apkbuild, pmb.config.arch_native, output) func(args, apkbuild, pmb.config.arch_native, output)
def test_package(args): def test_package(args: PmbArgs):
# First build # First build
assert pmb.build.package(args, "hello-world", force=True) assert pmb.build.package(args, "hello-world", force=True)
@ -352,8 +353,8 @@ def test_build_depends_high_level(args: PmbArgs, monkeypatch):
# Build hello-world to get its full output path # Build hello-world to get its full output path
channel = pmb.config.pmaports.read_config(args)["channel"] channel = pmb.config.pmaports.read_config(args)["channel"]
output_hello = pmb.build.package(args, "hello-world") output_hello = pmb.build.package(args, "hello-world")
output_hello_outside = f"{args.work}/packages/{channel}/{output_hello}" output_hello_outside = pmb.config.work / "packages" / channel / output_hello
assert os.path.exists(output_hello_outside) assert output_hello_outside.exists()
# Make sure the wrapper exists # Make sure the wrapper exists
pmb.build.package(args, "hello-world-wrapper") pmb.build.package(args, "hello-world-wrapper")

View file

@ -2,39 +2,40 @@
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
""" Test pmb/chroot/mount.py """ """ Test pmb/chroot/mount.py """
import os import os
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
import pmb_test # noqa import pmb_test # noqa
import pmb.chroot import pmb.chroot
from pmb.core import Chroot
@pytest.fixture @pytest.fixture
def args(tmpdir, request): def args(tmpdir, request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap", "init"] sys.argv = ["pmbootstrap", "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
def test_chroot_mount(args): def test_chroot_mount(args: PmbArgs):
suffix = "native" chroot = Chroot.native()
mnt_dir = f"{args.work}/chroot_native/mnt/pmbootstrap" mnt_dir = chroot / "mnt/pmbootstrap"
# Run something in the chroot to have the dirs created # Run something in the chroot to have the dirs created
pmb.chroot.root(args, ["true"]) pmb.chroot.root(args, ["true"])
assert os.path.exists(mnt_dir) assert mnt_dir.exists()
assert os.path.exists(f"{mnt_dir}/packages") assert (mnt_dir / "packages").exists()
# Umount everything, like in pmb.install.install_system_image # Umount everything, like in pmb.install.install_system_image
pmb.helpers.mount.umount_all(args, f"{args.work}/chroot_{suffix}") pmb.helpers.mount.umount_all(args, chroot.path)
# Remove all /mnt/pmbootstrap dirs # Remove all /mnt/pmbootstrap dirs
pmb.chroot.remove_mnt_pmbootstrap(args, suffix) pmb.chroot.remove_mnt_pmbootstrap(args, chroot)
assert not os.path.exists(mnt_dir) assert not mnt_dir.exists()
# Run again: it should not crash # Run again: it should not crash
pmb.chroot.remove_mnt_pmbootstrap(args, suffix) pmb.chroot.remove_mnt_pmbootstrap(args, chroot)

View file

@ -1,6 +1,7 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
""" Test pmb/config/pmaports.py """ """ Test pmb/config/pmaports.py """
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
@ -18,7 +19,7 @@ def args(request):
cfg = f"{pmb_test.const.testdata}/channels.cfg" cfg = f"{pmb_test.const.testdata}/channels.cfg"
sys.argv = ["pmbootstrap.py", "--config-channels", cfg, "init"] sys.argv = ["pmbootstrap.py", "--config-channels", cfg, "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args

View file

@ -1,6 +1,7 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import sys import sys
from pmb.core.types import PmbArgs
import pytest import pytest
import pmb_test # noqa import pmb_test # noqa
@ -17,7 +18,7 @@ def args(tmpdir, request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "chroot"] sys.argv = ["pmbootstrap.py", "chroot"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args

View file

@ -2,6 +2,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
""" Test pmb/config/workdir.py """ """ Test pmb/config/workdir.py """
import os import os
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
import time import time
@ -17,7 +18,7 @@ def args(request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap", "init"] sys.argv = ["pmbootstrap", "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
@ -42,7 +43,7 @@ def test_chroot_save_init(args: PmbArgs, tmpdir, monkeypatch):
"native = 1234567890\n\n" "native = 1234567890\n\n"
"[chroot-channels]\n" "[chroot-channels]\n"
"native = v20.05\n\n") "native = v20.05\n\n")
with open(args.work + "/workdir.cfg", "r") as handle: with open(pmb.config.work / "workdir.cfg", "r") as handle:
assert handle.read() == expected assert handle.read() == expected
# Write again (different code path) # Write again (different code path)
@ -53,7 +54,7 @@ def test_chroot_save_init(args: PmbArgs, tmpdir, monkeypatch):
"[chroot-channels]\n" "[chroot-channels]\n"
"native = v20.05\n" "native = v20.05\n"
"buildroot_armhf = v20.05\n\n") "buildroot_armhf = v20.05\n\n")
with open(args.work + "/workdir.cfg", "r") as handle: with open(pmb.config.work / "workdir.cfg", "r") as handle:
assert handle.read() == expected assert handle.read() == expected
@ -70,12 +71,12 @@ def test_chroots_outdated(args: PmbArgs, tmpdir, monkeypatch):
assert func(args) is False assert func(args) is False
# workdir.cfg is empty file # workdir.cfg is empty file
with open(args.work + "/workdir.cfg", "w") as handle: with open(pmb.config.work / "workdir.cfg", "w") as handle:
handle.write("") handle.write("")
assert func(args) is False assert func(args) is False
# Write fake workdir.cfg: native was created at "90" # Write fake workdir.cfg: native was created at "90"
with open(args.work + "/workdir.cfg", "w") as handle: with open(pmb.config.work / "workdir.cfg", "w") as handle:
handle.write("[chroot-init-dates]\nnative = 90\n\n") handle.write("[chroot-init-dates]\nnative = 90\n\n")
# Outdated (date_outdated: 90) # Outdated (date_outdated: 90)
@ -131,21 +132,21 @@ def test_clean(args: PmbArgs, tmpdir):
# Write fake workdir.cfg # Write fake workdir.cfg
cfg_fake = "[chroot-init-dates]\nnative = 1337\n\n" cfg_fake = "[chroot-init-dates]\nnative = 1337\n\n"
with open(args.work + "/workdir.cfg", "w") as handle: with open(pmb.config.work / "workdir.cfg", "w") as handle:
handle.write(cfg_fake) handle.write(cfg_fake)
# 1. chroot_native dir exists # 1. chroot_native dir exists
os.makedirs(args.work + "/chroot_native") os.makedirs(pmb.config.work / "chroot_native")
assert func(args) is False assert func(args) is False
# workdir.cfg: unchanged # workdir.cfg: unchanged
with open(args.work + "/workdir.cfg", "r") as handle: with open(pmb.config.work / "workdir.cfg", "r") as handle:
assert handle.read() == cfg_fake assert handle.read() == cfg_fake
# 2. chroot_native dir does not exist # 2. chroot_native dir does not exist
os.rmdir(args.work + "/chroot_native") os.rmdir(pmb.config.work / "chroot_native")
assert func(args) is True assert func(args) is True
# workdir.cfg: "native" entry removed # workdir.cfg: "native" entry removed
with open(args.work + "/workdir.cfg", "r") as handle: with open(pmb.config.work / "workdir.cfg", "r") as handle:
assert handle.read() == "[chroot-init-dates]\n\n" assert handle.read() == "[chroot-init-dates]\n\n"

View file

@ -1,6 +1,7 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import sys import sys
from pmb.core.types import PmbArgs
import pytest import pytest
import pmb_test import pmb_test
@ -18,13 +19,13 @@ def args(tmpdir, request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "init"] sys.argv = ["pmbootstrap.py", "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
def test_package_kernel_args(args): def test_package_kernel_args(args: PmbArgs):
args.packages = ["package-one", "package-two"] args.packages = ["package-one", "package-two"]
with pytest.raises(RuntimeError) as e: with pytest.raises(RuntimeError) as e:
pmb.build.envkernel.package_kernel(args) pmb.build.envkernel.package_kernel(args)

View file

@ -3,6 +3,7 @@
import os import os
import sys import sys
import time import time
from pmb.core.types import PmbArgs
import pytest import pytest
import pmb_test # noqa import pmb_test # noqa
@ -16,7 +17,7 @@ def args(request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "chroot"] sys.argv = ["pmbootstrap.py", "chroot"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args

View file

@ -1,6 +1,7 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import sys import sys
from pmb.core.types import PmbArgs
import pytest import pytest
import pmb_test # noqa import pmb_test # noqa

View file

@ -2,6 +2,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import os import os
import sys import sys
from pmb.core.types import PmbArgs
import pytest import pytest
import shutil import shutil
@ -19,13 +20,13 @@ def args(request):
cfg = f"{pmb_test.const.testdata}/channels.cfg" cfg = f"{pmb_test.const.testdata}/channels.cfg"
sys.argv = ["pmbootstrap.py", "--config-channels", cfg, "init"] sys.argv = ["pmbootstrap.py", "--config-channels", cfg, "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
def test_get_path(args): def test_get_path(args: PmbArgs):
func = pmb.helpers.git.get_path func = pmb.helpers.git.get_path
args.work = "/wrk" args.work = "/wrk"
args.aports = "/tmp/pmaports" args.aports = "/tmp/pmaports"
@ -109,7 +110,7 @@ def test_get_upstream_remote(args: PmbArgs, monkeypatch, tmpdir):
assert func(args, name_repo) == "hello" assert func(args, name_repo) == "hello"
def test_parse_channels_cfg(args): def test_parse_channels_cfg(args: PmbArgs):
exp = {"meta": {"recommended": "edge"}, exp = {"meta": {"recommended": "edge"},
"channels": {"edge": {"description": "Rolling release channel", "channels": {"edge": {"description": "Rolling release channel",
"branch_pmaports": "master", "branch_pmaports": "master",
@ -126,7 +127,7 @@ def test_parse_channels_cfg(args):
assert pmb.helpers.git.parse_channels_cfg(args) == exp assert pmb.helpers.git.parse_channels_cfg(args) == exp
def test_pull_non_existing(args): def test_pull_non_existing(args: PmbArgs):
assert pmb.helpers.git.pull(args, "non-existing-repo-name") == 1 assert pmb.helpers.git.pull(args, "non-existing-repo-name") == 1

View file

@ -1,6 +1,7 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import os import os
from pmb.core.types import PmbArgs
import pytest import pytest
import shutil import shutil
import sys import sys
@ -16,7 +17,7 @@ def args(request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap", "lint"] sys.argv = ["pmbootstrap", "lint"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args

View file

@ -1,6 +1,7 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import sys import sys
from pmb.core.types import PmbArgs
import pytest import pytest
import pmb_test # noqa import pmb_test # noqa
@ -13,7 +14,7 @@ def args(request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap", "init"] sys.argv = ["pmbootstrap", "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
@ -78,7 +79,7 @@ def test_helpers_package_get_apkindex(args: PmbArgs, monkeypatch):
assert func(args, "testpkgname", "x86_64") == package assert func(args, "testpkgname", "x86_64") == package
def test_helpers_package_depends_recurse(args): def test_helpers_package_depends_recurse(args: PmbArgs):
""" Test pmb.helpers.package.depends_recurse() """ """ Test pmb.helpers.package.depends_recurse() """
# Put fake data into the pmb.helpers.package.get() cache # Put fake data into the pmb.helpers.package.get() cache
@ -98,7 +99,7 @@ def test_helpers_package_depends_recurse(args):
assert func(args, "d", "armhf") == ["b", "d"] assert func(args, "d", "armhf") == ["b", "d"]
def test_helpers_package_check_arch_package(args): def test_helpers_package_check_arch_package(args: PmbArgs):
""" Test pmb.helpers.package.check_arch(): binary = True """ """ Test pmb.helpers.package.check_arch(): binary = True """
# Put fake data into the pmb.helpers.package.get() cache # Put fake data into the pmb.helpers.package.get() cache
func = pmb.helpers.package.check_arch func = pmb.helpers.package.check_arch

View file

@ -1,6 +1,7 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import os import os
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
@ -13,7 +14,7 @@ def args(request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap", "init"] sys.argv = ["pmbootstrap", "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args

View file

@ -1,6 +1,7 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
""" Test pmb.helpers.repo """ """ Test pmb.helpers.repo """
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
@ -15,7 +16,7 @@ def args(tmpdir, request):
cfg = f"{pmb_test.const.testdata}/channels.cfg" cfg = f"{pmb_test.const.testdata}/channels.cfg"
sys.argv = ["pmbootstrap.py", "--config-channels", cfg, "chroot"] sys.argv = ["pmbootstrap.py", "--config-channels", cfg, "chroot"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
@ -27,10 +28,10 @@ def test_hash():
assert pmb.helpers.repo.hash(url, 8) == hash assert pmb.helpers.repo.hash(url, 8) == hash
def test_alpine_apkindex_path(args): def test_alpine_apkindex_path(args: PmbArgs):
func = pmb.helpers.repo.alpine_apkindex_path func = pmb.helpers.repo.alpine_apkindex_path
args.mirror_alpine = "http://dl-cdn.alpinelinux.org/alpine/" args.mirror_alpine = "http://dl-cdn.alpinelinux.org/alpine/"
ret = args.work + "/cache_apk_armhf/APKINDEX.30e6f5af.tar.gz" ret = pmb.config.work / "cache_apk_armhf/APKINDEX.30e6f5af.tar.gz"
assert func(args, "testing", "armhf") == ret assert func(args, "testing", "armhf") == ret

View file

@ -1,5 +1,6 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
@ -12,13 +13,13 @@ def args(request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap", "init"] sys.argv = ["pmbootstrap", "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
def test_filter_missing_packages_invalid(args): def test_filter_missing_packages_invalid(args: PmbArgs):
""" Test ...repo_missing.filter_missing_packages(): invalid package """ """ Test ...repo_missing.filter_missing_packages(): invalid package """
func = pmb.helpers.repo_missing.filter_missing_packages func = pmb.helpers.repo_missing.filter_missing_packages
with pytest.raises(RuntimeError) as e: with pytest.raises(RuntimeError) as e:
@ -26,7 +27,7 @@ def test_filter_missing_packages_invalid(args):
assert str(e.value).startswith("Could not find aport") assert str(e.value).startswith("Could not find aport")
def test_filter_missing_packages_binary_exists(args): def test_filter_missing_packages_binary_exists(args: PmbArgs):
""" Test ...repo_missing.filter_missing_packages(): binary exists """ """ Test ...repo_missing.filter_missing_packages(): binary exists """
func = pmb.helpers.repo_missing.filter_missing_packages func = pmb.helpers.repo_missing.filter_missing_packages
assert func(args, "armhf", ["busybox"]) == [] assert func(args, "armhf", ["busybox"]) == []
@ -48,7 +49,7 @@ def test_filter_missing_packages_pmaports(args: PmbArgs, monkeypatch):
assert func(args, "x86_64", ["busybox", "hello-world"]) == [] assert func(args, "x86_64", ["busybox", "hello-world"]) == []
def test_filter_aport_packages(args): def test_filter_aport_packages(args: PmbArgs):
""" Test ...repo_missing.filter_aport_packages() """ """ Test ...repo_missing.filter_aport_packages() """
func = pmb.helpers.repo_missing.filter_aport_packages func = pmb.helpers.repo_missing.filter_aport_packages
assert func(args, "armhf", ["busybox", "hello-world"]) == ["hello-world"] assert func(args, "armhf", ["busybox", "hello-world"]) == ["hello-world"]

View file

@ -1,5 +1,6 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
@ -15,13 +16,13 @@ def args(tmpdir, request):
cfg = f"{pmb_test.const.testdata}/channels.cfg" cfg = f"{pmb_test.const.testdata}/channels.cfg"
sys.argv = ["pmbootstrap.py", "--config-channels", cfg, "init"] sys.argv = ["pmbootstrap.py", "--config-channels", cfg, "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
def test_helpers_ui(args): def test_helpers_ui(args: PmbArgs):
""" Test the UIs returned by pmb.helpers.ui.list() with a testdata pmaports """ Test the UIs returned by pmb.helpers.ui.list() with a testdata pmaports
dir. That test dir has a plasma-mobile UI, which is disabled for armhf, dir. That test dir has a plasma-mobile UI, which is disabled for armhf,
so it must not be returned when querying the UI list for armhf. """ so it must not be returned when querying the UI list for armhf. """

View file

@ -1,5 +1,6 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
import os import os
@ -12,7 +13,7 @@ import pmb.config
import pmb.config.init import pmb.config.init
import pmb.helpers.logging import pmb.helpers.logging
import pmb.install._install import pmb.install._install
from pmb.core import Suffix, SuffixType from pmb.core import Chroot, ChrootType
@pytest.fixture @pytest.fixture
@ -20,13 +21,13 @@ def args(tmpdir, request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "init"] sys.argv = ["pmbootstrap.py", "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
def test_get_nonfree_packages(args): def test_get_nonfree_packages(args: PmbArgs):
args.aports = pmb_test.const.testdata + "/init_questions_device/aports" args.aports = pmb_test.const.testdata + "/init_questions_device/aports"
func = pmb.install._install.get_nonfree_packages func = pmb.install._install.get_nonfree_packages
@ -43,7 +44,7 @@ def test_get_nonfree_packages(args):
assert func(args, device) == ["device-" + device + "-nonfree-userland"] assert func(args, device) == ["device-" + device + "-nonfree-userland"]
def test_get_recommends(args): def test_get_recommends(args: PmbArgs):
args.aports = pmb_test.const.testdata + "/pmb_recommends" args.aports = pmb_test.const.testdata + "/pmb_recommends"
func = pmb.install._install.get_recommends func = pmb.install._install.get_recommends
@ -74,7 +75,7 @@ def test_get_recommends(args):
assert func(args, ["test-app"]) == ["foot", "htop"] assert func(args, ["test-app"]) == ["foot", "htop"]
def test_get_groups(args): def test_get_groups(args: PmbArgs):
args.aports = f"{pmb_test.const.testdata}/pmb_groups" args.aports = f"{pmb_test.const.testdata}/pmb_groups"
func = pmb.install.ui.get_groups func = pmb.install.ui.get_groups
@ -99,11 +100,11 @@ def test_get_groups(args):
assert str(e.value).startswith("Could not find aport for package") assert str(e.value).startswith("Could not find aport for package")
def test_generate_binary_list(args): def test_generate_binary_list(args: PmbArgs):
suffix = Suffix(SuffixType.ROOTFS, "mysuffix") suffix = Chroot(ChrootType.ROOTFS, "mysuffix")
args.work = "/tmp" args.work = "/tmp"
func = pmb.install._install.generate_binary_list func = pmb.install._install.generate_binary_list
binary_dir = os.path.join(args.work, f"{suffix.chroot()}", "usr/share") binary_dir = suffix / "usr/share"
os.makedirs(binary_dir, exist_ok=True) os.makedirs(binary_dir, exist_ok=True)
step = 1024 step = 1024
binaries = [f"{pmb_test.const.testdata}/pmb_install/small.bin", binaries = [f"{pmb_test.const.testdata}/pmb_install/small.bin",

View file

@ -1,5 +1,6 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
from pathlib import Path
import pmb_test # noqa import pmb_test # noqa
import pmb.helpers.mount import pmb.helpers.mount
@ -14,12 +15,12 @@ def test_umount_all_list(tmpdir):
handle.write("source /test/proc\n") handle.write("source /test/proc\n")
handle.write("source /test/dev/loop0p2\\040(deleted)\n") handle.write("source /test/dev/loop0p2\\040(deleted)\n")
ret = pmb.helpers.mount.umount_all_list("/no/match", fake_mounts) ret = pmb.helpers.mount.umount_all_list(Path("/no/match"), fake_mounts)
assert ret == [] assert ret == []
ret = pmb.helpers.mount.umount_all_list("/test/var/cache", fake_mounts) ret = pmb.helpers.mount.umount_all_list(Path("/test/var/cache"), fake_mounts)
assert ret == ["/test/var/cache"] assert ret == ["/test/var/cache"]
ret = pmb.helpers.mount.umount_all_list("/test", fake_mounts) ret = pmb.helpers.mount.umount_all_list(Path("/test"), fake_mounts)
assert ret == ["/test/var/cache", "/test/proc", "/test/home/pmos/packages", assert ret == ["/test/var/cache", "/test/proc", "/test/home/pmos/packages",
"/test/dev/loop0p2", "/test"] "/test/dev/loop0p2", "/test"]

View file

@ -2,6 +2,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import glob import glob
import os import os
from pmb.core.types import PmbArgs
import pytest import pytest
import shutil import shutil
import sys import sys
@ -20,7 +21,7 @@ def args(tmpdir, request):
cfg = f"{pmb_test.const.testdata}/channels.cfg" cfg = f"{pmb_test.const.testdata}/channels.cfg"
sys.argv = ["pmbootstrap.py", "--config-channels", cfg, "init"] sys.argv = ["pmbootstrap.py", "--config-channels", cfg, "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args

View file

@ -1,5 +1,6 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
@ -13,7 +14,7 @@ def args(tmpdir, request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "init"] sys.argv = ["pmbootstrap.py", "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
@ -55,7 +56,7 @@ def test_subpackages(args):
assert apkbuild["subpackages"]["invalid-function"] is None assert apkbuild["subpackages"]["invalid-function"] is None
def test_kernels(args): def test_kernels(args: PmbArgs):
# Kernel hardcoded in depends # Kernel hardcoded in depends
args.aports = pmb_test.const.testdata + "/init_questions_device/aports" args.aports = pmb_test.const.testdata + "/init_questions_device/aports"
func = pmb.parse._apkbuild.kernels func = pmb.parse._apkbuild.kernels

View file

@ -3,6 +3,7 @@
""" Test pmb.parse.apkindex """ """ Test pmb.parse.apkindex """
import collections import collections
import os import os
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
@ -17,7 +18,7 @@ def args(tmpdir, request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap", "init"] sys.argv = ["pmbootstrap", "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
@ -143,7 +144,7 @@ def test_parse_next_block_conflict():
assert start == [20] assert start == [20]
def test_parse_add_block(args): def test_parse_add_block(args: PmbArgs):
func = pmb.parse.apkindex.parse_add_block func = pmb.parse.apkindex.parse_add_block
multiple_providers = False multiple_providers = False
@ -170,7 +171,7 @@ def test_parse_add_block(args):
assert ret == {"test": block_new, "test_alias": block_new} assert ret == {"test": block_new, "test_alias": block_new}
def test_parse_add_block_multiple_providers(args): def test_parse_add_block_multiple_providers(args: PmbArgs):
func = pmb.parse.apkindex.parse_add_block func = pmb.parse.apkindex.parse_add_block
# One package without alias # One package without alias

View file

@ -2,6 +2,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
""" Test pmb.parse.depends """ """ Test pmb.parse.depends """
import collections import collections
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
@ -17,13 +18,13 @@ def args(tmpdir, request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap", "init"] sys.argv = ["pmbootstrap", "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
def test_package_from_aports(args): def test_package_from_aports(args: PmbArgs):
func = pmb.parse.depends.package_from_aports func = pmb.parse.depends.package_from_aports
assert func(args, "invalid-package") is None assert func(args, "invalid-package") is None
assert func(args, "hello-world") == {"pkgname": "hello-world", assert func(args, "hello-world") == {"pkgname": "hello-world",

View file

@ -1,5 +1,6 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
@ -12,13 +13,13 @@ def args(tmpdir, request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "init"] sys.argv = ["pmbootstrap.py", "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
def test_kernel_suffix(args): def test_kernel_suffix(args: PmbArgs):
args.aports = pmb_test.const.testdata + "/deviceinfo/aports" args.aports = pmb_test.const.testdata + "/deviceinfo/aports"
device = "multiple-kernels" device = "multiple-kernels"

View file

@ -1,6 +1,7 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
""" Test pmb/parse/kconfig.py """ """ Test pmb/parse/kconfig.py """
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
import os import os
@ -17,7 +18,7 @@ def args(tmpdir, request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "kconfig", "check"] sys.argv = ["pmbootstrap.py", "kconfig", "check"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args

View file

@ -3,6 +3,7 @@
""" Test pmb.helper.pkgrel_bump """ """ Test pmb.helper.pkgrel_bump """
import glob import glob
import os import os
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
@ -17,7 +18,7 @@ def args(request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "chroot"] sys.argv = ["pmbootstrap.py", "chroot"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
@ -72,7 +73,7 @@ def setup_work(args: PmbArgs, tmpdir):
pmb.helpers.run.user(args, ["./pmbootstrap.py", "shutdown"]) pmb.helpers.run.user(args, ["./pmbootstrap.py", "shutdown"])
# Link everything from work (except for "packages") to the tmpdir # Link everything from work (except for "packages") to the tmpdir
for path in glob.glob(args.work + "/*"): for path in glob.glob(pmb.config.work / "*"):
if os.path.basename(path) != "packages": if os.path.basename(path) != "packages":
pmb.helpers.run.user(args, ["ln", "-s", path, tmpdir + "/"]) pmb.helpers.run.user(args, ["ln", "-s", path, tmpdir + "/"])

View file

@ -3,6 +3,7 @@
""" Test preserving HTTP_PROXY and other proxy env vars with all pmbootstrap """ Test preserving HTTP_PROXY and other proxy env vars with all pmbootstrap
run functions. """ run functions. """
import os import os
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
@ -18,7 +19,7 @@ def args(request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "chroot"] sys.argv = ["pmbootstrap.py", "chroot"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args

View file

@ -7,6 +7,7 @@ via SSH if expected processes are running.
We use an extra config file (based on ~/.config/pmbootstrap.cfg), because we We use an extra config file (based on ~/.config/pmbootstrap.cfg), because we
need to change it a lot (e.g. UI, username, ...). need to change it a lot (e.g. UI, username, ...).
""" """
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
import shutil import shutil
@ -26,15 +27,15 @@ def args(request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "chroot"] sys.argv = ["pmbootstrap.py", "chroot"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
def ssh_create_askpass_script(args): def ssh_create_askpass_script(args: PmbArgs):
"""Create /tmp/y.sh, which we need to automatically login via SSH.""" """Create /tmp/y.sh, which we need to automatically login via SSH."""
with open(args.work + "/chroot_native/tmp/y.sh", "w") as handle: with open(pmb.config.work / "chroot_native/tmp/y.sh", "w") as handle:
handle.write("#!/bin/sh\necho y\n") handle.write("#!/bin/sh\necho y\n")
pmb.chroot.root(args, ["chmod", "+x", "/tmp/y.sh"]) pmb.chroot.root(args, ["chmod", "+x", "/tmp/y.sh"])

View file

@ -2,6 +2,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import logging import logging
import os import os
from pmb.core.types import PmbArgs
import pytest import pytest
import sys import sys
@ -20,7 +21,7 @@ def args(tmpdir, request):
cfg = f"{pmb_test.const.testdata}/channels.cfg" cfg = f"{pmb_test.const.testdata}/channels.cfg"
sys.argv = ["pmbootstrap.py", "--config-channels", cfg, "init"] sys.argv = ["pmbootstrap.py", "--config-channels", cfg, "init"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args

View file

@ -1,6 +1,7 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
""" Test pmb.helpers.run_core """ """ Test pmb.helpers.run_core """
from pmb.core.types import PmbArgs
import pytest import pytest
import re import re
import subprocess import subprocess
@ -16,7 +17,7 @@ def args(request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "chroot"] sys.argv = ["pmbootstrap.py", "chroot"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
@ -44,7 +45,7 @@ def test_sanity_checks():
assert str(e.value).startswith("Can't use output_return with") assert str(e.value).startswith("Can't use output_return with")
def test_background(args): def test_background(args: PmbArgs):
# Sleep in background # Sleep in background
process = pmb.helpers.run_core.background(["sleep", "1"], "/") process = pmb.helpers.run_core.background(["sleep", "1"], "/")
@ -52,7 +53,7 @@ def test_background(args):
assert process.poll() is None assert process.poll() is None
def test_pipe(args): def test_pipe(args: PmbArgs):
# Sleep in background # Sleep in background
process = pmb.helpers.run_core.pipe(["sleep", "1"], "/") process = pmb.helpers.run_core.pipe(["sleep", "1"], "/")
@ -66,7 +67,7 @@ def test_pipe(args):
assert process.communicate()[0].decode('utf-8') == "hello" assert process.communicate()[0].decode('utf-8') == "hello"
def test_foreground_pipe(args): def test_foreground_pipe(args: PmbArgs):
func = pmb.helpers.run_core.foreground_pipe func = pmb.helpers.run_core.foreground_pipe
cmd = ["echo", "test"] cmd = ["echo", "test"]
@ -159,7 +160,7 @@ def test_core(args: PmbArgs, monkeypatch):
@pytest.mark.skip_ci @pytest.mark.skip_ci
def test_sudo_timer(args): def test_sudo_timer(args: PmbArgs):
pmb.helpers.run.root(args, ["whoami"]) pmb.helpers.run.root(args, ["whoami"])
time.sleep(300) time.sleep(300)

View file

@ -1,6 +1,7 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import sys import sys
from pmb.core.types import PmbArgs
import pytest import pytest
import pmb_test # noqa import pmb_test # noqa
@ -16,13 +17,13 @@ def args(request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "chroot"] sys.argv = ["pmbootstrap.py", "chroot"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
def test_shell_escape(args): def test_shell_escape(args: PmbArgs):
cmds = {"test\n": ["echo", "test"], cmds = {"test\n": ["echo", "test"],
"test && test\n": ["echo", "test", "&&", "test"], "test && test\n": ["echo", "test", "&&", "test"],
"test ; test\n": ["echo", "test", ";", "test"], "test ; test\n": ["echo", "test", ";", "test"],
@ -54,7 +55,7 @@ def test_shell_escape(args):
assert cmd == copy assert cmd == copy
def test_shell_escape_env(args): def test_shell_escape_env(args: PmbArgs):
key = "PMBOOTSTRAP_TEST_ENVIRONMENT_VARIABLE" key = "PMBOOTSTRAP_TEST_ENVIRONMENT_VARIABLE"
value = "long value with spaces and special characters: '\"\\!$test" value = "long value with spaces and special characters: '\"\\!$test"
env = {key: value} env = {key: value}

View file

@ -1,6 +1,7 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import sys import sys
from pmb.core.types import PmbArgs
import pytest import pytest
import pmb_test import pmb_test
@ -15,13 +16,13 @@ def args(request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "chroot"] sys.argv = ["pmbootstrap.py", "chroot"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
def test_version(args): def test_version(args: PmbArgs):
# Fail after the first error or print a grand total of failures # Fail after the first error or print a grand total of failures
keep_going = False keep_going = False

View file

@ -4,6 +4,7 @@
# sourcehut currently. Related to some CDN caching issue probably. # sourcehut currently. Related to some CDN caching issue probably.
import os import os
import sys import sys
from pmb.core.types import PmbArgs
import pytest import pytest
import glob import glob
import filecmp import filecmp
@ -19,23 +20,23 @@ def args(request):
import pmb.parse import pmb.parse
sys.argv = ["pmbootstrap.py", "chroot"] sys.argv = ["pmbootstrap.py", "chroot"]
args = pmb.parse.arguments() args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt" args.log = pmb.config.work / "log_testsuite.txt"
pmb.helpers.logging.init(args) pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close) request.addfinalizer(pmb.helpers.logging.logfd.close)
return args return args
def test_keys(args): def test_keys(args: PmbArgs):
# Get the alpine-keys apk filename # Get the alpine-keys apk filename
pmb.chroot.init(args) pmb.chroot.init(args)
version = pmb.parse.apkindex.package(args, "alpine-keys")["version"] version = pmb.parse.apkindex.package(args, "alpine-keys")["version"]
pattern = (args.work + "/cache_apk_" + pmb.config.arch_native + pattern = (pmb.config.work / "cache_apk_" + pmb.config.arch_native +
"/alpine-keys-" + version + ".*.apk") "/alpine-keys-" + version + ".*.apk")
filename = os.path.basename(glob.glob(pattern)[0]) filename = os.path.basename(glob.glob(pattern)[0])
# Extract it to a temporary folder # Extract it to a temporary folder
temp = "/tmp/test_keys_extract" temp = "/tmp/test_keys_extract"
temp_outside = args.work + "/chroot_native" + temp temp_outside = pmb.config.work / "chroot_native" + temp
if os.path.exists(temp_outside): if os.path.exists(temp_outside):
pmb.chroot.root(args, ["rm", "-r", temp]) pmb.chroot.root(args, ["rm", "-r", temp])
pmb.chroot.user(args, ["mkdir", "-p", temp]) pmb.chroot.user(args, ["mkdir", "-p", temp])