Просмотр исходного кода

test: rework test script and github workflow

Signed-off-by: greatbridf <greatbridf@icloud.com>
greatbridf 1 неделя назад
Родитель
Сommit
c7c5cdac66
2 измененных файлов с 67 добавлено и 8 удалено
  1. 1 0
      .github/workflows/test-build.yaml
  2. 66 8
      script/test.sh

+ 1 - 0
.github/workflows/test-build.yaml

@@ -30,6 +30,7 @@ jobs:
 
 
       - name: Setup QEMU
       - name: Setup QEMU
         run: |
         run: |
+          sudo apt-get update
           sudo apt-get install -y qemu-system-${{ matrix.arch }} qemu-kvm
           sudo apt-get install -y qemu-system-${{ matrix.arch }} qemu-kvm
 
 
       - name: Configure
       - name: Configure

+ 66 - 8
script/test.sh

@@ -1,13 +1,71 @@
-#!/bin/sh
+#!/bin/bash
 
 
+LOGFILE="build/test-$$.log"
 SUCCESS_MSG="###$RANDOM :SuCCeSS: $RANDOM###"
 SUCCESS_MSG="###$RANDOM :SuCCeSS: $RANDOM###"
 
 
-if [ "$ARCH" = "" ]; then
-    echo "Error: ARCH environment variable is not set." >&2
+die() {
+    echo "error: $1" >&2
     exit 1
     exit 1
-fi
+}
+
+runcmd() {
+    printf -v _cmd "%q" "$*"
+
+    cat <<EOF
+    expect {
+        "*/ # " { send "$_cmd\n" }
+        "*panicked" { exit 1 }
+    }
+EOF
+}
+
+wait_str() {
+    cat <<EOF
+    expect {
+        "*$*" {}
+        "*panicked" { exit 1 }
+    }
+EOF
+}
+
+wait_init_exit() {
+    echo 'expect "*init exited:" { exit 0 }'
+}
+
+cleanup() {
+    killall -KILL "qemu-system-$ARCH"
+}
+
+[ -z "$ARCH" ] && die "ARCH environment variable is not set"
+
+trap cleanup EXIT
+
+expect <<EOF | tee "$LOGFILE"
+
+set timeout 10
+spawn make test-run "ARCH=$ARCH" MODE=release "QEMU=qemu-system-$ARCH"
 
 
-printf "ls\necho \"$SUCCESS_MSG\"\npoweroff\n" \
-    | make test-run ARCH=$ARCH MODE=release QEMU=qemu-system-$ARCH \
-    | tee build/test-$$.log \
-    | grep "$SUCCESS_MSG" > /dev/null && echo TEST\ $$\ WITH\ ARCH=$ARCH\ PASSED
+$(runcmd ls -la)
+
+$(wait_str proc)
+
+$(runcmd echo \""$SUCCESS_MSG"\")
+
+$(wait_str "\n$SUCCESS_MSG")
+
+$(runcmd poweroff)
+
+$(wait_init_exit)
+
+EOF
+
+status=$?
+
+echo
+
+# shellcheck disable=SC2181
+if [ $status -ne 0 ]; then
+    echo "=== Test $$ with ARCH=$ARCH failed"
+else
+    echo "=== Test $$ with ARCH=$ARCH passed"
+fi