]> git.ipfire.org Git - pakfire.git/commitdiff
tests: Add test for parser
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 13 Mar 2019 14:34:01 +0000 (14:34 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 13 Mar 2019 14:34:01 +0000 (14:34 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
.gitignore
Makefile.am
tests/data/kernel.nm [new file with mode: 0644]
tests/libpakfire/makefile.c [new file with mode: 0644]

index bfac268b341d44c7008a8a8dceb979a7c03bf964..8a426ce5a48c4d3b3ad987c87f1b381fdde8f1a9 100644 (file)
@@ -13,6 +13,7 @@
 /tests/libpakfire/archive
 /tests/libpakfire/key
 /tests/libpakfire/main
+/tests/libpakfire/makefile
 /tmp
 *.py[co]
 /*.tar.bz2
index 7329af45bd395d103e3da6fb8e20d9aedfa7eb62..18fdbc90be8ed7de84b3aca6752909be477b4994 100644 (file)
@@ -351,7 +351,8 @@ EXTRA_DIST += \
 check_PROGRAMS += \
        tests/libpakfire/main \
        tests/libpakfire/archive \
-       tests/libpakfire/key
+       tests/libpakfire/key \
+       tests/libpakfire/makefile
 
 dist_tests_libpakfire_main_SOURCES = \
        tests/libpakfire/main.c
@@ -385,6 +386,17 @@ tests_libpakfire_key_LDADD = \
        $(TESTSUITE_LDADD) \
        $(PAKFIRE_LIBS)
 
+dist_tests_libpakfire_makefile_SOURCES = \
+       tests/libpakfire/makefile.c
+
+tests_libpakfire_makefile_CPPFLAGS = \
+       $(TESTSUITE_CPPFLAGS) \
+       -DPAKFIRE_PRIVATE
+
+tests_libpakfire_makefile_LDADD = \
+       $(TESTSUITE_LDADD) \
+       $(PAKFIRE_LIBS)
+
 # ------------------------------------------------------------------------------
 
 lib_LTLIBRARIES += \
diff --git a/tests/data/kernel.nm b/tests/data/kernel.nm
new file mode 100644 (file)
index 0000000..4595e62
--- /dev/null
@@ -0,0 +1,458 @@
+###############################################################################
+# IPFire.org    - An Open Source Firewall Solution                            #
+# Copyright (C) - IPFire Development Team <info@ipfire.org>                   #
+###############################################################################
+
+name       = kernel
+version    = 4.20
+release    = 12
+thisapp    = linux-%{version}
+
+maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
+groups     = System/Kernels
+url        = http://www.kernel.org/
+license    = GPLv2
+summary    = The Linux kernel.
+
+description
+       The kernel package contains the Linux kernel (vmlinuz), the core of any
+       Linux operating system. The kernel handles the basic functions
+       of the operating system: memory allocation, process allocation, device
+       input and output, etc.
+end
+
+# Version helper variables.
+localversion = %{release}.%{DISTRO_DISTTAG}.%{DISTRO_ARCH}
+fullver      = %{version}-%{localversion}
+
+source_dl    = http://www.kernel.org/pub/linux/kernel/v4.x/
+sources      = %{thisapp}.tar.xz
+
+build
+       kernel_logo = /usr/share/pixmaps/kernel-logo.ppm
+
+       requires
+               asciidoc
+               bc
+               binutils >= 2.25
+               binutils-devel
+               bison
+               elfutils-devel
+               flex
+               gcc >= 4.9
+               gcc-plugin-devel
+               gettext
+               hostname
+               libunwind-devel
+               ncurses-devel
+               net-tools
+               newt-devel
+               pciutils-devel
+               perl
+               python-devel
+               openssl-devel
+               slang-devel
+               xmlto
+               xz
+
+               /sbin/depmod
+               %{kernel_logo}
+       end
+
+       # A list of kernels to build.
+       kernels =
+
+       kernel_arch = %{DISTRO_PLATFORM}
+       kernel_target = bzImage
+       kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
+
+       if "%{DISTRO_ARCH}" == "x86_64"
+               build_kernel_default = 1
+       end
+
+       if "%{DISTRO_ARCH}" == "aarch64"
+               build_kernel_default = 1
+
+               kernel_arch = arm64
+               kernel_target = Image.gz
+       end
+
+       if "%{DISTRO_ARCH}" == "armv7hl"
+               # Build the default unified kernel.
+               build_kernel_default = 1
+
+               kernel_target = zImage
+       end
+
+       # mkimage is a requirement to build uImage images.
+       if "%{kernel_target}" == "uImage"
+               requires += u-boot-tools
+       end
+
+       # Build default kernel.
+       if "%{build_kernel_default}" == "1"
+               kernels += default
+       end
+
+       prepare_cmds
+               # Disable the colorize plugin.
+               # It's generally very nice but it clutters our
+               # logfiles.
+               sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
+                       -i Makefile
+
+               sed -e "s/\$(HOST_LFS_CFLAGS)/& -fPIC/g" -i Makefile
+
+               cp -vf %{kernel_logo} \
+                       drivers/video/logo/logo_linux_clut224.ppm
+
+               # Get rid of unwanted files resulting from patch fuzz.
+               find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
+
+               # Remove unnecessary SCM files.
+               find . -name .gitignore -exec rm -f {} \; >/dev/null
+
+               # This prevents scripts/setlocalversion from mucking with our version numbers.
+               touch .scmversion
+
+               mkdir -pv configs
+
+               cd %{DIR_SOURCE}
+               configure_kernel() {
+                       local flavour=${1}
+                       local suffix
+                       if [ "${flavour}" != "default" ]; then
+                               suffix="-${flavour}"
+                       fi
+
+                       scripts/configure --kernel-dir=%{DIR_APP} \
+                               merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
+               }
+
+               # Generate configuration files for all kernels we are going to
+               # build.
+               for kernel in %{kernels}; do
+                       configure_kernel ${kernel}
+               done
+       end
+
+       build
+               build_kernel() {
+                       local flavour=${1}
+                       local suffix
+                       local localversion="%{localversion}"
+                       local fullversion="%{fullver}"
+                       if [ "${flavour}" != "default" ]; then
+                               suffix="-${flavour}"
+                               localversion="${localversion}.${flavour}"
+                               fullversion="${fullversion}.${flavour}"
+                       fi
+
+                       # Label the build.
+                       sed -i Makefile \
+                               -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
+
+                       # Clean up the source tree.
+                       make mrproper
+
+                       # Install configuration file.
+                       cp configs/config.${flavour} .config
+                       cat .config
+
+                       # Run the build.
+                       make ARCH=%{kernel_arch} olddefconfig >/dev/null
+                       make ARCH=%{kernel_arch} %{kernel_target} modules \
+                               KERNELRELEASE=${fullversion} %{PARALLELISMFLAGS}
+
+                       # Compile Flattened Device Tree database
+                       case "${DISTRO_ARCH}" in
+                               aarch64|arm*)
+                                       make ARCH=%{kernel_arch} dtbs
+
+                                       mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
+                                       for file in arch/arm/boot/dts/*.dtb; do
+                                               [ -e "${file}" ] || continue
+
+                                               install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
+                                               rm -f ${file}
+                                       done
+                                       ;;
+                       esac
+
+                       # Install the results.
+                       mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
+                       install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
+                       install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
+                       install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
+
+                       # Create empty initramfs (20M).
+                       dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
+
+                       # Install modules.
+                       make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
+                               KERNELRELEASE=${fullversion} modules_install
+
+                       # Create an empty settings file for dracut
+                       mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
+                       echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
+                               > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
+
+                       # And now the scary looking part.
+                       #
+                       # Recreate source and build links.
+                       rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
+                       mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
+                       ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
+
+                       # Create dirs for extra modules.
+                       mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
+
+                       cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
+                               %{BUILDROOT}/usr/lib/modules/${fullversion}/build
+                       cp Module.symvers System.map \
+                               %{BUILDROOT}/usr/lib/modules/${fullversion}/build
+                       rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
+
+                       cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
+                       cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
+                       find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
+                               -exec rm -vf {} \;
+
+                       cp -a --parents arch/%{kernel_arch}/include \
+                               %{BUILDROOT}/usr/lib/modules/${fullversion}/build
+                       cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
+
+                       # Make sure we can build external modules.
+                       touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
+                               %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
+                       touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
+                               %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
+                       cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
+                               %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
+
+                       find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
+                               xargs --no-run-if-empty chmod u+x
+
+                       # Move all development files to /usr/src.
+                       mkdir -p %{BUILDROOT}/usr/src/kernels
+                       mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
+                               %{BUILDROOT}/usr/src/kernels/${fullversion}
+                       ln -sf ../../../src/kernels/${fullversion} \
+                               %{BUILDROOT}/usr/lib/modules/${fullversion}/build
+
+                       # Fix permissions.
+                       find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
+                               -exec chmod 644 {} \;
+
+                       find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
+
+                       # remove device tree compiler because there are dead links
+                       rm -rf %{BUILDROOT}/usr/src/kernels/*/scripts/dtc
+               }
+
+               for kernel in %{kernels}; do
+                       build_kernel ${kernel}
+               done
+
+               # cpupower
+               chmod +x tools/power/cpupower/utils/version-gen.sh
+               make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
+
+               pushd tools/thermal/tmon
+               make
+               popd
+       end
+
+       install
+               # When no kernels are configured, we create a default config
+               # which enables us to install at least the header files.
+               [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
+
+               # Install the header files
+               make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
+               mkdir -pv %{BUILDROOT}/usr/include
+               find dest/include \( -name .install -o -name ..install.cmd \) -delete
+               cp -rv dest/include/* %{BUILDROOT}/usr/include
+
+               # Glibc provides these headers
+               rm -rfv %{BUILDROOT}/usr/include/scsi \
+                       %{BUILDROOT}/usr/include/asm*/atomic.h \
+                       %{BUILDROOT}/usr/include/asm*/io.h \
+                       %{BUILDROOT}/usr/include/asm*/irq.h
+
+               # Remove all firmware files which are distributed by linux-firmware
+               rm -rfv %{BUILDROOT}/lib/firmware
+
+               # Install tools.
+               # cpupower
+               make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
+                       mandir=%{mandir} CPUFREQ_BENCH=false install
+
+               chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
+
+               # tmon
+               pushd tools/thermal/tmon
+               make INSTALL_ROOT=%{BUILDROOT} install
+               popd
+       end
+end
+
+packages
+       template KERNEL
+               kernel_name = kernel
+               kernel_release = %{fullver}
+
+               summary = The Linux kernel %{kernel_release}.
+
+               prerequires
+                       /sbin/depmod
+               end
+
+               provides
+                       kernel=%{kernel_release}
+               end
+
+               requires
+                       dracut
+                       grubby
+                       linux-firmware
+               end
+
+               files
+                       /boot/System.map-%{kernel_release}
+                       /boot/dtb-%{kernel_release}
+                       /boot/vmlinuz-%{kernel_release}
+                       /boot/initramfs-%{kernel_release}.img
+                       /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
+                       /usr/lib/modules/%{kernel_release}
+               end
+
+               _posttrans
+                       /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
+                       /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
+               end
+
+               script posttransin
+                       %{_posttrans}
+               end
+
+               script posttransup
+                       %{_posttrans}
+               end
+
+               script postin
+                       /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
+               end
+
+               script postup
+                       /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
+               end
+
+               script preun
+                       /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
+               end
+       end
+
+       template KERNELDEVEL
+               kernel_release = %{fullver}
+
+               summary = Development files of kernel-%{kernel_release}.
+               description
+                       %{summary}
+
+                       Install this package in order to compile modules for
+                       kernel release %{kernel_release}.
+               end
+
+               provides
+                       kernel-devel = %{thisver}
+               end
+
+               filter_requires
+                       perl>=[0-9]\:.*
+               end
+
+               files
+                       /usr/lib/modules/%{kernel_release}/build
+                       /usr/lib/modules/%{kernel_release}/source
+                       /usr/src/kernels/%{kernel_release}
+               end
+       end
+
+       if "%{build_kernel_default}" == "1"
+               if "%{DISTRO_ARCH}" == "armv7hl"
+                       package kernel
+                               template KERNEL
+
+                               kernel_name = kernel
+                               kernel_release = %{fullver}
+
+                               # Replace the Exynos kernel.
+                               obsoletes += kernel-exynos < %{kernel_release}
+                               conflicts += kernel-exynos < %{kernel_release}
+
+                               # Replace the OMAP kernel.
+                               obsoletes += kernel-omap < %{kernel_release}
+                               conflicts += kernel-omap < %{kernel_release}
+                       end
+
+                       package kernel-devel
+                               template KERNELDEVEL
+
+                               kernel_name = kernel
+                               kernel_release = %{fullver}
+
+                               # Replace the Exynos kernel.
+                               obsoletes += kernel-exynos-devel < %{kernel_release}
+                               conflicts += kernel-exynos-devel < %{kernel_release}
+
+                               # Replace the OMAP kernel.
+                               obsoletes += kernel-omap-devel < %{kernel_release}
+                               conflicts += kernel-omap-devel < %{kernel_release}
+                       end
+
+               else
+                       package kernel
+                               template KERNEL
+
+                               kernel_name = kernel
+                               kernel_release = %{fullver}
+                       end
+
+                       package kernel-devel
+                               template KERNELDEVEL
+
+                               kernel_name = kernel
+                               kernel_release = %{fullver}
+                       end
+               end
+       end
+
+       package kernel-headers
+               summary = Header files of the kernel release %{fullver}.
+               desciption = %{summary}
+
+               files
+                       /usr/include
+               end
+       end
+
+       package kernel-tools
+               summary = Assortment of tools for the Linux kernel.
+               description = %{summary}
+
+               filter_requires
+                       perl>=[0-9]\:.*
+               end
+
+               files
+                       /
+                       !/boot
+                       !/usr/include
+                       !/usr/lib/modules
+                       !/usr/src
+                       !/usr/src/debug
+                       !/usr/lib/debug
+               end
+       end
+end
diff --git a/tests/libpakfire/makefile.c b/tests/libpakfire/makefile.c
new file mode 100644 (file)
index 0000000..55e24ef
--- /dev/null
@@ -0,0 +1,55 @@
+/*#############################################################################
+#                                                                             #
+# Pakfire - The IPFire package management system                              #
+# Copyright (C) 2019 Pakfire development team                                 #
+#                                                                             #
+# This program 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.                                         #
+#                                                                             #
+# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+#############################################################################*/
+
+#include <string.h>
+
+#include <pakfire/parser.h>
+#include <pakfire/util.h>
+
+#include "../testsuite.h"
+
+int test_parse(const test_t* t) {
+       char* path = pakfire_path_join(TEST_SRC_PATH, "data/kernel.nm");
+
+       // Open file
+       FILE* f = fopen(path, "r");
+       assert_return(f, EXIT_FAILURE);
+
+       struct pakfire_parser_declaration** declarations = \
+               pakfire_parser_parse_metadata_from_file(t->pakfire, f);
+
+       // Check if we have found some declarations
+       assert_return(declarations, EXIT_FAILURE);
+
+       // Cleanup
+       pakfire_free(path);
+
+       return EXIT_SUCCESS;
+}
+
+int main(int argc, char** argv) {
+       testsuite_init();
+
+       testsuite_t* ts = testsuite_create(1);
+
+       testsuite_add_test(ts, "test_parse", test_parse);
+
+       return testsuite_run(ts);
+}