diff mbox series

[scarthgap] libpng: Add ptest for libpng

Message ID 20250103104903.2946151-1-sanakazi720@gmail.com
State Changes Requested
Delegated to: Steve Sakoman
Headers show
Series [scarthgap] libpng: Add ptest for libpng | expand

Commit Message

Sana Kazi Jan. 3, 2025, 10:49 a.m. UTC
libpng is a platform-independent library which
supports all PNG features.
This ptest executes the below binaries, parses
the png image and prints the image features.

1. pngfix - provides information about PNG image
copyrights details.

2. pngtest - tests, optimizes and optionally fixes
the zlib header in PNG files.

3. pngstest - verifies the integrity of PNG image by
dumping chunk level information.

4. timepng - provides details about PNG image chunks.

Signed-off-by: Sana Kazi <sanakazi720@gmail.com>
---
 .../distro/include/ptest-packagelists.inc     |  1 +
 .../recipes-multimedia/libpng/files/run-ptest | 29 +++++++++++++++++++
 .../libpng/libpng_1.6.42.bb                   | 14 +++++++--
 3 files changed, 42 insertions(+), 2 deletions(-)
 create mode 100644 meta/recipes-multimedia/libpng/files/run-ptest

Comments

Alexander Kanavin Jan. 3, 2025, 11:03 a.m. UTC | #1
On Fri, 3 Jan 2025 at 11:49, Sana Kazi via lists.openembedded.org
<sanakazi720=gmail.com@lists.openembedded.org> wrote:

> libpng is a platform-independent library which
> supports all PNG features.
> This ptest executes the below binaries, parses
> the png image and prints the image features.
>
> 1. pngfix - provides information about PNG image
> copyrights details.
>
> 2. pngtest - tests, optimizes and optionally fixes
> the zlib header in PNG files.
>
> 3. pngstest - verifies the integrity of PNG image by
> dumping chunk level information.
>
> 4. timepng - provides details about PNG image chunks.

Thanks for working in this. There are more tests provided by libpng,
why only these four are picked? E.g. in Makefile.am:

if ENABLE_TESTS
check_PROGRAMS= pngtest pngunknown pngstest pngvalid pngimage pngcp
if HAVE_CLOCK_GETTIME
check_PROGRAMS += timepng

> +#!/bin/sh
> +
> +set -eux
> +
> +./pngfix pngtest.png &> log.txt  2>&1
> +
> +if grep -i "OK" log.txt 2>&1 ; then
> +   echo "PASS: pngfix passed"
> +else
> +   echo "FAIL: pngfix failed"
> +fi
> +rm -f log.txt
> +
> +./pngtest pngtest.png &> log.txt 2>&1
> +
> +if grep -i "PASS" log.txt 2>&1 ; then
> +   echo "PASS: pngtest passed"
> +else
> +   echo "FAIL: pngtest failed"
> +fi
> +rm -f log.txt
> +
> +for i in pngstest timepng; do
> +    if "./${i}" pngtest.png 2>&1; then
> +        echo "PASS: $i"
> +    else
> +        echo "FAIL: $i"
> +    fi
> +done

There are several problems here:
- hardcoding the list of test executables is prone to getting out of
date as libpng is updated to newer versions. As pointed above, it is
already incomplete.
- checking the logs for things like 'OK' is prone to incorrect test
results if the test prints OK somewhere unrelated. The correct thing
to do is to check the return code.
- removing the logs makes investigating failures more difficult

All of the above issues can be addressed by installing Makefile from
${B} and running 'make check' from run-ptest. We do this in several
other ptests.

Alex
diff mbox series

Patch

