mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-06-14 05:49:57 +00:00
imagemagick: adds ptest for imagemagick recipe
Backport of the commit 96b97c0c64 from master
This patch enables ptest for imagemagick, improving test coverage for
continuous integration and runtime validation.
No functional changes are introduced to the core package.
The logic used is :
- We check if the required tools are present or not
- We used convert to create an raw RGB file
- The created RGB is then converted to PNG using convert
- We re-gerenate RGB from PNG and compare the original and re-generated RGB
- Enabled the ptest in ptest-packagelists-meta-oe.inc as
suggested by Gyorgy Sarvari and incorporated logging suggestion
- This was done as standard imagemagick test like drawtest requires manual
internetion to verify the file.
Signed-off-by: AshishKumar Mishra <ashishkumar.mishra@bmwtechworks.in>
Adapted to Kirkstone.
Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
This commit is contained in:
committed by
Gyorgy Sarvari
parent
4ae2ec4620
commit
fb79c60c57
@@ -0,0 +1,128 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# ImageMagick ptest:
|
||||
# We ceate an BASERGB file for our usage using "convert"
|
||||
# We convert this RGB file to BASEPNG
|
||||
# Using BASEPNG we recreate RGB named REGENERATEDRGB
|
||||
#
|
||||
# BASERGB to BASEPNG to REGENERATEDRGB
|
||||
# - Then compare BASERGB with REGENERATEDRGB
|
||||
#
|
||||
# 1) We are checking if the binaries are present in RFS or not
|
||||
# 2) We Created an RBG of size : WIDTH x HEIGHT pixels
|
||||
# 3) Return value is captured after every major actio to capture the status
|
||||
# 4) cmp -s is used to compare binary byte by byte data and
|
||||
# capture only exit status
|
||||
# 5) Important parametsrs used are :
|
||||
# -depth : How many bits for each colour pixel
|
||||
# -alpha off : Don't consider transparency
|
||||
# -define png:color-type=2 : Make PNG work with truecolour RGB
|
||||
# -strip : Remove all non-pixel metadata og PNG
|
||||
# so file is reproducible
|
||||
# -set gamma 1.0 : No PNG brightness correction
|
||||
# gradient:red-blue : Data moves liberly from RED to Blue vertically
|
||||
|
||||
|
||||
WIDTH=16
|
||||
HEIGHT=16
|
||||
BASERGB=base.rgb
|
||||
BASEPNG=base.png
|
||||
REGENERATEDRGB=roundtrip.rgb
|
||||
|
||||
echo "[DEBUG] Starting ImageMagick Ptest with ${WIDTH}x${HEIGHT} pixels "
|
||||
|
||||
# Verify required binaries
|
||||
for bin in convert cmp wc rm; do
|
||||
if [ -z "$(command -v "$bin" 2>/dev/null)" ]; then
|
||||
echo "[ERROR] Required binary '$bin' not found $PATH"
|
||||
exit 127
|
||||
fi
|
||||
done
|
||||
|
||||
# Generate raw RGB
|
||||
convert -size ${WIDTH}x${HEIGHT} -depth 8 -type TrueColor \
|
||||
-alpha off -define png:color-type=2 \
|
||||
-strip -set gamma 1.0 \
|
||||
gradient:red-blue rgb:${BASERGB}
|
||||
|
||||
returnvalue=$?
|
||||
if [ "$returnvalue" -ne 0 ]; then
|
||||
echo "[FAIL] Failed to generate RGB pattern "
|
||||
exit 1
|
||||
else
|
||||
echo "[DEBUG] Generated raw RGB ${BASERGB} for test case"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# Convert raw RGB to PNG
|
||||
convert -size ${WIDTH}x${HEIGHT} -depth 8 -type TrueColor \
|
||||
-alpha off -define png:color-type=2 \
|
||||
-strip -set gamma 1.0 \
|
||||
rgb:${BASERGB} ${BASEPNG}
|
||||
|
||||
returnvalue=$?
|
||||
if [ $returnvalue -ne 0 ]; then
|
||||
echo "[FAIL] Failed to convert RGB to PNG"
|
||||
rm -f ${BASERGB}
|
||||
exit 1
|
||||
else
|
||||
echo "[DEBUG] ${BASEPNG} generated from ${BASERGB}"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# Regenerate raw RGB from PNG
|
||||
convert -size ${WIDTH}x${HEIGHT} -depth 8 -type TrueColor \
|
||||
-alpha off -define png:color-type=2 \
|
||||
-strip -set gamma 1.0 \
|
||||
${BASEPNG} rgb:${REGENERATEDRGB}
|
||||
|
||||
returnvalue=$?
|
||||
if [ $returnvalue -ne 0 ]; then
|
||||
echo "[FAIL] Failed to re generate RGB from PNG "
|
||||
rm -f ${BASERGB} ${BASEPNG}
|
||||
exit 1
|
||||
else
|
||||
echo "[DEBUG] ${REGENERATEDRGB} generated from ${BASEPNG}"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# Compare original and recreated RGB
|
||||
if cmp -s ${BASERGB} ${REGENERATEDRGB}; then
|
||||
echo "[PASS] RGB data identical after PNG round-trip"
|
||||
RESULT=0
|
||||
else
|
||||
echo "[FAIL] RGB mismatch detected, printing their size "
|
||||
echo "[INFO] Base RGB size: $(wc -c < ${BASERGB}) bytes"
|
||||
echo "[INFO] Round-trip RGB size: $(wc -c < ${REGENERATEDRGB}) bytes"
|
||||
RESULT=1
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# Checking the identify tool from imagemagick to get the PNG metadata
|
||||
# True is added in end to ensure that test script doesnt fail even if
|
||||
# identify fails for any reason
|
||||
echo "[DEBUG] PNG file info:"
|
||||
identify -verbose ${BASEPNG} | grep -E "Depth|Type|Colorspace" || true
|
||||
|
||||
|
||||
|
||||
# Cleanup of files create by test code
|
||||
echo "[DEBUG] Cleaning up temporary files"
|
||||
rm -f ${BASERGB} ${BASEPNG} ${REGENERATEDRGB}
|
||||
returnvalue=$?
|
||||
echo "[DEBUG] Cleanup exit=$returnvalue"
|
||||
|
||||
|
||||
# Logging the final result
|
||||
if [ ${RESULT} -eq 0 ]; then
|
||||
echo "[DEBUG]: imagemagick-ptest.sh sucessfull "
|
||||
else
|
||||
echo "[DEBUG]: imagemagick-ptest.sh failed "
|
||||
fi
|
||||
|
||||
|
||||
exit ${RESULT}
|
||||
@@ -0,0 +1,43 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# run-ptest — ImageMagick ptest harness
|
||||
# POSIX-safe and BusyBox compatible
|
||||
|
||||
PTDIR=$(dirname "$0")
|
||||
TESTDIR="$PTDIR"
|
||||
PASSCOUNT=0
|
||||
FAILCOUNT=0
|
||||
TOTAL=0
|
||||
|
||||
echo "======================================="
|
||||
echo "ImageMagick ptest: Runtime Validation"
|
||||
echo "======================================="
|
||||
|
||||
for t in "$TESTDIR"/*.sh; do
|
||||
[ -x "$t" ] || chmod +x "$t"
|
||||
TOTAL=$((TOTAL + 1))
|
||||
echo
|
||||
echo "[DEBUG] Launching test script $t"
|
||||
|
||||
if sh "$t" 2>&1; then
|
||||
echo "PASS: $(basename "$t")"
|
||||
PASSCOUNT=$((PASSCOUNT + 1))
|
||||
else
|
||||
rc=$?
|
||||
if [ "$rc" -eq 77 ]; then
|
||||
echo "SKIP: $(basename "$t")"
|
||||
else
|
||||
echo "FAIL: $(basename "$t")"
|
||||
FAILCOUNT=$((FAILCOUNT + 1))
|
||||
fi
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
echo
|
||||
echo "======================================="
|
||||
echo "[SUMMARY] Total: $TOTAL | PASS: $PASSCOUNT | FAIL: $FAILCOUNT"
|
||||
echo "======================================="
|
||||
echo
|
||||
[ "$FAILCOUNT" -eq 0 ]
|
||||
|
||||
@@ -12,6 +12,8 @@ DEPENDS = "lcms bzip2 jpeg libpng tiff zlib fftw freetype libtool"
|
||||
BASE_PV := "${PV}"
|
||||
PV .= "-62"
|
||||
SRC_URI = "git://github.com/ImageMagick/ImageMagick.git;branch=main;protocol=https \
|
||||
file://run-ptest \
|
||||
file://imagemagick-ptest.sh \
|
||||
file://CVE-2021-20309.patch \
|
||||
file://CVE-2021-20310.patch \
|
||||
file://CVE-2021-3610.patch \
|
||||
@@ -39,7 +41,11 @@ CVE_CHECK_IGNORE += "CVE-2016-7538"
|
||||
# current version is not affected by the CVE which affects versions at least earlier than 7.0.4-4
|
||||
CVE_CHECK_IGNORE += "CVE-2017-5506"
|
||||
|
||||
inherit autotools pkgconfig update-alternatives
|
||||
inherit autotools pkgconfig update-alternatives ptest
|
||||
|
||||
do_install_ptest() {
|
||||
install -m 0755 ${WORKDIR}/imagemagick-ptest.sh ${D}${PTEST_PATH}/
|
||||
}
|
||||
|
||||
# xml disabled because it's using xml2-config --prefix to determine prefix which returns just /usr with our libxml2
|
||||
# if someone needs xml support then fix it first
|
||||
|
||||
Reference in New Issue
Block a user