113 lines
4.8 KiB
Bash
Executable file
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
|