diff --git a/meta/conf/distro/include/ptest-packagelists.inc b/meta/conf/distro/include/ptest-packagelists.inc
index 5975db25cc..8878af92ff 100644
--- a/meta/conf/distro/include/ptest-packagelists.inc
+++ b/meta/conf/distro/include/ptest-packagelists.inc
@@ -31,6 +31,7 @@  PTESTS_FAST = "\
     libgpg-error\
     libnl \
     libpcre \
+    libpng \
     libssh2 \
     libtimedate-perl \
     libtest-fatal-perl \
diff --git a/meta/recipes-multimedia/libpng/files/run-ptest b/meta/recipes-multimedia/libpng/files/run-ptest
new file mode 100644
index 0000000000..9ab5d0c1f4
--- /dev/null
+++ b/meta/recipes-multimedia/libpng/files/run-ptest
@@ -0,0 +1,29 @@ 
+#!/bin/sh
+
+set -eux
+
+./pngfix pngtest.png &> log.txt  2>&1
+
+if grep -i "OK" log.txt 2>&1 ; then
+   echo "PASS: pngfix passed"
+else
+   echo "FAIL: pngfix failed"
+fi
+rm -f log.txt
+
+./pngtest pngtest.png &> log.txt 2>&1
+
+if grep -i "PASS" log.txt 2>&1 ; then
+   echo "PASS: pngtest passed"
+else
+   echo "FAIL: pngtest failed"
+fi
+rm -f log.txt
+
+for i in pngstest timepng; do
+    if "./${i}" pngtest.png 2>&1; then
+        echo "PASS: $i"
+    else
+        echo "FAIL: $i"
+    fi
+done
diff --git a/meta/recipes-multimedia/libpng/libpng_1.6.42.bb b/meta/recipes-multimedia/libpng/libpng_1.6.42.bb
index 673133bb4a..6438bf190e 100644
--- a/meta/recipes-multimedia/libpng/libpng_1.6.42.bb
+++ b/meta/recipes-multimedia/libpng/libpng_1.6.42.bb
@@ -10,7 +10,9 @@  DEPENDS = "zlib"
 
 LIBV = "16"
 
-SRC_URI = "${SOURCEFORGE_MIRROR}/project/${BPN}/${BPN}${LIBV}/${PV}/${BP}.tar.xz"
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/${BPN}/${BPN}${LIBV}/${PV}/${BP}.tar.xz \
+           file://run-ptest \
+"
 SRC_URI[sha256sum] = "c919dbc11f4c03b05aba3f8884d8eb7adfe3572ad228af972bb60057bdb48450"
 
 MIRRORS += "${SOURCEFORGE_MIRROR}/project/${BPN}/${BPN}${LIBV}/ ${SOURCEFORGE_MIRROR}/project/${BPN}/${BPN}${LIBV}/older-releases/"
@@ -19,7 +21,7 @@  UPSTREAM_CHECK_URI = "http://libpng.org/pub/png/libpng.html"
 
 BINCONFIG = "${bindir}/libpng-config ${bindir}/libpng16-config"
 
-inherit autotools binconfig-disabled pkgconfig
+inherit autotools binconfig-disabled pkgconfig ptest
 
 # Work around missing symbols
 ARMNEON = "${@bb.utils.contains("TUNE_FEATURES", "neon", "--enable-arm-neon=on", "--enable-arm-neon=off", d)}"
@@ -30,4 +32,12 @@  PACKAGES =+ "${PN}-tools"
 
 FILES:${PN}-tools = "${bindir}/png-fix-itxt ${bindir}/pngfix ${bindir}/pngcp"
 
+do_install_ptest() {
+    install -m644 "${S}/pngtest.png" "${D}${PTEST_PATH}"
+    install -m755 "${B}/.libs/pngfix" "${D}${PTEST_PATH}"
+    install -m755 "${B}/.libs/pngtest" "${D}${PTEST_PATH}"
+    install -m755 "${B}/.libs/pngstest" "${D}${PTEST_PATH}"
+    install -m755 "${B}/.libs/timepng" "${D}${PTEST_PATH}"
+}
+
 BBCLASSEXTEND = "native nativesdk"