From 7c567c98ef4b45410d0d4bbfa538fdd124cf6c6c Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Tue, 4 Oct 2022 05:13:36 -0500 Subject: [PATCH] Parallelize mkroot tests. --- scripts/test_mkroot.sh | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/scripts/test_mkroot.sh b/scripts/test_mkroot.sh index a876a873..06f6b847 100755 --- a/scripts/test_mkroot.sh +++ b/scripts/test_mkroot.sh @@ -1,17 +1,17 @@ -#/bin/bash +#!/bin/bash [ -n "$(which toybox)" -a -n "$(which mksquashfs)" ] || { echo "Need toybox and mksquashfs in $PATH"; exit 1; } -mkdir -p "${TEST:=root/build/test}" && +mkdir -p "${TEST:=$PWD/root/build/test}" && # Setup test filesystem -cat > "$TEST"/init << EOF && +cat > "$TEST"/init << 'EOF' && #!/bin/sh echo -echo === running init -[ "$(date +%s)" -gt 1500000000 ] && echo === date ok +echo === init $HOST +[ "$(date +%s)" -gt 1500000000 ] && echo === date ok $HOST wget http://10.0.2.2:65432 -O - EOF chmod +x "$TEST"/init && @@ -25,7 +25,7 @@ sleep .25 [ -n "$(wget http://127.0.0.1:65432/ -O - | grep ===)" ] || exit 1 -PASS= NOPASS= +COUNT=0 CPUS=$(($(nproc)+0)) for I in root/*/linux-kernel do [ ! -e "$I" ] && continue @@ -36,10 +36,26 @@ do { cd $X || continue echo === $X - # When stdin is a tty QEMU will SIGTTOU itself here. - toybox timeout -i 5 ./run-qemu.sh -drive format=raw,file=../build/test/init.sqf < /dev/null 2>/dev/null + # Can't point two QEMU instances at same sqf because gratuitous file locking + cp "$TEST"/init.{sqf,$BASHPID} && + # When stdin is a tty QEMU will SIGTTOU itself here, so &1 + rm -f "$TEST/init.$BASHPID" cd ../.. - } | tee root/build/log/$Y-test.txt | grep '^=== ' + } | tee root/build/log/$Y-test.txt | { [ -z "$V" ] && cat >/dev/null || { [ "$V" -gt 1 ] && cat || grep '^=== '; } } & + + [ $((++COUNT)) -ge $CPUS ] && { wait -n; ((--COUNT)); [ -z "$V" ] && echo -n .; } +done + +while [ $COUNT -gt 0 ]; do wait -n; ((--COUNT)); [ -z "$V" ] && echo -n .; done +echo + +PASS= NOPASS= +for I in root/*/linux-kernel +do + [ ! -e "$I" ] && continue + X=$(dirname $I) Y=$(basename $X) + [ "$(grep '^=== ' root/build/log/$Y-test.txt | wc -l)" -eq 4 ] && PASS+="$Y " || NOPASS+="$Y " done -- 2.39.2