pdfio/Sanity/pdfio-basic/test.sh
2026-05-13 16:36:57 +02:00

113 lines
4.8 KiB
Bash
Executable file

#!/bin/bash
# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
. /usr/share/beakerlib/beakerlib.sh || exit 1
rlJournalStart
rlPhaseStartSetup
rlRun "tmp=\$(mktemp -d)" 0 "Create tmp directory"
rlRun "pushd $tmp"
rlRun "set -o pipefail"
rlRun "rpm -q pdfio" 0 "Package pdfio is present"
rlPhaseEnd
rlPhaseStartTest "Verify library files and linker visibility"
rlRun "rpm -ql pdfio | tee pkg-files.out" 0 "List pdfio package content"
rlAssertGrep '/usr/lib\(64\)\?/libpdfio\.so\(\.[0-9]\+\)*$' "pkg-files.out"
rlRun "ldconfig -p | tee ldconfig.out" 0 "Read linker cache"
rlAssertGrep "libpdfio.so" "ldconfig.out"
rlPhaseEnd
rlPhaseStartTest "Verify package metadata can be queried"
rlRun "rpm -qi pdfio | tee pkg-info.out" 0 "Query package info"
rlAssertGrep "^Name[[:space:]]*:[[:space:]]*pdfio" "pkg-info.out"
rlPhaseEnd
rlPhaseStartTest "Verify package payload integrity"
rlRun "rpm -V pdfio > rpm-verify.out" 0 "Verify installed files for pdfio package"
rlRun "test ! -s rpm-verify.out" 0 "No payload drift reported by rpm -V"
rlPhaseEnd
rlPhaseStartTest "Verify packaged library paths are present on disk"
mapfile -t pdfio_libs < <(rpm -ql pdfio | grep -E '^/usr/lib(64)?/libpdfio\.so(\.[0-9]+)*$')
if [[ "${#pdfio_libs[@]}" -eq 0 ]]; then
rlFail "No libpdfio shared library paths found in package payload."
else
for lib in "${pdfio_libs[@]}"; do
rlAssertExists "$lib"
rlRun "test -r '$lib'" 0 "Library is readable: $lib"
done
fi
rlPhaseEnd
rlPhaseStartTest "Verify libpdfio ELF metadata and SONAME"
if ! command -v readelf >/dev/null 2>&1; then
rlLogInfo "readelf is unavailable, skipping ELF metadata checks."
else
mapfile -t pdfio_real_libs < <(rpm -ql pdfio | grep -E '^/usr/lib(64)?/libpdfio\.so\.[0-9]+')
if [[ "${#pdfio_real_libs[@]}" -eq 0 ]]; then
rlLogInfo "No versioned libpdfio shared object found; skipping ELF metadata checks."
else
for lib in "${pdfio_real_libs[@]}"; do
rlRun "file '$lib' | tee file-$(basename "$lib").out" 0 "Inspect ELF type for $lib"
rlRun "grep -Eq 'ELF [0-9]+-bit' file-$(basename "$lib").out" 0 \
"Library has ELF header: $lib"
rlRun "readelf -h '$lib' >/dev/null" 0 "Read ELF header for $lib"
rlRun "readelf -d '$lib' | tee dyn-$(basename "$lib").out" 0 \
"Read dynamic section for $lib"
rlAssertGrep "SONAME" "dyn-$(basename "$lib").out"
done
fi
fi
rlPhaseEnd
rlPhaseStartTest "Verify libpdfio runtime dependencies are resolved"
mapfile -t pdfio_real_libs < <(rpm -ql pdfio | grep -E '^/usr/lib(64)?/libpdfio\.so\.[0-9]+')
if [[ "${#pdfio_real_libs[@]}" -eq 0 ]]; then
rlLogInfo "No versioned libpdfio shared object found; skipping ldd dependency test."
else
for lib in "${pdfio_real_libs[@]}"; do
rlRun "ldd '$lib' | tee ldd-$(basename "$lib").out" 0 "Inspect dynamic dependencies for $lib"
rlRun "ldd '$lib' | grep -q 'not found'" 1 "All dynamic dependencies are available for $lib"
done
fi
rlPhaseEnd
rlPhaseStartTest "Verify libpdfio can be loaded via dynamic loader"
if command -v python3 >/dev/null 2>&1; then
mapfile -t pdfio_load_candidates < <(rpm -ql pdfio | grep -E '^/usr/lib(64)?/libpdfio\.so(\.[0-9]+)+$')
if [[ "${#pdfio_load_candidates[@]}" -eq 0 ]]; then
rlFail "No versioned libpdfio soname found for loader test."
else
rlRun "python3 - '${pdfio_load_candidates[0]}' <<'PY'
import ctypes
import gc
import sys
for _ in range(20):
handle = ctypes.CDLL(sys.argv[1])
del handle
gc.collect()
print('libpdfio repeated load OK')
PY" 0 "Load libpdfio through Python ctypes"
fi
else
rlLogInfo "python3 not available, skipping ctypes load smoke test."
fi
rlPhaseEnd
rlPhaseStartTest "Verify packaged binaries are callable"
mapfile -t pdfio_bins < <(rpm -ql pdfio | grep -E '^/usr/bin/pdfio')
if [[ "${#pdfio_bins[@]}" -eq 0 ]]; then
rlLogInfo "No /usr/bin/pdfio* tools are shipped by this build; skipping binary checks."
else
for bin in "${pdfio_bins[@]}"; do
rlRun "$bin --help >/dev/null 2>&1 || $bin -h >/dev/null 2>&1 || true" 0 \
"Command is callable: $bin"
done
fi
rlPhaseEnd
rlPhaseStartCleanup
rlRun "popd"
rlRun "rm -r $tmp" 0 "Remove tmp directory"
rlPhaseEnd
rlJournalEnd