From c723b72979bfac6362509cf1fe086900f6641f28 Mon Sep 17 00:00:00 2001 From: Andrew Geissler Date: Fri, 8 Jan 2021 16:14:09 -0600 Subject: poky: subtree update:796be0593a..10c69538c0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Alan Perry (1): binutils: add libopcodes package for perf Alex Stewart (1): opkg: upgrade to version 0.4.4 Alexander Kanavin (73): selftest/reproducible: enable world reproducibility test selftest/reproducible: add an exclusion list for items that are not yet reproducible kea: upgrade 1.7.10 -> 1.8.1 valgrind: exclude bar_bad/bar_bad_xml from ptests bzip2: run ptests without valgrind lttng-tools: disable more failing ptests glib-2.0: add a patch to increase a test timeout acpica: upgrade 20201113 -> 20201217 bind: upgrade 9.16.9 -> 9.16.10 diffoscope: upgrade 161 -> 163 dnf: upgrade 4.4.0 -> 4.5.2 enchant2: upgrade 2.2.13 -> 2.2.14 epiphany: upgrade 3.38.1 -> 3.38.2 ethtool: upgrade 5.9 -> 5.10 gtk+3: upgrade 3.24.23 -> 3.24.24 init-system-helpers: upgrade 1.58 -> 1.60 kbd: upgrade 2.3.0 -> 2.4.0 kea: upgrade 1.8.1 -> 1.8.2 libmodulemd: upgrade 2.9.4 -> 2.11.1 libpcre2: upgrade 10.35 -> 10.36 libtirpc: upgrade 1.2.6 -> 1.3.1 libusb1: upgrade 1.0.23 -> 1.0.24 libva: upgrade 2.9.0 -> 2.10.0 libx11: upgrade 1.6.12 -> 1.7.0 lighttpd: upgrade 1.4.56 -> 1.4.57 ninja: upgrade 1.10.1 -> 1.10.2 puzzles: upgrade to latest revision python3-hypothesis: upgrade 5.41.5 -> 5.43.3 python3-py: upgrade 1.9.0 -> 1.10.0 python3-setuptools-scm: upgrade 4.1.2 -> 5.0.1 sqlite3: upgrade 3.33.0 -> 3.34.0 stress-ng: upgrade 0.11.24 -> 0.12.00 sudo: upgrade 1.9.3p1 -> 1.9.4p1 sysvinit: upgrade 2.97 -> 2.98 vala: upgrade 0.50.1 -> 0.50.2 vulkan-headers: upgrade 1.2.154.0 -> 1.2.162.0 webkitgtk: upgrade 2.30.2 -> 2.30.4 xprop: upgrade 1.2.4 -> 1.2.5 xserver-xorg: upgrade 1.20.9 -> 1.20.10 glib-2.0: update 2.66.2 -> 2.66.4 rpm: update 4.16.0 -> 4.16.1.2 piglit: update to latest revision sbc: update 1.4 -> 1.5 libdnf: update 0.55.0 -> 0.55.2 libva-utils: update 2.9.1 -> 2.10.0 python3-importlib-metadata: update 3.1.1 -> 3.3.0 python3: update 3.9.0 -> 3.9.1 vulkan-loader: upgrade 1.2.154.1 -> 1.2.162.0 vulkan-tools: upgrade 1.2.154.0 -> 1.2.162.0 systemd-bootchart: update 233 -> 234 zstd: add recipe from meta-oe zstd: update 1.4.5 -> 1.4.8 devtool: gitsm:// should be handled same as git:// in upgrades ovmf: upgrade 202008 -> 202011 libksba: update 1.4.0 -> 1.5.0 libjitterentropy: update 2.2.0 -> 3.0.0 icu: update 68.1 -> 68.2 gnutls: update 3.6.15 -> 3.7.0 gnupg: update 2.2.23 -> 2.2.26 boost: update 1.74.0 -> 1.75.0 kexec-tools: update 2.0.20 -> 2.0.21 vulkan-samples: update to latest revision libpam: update 1.3.1 -> 1.5.1 strace: update 5.9 -> 5.10 python3-pytest: update 6.1.2 -> 6.2.1 mtools: update 4.0.25 -> 4.0.26 gnu-config: update to latest revision cmake: update 3.18.4 -> 3.19.2 ccache: upgrade 3.7.11 -> 4.1 ccache.bbclass: use ccache from host distribution gawk: add missing ptest dependency util-linux: upgrade 2.36 -> 2.36.1 ell: upgrade 0.33 -> 0.35 Anatol Belski (1): iproute2: Make it easier to manipulate SUBDIRS list from bbappend Anuj Mittal (2): mesa: add more details to elf-tls patch mesa: remove patch disabling asm Bruce Ashfield (23): linux-yocto-rt/5.4: update to -rt44 linux-yocto/5.4: update to v5.4.80 lttng-modules: fix build against v5.10+ kern-tools: non-gcc config support and option re-classification linux-yocto/cfg: qemuppc: set CONFIG_SCSI to '=y' linux-yocto/5.4: update to v5.4.82 linux-yocto/cfg: qemuarm64-gfx.cfg: add CONFIG_INPUT_UINPUT linux-yocto/5.4: update to v5.4.83 linux-yocto/5.8/cfg: fix -tiny warnings linux-yocto/5.4/cfg: fix -tiny warnings systemtap: fix on target build for 4.4 and 5.10+ linux-yocto/5.4/cfg: fix FIRMWARE_LOADER warnings kernel-devsrc: fix 32bit ARM devsrc builds linux-yocto/5.4: update to v5.4.85 linux-yocto-dev: bump to v5.11-rc libc-headers: update to v5.10 machine/qemuarm*: add vmalloc kernel parameter linux-yocto: introduce v5.10 reference kernel recipes linux-yocto/5.10: update to v5.10.2 conf/machine: bump qemu preferred versions to 5.10 poky/poky-tiny: set preferred kernel to 5.10 yocto-bsp: explicitly set preferred version for reference boards poky-alt: don't use conditional assignment for preferred kernel version Changqing Li (2): libexif: fix CVE-2020-0198; CVE-2020-0452 libpam: support usrmerge Chris Laplante (1): contrib/git-hooks: add a sendemail-validate example hook that adds FROM: lines to outgoing patch emails Christopher Larson (2): grub-efi-cfg: exclude OVERRIDES from build_efi_cfg vardeps uboot-extlinux-config: exclude OVERRIDES from do_create_extlinux_config vardeps Deepak Rawat (1): openssl: add support for mingw64 as target Diego Sueiro (2): wic: Introduce empty plugin to create unformatted empty partitions modutils-initscripts: Use depmod -a when modules.dep is empty Dmitry Baryshkov (3): perl: fix installation failure because of shell issue linux-firmware: upgrade 20201118 -> 20201218 linux-firmware: package firmware for Lontium lt9611uxc bridge Easwar Hariharan (1): classes/kernel-fitimage: make fitimage_emit_section_config more readable Elvis Stansvik (1): ref-manual: terms: Fix poky tarball root folder Jack Mitchell (1): distutils3: allow setup.py to be run from a different directory to ${S} Joey Degges (4): bitbake: tests/fetch: Organize usehead tests by net requirements bitbake: tests/fetch: Document behavior of test_gitfetch_usehead bitbake: tests/fetch: Test usehead with a non-default name bitbake: fetch/git: Fix usehead for non-default names Jose Quaresma (11): gstreamer1.0: upgrade 1.18.1 -> 1.18.2 gstreamer1.0-plugins-bad: v4l2codecs fix typo gstreamer1.0-plugins-bad: add support for aom plugin gstreamer1.0-plugins-bad: add support for x265 plugin gstreamer1.0-plugins-bad: sctp plugin uses the internal usrsctp static lib gstreamer1.0-plugins-bad: remove unsupported plugins comment gstreamer1.0-plugins-bad: netsim plugin don't have external deps gstreamer1.0-plugins-bad: transcode plugin external deps is always present gstreamer1.0: use the correct meson option for the capabilities shaderc: upgrade 2020.3 -> 2020.4 spirv-tools: upgrade 2020.5 -> 2020.6 Khairul Rohaizzat Jamaluddin (3): openssl: Update 1.1.1h -> 1.1.1i go: Update 1.15.5 -> 1.15.6 curl: Update 7.73.0 -> 7.74.0 Khem Raj (21): musl: Update to latest master systemd: Fix reallocarray check go.bbclass: Use external linker for native packages qemuriscv: check serial consoles w.r.t. /proc/consoles busybox-inittab: Implement SYSVINIT_ENABLED_GETTYS and USE_VT initscripts: use quotes for shell variable comparision busybox: Install /etc/default/rcS when used as init system busybox: Run mdev as daemon rcS: Define identifier for init system used initscripts: Use initctl on sysvinit only busybox: Sync rcS.default with sysvinit ltp: Fix ltp-pan crash on 32bit arches using 64bit time_t pulseaudio: Fix build with clang for non-x86 target util-linux: Build fixes for 32bit arches with 64bit time_t libpam: Drop musl patches ccache: Build fixes for clang and riscv32 shadow: Remove lastlog pam plugin on musl system rxvt-unicode: Disable lastlog on musl systems openssh: Disable lastlog on musl dropbear: Disable lastlog and wtmp on musl ccache: Fix build on aarch64/clang Lee Chee Yang (2): gdk-pixbuf: fix CVE-2020-29385 wic/direct/kparser: ensure fsuuid for vfat and msdos align with format Li Wang (2): qemu: CVE-2020-25723 qemu: CVE-2020-28916 Luca Boccassi (6): classes/kernel-fitimage: add ability to sign individual images systemd: update 246 -> 247 systemd: add package config for systemd-oomd systemd: ship new systemd-dissect in -extra-utils systemd: set -Dmode=release as recommended by NEWS systemd: add RRECOMMENDS for weak dependencies, if enabled Mark Jonas (1): parted: Make readline dependency optional Martin Jansa (2): license.bbclass: Add COMMON_LICENSE_DIR and LICENSE_PATH dirs to PSEUDO_IGNORE_PATHS busybox.inc: install rcS, rcK and rcS.default only with busybox in VIRTUAL-RUNTIME_init_manager Maxime Roussin-BĂ©langer (1): meta: add missing descriptions in some support recipes Michael Halstead (1): releases: conf: add link to 3.2.1, update to include 3.2.1 Milan Shah (2): oe-pkgdata-util: Added a test to verify oe-pkgdata-util without parameters bitbake: utils: add docstrings to functions Mingli Yu (1): kbd: fix transaction conflict Nathan Rossi (7): gcc: Add patch to resolve i*86 tune configuration overrides qemu.inc: Add seccomp PACKAGECONFIG option ncurses: Prevent LDFLAGS being emitted in .pc files which: add nativesdk to BBCLASSEXTEND sed: add nativesdk to BBCLASSEXTEND grep: add nativesdk to BBCLASSEXTEND coreutils: enable xattrs by default for nativesdk Ovidiu Panait (3): timezone: upgrade to 2020e timezone: upgrade to 2020f variables: Add documentation for KERNEL_DTC_FLAGS Paul Barker (8): bitbake.conf: Prevent pyc file generation in pseudo context documentation: Simplify oe_wiki and oe_home links documentation: Simplify layerindex and layer links documentation: Simplify remaining yocto_home links profile-manual: Simplify yocto_bugs link ref-manual: Simplify oe_lists link documentation: Use https links where possible selftest: Add argument to keep build dir Paul Eggleton (11): classes/kernel-fitimage: add variable for description classes/kernel-fitimage: allow substituting mkimage command classes/kernel-fitimage: add ability to add additional signing options oe-selftest: move FIT image tests to their own module oe-selftest: fitimage: Test for FIT_DESC oe-selftest: fitimage: add test for signing FIT images classes: minor corrections to kernel-fitimage section variables: clarify KERNEL_ALT_IMAGETYPE reference variables: explicitly state that UBOOT_MKIMAGE_DTCOPTS is optional variables: Add documentation for new kernel-fitimage vars ref-manual: use consistent capitalisation of U-Boot Peter Kjellerstedt (7): lib/oe/path: Add canonicalize() bitbake.conf: Canonicalize paths in PSEUDO_IGNORE_PATHS wic: Pass canonicalized paths in PSEUDO_IGNORE_PATHS glibc: Make adjtime() for 32 bit support being called with delta == NULL bitbake: cache: Make CoreRecipeInfo include rprovides_pkg for skipped recipes bitbake: cooker: Include all packages a recipe provides in SkippedPackage.rprovides apr-util: Only specify --with-dbm=gdbm if gdbm support is enabled Richard Purdie (22): pseudo: Drop patches merged into upstream branch bitbake: data_smart: Ensure hash reflects vardepvalue flags correctly linuxloader: Avoid confusing string concat errors systemd: Ensure uid/gid ranges are set deterministically grub: Fix build reproducibility issue u-boot-tools: Fix reproducibility issue grub: Add second fix for determinism issue oeqa/commands: Ensure sync can be found regardless of PATH cups: Mark CVE-2009-0032 as a non-issue cups: Mark CVE-2008-1033 as a non-issue groff: Fix reproducibility issue man-db: Avoid reproducibility failures after fixing groff-native meta-selftest/staticids: Add ids for other recipes selftest/reproducible: Add useradd-staticids to reproducible builds tests grub: Further reproducibility fix man-db: Fix reproducibility issue bitbake.conf: Add mkfifo to HOSTTOOLS bitbake.conf: Add /run/ to PSEUDO_IGNORE_PATHS ppp: Update 2.4.8 -> 2.4.9 ppp: Fix reproducibility issue sanity: Bump min python version to 3.6 pseudo: Add lchmod wrapper Robert Yang (6): buildtools-tarball.bb: Fix PATH for environment setup script ncurses: Make ncurses-tools depend on ncurses-terminfo-base minicom: RDEPENDS on ncurses-terminfo-base archiver.bbclass: Fix --runall=deploy_archives for images ccache: Extend to nativesdk ccache.bbclass: Set CCACHE_TEMPDIR Ross Burton (13): wic-image-minimal: only depend on syslinux on x86 targets syslinux: rewrite recipe so only target code is x86-specific wic-tools: don't build syslinux-native for targets without syslinux image-uefi.conf: add EFI arch variable systemd-boot: build the EFI stub systemd-boot: allow building for Arm targets wic-tools: add grub-efi and systemd-boot on arm64 lib/oe/qa: handle the 'no specific instruction set' ELF e_machine value local.conf: add aarch64 to the SDKMACHINE example values kernel: set COMPATIBLE_HOST to *-linux bitbake.conf: default SDKMACHINE to the build host architecture diffstat: point the license checksum at the license ruby: remove tcl DEPENDS Scott Murray (2): grub: fix "CVE:" line in one of the patches patch: fix CVE-2019-20633 Sinan Kaya (1): gcsections: add more suppressions for SDK builds Steve Sakoman (1): oeqa/selftest/cases/devtool.py: fix typo in ignore_patterns call Tanu Kaskinen (6): maintainers.inc: remove myself from maintainers pulseaudio: Remove OE_LT_RPATH_ALLOW pulseaudio: disable EsounD support pulseaudio: disable GConf support pulseaudio: switch build system from Autotools to Meson pulseaudio: fix client.conf location Teoh Jay Shen (2): oeqa/terminal : improve the test case oeqa/suspend : add test for suspend state Tim Orling (6): python3-hypothesis: upgrade 5.41.4 -> 5.41.5 python3-importlib-metadata: upgrade 3.1.0 -> 3.1.1 python3-pygments: upgrade v2.7.2 -> v2.7.3 python3-setuptools: upgrade 50.3.2 -> 51.0.0 python3-setuptools-scm: add python3-toml dep python3-packaging: upgrade 20.4 -> 20.8 Tomasz Dziendzielski (1): populate_sdk_base: Fix condition syntax if SDK_RELOCATE_AFTER_INSTALL is disabled Trevor Woerner (7): mesa.inc: switch true/enabled false/disabled mesa: update 20.2.4 -> 20.3.1 insane.bbclass: allow fifos selftest-chown: add test for fifos PSPLASH_FIFO_DIR: refactor psplash: fix working on first boot (sysvinit) psplash (sysvinit): add textual updates Vivien Didelot (4): README.hardware: prettify headline README.hardware: fix the dd command meta-yocto-bsp: use provided variables meta-yocto-bsp: use mmcblk0 for root partition Wang Mingyu (4): libaio: upgrade 0.3.111 -> 0.3.112 readline: upgrade 8.0 -> 8.1 man-pages: upgrade 5.09 ->5.10 mobile-broadband-provider-info: upgrade 20190618 ->20201225 Yi Zhao (6): dhcpcd: upgrade 9.3.2 -> 9.3.4 dhcpcd: fix SECCOMP for i386 inetutils: add dnsdomainname to ALTERNATIVE libcap: update 2.45 -> 2.46 libcap-ng: upgrade 0.8.1 -> 0.8.2 dhcpcd: upgrade 9.3.4 -> 9.4.0 Zhixiong Chi (1): glibc: CVE-2020-29562 and CVE-2020-29573 zangrc (3): bash: Rename patch name systemtap: upgrade 4.3 -> 4.4 msmtp: upgrade 1.8.13 -> 1.8.14 zhengruoqin (2): cantarell-fonts: upgrade 0.201 -> 0.301 gdbm: upgrade 1.18.1 -> 1.19 Signed-off-by: Andrew Geissler Change-Id: I9000a711651a4e884e8bfccc438c95fce184b35e --- poky/meta/lib/oeqa/selftest/cases/buildoptions.py | 8 +- poky/meta/lib/oeqa/selftest/cases/devtool.py | 2 +- poky/meta/lib/oeqa/selftest/cases/fitimage.py | 233 +++++++++++++++++++++ poky/meta/lib/oeqa/selftest/cases/imagefeatures.py | 74 ------- poky/meta/lib/oeqa/selftest/cases/oelib/elf.py | 2 +- poky/meta/lib/oeqa/selftest/cases/package.py | 3 +- poky/meta/lib/oeqa/selftest/cases/pkgdata.py | 6 + poky/meta/lib/oeqa/selftest/cases/pseudo.py | 27 +++ poky/meta/lib/oeqa/selftest/cases/reproducible.py | 90 +++++++- poky/meta/lib/oeqa/selftest/cases/wic.py | 20 ++ poky/meta/lib/oeqa/selftest/context.py | 17 +- 11 files changed, 393 insertions(+), 89 deletions(-) create mode 100644 poky/meta/lib/oeqa/selftest/cases/fitimage.py create mode 100644 poky/meta/lib/oeqa/selftest/cases/pseudo.py (limited to 'poky/meta/lib/oeqa/selftest') diff --git a/poky/meta/lib/oeqa/selftest/cases/buildoptions.py b/poky/meta/lib/oeqa/selftest/cases/buildoptions.py index e91f0bd18..d0f647730 100644 --- a/poky/meta/lib/oeqa/selftest/cases/buildoptions.py +++ b/poky/meta/lib/oeqa/selftest/cases/buildoptions.py @@ -33,10 +33,10 @@ class ImageOptionsTests(OESelftestTestCase): self.assertTrue(incremental_removed, msg = "Match failed in:\n%s" % log_data_removed) def test_ccache_tool(self): - bitbake("ccache-native") - bb_vars = get_bb_vars(['SYSROOT_DESTDIR', 'bindir'], 'ccache-native') - p = bb_vars['SYSROOT_DESTDIR'] + bb_vars['bindir'] + "/" + "ccache" - self.assertTrue(os.path.isfile(p), msg = "No ccache found (%s)" % p) + bb_vars = get_bb_vars(['HOSTTOOLS_DIR'], 'm4-native') + p = bb_vars['HOSTTOOLS_DIR'] + "/" + "ccache" + if not os.path.isfile(p): + self.skipTest("No ccache binary found in %s" % bb_vars['HOSTTOOLS_DIR']) self.write_config('INHERIT += "ccache"') self.add_command_to_tearDown('bitbake -c clean m4-native') bitbake("m4-native -c clean") diff --git a/poky/meta/lib/oeqa/selftest/cases/devtool.py b/poky/meta/lib/oeqa/selftest/cases/devtool.py index b8edc8976..4eba23890 100644 --- a/poky/meta/lib/oeqa/selftest/cases/devtool.py +++ b/poky/meta/lib/oeqa/selftest/cases/devtool.py @@ -57,7 +57,7 @@ def setUpModule(): if relpth.endswith('/'): destdir = os.path.join(corecopydir, relpth) # avoid race condition by not copying .pyc files YPBZ#13421,13803 - shutil.copytree(pth, destdir, ignore=ignore_patterns('*.pyc', '__pycache__')) + shutil.copytree(pth, destdir, ignore=shutil.ignore_patterns('*.pyc', '__pycache__')) else: destdir = os.path.join(corecopydir, os.path.dirname(relpth)) bb.utils.mkdirhier(destdir) diff --git a/poky/meta/lib/oeqa/selftest/cases/fitimage.py b/poky/meta/lib/oeqa/selftest/cases/fitimage.py new file mode 100644 index 000000000..19b9f53ee --- /dev/null +++ b/poky/meta/lib/oeqa/selftest/cases/fitimage.py @@ -0,0 +1,233 @@ +# +# SPDX-License-Identifier: MIT +# + +from oeqa.selftest.case import OESelftestTestCase +from oeqa.utils.commands import runCmd, bitbake, get_bb_var, runqemu +import os +import json +import re + +class FitImageTests(OESelftestTestCase): + + def test_fit_image(self): + """ + Summary: Check if FIT image and Image Tree Source (its) are built + and the Image Tree Source has the correct fields. + Expected: 1. fitImage and fitImage-its can be built + 2. The type, load address, entrypoint address and + default values of kernel and ramdisk are as expected + in the Image Tree Source. Not all the fields are tested, + only the key fields that wont vary between different + architectures. + Product: oe-core + Author: Usama Arif + """ + config = """ +# Enable creation of fitImage +KERNEL_IMAGETYPE = "Image" +KERNEL_IMAGETYPES += " fitImage " +KERNEL_CLASSES = " kernel-fitimage " + +# RAM disk variables including load address and entrypoint for kernel and RAM disk +IMAGE_FSTYPES += "cpio.gz" +INITRAMFS_IMAGE = "core-image-minimal" +UBOOT_RD_LOADADDRESS = "0x88000000" +UBOOT_RD_ENTRYPOINT = "0x88000000" +UBOOT_LOADADDRESS = "0x80080000" +UBOOT_ENTRYPOINT = "0x80080000" +FIT_DESC = "A model description" +""" + self.write_config(config) + + # fitImage is created as part of linux recipe + bitbake("virtual/kernel") + + image_type = "core-image-minimal" + deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE') + machine = get_bb_var('MACHINE') + fitimage_its_path = os.path.join(deploy_dir_image, + "fitImage-its-%s-%s-%s" % (image_type, machine, machine)) + fitimage_path = os.path.join(deploy_dir_image, + "fitImage-%s-%s-%s" % (image_type, machine, machine)) + + self.assertTrue(os.path.exists(fitimage_its_path), + "%s image tree source doesn't exist" % (fitimage_its_path)) + self.assertTrue(os.path.exists(fitimage_path), + "%s FIT image doesn't exist" % (fitimage_path)) + + # Check that the type, load address, entrypoint address and default + # values for kernel and ramdisk in Image Tree Source are as expected. + # The order of fields in the below array is important. Not all the + # fields are tested, only the key fields that wont vary between + # different architectures. + its_field_check = [ + 'description = "A model description";', + 'type = "kernel";', + 'load = <0x80080000>;', + 'entry = <0x80080000>;', + 'type = "ramdisk";', + 'load = <0x88000000>;', + 'entry = <0x88000000>;', + 'default = "conf@1";', + 'kernel = "kernel@1";', + 'ramdisk = "ramdisk@1";' + ] + + with open(fitimage_its_path) as its_file: + field_index = 0 + for line in its_file: + if field_index == len(its_field_check): + break + if its_field_check[field_index] in line: + field_index +=1 + + if field_index != len(its_field_check): # if its equal, the test passed + self.assertTrue(field_index == len(its_field_check), + "Fields in Image Tree Source File %s did not match, error in finding %s" + % (fitimage_its_path, its_field_check[field_index])) + + + def test_sign_fit_image(self): + """ + Summary: Check if FIT image and Image Tree Source (its) are created + and signed correctly. + Expected: 1) its and FIT image are built successfully + 2) Scanning the its file indicates signing is enabled + as requested by UBOOT_SIGN_ENABLE (using keys generated + via FIT_GENERATE_KEYS) + 3) Dumping the FIT image indicates signature values + are present (including for images as enabled via + FIT_SIGN_INDIVIDUAL) + 4) Examination of the do_assemble_fitimage runfile/logfile + indicate that UBOOT_MKIMAGE, UBOOT_MKIMAGE_SIGN and + UBOOT_MKIMAGE_SIGN_ARGS are working as expected. + Product: oe-core + Author: Paul Eggleton based upon + work by Usama Arif + """ + config = """ +# Enable creation of fitImage +MACHINE = "beaglebone-yocto" +KERNEL_IMAGETYPES += " fitImage " +KERNEL_CLASSES = " kernel-fitimage test-mkimage-wrapper " +UBOOT_SIGN_ENABLE = "1" +FIT_GENERATE_KEYS = "1" +UBOOT_SIGN_KEYDIR = "${TOPDIR}/signing-keys" +UBOOT_SIGN_KEYNAME = "oe-selftest" +FIT_SIGN_INDIVIDUAL = "1" +UBOOT_MKIMAGE_SIGN_ARGS = "-c 'a smart comment'" +""" + self.write_config(config) + + # fitImage is created as part of linux recipe + bitbake("virtual/kernel") + + image_type = "core-image-minimal" + deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE') + machine = get_bb_var('MACHINE') + fitimage_its_path = os.path.join(deploy_dir_image, + "fitImage-its-%s" % (machine,)) + fitimage_path = os.path.join(deploy_dir_image, + "fitImage-%s.bin" % (machine,)) + + self.assertTrue(os.path.exists(fitimage_its_path), + "%s image tree source doesn't exist" % (fitimage_its_path)) + self.assertTrue(os.path.exists(fitimage_path), + "%s FIT image doesn't exist" % (fitimage_path)) + + req_itspaths = [ + ['/', 'images', 'kernel@1'], + ['/', 'images', 'kernel@1', 'signature@1'], + ['/', 'images', 'fdt@am335x-boneblack.dtb'], + ['/', 'images', 'fdt@am335x-boneblack.dtb', 'signature@1'], + ['/', 'configurations', 'conf@am335x-boneblack.dtb'], + ['/', 'configurations', 'conf@am335x-boneblack.dtb', 'signature@1'], + ] + + itspath = [] + itspaths = [] + linect = 0 + sigs = {} + with open(fitimage_its_path) as its_file: + linect += 1 + for line in its_file: + line = line.strip() + if line.endswith('};'): + itspath.pop() + elif line.endswith('{'): + itspath.append(line[:-1].strip()) + itspaths.append(itspath[:]) + elif itspath and itspath[-1] == 'signature@1': + itsdotpath = '.'.join(itspath) + if not itsdotpath in sigs: + sigs[itsdotpath] = {} + if not '=' in line or not line.endswith(';'): + self.fail('Unexpected formatting in %s sigs section line %d:%s' % (fitimage_its_path, linect, line)) + key, value = line.split('=', 1) + sigs[itsdotpath][key.rstrip()] = value.lstrip().rstrip(';') + + for reqpath in req_itspaths: + if not reqpath in itspaths: + self.fail('Missing section in its file: %s' % reqpath) + + reqsigvalues_image = { + 'algo': '"sha256,rsa2048"', + 'key-name-hint': '"oe-selftest"', + } + reqsigvalues_config = { + 'algo': '"sha256,rsa2048"', + 'key-name-hint': '"oe-selftest"', + 'sign-images': '"kernel", "fdt"', + } + + for itspath, values in sigs.items(): + if 'conf@' in itspath: + reqsigvalues = reqsigvalues_config + else: + reqsigvalues = reqsigvalues_image + for reqkey, reqvalue in reqsigvalues.items(): + value = values.get(reqkey, None) + if value is None: + self.fail('Missing key "%s" in its file signature section %s' % (reqkey, itspath)) + self.assertEqual(value, reqvalue) + + # Dump the image to see if it really got signed + bitbake("u-boot-tools-native -c addto_recipe_sysroot") + result = runCmd('bitbake -e u-boot-tools-native | grep ^RECIPE_SYSROOT_NATIVE=') + recipe_sysroot_native = result.output.split('=')[1].strip('"') + dumpimage_path = os.path.join(recipe_sysroot_native, 'usr', 'bin', 'dumpimage') + result = runCmd('%s -l %s' % (dumpimage_path, fitimage_path)) + in_signed = None + signed_sections = {} + for line in result.output.splitlines(): + if line.startswith((' Configuration', ' Image')): + in_signed = re.search('\((.*)\)', line).groups()[0] + elif re.match('^ *', line) in (' ', ''): + in_signed = None + elif in_signed: + if not in_signed in signed_sections: + signed_sections[in_signed] = {} + key, value = line.split(':', 1) + signed_sections[in_signed][key.strip()] = value.strip() + self.assertIn('kernel@1', signed_sections) + self.assertIn('fdt@am335x-boneblack.dtb', signed_sections) + self.assertIn('conf@am335x-boneblack.dtb', signed_sections) + for signed_section, values in signed_sections.items(): + value = values.get('Sign algo', None) + self.assertEqual(value, 'sha256,rsa2048:oe-selftest', 'Signature algorithm for %s not expected value' % signed_section) + value = values.get('Sign value', None) + self.assertEqual(len(value), 512, 'Signature value for section %s not expected length' % signed_section) + + # Check for UBOOT_MKIMAGE_SIGN_ARGS + result = runCmd('bitbake -e virtual/kernel | grep ^T=') + tempdir = result.output.split('=', 1)[1].strip().strip('') + result = runCmd('grep "a smart comment" %s/run.do_assemble_fitimage' % tempdir, ignore_status=True) + self.assertEqual(result.status, 0, 'UBOOT_MKIMAGE_SIGN_ARGS value did not get used') + + # Check for evidence of test-mkimage-wrapper class + result = runCmd('grep "### uboot-mkimage wrapper message" %s/log.do_assemble_fitimage' % tempdir, ignore_status=True) + self.assertEqual(result.status, 0, 'UBOOT_MKIMAGE did not work') + result = runCmd('grep "### uboot-mkimage signing wrapper message" %s/log.do_assemble_fitimage' % tempdir, ignore_status=True) + self.assertEqual(result.status, 0, 'UBOOT_MKIMAGE_SIGN did not work') + diff --git a/poky/meta/lib/oeqa/selftest/cases/imagefeatures.py b/poky/meta/lib/oeqa/selftest/cases/imagefeatures.py index 415e0315f..6723a8198 100644 --- a/poky/meta/lib/oeqa/selftest/cases/imagefeatures.py +++ b/poky/meta/lib/oeqa/selftest/cases/imagefeatures.py @@ -264,80 +264,6 @@ PNBLACKLIST[busybox] = "Don't build this" bitbake("--graphviz core-image-sato") - def test_fit_image(self): - """ - Summary: Check if FIT image and Image Tree Source (its) are built - and the Image Tree Source has the correct fields. - Expected: 1. fitImage and fitImage-its can be built - 2. The type, load address, entrypoint address and - default values of kernel and ramdisk are as expected - in the Image Tree Source. Not all the fields are tested, - only the key fields that wont vary between different - architectures. - Product: oe-core - Author: Usama Arif - """ - config = """ -# Enable creation of fitImage -KERNEL_IMAGETYPE = "Image" -KERNEL_IMAGETYPES += " fitImage " -KERNEL_CLASSES = " kernel-fitimage " - -# RAM disk variables including load address and entrypoint for kernel and RAM disk -IMAGE_FSTYPES += "cpio.gz" -INITRAMFS_IMAGE = "core-image-minimal" -UBOOT_RD_LOADADDRESS = "0x88000000" -UBOOT_RD_ENTRYPOINT = "0x88000000" -UBOOT_LOADADDRESS = "0x80080000" -UBOOT_ENTRYPOINT = "0x80080000" -""" - self.write_config(config) - - # fitImage is created as part of linux recipe - bitbake("virtual/kernel") - - image_type = "core-image-minimal" - deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE') - machine = get_bb_var('MACHINE') - fitimage_its_path = os.path.join(deploy_dir_image, - "fitImage-its-%s-%s-%s" % (image_type, machine, machine)) - fitimage_path = os.path.join(deploy_dir_image, - "fitImage-%s-%s-%s" % (image_type, machine, machine)) - - self.assertTrue(os.path.exists(fitimage_its_path), - "%s image tree source doesn't exist" % (fitimage_its_path)) - self.assertTrue(os.path.exists(fitimage_path), - "%s FIT image doesn't exist" % (fitimage_path)) - - # Check that the type, load address, entrypoint address and default - # values for kernel and ramdisk in Image Tree Source are as expected. - # The order of fields in the below array is important. Not all the - # fields are tested, only the key fields that wont vary between - # different architectures. - its_field_check = ['type = "kernel";', - 'load = <0x80080000>;', - 'entry = <0x80080000>;', - 'type = "ramdisk";', - 'load = <0x88000000>;', - 'entry = <0x88000000>;', - 'default = "conf@1";', - 'kernel = "kernel@1";', - 'ramdisk = "ramdisk@1";' - ] - - with open(fitimage_its_path) as its_file: - field_index = 0 - for line in its_file: - if field_index == len(its_field_check): - break - if its_field_check[field_index] in line: - field_index +=1 - - if field_index != len(its_field_check): # if its equal, the test passed - self.assertTrue(field_index == len(its_field_check), - "Fields in Image Tree Source File %s did not match, error in finding %s" - % (fitimage_its_path, its_field_check[field_index])) - def test_image_gen_debugfs(self): """ Summary: Check debugfs generation diff --git a/poky/meta/lib/oeqa/selftest/cases/oelib/elf.py b/poky/meta/lib/oeqa/selftest/cases/oelib/elf.py index d0a28090f..5a5f9b4fd 100644 --- a/poky/meta/lib/oeqa/selftest/cases/oelib/elf.py +++ b/poky/meta/lib/oeqa/selftest/cases/oelib/elf.py @@ -21,6 +21,6 @@ class TestElf(TestCase): self.assertEqual(oe.qa.elf_machine_to_string(0xB7), "AArch64") self.assertEqual(oe.qa.elf_machine_to_string(0xF7), "BPF") - self.assertEqual(oe.qa.elf_machine_to_string(0x00), "Unknown (0)") + self.assertEqual(oe.qa.elf_machine_to_string(0x00), "Unset") self.assertEqual(oe.qa.elf_machine_to_string(0xDEADBEEF), "Unknown (3735928559)") self.assertEqual(oe.qa.elf_machine_to_string("foobar"), "Unknown ('foobar')") diff --git a/poky/meta/lib/oeqa/selftest/cases/package.py b/poky/meta/lib/oeqa/selftest/cases/package.py index 3010b1af4..7166c3991 100644 --- a/poky/meta/lib/oeqa/selftest/cases/package.py +++ b/poky/meta/lib/oeqa/selftest/cases/package.py @@ -168,6 +168,7 @@ class PackageTests(OESelftestTestCase): with runqemu('core-image-minimal') as qemu: for path in [ sysconfdir + "/selftest-chown/file", sysconfdir + "/selftest-chown/dir", - sysconfdir + "/selftest-chown/symlink"]: + sysconfdir + "/selftest-chown/symlink", + sysconfdir + "/selftest-chown/fifotest/fifo"]: if not check_ownership(qemu, "test", "test", path): self.fail('Test ownership %s failed' % path) diff --git a/poky/meta/lib/oeqa/selftest/cases/pkgdata.py b/poky/meta/lib/oeqa/selftest/cases/pkgdata.py index 833a1803b..254abc40c 100644 --- a/poky/meta/lib/oeqa/selftest/cases/pkgdata.py +++ b/poky/meta/lib/oeqa/selftest/cases/pkgdata.py @@ -218,3 +218,9 @@ class OePkgdataUtilTests(OESelftestTestCase): def test_specify_pkgdatadir(self): result = runCmd('oe-pkgdata-util -p %s lookup-pkg zlib' % get_bb_var('PKGDATA_DIR')) self.assertEqual(result.output, 'libz1') + + def test_no_param(self): + result = runCmd('oe-pkgdata-util', ignore_status=True) + self.assertEqual(result.status, 2, "Status different than 2. output: %s" % result.output) + currpos = result.output.find('usage: oe-pkgdata-util') + self.assertTrue(currpos != -1, msg = "Test is Failed. Help is not Displayed in %s" % result.output) diff --git a/poky/meta/lib/oeqa/selftest/cases/pseudo.py b/poky/meta/lib/oeqa/selftest/cases/pseudo.py new file mode 100644 index 000000000..33593d5ce --- /dev/null +++ b/poky/meta/lib/oeqa/selftest/cases/pseudo.py @@ -0,0 +1,27 @@ +# +# SPDX-License-Identifier: MIT +# + +import glob +import os +import shutil +from oeqa.utils.commands import bitbake, get_test_layer +from oeqa.selftest.case import OESelftestTestCase + +class Pseudo(OESelftestTestCase): + + def test_pseudo_pyc_creation(self): + self.write_config("") + + metaselftestpath = get_test_layer() + pycache_path = os.path.join(metaselftestpath, 'lib/__pycache__') + if os.path.exists(pycache_path): + shutil.rmtree(pycache_path) + + bitbake('pseudo-pyc-test -c install') + + test1_pyc_present = len(glob.glob(os.path.join(pycache_path, 'pseudo_pyc_test1.*.pyc'))) + self.assertTrue(test1_pyc_present, 'test1 pyc file missing, should be created outside of pseudo context.') + + test2_pyc_present = len(glob.glob(os.path.join(pycache_path, 'pseudo_pyc_test2.*.pyc'))) + self.assertFalse(test2_pyc_present, 'test2 pyc file present, should not be created in pseudo context.') diff --git a/poky/meta/lib/oeqa/selftest/cases/reproducible.py b/poky/meta/lib/oeqa/selftest/cases/reproducible.py index a7ef33614..eee494e5c 100644 --- a/poky/meta/lib/oeqa/selftest/cases/reproducible.py +++ b/poky/meta/lib/oeqa/selftest/cases/reproducible.py @@ -17,6 +17,72 @@ import stat import os import datetime +# For sample packages, see: +# https://autobuilder.yocto.io/pub/repro-fail/oe-reproducible-20201127-0t7wr_oo/ +# https://autobuilder.yocto.io/pub/repro-fail/oe-reproducible-20201127-4s9ejwyp/ +# https://autobuilder.yocto.io/pub/repro-fail/oe-reproducible-20201127-haiwdlbr/ +# https://autobuilder.yocto.io/pub/repro-fail/oe-reproducible-20201127-hwds3mcl/ +# https://autobuilder.yocto.io/pub/repro-fail/oe-reproducible-20201203-sua0pzvc/ +# (both packages/ and packages-excluded/) +exclude_packages = [ + 'acpica-src', + 'babeltrace2-ptest', + 'bootchart2-doc', + 'cups', + 'cwautomacros', + 'dtc', + 'efivar', + 'epiphany', + 'gcr', + 'git', + 'glide', + 'go-dep', + 'go-helloworld', + 'go-runtime', + 'go_', + 'groff', + 'gst-devtools', + 'gstreamer1.0-python', + 'gtk-doc', + 'igt-gpu-tools', + 'kernel-devsrc', + 'libaprutil', + 'libcap-ng', + 'libhandy-1-src', + 'libid3tag', + 'libproxy', + 'libsecret-dev', + 'libsecret-src', + 'lttng-tools-dbg', + 'lttng-tools-ptest', + 'ltp', + 'meson', + 'ovmf-shell-efi', + 'parted-ptest', + 'perf', + 'python3-cython', + 'qemu', + 'quilt-ptest', + 'rsync', + 'ruby', + 'spirv-tools-dev', + 'swig', + 'syslinux-misc', + 'systemd-bootchart', + 'valgrind-ptest', + 'vim', + 'watchdog', + 'xmlto', + 'xorg-minimal-fonts' + ] + +def is_excluded(package): + package_name = os.path.basename(package) + for i in exclude_packages: + if package_name.startswith(i): + return True + return False + MISSING = 'MISSING' DIFFERENT = 'DIFFERENT' SAME = 'SAME' @@ -39,6 +105,7 @@ class PackageCompareResults(object): self.total = [] self.missing = [] self.different = [] + self.different_excluded = [] self.same = [] def add_result(self, r): @@ -46,7 +113,10 @@ class PackageCompareResults(object): if r.status == MISSING: self.missing.append(r) elif r.status == DIFFERENT: - self.different.append(r) + if is_excluded(r.reference): + self.different_excluded.append(r) + else: + self.different.append(r) else: self.same.append(r) @@ -54,10 +124,11 @@ class PackageCompareResults(object): self.total.sort() self.missing.sort() self.different.sort() + self.different_excluded.sort() self.same.sort() def __str__(self): - return 'same=%i different=%i missing=%i total=%i' % (len(self.same), len(self.different), len(self.missing), len(self.total)) + return 'same=%i different=%i different_excluded=%i missing=%i total=%i' % (len(self.same), len(self.different), len(self.different_excluded), len(self.missing), len(self.total)) def compare_file(reference, test, diffutils_sysroot): result = CompareResult() @@ -105,7 +176,7 @@ class DiffoscopeTests(OESelftestTestCase): class ReproducibleTests(OESelftestTestCase): package_classes = ['deb', 'ipk'] - images = ['core-image-minimal', 'core-image-sato', 'core-image-full-cmdline'] + images = ['core-image-minimal', 'core-image-sato', 'core-image-full-cmdline', 'world'] save_results = False if 'OEQA_DEBUGGING_SAVED_OUTPUT' in os.environ: save_results = os.environ['OEQA_DEBUGGING_SAVED_OUTPUT'] @@ -176,6 +247,12 @@ class ReproducibleTests(OESelftestTestCase): PACKAGE_CLASSES = "{package_classes}" INHIBIT_PACKAGE_STRIP = "1" TMPDIR = "{tmpdir}" + LICENSE_FLAGS_WHITELIST = "commercial" + DISTRO_FEATURES_append = ' systemd pam' + USERADDEXTENSION = "useradd-staticids" + USERADD_ERROR_DYNAMIC = "skip" + USERADD_UID_TABLES += "files/static-passwd" + USERADD_GID_TABLES += "files/static-group" ''').format(package_classes=' '.join('package_%s' % c for c in self.package_classes), tmpdir=tmpdir) @@ -235,6 +312,7 @@ class ReproducibleTests(OESelftestTestCase): self.write_package_list(package_class, 'missing', result.missing) self.write_package_list(package_class, 'different', result.different) + self.write_package_list(package_class, 'different_excluded', result.different_excluded) self.write_package_list(package_class, 'same', result.same) if self.save_results: @@ -242,8 +320,12 @@ class ReproducibleTests(OESelftestTestCase): self.copy_file(d.reference, '/'.join([save_dir, 'packages', strip_topdir(d.reference)])) self.copy_file(d.test, '/'.join([save_dir, 'packages', strip_topdir(d.test)])) + for d in result.different_excluded: + self.copy_file(d.reference, '/'.join([save_dir, 'packages-excluded', strip_topdir(d.reference)])) + self.copy_file(d.test, '/'.join([save_dir, 'packages-excluded', strip_topdir(d.test)])) + if result.missing or result.different: - fails.append("The following %s packages are missing or different: %s" % + fails.append("The following %s packages are missing or different and not in exclusion list: %s" % (c, '\n'.join(r.test for r in (result.missing + result.different)))) # Clean up empty directories diff --git a/poky/meta/lib/oeqa/selftest/cases/wic.py b/poky/meta/lib/oeqa/selftest/cases/wic.py index 714637ec1..091f0ab47 100644 --- a/poky/meta/lib/oeqa/selftest/cases/wic.py +++ b/poky/meta/lib/oeqa/selftest/cases/wic.py @@ -990,6 +990,26 @@ class Wic2(WicTestCase): out = glob(self.resultdir + "%s-*direct" % wksname) self.assertEqual(1, len(out)) + def test_empty_plugin(self): + """Test empty plugin""" + config = 'IMAGE_FSTYPES = "wic"\nWKS_FILE = "test_empty_plugin.wks"\n' + self.append_config(config) + self.assertEqual(0, bitbake('core-image-minimal').status) + self.remove_config(config) + + bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'MACHINE']) + deploy_dir = bb_vars['DEPLOY_DIR_IMAGE'] + machine = bb_vars['MACHINE'] + image_path = os.path.join(deploy_dir, 'core-image-minimal-%s.wic' % machine) + self.assertEqual(True, os.path.exists(image_path)) + + sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools') + + # Fstype column from 'wic ls' should be empty for the second partition + # as listed in test_empty_plugin.wks + result = runCmd("wic ls %s -n %s | awk -F ' ' '{print $1 \" \" $5}' | grep '^2' | wc -w" % (image_path, sysroot)) + self.assertEqual('1', result.output) + @only_for_arch(['i586', 'i686', 'x86_64']) def test_biosplusefi_plugin_qemu(self): """Test biosplusefi plugin in qemu""" diff --git a/poky/meta/lib/oeqa/selftest/context.py b/poky/meta/lib/oeqa/selftest/context.py index dd3609c1d..165992697 100644 --- a/poky/meta/lib/oeqa/selftest/context.py +++ b/poky/meta/lib/oeqa/selftest/context.py @@ -34,7 +34,7 @@ class NonConcurrentTestSuite(unittest.TestSuite): (builddir, newbuilddir) = self.setupfunc("-st", None, self.suite) ret = super().run(result) os.chdir(builddir) - if newbuilddir and ret.wasSuccessful(): + if newbuilddir and ret.wasSuccessful() and self.removefunc: self.removefunc(newbuilddir) def removebuilddir(d): @@ -54,7 +54,7 @@ def removebuilddir(d): bb.utils.prunedir(d, ionice=True) class OESelftestTestContext(OETestContext): - def __init__(self, td=None, logger=None, machines=None, config_paths=None, newbuilddir=None): + def __init__(self, td=None, logger=None, machines=None, config_paths=None, newbuilddir=None, keep_builddir=None): super(OESelftestTestContext, self).__init__(td, logger) self.machines = machines @@ -62,6 +62,11 @@ class OESelftestTestContext(OETestContext): self.config_paths = config_paths self.newbuilddir = newbuilddir + if keep_builddir: + self.removebuilddir = None + else: + self.removebuilddir = removebuilddir + def setup_builddir(self, suffix, selftestdir, suite): builddir = os.environ['BUILDDIR'] if not selftestdir: @@ -119,9 +124,9 @@ class OESelftestTestContext(OETestContext): if processes: from oeqa.core.utils.concurrencytest import ConcurrentTestSuite - return ConcurrentTestSuite(suites, processes, self.setup_builddir, removebuilddir) + return ConcurrentTestSuite(suites, processes, self.setup_builddir, self.removebuilddir) else: - return NonConcurrentTestSuite(suites, processes, self.setup_builddir, removebuilddir) + return NonConcurrentTestSuite(suites, processes, self.setup_builddir, self.removebuilddir) def runTests(self, processes=None, machine=None, skips=[]): if machine: @@ -179,6 +184,9 @@ class OESelftestTestContextExecutor(OETestContextExecutor): action='append', default=None, help='Exclude all (unhidden) tests that match any of the specified tag(s). (exclude applies before select)') + parser.add_argument('-K', '--keep-builddir', action='store_true', + help='Keep the test build directory even if all tests pass') + parser.add_argument('-B', '--newbuilddir', help='New build directory to use for tests.') parser.add_argument('-v', '--verbose', action='store_true') parser.set_defaults(func=self.run) @@ -236,6 +244,7 @@ class OESelftestTestContextExecutor(OETestContextExecutor): self.tc_kwargs['init']['config_paths']['localconf'] = os.path.join(builddir, "conf/local.conf") self.tc_kwargs['init']['config_paths']['bblayers'] = os.path.join(builddir, "conf/bblayers.conf") self.tc_kwargs['init']['newbuilddir'] = args.newbuilddir + self.tc_kwargs['init']['keep_builddir'] = args.keep_builddir def tag_filter(tags): if args.exclude_tags: -- cgit v1.2.3