uzbek-plus/b6p/test/p-run.sh

41 lines
4.4 KiB
Bash

#!/bin/sh
# B6P RAM test on a candidate boot (test-side only, not part of the image). $1 = name, $2 = reconnect cycles (default 3).
# Waits for the autostarted service, data test on the autostart bearer, N x (disconnect -> start/reconnect -> data), then service stop.
NAME=$1; NR=${2:-3}; O=/tmp/$NAME; mkdir -p $O; C=/usr/sbin/aurora-modem; D=/run/aurora-modem
B=/sys/bus/platform/devices/4080000.remoteproc:bam-dmux; RPS=/sys/class/remoteproc/remoteproc0/state
up() { cut -d' ' -f1 /proc/uptime; }
mk() { echo "<5>[$NAME] $*" > /dev/kmsg; echo "[$(up)] $*" | tee -a $O/run.log; }
nv() { for want in modemst1 modemst2 fsg fsc persist; do for p in /sys/class/block/mmcblk0p*; do
[ "$(sed -n 's/^PARTNAME=//p' $p/uevent)" = "$want" ] && echo "$want $(basename $p) $(sha256sum /dev/$(basename $p) | cut -d' ' -f1)"; done; done; }
ERR='Failed to resume|-110|[ (=]-22\b|EAGAIN|Resource temporarily|crash detected|fatal error|[Ww]atchdog|wdog|Oops|Kernel panic|Unable to handle|BUG:'
mk "date=$(date -u +%Y-%m-%dT%H:%M:%S) (clock not set by test)"
[ -f /tmp/pon-read.sh ] && { sh /tmp/pon-read.sh > $O/pon.txt 2>&1; mk "PON regs 0808/080a/080c/080d: $(grep -E '^080[8acd]:' $O/pon.txt | tr '\n' ' ')"; }
i=0; while ! grep -q "=== service start rc=" $D/service.log 2>/dev/null; do sleep 5; i=$((i+5)); [ $i -ge 900 ] && break; done
mk "autostart: $(grep '=== service start rc=' $D/service.log | tail -1) / $(grep -m1 -oE 'START OK in [0-9.]+s|FAIL[^(]*' $D/lifecycle.log)"
/etc/init.d/aurora-modem status > $O/status-autostart.txt 2>&1
for q in nas-get-signal-info nas-get-cell-location-info nas-get-rf-band-info; do timeout 20 qmicli -p -d /dev/wwan0qmi0 --$q > $O/$q.txt 2>&1; done # read-only
v() { grep -m1 -oE "$1: *'[^']*'" $2 2>/dev/null | sed -E "s/.*'([^']*)'/\\1/"; }
mk "radio after autostart: pci=$(v 'Serving Cell ID' $O/nas-get-cell-location-info.txt) earfcn=$(v 'EUTRA Absolute RF Channel Number' $O/nas-get-cell-location-info.txt) band=$(v 'Active Band Class' $O/nas-get-rf-band-info.txt) rsrp=$(v RSRP $O/nas-get-signal-info.txt) rsrq=$(v RSRQ $O/nas-get-signal-info.txt) snr=$(v SNR $O/nas-get-signal-info.txt)"
printf 'cycle\taction\trc\tipv4\tverdict\tstale_routes\twwan_up\tbam\tmss\trmtfs\tmm\tusb\temmc_w\tdmesg_err\n' > $O/p-table.tsv
row() { printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' "$1" "$2" "$3" "$(sed -n 's/^A=//p' $D/ipcfg 2>/dev/null)" "$4" \
$(ip route | grep -c " dev wwan") "$(for d in /sys/class/net/wwan*; do [ $(( $(cat $d/flags) & 1 )) -ne 0 ] && echo ${d##*/}; done | tr '\n' ',')" \
"$(cat $B/power/runtime_status)" "$(cat $RPS)" "$(pidof rmtfs)" "$(pidof ModemManager)" "$(ping -c1 -W2 172.16.42.2 >/dev/null 2>&1 && echo ok || echo FAIL)" \
"$(awk '{print $5"/"$7}' /sys/block/mmcblk0/stat)" "$(dmesg | grep -cE "$ERR")" >> $O/p-table.tsv; }
F=
if grep -q "START OK" $D/lifecycle.log; then
sh /tmp/p-datatest $O/dt0 > $O/dt0.out 2>&1; r=$?; row 0 autostart+data $r "$(cat $O/dt0/verdict.txt)"; [ $r = 0 ] || F="data0"
for c in $(seq 1 $NR); do [ -n "$F" ] && break
$C disconnect > $O/disc$c.out 2>&1; r=$?; row $c disconnect $r "-"; [ $r = 0 ] || { F="disconnect$c"; break; }
sleep 5
$C start > $O/start$c.out 2>&1; r=$?; [ $r = 0 ] || { row $c reconnect $r "-"; F="reconnect$c"; break; }
sh /tmp/p-datatest $O/dt$c > $O/dt$c.out 2>&1; r=$?; row $c reconnect+data $r "$(cat $O/dt$c/verdict.txt)"; [ $r = 0 ] || F="data$c"
mk "cycle $c: $(tail -1 $O/p-table.tsv | tr '\t' ' ')"
done
else F="autostart"; fi
mk "RESULT before stop: ${F:-all PASS}"
/etc/init.d/aurora-modem status > $O/status-before-stop.txt 2>&1
/etc/init.d/aurora-modem stop > $O/stop.out 2>&1; SR=$?; sleep 2; row end service-stop $SR "-"
nv > $O/nv-after.txt; awk '{print $1,$3}' /tmp/nv-before.txt | grep -v '^stat' > $O/a; awk '{print $1,$3}' $O/nv-after.txt > $O/b; cmp -s $O/a $O/b && NVR=unchanged || NVR=CHANGED
dmesg > $O/dmesg.txt; cp $D/lifecycle.log $D/service.log $D/rmtfs.log $D/reg-trans.tsv $O/ 2>/dev/null; cp /tmp/nv-before.txt $O/
mk "FINAL: ${F:-all PASS}; service stop rc=$SR; nv $NVR; emmc $(awk '{print "w="$5" s="$7}' /sys/block/mmcblk0/stat); mss=$(cat $RPS) rmtfs='$(pidof rmtfs)' mm='$(pidof ModemManager)' bam=$(cat $B/power/runtime_status) wwan-up=$(for d in /sys/class/net/wwan*; do [ $(( $(cat $d/flags) & 1 )) -ne 0 ] && echo ${d##*/}; done | tr '\n' ' ') dmesg-errs=$(dmesg | grep -cE "$ERR") usb=$(ping -c2 -W2 172.16.42.2 >/dev/null 2>&1 && echo ok || echo FAIL)"
tar -C /tmp -cf /tmp/$NAME.tar $NAME; mk "$NAME-RUN-END"