pmbootstrap/test/test_envkernel.py

120 lines
4.6 KiB
Python

# Copyright 2021 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later
import sys
import pytest
import pmb_test
import pmb_test.const
import pmb.aportgen
import pmb.aportgen.core
import pmb.build
import pmb.build.envkernel
import pmb.config
import pmb.helpers.logging
@pytest.fixture
def args(tmpdir, request):
import pmb.parse
sys.argv = ["pmbootstrap.py", "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_kernel_args(args):
args.packages = ["package-one", "package-two"]
with pytest.raises(RuntimeError) as e:
pmb.build.envkernel.package_kernel(args)
assert "--envkernel needs exactly one linux-* package as argument." in \
str(e.value)
def test_find_kbuild_output_dir():
# Test parsing an APKBUILD
pkgname = "linux-envkernel-test"
path = pmb_test.const.testdata + "/apkbuild/APKBUILD." + pkgname
function_body = pmb.parse.function_body(path, "package")
kbuild_out = pmb.build.envkernel.find_kbuild_output_dir(function_body)
assert kbuild_out == "build"
# Test full function body
function_body = [
" install -Dm644 \"$srcdir\"/build/arch/arm/boot/dt.img ",
" \"$pkgdir\"/boot/dt.img",
"",
" install -Dm644 \"$srcdir\"/build/arch/arm/boot/zImage-dtb ",
" \"$pkgdir\"/boot/vmlinuz-$_flavor",
"",
" install -D \"$srcdir\"/build/include/config/kernel.release ",
" \"$pkgdir\"/usr/share/kernel/$_flavor/kernel.release",
"",
" cd \"$srcdir\"/build",
" unset LDFLAGS",
"",
" make ARCH=\"$_carch\" CC=\"${CC:-gcc}\" ",
" KBUILD_BUILD_VERSION=\"$((pkgrel + 1))-Alpine\" ",
" INSTALL_MOD_PATH=\"$pkgdir\" modules_install",
]
kbuild_out = pmb.build.envkernel.find_kbuild_output_dir(function_body)
assert kbuild_out == "build"
# Test no kbuild out dir
function_body = [
" install -Dm644 \"$srcdir\"/arch/arm/boot/zImage ",
" \"$pkgdir\"/boot/vmlinuz-$_flavor",
" install -D \"$srcdir\"/include/config/kernel.release ",
" \"$pkgdir\"/usr/share/kernel/$_flavor/kernel.release",
]
kbuild_out = pmb.build.envkernel.find_kbuild_output_dir(function_body)
assert kbuild_out == ""
# Test curly brackets around srcdir
function_body = [
" install -Dm644 \"${srcdir}\"/build/arch/arm/boot/zImage ",
" \"$pkgdir\"/boot/vmlinuz-$_flavor",
" install -D \"${srcdir}\"/build/include/config/kernel.release ",
" \"$pkgdir\"/usr/share/kernel/$_flavor/kernel.release",
]
kbuild_out = pmb.build.envkernel.find_kbuild_output_dir(function_body)
assert kbuild_out == "build"
# Test multiple sub directories
function_body = [
" install -Dm644 \"${srcdir}\"/sub/dir/arch/arm/boot/zImage-dtb ",
" \"$pkgdir\"/boot/vmlinuz-$_flavor",
" install -D \"${srcdir}\"/sub/dir/include/config/kernel.release ",
" \"$pkgdir\"/usr/share/kernel/$_flavor/kernel.release",
]
kbuild_out = pmb.build.envkernel.find_kbuild_output_dir(function_body)
assert kbuild_out == "sub/dir"
# Test no kbuild out dir found
function_body = [
" install -Dm644 \"$srcdir\"/build/not/found/zImage-dtb ",
" \"$pkgdir\"/boot/vmlinuz-$_flavor",
" install -D \"$srcdir\"/not/found/kernel.release ",
" \"$pkgdir\"/usr/share/kernel/$_flavor/kernel.release",
]
with pytest.raises(RuntimeError) as e:
kbuild_out = pmb.build.envkernel.find_kbuild_output_dir(function_body)
assert ("Couldn't find a kbuild out directory. Is your APKBUILD messed up?"
" If not, then consider adjusting the patterns in "
"pmb/build/envkernel.py to work with your APKBUILD, or submit an "
"issue.") in str(e.value)
# Test multiple different kbuild out dirs
function_body = [
" install -Dm644 \"$srcdir\"/build/arch/arm/boot/zImage-dtb ",
" \"$pkgdir\"/boot/vmlinuz-$_flavor",
" install -D \"$srcdir\"/include/config/kernel.release ",
" \"$pkgdir\"/usr/share/kernel/$_flavor/kernel.release",
]
with pytest.raises(RuntimeError) as e:
kbuild_out = pmb.build.envkernel.find_kbuild_output_dir(function_body)
assert ("Multiple kbuild out directories found. Can you modify your "
"APKBUILD so it only has one output path? If you can't resolve it,"
" please open an issue.") in str(e.value)