Files
rtems/tools/build/rtems-test-check
Chris Johns 258bda306b testsuite: Add a common test configuration. Fix configure.ac and Makefile.am errors.
- 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.
2017-04-04 08:24:22 +10:00

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