#!/usr/bin/env bash # Run the cross-built Windows tests inside the test VMs (scripts/winvm/vm.sh). # # scripts/win_test.sh [-b BUILD_DIR] [-v "en zh"] [-u "Administrator tester 测试"] [-f FILTER] # # BUILD_DIR (default build-win) must contain test_*.exe from the MinGW build; # busybox.exe is taken from third_party/busybox/. VMs that are not running are # started and stopped again afterwards. Exit status is the number of failed # variant/user runs. set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" VM="$ROOT/scripts/winvm/vm.sh" BUILD="$ROOT/build-win" VARIANTS="en zh" USERS_LIST="Administrator tester 测试" FILTER="*" while getopts "b:v:u:f:" o; do case "$o" in b) BUILD="$(cd "$OPTARG" && pwd)" ;; v) VARIANTS="$OPTARG" ;; u) USERS_LIST="$OPTARG" ;; f) FILTER="$OPTARG" ;; *) sed -n '2,8p' "$0"; exit 2 ;; esac done shopt -s nullglob exes=("$BUILD"/test_*.exe) [[ ${#exes[@]} -gt 0 ]] || { echo "no test_*.exe in $BUILD" >&2; exit 1; } stage="$(mktemp -d)" trap 'rm -rf "$stage"' EXIT mkdir -p "$stage/bundle/bin" "$stage/bundle/data/tests" cp "${exes[@]}" "$stage/bundle/bin/" for f in "$BUILD"/*.dll "$ROOT/third_party/busybox/busybox.exe"; do [[ -f "$f" ]] && cp "$f" "$stage/bundle/bin/" done cp -r "$ROOT/tests/fixtures" "$stage/bundle/data/tests/" cp "$ROOT/scripts/winvm/run_tests.ps1" "$stage/bundle/" tar -C "$stage" -cf "$stage/bundle.tar" bundle total_fail=0 summary=() for v in $VARIANTS; do started=0 if [[ "$("$VM" status "$v")" != running ]]; then "$VM" start "$v" started=1 fi "$VM" ssh "$v" 'Remove-Item -Recurse -Force C:\cst-test\bundle -ErrorAction SilentlyContinue; New-Item -ItemType Directory -Force C:\cst-test | Out-Null' >/dev/null "$VM" put "$v" "$stage/bundle.tar" "C:/cst-test/bundle.tar" "$VM" ssh "$v" 'tar -xf C:\cst-test\bundle.tar -C C:\cst-test; Remove-Item C:\cst-test\bundle.tar' >/dev/null for u in $USERS_LIST; do echo "===== $v / $u" rc=0 "$VM" ps "$v" "$u" "$stage/bundle/run_tests.ps1" -Bundle 'C:\cst-test\bundle' -Filter "'$FILTER'" || rc=$? summary+=("$v/$u: $([[ $rc == 0 ]] && echo ok || echo FAIL)") [[ $rc == 0 ]] || total_fail=$((total_fail + 1)) done [[ $started == 1 ]] && "$VM" stop "$v" done echo printf '%s\n' "${summary[@]}" exit "$total_fail"