@@ -60,6 +60,7 @@ fi
SRC_GROUPS="generic shared"
export SRC_DIR="tests"
+export ENV_DIR="environments"
usage()
{
@@ -80,6 +81,8 @@ check options
testlist options
-g group[,group...] include tests from these groups
-x group[,group...] exclude tests from these groups
+ -eo environment[,environment...] test only in these environments
+ -ex environment[,environment...] exclude these environments
-X file exclude individual tests
-E external_file exclude individual tests
[testlist] include tests matching names in testlist
@@ -87,6 +90,85 @@ testlist options
exit 0
}
+
+
+# Find all environments with setup files in given directory.
+get_environments()
+{
+ local env_list=""
+
+ # ommit "none", this one always has to exists implicitly
+ # and we want it add later
+ env_list=$(ls $ENV_DIR|grep -v "none")
+
+ echo "none $env_list"
+}
+
+# Check if all tests passed in first argument exists in a list passed
+# as a second argument.
+environments_test_existence()
+{
+ local specified existing
+ specified="$1"
+ existing="$2"
+
+ nonexisting=$(_get_lists_difference "$specified" "$existing")
+ if [ "$nonexisting" != "" ];then
+ echo "Unknown environment(s) were passed"\
+ " as an argument: $nonexisting"
+ exit 1
+ fi
+}
+
+# find which environments are required and which are excluded and export
+# them in "$list_env"
+#
+export_filtered_environments()
+{
+ active_tests="$*"
+ sorted_tests=""
+ sorted_envs=""
+ include_implicit=false
+ existing_environments=$(get_environments)
+
+ required_environments="${ENVIRONMENT_LIST/,/ }"
+ excluded_environments="${XENVIRONMENT_LIST/,/ }"
+
+ # test for nonexisting required
+ environments_test_existence \
+ "$required_environments $excluded_environments" \
+ "$existing_environments"
+
+ # filter environments based on -ex or -eo arguments
+ if [ "$required_environments" = "" ];then
+ # we have no explicit list of envs, so include all
+ required_environments="$existing_environments"
+ include_implicit=true
+
+ elif [ $(echo "$required_environments" |\
+ grep -cw "none") -gt 0 ]
+ then
+ # If there is an explicit list, but "none" is listed there,
+ # include implicit "none" too.
+ # Otherwise "none" is ignored.
+ include_implicit=true
+ fi
+
+ # remove any excluded environment from the list
+ for xenv in $excluded_environments; do
+ required_environments=$(echo "$required_environments" |\
+ sed "s/\b$xenv\b//g")
+
+ # do not include implicit none if explicitly blocked
+ if [ "$xenv" = "none" ];then
+ include_implicit=false
+ fi
+ done
+
+ export list_env="$required_environments"
+
+}
+
get_group_list()
{
grp=$1
@@ -193,6 +275,8 @@ _prepare_test_list()
list=`sort -n $tmp.list | uniq`
rm -f $tmp.list $tmp.tmp $tmp.grep
+ export_filtered_environments $list
+
if $randomize
then
list=`echo $list | awk -f randomize.awk`
@@ -216,6 +300,14 @@ while [ $# -gt 0 ]; do
XGROUP_LIST="$XGROUP_LIST $xgroup"
;;
+ -eo) environment=$2 ; shift ;
+ ENVIRONMENT_LIST="$ENVIRONMENT_LIST $environment"
+ ;;
+
+ -ex) xenvironment=$2 ; shift ;
+ XENVIRONMENT_LIST="$XENVIRONMENT_LIST $xenvironment"
+ ;;
+
-X) xfile=$2; shift ;
for d in $SRC_GROUPS $FSTYP; do
[ -f $SRC_DIR/$d/$xfile ] || continue
@@ -580,7 +672,7 @@ for section in $HOST_OPTIONS_SECTIONS; do
else
echo -n " " # prettier output with timestamps.
fi
- rm -f core $seqres.notrun
+ rm -f core $seqres.notrun $seqres.noenvironment
start=`_wallclock`
$timestamp && echo -n " ["`date "+%T"`"]"
@@ -609,8 +701,15 @@ for section in $HOST_OPTIONS_SECTIONS; do
if [ -f $seqres.notrun ]
then
- $timestamp || echo -n " [not run] "
- $timestamp && echo " [not run]" && echo -n " $seqnum -- "
+ # tell user if the test wasn't run because
+ # he forbid all environments this test supports
+ # (by -eo/-ex argruments)
+ nr="not run"
+ if [ -f $seqres.noenvironment ];then
+ nr="no environment available"
+ fi
+ $timestamp || echo -n " [$nr] "
+ $timestamp && echo " [$nr]" && echo -n " $seqnum -- "
cat $seqres.notrun
notrun="$notrun $seqnum"
else
This extends the ./check script for environments support. That includes arguments parsing for new options "-eo" and "-ex" and few functions for loading list of available environments from "environments" directory. The last two hunks in the patch deals with a situation when a user limits available environments, so a test has no environment it can run in. Signed-off-by: Jan ?ulák <jtulak@redhat.com> --- check | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 102 insertions(+), 3 deletions(-)