mirror of https://github.com/wolfSSL/wolfBoot.git
135 lines
3.2 KiB
Bash
Executable File
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
|