From: Philip Withnall Date: Sun, 3 May 2026 21:36:32 +0000 (+0100) Subject: test: Add a sysupdate test for files which are a prefix match of each other X-Git-Tag: v261-rc1~165 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=b47ed6246d14489bded767a1bcb25dd47bfa771d;p=thirdparty%2Fsystemd.git test: Add a sysupdate test for files which are a prefix match of each other This tests whether the pattern matching code checks it’s matched the whole string and not just a prefix (see commit 4ffb60319b). In particular, this tests a setup which KDE currently use in their sysupdate images, where two regular file transfers are done, one of a `foo.erofs` file, and the other `foo.erofs.caibx`. As one is a prefix of the other, they were hitting this bug. See: - https://files.kde.org/kde-linux/sysupdate/v2/ - https://github.com/KDE/kde-linux/tree/master/mkosi.extra/usr/lib/sysupdate.d Signed-off-by: Philip Withnall Fixes: https://github.com/systemd/systemd/issues/38605 Fixes: https://github.com/systemd/systemd/issues/41288 --- diff --git a/test/units/TEST-72-SYSUPDATE.sh b/test/units/TEST-72-SYSUPDATE.sh index 0e9bf78646e..0e1c9afa837 100755 --- a/test/units/TEST-72-SYSUPDATE.sh +++ b/test/units/TEST-72-SYSUPDATE.sh @@ -56,11 +56,11 @@ at_exit() { trap at_exit EXIT update_checksums() { - (cd "$WORKDIR/source" && rm -f BEST-BEFORE-* && sha256sum uki* part* dir-*.tar.gz >SHA256SUMS) + (cd "$WORKDIR/source" && rm -f BEST-BEFORE-* && sha256sum uki* part* dir-*.tar.gz linux* >SHA256SUMS) } update_checksums_with_best_before() { - (cd "$WORKDIR/source" && rm -f BEST-BEFORE-* && touch "BEST-BEFORE-$1" && sha256sum uki* part* dir-*.tar.gz "BEST-BEFORE-$1" >SHA256SUMS) + (cd "$WORKDIR/source" && rm -f BEST-BEFORE-* && touch "BEST-BEFORE-$1" && sha256sum uki* part* dir-*.tar.gz linux* "BEST-BEFORE-$1" >SHA256SUMS) } new_version() { @@ -76,6 +76,10 @@ new_version() { dd if=/dev/urandom of="$WORKDIR/source/part2-$version.raw" bs="$sector_size" count=2048 gzip -k -f "$WORKDIR/source/part2-$version.raw" + # Create a file payload and a suffixed version + echo $RANDOM >"$WORKDIR/source/linux-$version.erofs" + echo $RANDOM >"$WORKDIR/source/linux-$version.erofs.caibx" + # Create a random "UKI" payload echo $RANDOM >"$WORKDIR/source/uki-$version.efi" @@ -99,6 +103,8 @@ new_version() { echo "abad1deaabad1deaabad1deaabad1deaabad1deaabad1deaabad1deaabad1dea part1-$version.raw" echo "abad1deaabad1deaabad1deaabad1deaabad1deaabad1deaabad1deaabad1dea part2-$version.raw" echo "abad1deaabad1deaabad1deaabad1deaabad1deaabad1deaabad1deaabad1dea part2-$version.raw.gz" + echo "abad1deaabad1deaabad1deaabad1deaabad1deaabad1deaabad1deaabad1dea linux-$version.erofs" + echo "abad1deaabad1deaabad1deaabad1deaabad1deaabad1deaabad1deaabad1dea linux-$version.erofs.caibx" echo "abad1deaabad1deaabad1deaabad1deaabad1deaabad1deaabad1deaabad1dea uki-$version.efi" echo "abad1deaabad1deaabad1deaabad1deaabad1deaabad1deaabad1deaabad1dea uki-extra-$version.efi" echo "abad1deaabad1deaabad1deaabad1deaabad1deaabad1deaabad1deaabad1dea dir-$version.tar.gz" @@ -172,6 +178,10 @@ verify_version() { # Check the extra efi cmp "$WORKDIR/source/uki-extra-$version.efi" "$WORKDIR/xbootldr/EFI/Linux/uki_$version.efi.extra.d/extra.addon.efi" + + # Check the regular file and its suffixed version + cmp "$WORKDIR/source/linux-$version.erofs" "$WORKDIR/system/linux-$version.erofs" + cmp "$WORKDIR/source/linux-$version.erofs.caibx" "$WORKDIR/system/linux-$version.erofs.caibx" } verify_version_current() { @@ -294,6 +304,36 @@ PathRelativeTo=boot MatchPattern=uki_@v.efi.extra.d/extra.addon.efi Mode=0444 InstancesMax=2 +EOF + + # Test with a transfer which contains one of the other transfers as a prefix + # of its files, to check pattern matching can distinguish the two. + cat >"$CONFIGDIR/06-sixth.transfer" <"$CONFIGDIR/07-seventh.transfer" <"$CONFIGDIR/optional.feature" <