mirror of https://github.com/apache/lucene.git
192 lines
5.0 KiB
Bash
Executable File
192 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
# contributor license agreements. See the NOTICE file distributed with
|
|
# this work for additional information regarding copyright ownership.
|
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
|
# (the "License"); you may not use this file except in compliance with
|
|
# the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
|
|
function ensure_cwd_is_solr() {
|
|
local cwd=`pwd`
|
|
if [[ "solr" != `basename $cwd` ]]
|
|
then
|
|
echo "ERROR: Please run this script from the 'solr' directory."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function run_suite_before_if_present() {
|
|
if declare -f solr_suite_before > /dev/null ; then
|
|
solr_suite_before
|
|
fi
|
|
}
|
|
|
|
function run_suite_after_if_present() {
|
|
if declare -f solr_suite_after > /dev/null ; then
|
|
solr_suite_after
|
|
fi
|
|
}
|
|
|
|
function run_test_before_if_present() {
|
|
if declare -f solr_unit_test_before > /dev/null ; then
|
|
solr_unit_test_before
|
|
fi
|
|
}
|
|
|
|
function run_test_after_if_present() {
|
|
if declare -f solr_unit_test_after > /dev/null ; then
|
|
solr_unit_test_after
|
|
fi
|
|
}
|
|
|
|
function run_test_suite() {
|
|
local test_file=$1
|
|
local test_name_filter="${2:-}"
|
|
|
|
echo "Executing $test_file"
|
|
source $test_file
|
|
test_names="$(declare -F | awk '{print $3}' | grep 'solr_test')"
|
|
|
|
run_suite_before_if_present
|
|
for test_name in $test_names
|
|
do
|
|
if [[ -z "$test_name_filter" || "$test_name_filter" == "$test_name" ]]; then
|
|
run_single_test $test_name
|
|
fi
|
|
unset -f $test_name
|
|
done
|
|
run_suite_after_if_present
|
|
|
|
unset solr_suite_before
|
|
unset solr_suite_after
|
|
unset solr_unit_test_before
|
|
unset solr_unit_test_after
|
|
}
|
|
|
|
function run_single_test() {
|
|
local test_name=$1
|
|
|
|
echo -n " $test_name "
|
|
run_test_before_if_present
|
|
let NUM_TESTS+=1
|
|
output=$($test_name)
|
|
if [[ $? -ne 0 ]]; then
|
|
let NUM_FAILURES+=1
|
|
echo "FAILED"
|
|
echo "---------------------------------------------------"
|
|
echo "$output"
|
|
echo "---------------------------------------------------"
|
|
else
|
|
let NUM_SUCCESSES+=1
|
|
echo "SUCCEEDED"
|
|
fi
|
|
run_test_after_if_present
|
|
}
|
|
|
|
function ensure_param_arg_present() {
|
|
if [[ $# -lt 2 || "$2" == -* ]]; then
|
|
echo "Option '$1' requires a single argument, but none provided."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function print_help() {
|
|
echo "Usage: bin-test/test [-h] [-s SUITE_NAME] [-t SUITE_NAME#TEST_NAME]"
|
|
echo ""
|
|
echo " Run tests for the 'bin/solr' Solr startup/admin scripts. By default all tests are run."
|
|
echo " Tests suites or single tests can be selected by use of the options below:"
|
|
echo ""
|
|
echo " -s|--run-single-suite Runs all tests living in the specified file. Filename argument"
|
|
echo " should include the full file extension, but no path prefix."
|
|
echo " (e.g. test_help.sh works, bin-test/test_help.sh and test_help"
|
|
echo " do not)"
|
|
echo ""
|
|
echo " -t|--run-single-test Runs the specified test from the specified test suite file."
|
|
echo " Takes an argument in the form 'SUITE_NAME#TEST_NAME', where"
|
|
echo " SUITE_NAME is the filename of a test suite (see -s above), and"
|
|
echo " TEST_NAME matches the name of a bash test function present in"
|
|
echo " that file"
|
|
echo ""
|
|
echo " -h|--help You're soaking in it."
|
|
echo ""
|
|
exit 0
|
|
}
|
|
|
|
function run_all_tests() {
|
|
test_files="$(find bin-test -name "test_*.sh")"
|
|
|
|
for test_file in $test_files
|
|
do
|
|
run_test_suite $test_file
|
|
done
|
|
}
|
|
|
|
|
|
## MAIN ##
|
|
##########
|
|
ensure_cwd_is_solr
|
|
|
|
# Can be 'all', 'help', 'single-suite', or 'single-test'
|
|
MODE="all"
|
|
SUITE_NAME=""
|
|
TEST_NAME=""
|
|
NUM_TESTS=0
|
|
NUM_SUCCESSES=0
|
|
NUM_FAILURES=0
|
|
|
|
while [[ $# -gt 0 ]]
|
|
do
|
|
case $1 in
|
|
-h|--help)
|
|
MODE="help"
|
|
shift 1
|
|
;;
|
|
-s|--run-single-suite)
|
|
ensure_param_arg_present $@
|
|
MODE="single-suite"
|
|
SUITE_NAME="bin-test/$2"
|
|
shift 2
|
|
;;
|
|
-t|--run-single-test)
|
|
ensure_param_arg_present $@
|
|
MODE="single-test"
|
|
SUITE_NAME="bin-test/$(echo "$2" | cut -d "#" -f 1 | tr -d " ")"
|
|
TEST_NAME=$(echo "$2" | cut -d "#" -f 2 | tr -d " ")
|
|
shift 2
|
|
;;
|
|
*)
|
|
echo "WARNING: Unexpected argument [$1] detected, ignoring."
|
|
shift 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
case $MODE in
|
|
"help")
|
|
print_help
|
|
MAIN_RESULT=0
|
|
;;
|
|
"single-suite")
|
|
run_test_suite $SUITE_NAME
|
|
MAIN_RESULT=$?
|
|
;;
|
|
"single-test")
|
|
run_test_suite $SUITE_NAME $TEST_NAME
|
|
MAIN_RESULT=$?
|
|
;;
|
|
"all")
|
|
run_all_tests
|
|
MAIN_RESULT=$?
|
|
esac
|
|
echo "Ran $NUM_TESTS tests, with $NUM_SUCCESSES passing, and $NUM_FAILURES failures"
|
|
exit $MAIN_RESULT
|