1*cf5a6c84SAndroid Build Coastguard Worker#!/bin/bash 2*cf5a6c84SAndroid Build Coastguard Worker 3*cf5a6c84SAndroid Build Coastguard Workersource scripts/runtest.sh 4*cf5a6c84SAndroid Build Coastguard Workersource scripts/portability.sh 5*cf5a6c84SAndroid Build Coastguard Worker 6*cf5a6c84SAndroid Build Coastguard Worker# Kill child processes when we exit 7*cf5a6c84SAndroid Build Coastguard Workertrap 'kill $(jobs -p) 2>/dev/null; exit 1' INT 8*cf5a6c84SAndroid Build Coastguard Worker 9*cf5a6c84SAndroid Build Coastguard Worker# Create working directory 10*cf5a6c84SAndroid Build Coastguard WorkerTOPDIR="$PWD" 11*cf5a6c84SAndroid Build Coastguard Workerexport FILES="$PWD"/tests/files PREFIX=generated/testdir 12*cf5a6c84SAndroid Build Coastguard Workerrm -rf "$PREFIX" 13*cf5a6c84SAndroid Build Coastguard Workermkdir -p "$PREFIX"/testdir 14*cf5a6c84SAndroid Build Coastguard Worker 15*cf5a6c84SAndroid Build Coastguard Worker# Populate working directory 16*cf5a6c84SAndroid Build Coastguard Workerif [ -z "$TEST_HOST" ] 17*cf5a6c84SAndroid Build Coastguard Workerthen 18*cf5a6c84SAndroid Build Coastguard Worker if [ $# -ne 0 ] 19*cf5a6c84SAndroid Build Coastguard Worker then 20*cf5a6c84SAndroid Build Coastguard Worker scripts/single.sh "$@" || exit 1 21*cf5a6c84SAndroid Build Coastguard Worker else 22*cf5a6c84SAndroid Build Coastguard Worker scripts/install.sh --symlink --force || exit 1 23*cf5a6c84SAndroid Build Coastguard Worker fi 24*cf5a6c84SAndroid Build Coastguard Workerfi 25*cf5a6c84SAndroid Build Coastguard Worker 26*cf5a6c84SAndroid Build Coastguard Worker# Add prefix to $PATH 27*cf5a6c84SAndroid Build Coastguard Workerexport -n PREFIX 28*cf5a6c84SAndroid Build Coastguard Workercd "$PREFIX" 29*cf5a6c84SAndroid Build Coastguard WorkerPATH="$PWD:$PATH" TESTDIR="$PWD" 30*cf5a6c84SAndroid Build Coastguard Workerexport LC_COLLATE=C 31*cf5a6c84SAndroid Build Coastguard Worker 32*cf5a6c84SAndroid Build Coastguard Worker# Collection OPTIONFLAGS for optional() 33*cf5a6c84SAndroid Build Coastguard Worker[ -f "$TOPDIR/generated/config.h" ] && 34*cf5a6c84SAndroid Build Coastguard Worker export OPTIONFLAGS=:$($SED -nr 's/^#define CFG_(.*) 1$/\1/p' "$TOPDIR/generated/config.h" | tr '\n' :) 35*cf5a6c84SAndroid Build Coastguard Worker 36*cf5a6c84SAndroid Build Coastguard Worker# Run a test file in $TESTDIR/testdir with $CMDNAME and $C set, parse $FAILCOUNT 37*cf5a6c84SAndroid Build Coastguard Workerdo_test() 38*cf5a6c84SAndroid Build Coastguard Worker{ 39*cf5a6c84SAndroid Build Coastguard Worker # reset testdir 40*cf5a6c84SAndroid Build Coastguard Worker cd "$TESTDIR" && rm -rf testdir continue && mkdir testdir && cd testdir || 41*cf5a6c84SAndroid Build Coastguard Worker exit 1 42*cf5a6c84SAndroid Build Coastguard Worker 43*cf5a6c84SAndroid Build Coastguard Worker # set CMDNAME to base name of test file, and C to full path to command 44*cf5a6c84SAndroid Build Coastguard Worker CMDNAME="${1##*/}" CMDNAME="${CMDNAME%.test}" 45*cf5a6c84SAndroid Build Coastguard Worker if [ -z "$TEST_HOST" ] 46*cf5a6c84SAndroid Build Coastguard Worker then 47*cf5a6c84SAndroid Build Coastguard Worker C="$TESTDIR/$CMDNAME" 48*cf5a6c84SAndroid Build Coastguard Worker [ ! -e "$C" ] && echo "$SHOWSKIP: $CMDNAME disabled" && return 49*cf5a6c84SAndroid Build Coastguard Worker C="$(dirname $(realpath "$C"))/$CMDNAME" 50*cf5a6c84SAndroid Build Coastguard Worker else 51*cf5a6c84SAndroid Build Coastguard Worker C="$(which $CMDNAME 2>/dev/null)" 52*cf5a6c84SAndroid Build Coastguard Worker [ -z "$C" ] && printf '%s\n' "$SHOWSKIP: no $CMDNAME" && return 53*cf5a6c84SAndroid Build Coastguard Worker fi 54*cf5a6c84SAndroid Build Coastguard Worker 55*cf5a6c84SAndroid Build Coastguard Worker # Run command.test in a subshell 56*cf5a6c84SAndroid Build Coastguard Worker (. "$1"; cd "$TESTDIR"; echo "$FAILCOUNT" > continue) 57*cf5a6c84SAndroid Build Coastguard Worker cd "$TESTDIR" 58*cf5a6c84SAndroid Build Coastguard Worker [ -e continue ] && FAILCOUNT=$(($(cat continue)+$FAILCOUNT)) || exit 1 59*cf5a6c84SAndroid Build Coastguard Worker} 60*cf5a6c84SAndroid Build Coastguard Worker 61*cf5a6c84SAndroid Build Coastguard Worker# Run each test listed on command line or else all tests with executable bit set 62*cf5a6c84SAndroid Build Coastguard Workerif [ $# -ne 0 ] 63*cf5a6c84SAndroid Build Coastguard Workerthen 64*cf5a6c84SAndroid Build Coastguard Worker for i in "$@" 65*cf5a6c84SAndroid Build Coastguard Worker do 66*cf5a6c84SAndroid Build Coastguard Worker do_test "$TOPDIR"/tests/$i.test 67*cf5a6c84SAndroid Build Coastguard Worker done 68*cf5a6c84SAndroid Build Coastguard Workerelse 69*cf5a6c84SAndroid Build Coastguard Worker for i in "$TOPDIR"/tests/*.test 70*cf5a6c84SAndroid Build Coastguard Worker do 71*cf5a6c84SAndroid Build Coastguard Worker [ -z "$TEST_ALL" ] && [ ! -x "$i" ] && continue 72*cf5a6c84SAndroid Build Coastguard Worker do_test "$i" 73*cf5a6c84SAndroid Build Coastguard Worker done 74*cf5a6c84SAndroid Build Coastguard Workerfi 75*cf5a6c84SAndroid Build Coastguard Worker 76*cf5a6c84SAndroid Build Coastguard Worker[ $FAILCOUNT -eq 0 ] 77