Files
rk1/runtime/tests/run-tests.sh
T

150 lines
6.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -Eeuo pipefail
TEST_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
RUNTIME_DIR=$(cd -- "$TEST_DIR/.." && pwd -P)
TEST_TMP=$(mktemp -d "${TMPDIR:-/tmp}/rk1-runtime-tests.XXXXXXXX")
cleanup() {
rm -rf -- "$TEST_TMP"
}
trap cleanup EXIT
fail() {
printf 'FAIL: %s\n' "$*" >&2
exit 1
}
pass() {
printf 'PASS: %s\n' "$*"
}
bash -n \
"$RUNTIME_DIR/install-rknn-runtime.sh" \
"$RUNTIME_DIR/rk1-media-selftest" \
"$RUNTIME_DIR/rk1-media-diagnostics"
pass "shell syntax"
"$RUNTIME_DIR/install-rknn-runtime.sh" --help >/dev/null
"$RUNTIME_DIR/rk1-media-selftest" --help >/dev/null
"$RUNTIME_DIR/rk1-media-diagnostics" --help >/dev/null
pass "command help"
mkdir -p \
"$TEST_TMP/empty/sys" \
"$TEST_TMP/empty/proc" \
"$TEST_TMP/empty/dev" \
"$TEST_TMP/empty/rknn"
RK1_SYSFS_ROOT="$TEST_TMP/empty/sys" \
RK1_PROCFS_ROOT="$TEST_TMP/empty/proc" \
RK1_DEV_ROOT="$TEST_TMP/empty/dev" \
RKNN_HOME="$TEST_TMP/empty/rknn" \
"$RUNTIME_DIR/rk1-media-selftest" --quick --json \
>"$TEST_TMP/empty.json"
grep -q '"overall":"warn"' "$TEST_TMP/empty.json" ||
fail "empty-hardware JSON does not report a warning"
grep -q '"checks":\[' "$TEST_TMP/empty.json" ||
fail "empty-hardware JSON has no checks"
pass "absent hardware degrades safely"
FAKE="$TEST_TMP/fake"
mkdir -p \
"$FAKE/sys/class/drm/card0-HDMI-A-1" \
"$FAKE/sys/class/devfreq/fb000000.gpu" \
"$FAKE/sys/class/devfreq/fdab0000.npu" \
"$FAKE/sys/class/net/eth0" \
"$FAKE/sys/block/mmcblk0" \
"$FAKE/sys/block/nvme0n1" \
"$FAKE/sys/bus/platform/drivers/dwhdmi-rockchip/fde80000.hdmi" \
"$FAKE/sys/bus/platform/drivers/rockchip-hdptx-phy-hdmi/fed60000.hdmiphy" \
"$FAKE/sys/bus/platform/drivers/panthor/fb000000.gpu" \
"$FAKE/sys/bus/platform/drivers/mpp_rkvdec2/fdc38100.rkvdec-core" \
"$FAKE/sys/bus/platform/drivers/mpp_rkvenc2/fdbd0000.rkvenc-core" \
"$FAKE/sys/bus/platform/drivers/mpp_av1dec/av1-decoder" \
"$FAKE/sys/bus/platform/drivers/rga2/fdb80000.rga" \
"$FAKE/sys/bus/platform/drivers/rga3/fdb60000.rga" \
"$FAKE/sys/bus/platform/drivers/RKNPU/fdab0000.npu" \
"$FAKE/proc/device-tree" \
"$FAKE/proc/asound" \
"$FAKE/dev/dri" \
"$FAKE/rknn"
printf 'connected\n' >"$FAKE/sys/class/drm/card0-HDMI-A-1/status"
printf '3840x2160\n1920x1080\n' >"$FAKE/sys/class/drm/card0-HDMI-A-1/modes"
printf 'fake-edid' >"$FAKE/sys/class/drm/card0-HDMI-A-1/edid"
printf 'Turing Machines RK1\0' >"$FAKE/proc/device-tree/model"
printf ' 0 [rockchiphdmi]: rockchip-hdmi - rockchip-hdmi\n' \
>"$FAKE/proc/asound/cards"
printf 'up\n' >"$FAKE/sys/class/net/eth0/operstate"
printf '1\n' >"$FAKE/sys/class/net/eth0/carrier"
touch "$FAKE/dev/dri/renderD128"
RK1_SYSFS_ROOT="$FAKE/sys" \
RK1_PROCFS_ROOT="$FAKE/proc" \
RK1_DEV_ROOT="$FAKE/dev" \
RKNN_HOME="$FAKE/rknn" \
"$RUNTIME_DIR/rk1-media-selftest" --quick --json \
>"$TEST_TMP/fake.json"
grep -q '"name":"card0-HDMI-A-1","status":"pass"' \
"$TEST_TMP/fake.json" || fail "fake connected HDMI was not detected"
grep -q '"name":"kernel-driver","status":"pass","message":"Panthor' \
"$TEST_TMP/fake.json" || fail "fake Panthor binding was not detected"
pass "synthetic hardware inventory"
if command -v python3 >/dev/null 2>&1; then
python3 -m json.tool "$TEST_TMP/empty.json" >/dev/null
python3 -m json.tool "$TEST_TMP/fake.json" >/dev/null
pass "JSON validity"
fi
RK1_SYSFS_ROOT="$FAKE/sys" \
RK1_PROCFS_ROOT="$FAKE/proc" \
RK1_DEV_ROOT="$FAKE/dev" \
RKNN_HOME="$FAKE/rknn" \
"$RUNTIME_DIR/rk1-media-diagnostics" --directory \
--output "$TEST_TMP/diagnostics" >/dev/null
[[ -s "$TEST_TMP/diagnostics/selftest.json" ]] ||
fail "diagnostic bundle is missing selftest.json"
[[ -s "$TEST_TMP/diagnostics/drm-connectors.txt" ]] ||
fail "diagnostic bundle is missing connector data"
[[ -s "$TEST_TMP/diagnostics/kernel-media.log" ]] ||
fail "diagnostic bundle is missing filtered kernel data"
pass "diagnostic collection"
if [[ -n ${RKNN_SOURCE_DIR:-} ]]; then
[[ -d "$RKNN_SOURCE_DIR" ]] || fail "RKNN_SOURCE_DIR is not a directory"
bundled_source="$TEST_TMP/bundled-rknn-source"
mkdir -p \
"$bundled_source/rknpu2/runtime/Linux/librknn_api/include" \
"$bundled_source/rknpu2/runtime/Linux/librknn_api/aarch64" \
"$bundled_source/rknpu2/examples/rknn_api_demo/model/RK3588" \
"$bundled_source/rknpu2/examples/rknn_api_demo/model"
cp "$RKNN_SOURCE_DIR/LICENSE" "$bundled_source/LICENSE"
cp "$RKNN_SOURCE_DIR/rknpu2/runtime/Linux/librknn_api/include/rknn_api.h" \
"$bundled_source/rknpu2/runtime/Linux/librknn_api/include/rknn_api.h"
cp "$RKNN_SOURCE_DIR/rknpu2/runtime/Linux/librknn_api/aarch64/librknnrt.so" \
"$bundled_source/rknpu2/runtime/Linux/librknn_api/aarch64/librknnrt.so"
cp "$RKNN_SOURCE_DIR/rknpu2/examples/rknn_api_demo/model/RK3588/mobilenet_v1.rknn" \
"$bundled_source/rknpu2/examples/rknn_api_demo/model/RK3588/mobilenet_v1.rknn"
cp "$RKNN_SOURCE_DIR/rknpu2/examples/rknn_api_demo/model/dog_224x224.jpg" \
"$bundled_source/rknpu2/examples/rknn_api_demo/model/dog_224x224.jpg"
mkdir -p "$TEST_TMP/rootfs"
"$RUNTIME_DIR/install-rknn-runtime.sh" \
--rootfs "$TEST_TMP/rootfs" --source-dir "$bundled_source"
installed_runtime="$TEST_TMP/rootfs/opt/rknn/2.3.2/lib/librknnrt.so"
installed_model="$TEST_TMP/rootfs/opt/rknn/2.3.2/share/models/rk3588/mobilenet_v1.rknn"
[[ -x "$TEST_TMP/rootfs/opt/rknn/2.3.2/bin/rknn-inference-test" ]] ||
fail "compiled inference test is missing"
[[ $(sha256sum "$installed_runtime" | awk '{print $1}') == \
d31fc19c85b85f6091b2bd0f6af9d962d5264a4e410bfb536402ec92bac738e8 ]] ||
fail "installed runtime checksum differs"
[[ $(sha256sum "$installed_model" | awk '{print $1}') == \
381dae3b7038a98b10f6ec9dcdbb094a49247341856fb294e692ef518218fcfb ]] ||
fail "installed model checksum differs"
pass "pinned RKNN installation"
else
printf 'SKIP: installer integration (set RKNN_SOURCE_DIR to a v2.3.2 checkout)\n'
fi
printf 'All runtime tests passed.\n'