forked from Imagelibrary/rtems
- Add a top level test configuration file for test states that are common to all BSPs. This saves adding a test configuration (tcfg) file for every BSP. - Add the test states 'user-input' and 'benchmark'. This lets 'rtems-test' stop the test rather than waiting for a timeout or letting a benchmark run without the user asking for it to run. - Implement rtems-test-check in Python to make it faster. The shell script had grown to a point it was noticably slowing the build down. - Fix the configure.ac and Makefile.am files for a number of the test directories. The files are difficiult to keep in sync with the number of tests and mistakes can happen such as tests being left out of the build. The test fsrofs01 is an example. Also a there was a mix of SUBDIRS and _SUBDIRS being used and only _SUBDIRS should be used. - Fix the test fsrofs01 so it compiles. Closes #2963.
204 lines
4.5 KiB
Bash
Executable File
204 lines
4.5 KiB
Bash
Executable File
#! /bin/sh
|
|
#
|
|
# Copyright 2014, 2016, 2017 Chris Johns <chrisj@rtems.org>
|
|
# All rights reserved
|
|
#
|
|
|
|
#
|
|
# usage: rtems-test-check <mode> <bsp-test-database> <includes> <bsp> <tests..>
|
|
#
|
|
|
|
if test $# -lt 4; then
|
|
echo "error: invalid command line" >&2
|
|
echo "INVALID-TEST-DATA"
|
|
exit 2
|
|
fi
|
|
|
|
mode="$1"
|
|
shift
|
|
testdata="$1"
|
|
shift
|
|
includepath="$1"
|
|
shift
|
|
bsp="$1"
|
|
shift
|
|
tests="$*"
|
|
|
|
test_count=0
|
|
for t in ${tests};
|
|
do
|
|
test_count=$(expr ${test_count} + 1)
|
|
done
|
|
|
|
case ${mode} in
|
|
exclude)
|
|
if test -f $testdata; then
|
|
output=""
|
|
else
|
|
output="${tests}"
|
|
fi
|
|
;;
|
|
flags)
|
|
if [ $test_count != 1 ]; then
|
|
echo "error: test count not 1 for ${mode}" 1>&2
|
|
exit 1
|
|
fi
|
|
output=""
|
|
;;
|
|
*)
|
|
echo "error: invalid mode" 1>&2
|
|
echo "INVALID-TEST-DATA"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
#
|
|
# Read the common settings first.
|
|
#
|
|
if [ -f $includepath/testdata/rtems.tcfg ]; then
|
|
testdata="$includepath/testdata/rtems.tcfg $testdata"
|
|
fi
|
|
|
|
#
|
|
# If there is no testdata all tests are valid and must pass.
|
|
#
|
|
|
|
if [ ! -z "$testdata" ]; then
|
|
excluded_tests=""
|
|
expected_fails=""
|
|
user_inputs=""
|
|
indeterminates=""
|
|
benchmarks=""
|
|
while [ ! -z "$testdata" ];
|
|
do
|
|
for td in $testdata;
|
|
do
|
|
if [ ! -f $td ]; then
|
|
continue
|
|
fi
|
|
ntd=""
|
|
exec 3<& 0
|
|
exec 0<$td
|
|
while read line
|
|
do
|
|
line=$(echo $line | sed -e 's/#.*$//' -e '/^$/d')
|
|
if [ ! -z "$line" ]; then
|
|
state=$(echo $line | sed -e "s/:.*//g")
|
|
case $state in
|
|
include)
|
|
inf=$(echo $line | sed -e 's/include://g;s/[[:blank:]]//g')
|
|
if test -f $includepath/$inf; then
|
|
ntd="$includepath/$inf $ntd"
|
|
fi
|
|
;;
|
|
exclude)
|
|
line=$(echo $line | sed -e 's/exclude://g;s/[[:blank:]]//g')
|
|
excluded_tests="${excluded_tests} $line"
|
|
;;
|
|
expected-fail)
|
|
line=$(echo $line | sed -e 's/expected-fail://g;s/[[:blank:]]//g')
|
|
expected_fails="${expected_fails} $line"
|
|
;;
|
|
user-input)
|
|
line=$(echo $line | sed -e 's/user-input://g;s/[[:blank:]]//g')
|
|
user_inputs="${user_inputs} $line"
|
|
;;
|
|
indeterminate)
|
|
line=$(echo $line | sed -e 's/indeterminate://g;s/[[:blank:]]//g')
|
|
indeterminates="${indeterminates} $line"
|
|
;;
|
|
benchmark)
|
|
line=$(echo $line | sed -e 's/benchmark://g;s/[[:blank:]]//g')
|
|
benchmarks="${benchmarks} $line"
|
|
;;
|
|
*)
|
|
echo "error: invalid test state: $state in $td" 1>&2
|
|
echo "INVALID-TEST-DATA"
|
|
exit 1
|
|
;;
|
|
esac
|
|
fi
|
|
done
|
|
done
|
|
testdata=$ntd
|
|
done
|
|
|
|
for t in ${tests};
|
|
do
|
|
case ${mode} in
|
|
exclude)
|
|
allow="yes"
|
|
for dt in ${excluded_tests};
|
|
do
|
|
if test ${t} = ${dt}; then
|
|
allow="no"
|
|
fi
|
|
done
|
|
if test ${allow} = yes; then
|
|
output="${output} ${t}"
|
|
fi
|
|
;;
|
|
flags)
|
|
allow="yes"
|
|
for et in ${excluded_tests};
|
|
do
|
|
if test ${t} = ${et}; then
|
|
allow="no"
|
|
fi
|
|
done
|
|
if test ${allow} = yes; then
|
|
allow="no"
|
|
for et in ${expected_fails};
|
|
do
|
|
if test ${t} = ${et}; then
|
|
allow="yes"
|
|
fi
|
|
done
|
|
if test ${allow} = yes; then
|
|
output="-DTEST_STATE_EXPECTED_FAIL=1"
|
|
fi
|
|
allow="no"
|
|
for ut in ${user_inputs};
|
|
do
|
|
if test ${t} = ${ut}; then
|
|
allow="yes"
|
|
fi
|
|
done
|
|
if test ${allow} = yes; then
|
|
output="-DTEST_STATE_USER_INPUT=1"
|
|
fi
|
|
allow="no"
|
|
for it in ${indeterminates};
|
|
do
|
|
if test ${t} = ${it}; then
|
|
allow="yes"
|
|
fi
|
|
done
|
|
if test ${allow} = yes; then
|
|
output="${output} -DTEST_STATE_INDETERMINATE=1"
|
|
fi
|
|
allow="no"
|
|
for bt in ${benchmarks};
|
|
do
|
|
if test ${t} = ${bt}; then
|
|
allow="yes"
|
|
fi
|
|
done
|
|
if test ${allow} = yes; then
|
|
output="${output} -DTEST_STATE_BENCHMARK=1"
|
|
fi
|
|
fi
|
|
;;
|
|
*)
|
|
echo "error: invalid mode" 1>&2
|
|
echo "INVALID-TEST-DATA"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
fi
|
|
|
|
echo ${output}
|
|
|
|
exit 0
|