wolfBoot/tools/scripts/renode-test-update.sh

135 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
set -u
export RENODE_UART=/tmp/wolfboot.uart
export RENODE_PIDFILE=/tmp/renode.pid
export RENODE_CONFIG=tools/renode/nrf52840_wolfboot.resc
export POFF=262139
export RENODE_PORT=55155
export RENODE_OPTIONS="--pid-file=$RENODE_PIDFILE --disable-xwt -P $RENODE_PORT"
export EXPVER=tools/test-expect-version/test-expect-version
export TEST_OPTIONS=$@
export RENODE_START_TIMEOUT=30
export UART_OPEN_TIMEOUT=10
export EXPVER_TIMEOUT=75
export RENODE_LOG=/tmp/renode.log
RENODE_BG_PID=
show_renode_log() {
if [ -f "$RENODE_LOG" ]; then
echo "----- Renode log -----"
tail -n 80 "$RENODE_LOG"
fi
}
quit_renode() {
if (which nc); then
(echo && echo quit && echo) | nc -q 1 localhost $RENODE_PORT >/dev/null
fi
}
renode_is_alive() {
if [ -n "${RENODE_BG_PID:-}" ] && kill -0 "$RENODE_BG_PID" 2>/dev/null; then
return 0
fi
if [ -f "$RENODE_PIDFILE" ] && kill -0 "$(cat "$RENODE_PIDFILE")" 2>/dev/null; then
return 0
fi
return 1
}
wait_for_uart_node() {
local waited=0
while [ "$waited" -lt "$RENODE_START_TIMEOUT" ]; do
if [ -e "$RENODE_UART" ]; then
return 0
fi
if ! renode_is_alive; then
echo "Renode exited before creating UART PTY"
show_renode_log
return 1
fi
sleep 1
waited=$((waited + 1))
done
echo "Timed out waiting for Renode UART PTY: $RENODE_UART"
show_renode_log
return 1
}
wait_for_uart_ready() {
local waited=0
while [ "$waited" -lt "$UART_OPEN_TIMEOUT" ]; do
if bash -lc 'exec 3<>"$1"' _ "$RENODE_UART" 2>/dev/null; then
return 0
fi
if ! renode_is_alive; then
echo "Renode exited before UART became ready"
show_renode_log
return 1
fi
sleep 1
waited=$((waited + 1))
done
echo "Timed out waiting for Renode UART readiness: $RENODE_UART"
show_renode_log
return 1
}
run_expect_version() {
local expected="$1"
local ret
ret=$(timeout "$EXPVER_TIMEOUT" "$EXPVER" "$RENODE_UART")
if [ "$ret" = "$expected" ]; then
return 0
fi
echo "Unexpected version from UART: got ${ret}, expected ${expected}"
return 1
}
rm -f $RENODE_UART $RENODE_LOG
make keysclean
make keytools
make -C tools/test-expect-version
make clean && make $TEST_OPTIONS || exit 2
make /tmp/renode-test-update.bin $TEST_OPTIONS || exit 2
cp /tmp/renode-test-update.bin test-app/ || exit 3
cp wolfboot.elf /tmp/renode-wolfboot.elf || exit 3
cp test-app/image_v1_signed.bin /tmp/renode-test-v1.bin || exit 3
cp test-app/renode-test-update.bin /tmp || exit 3
echo "Launching Renode"
renode $RENODE_OPTIONS $RENODE_CONFIG >"$RENODE_LOG" 2>&1 &
RENODE_BG_PID=$!
wait_for_uart_node || { quit_renode; exit 1; }
echo "Renode up: uart port activated"
wait_for_uart_ready || { quit_renode; exit 1; }
sleep 1
echo "Renode running: renode has been started."
if run_expect_version 1; then
echo "Factory img: OK"
else
echo "FAILURE"
quit_renode
exit 1
fi
if run_expect_version 2; then
echo "Update: OK"
else
echo "FAILURE"
quit_renode
exit 1
fi
quit_renode
exit 0