168 lines
3.9 KiB
Bash
168 lines
3.9 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
#
|
||
|
#/**
|
||
|
# * Copyright 2007 The Apache Software Foundation
|
||
|
# *
|
||
|
# * 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.
|
||
|
# */
|
||
|
|
||
|
usage()
|
||
|
{
|
||
|
cat << EOF
|
||
|
usage: $0 [options] [test-name...]
|
||
|
|
||
|
Run a set of hbase tests. Individual tests may be specified on the
|
||
|
command line or in a file using -f, with one test per line. Runs all
|
||
|
tests by default. Each specified tests should include the fully
|
||
|
qualified package name.
|
||
|
|
||
|
options:
|
||
|
-h Show this message
|
||
|
-c Run 'mvn clean' before running the tests
|
||
|
-f FILE Run the additional tests listed in the FILE
|
||
|
-u Only run unit tests. Default is to run
|
||
|
unit and integration tests
|
||
|
-n N Run each test N times. Default = 1.
|
||
|
-s N Print N slowest tests
|
||
|
-H Print which tests are hanging (if any)
|
||
|
EOF
|
||
|
}
|
||
|
|
||
|
testFile=
|
||
|
doClean=""
|
||
|
testType=verify
|
||
|
numIters=1
|
||
|
showSlowest=
|
||
|
showHanging=
|
||
|
|
||
|
# normalize path refs for surefire
|
||
|
if [[ "$0" != /* ]]; then
|
||
|
# relative path
|
||
|
scriptDir=`pwd`/$(dirname $0)
|
||
|
else
|
||
|
# absolute path
|
||
|
scriptDir=$(dirname $0)
|
||
|
fi
|
||
|
testDir=$scriptDir/../../../target/surefire-reports
|
||
|
|
||
|
while getopts "hcHun:s:f:" OPTION
|
||
|
do
|
||
|
case $OPTION in
|
||
|
h)
|
||
|
usage
|
||
|
exit 0
|
||
|
;;
|
||
|
c)
|
||
|
doClean="clean"
|
||
|
;;
|
||
|
H)
|
||
|
showHanging=1
|
||
|
;;
|
||
|
u)
|
||
|
testType=test
|
||
|
;;
|
||
|
n)
|
||
|
numIters=$OPTARG
|
||
|
;;
|
||
|
s)
|
||
|
showSlowest=$OPTARG
|
||
|
;;
|
||
|
f)
|
||
|
testFile=$OPTARG
|
||
|
;;
|
||
|
?)
|
||
|
usage
|
||
|
exit 1
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
testIdx=0
|
||
|
|
||
|
# add tests specified in a file
|
||
|
if [ ! -z $testFile ]; then
|
||
|
exec 3<$testFile
|
||
|
|
||
|
while read <&3 line ; do
|
||
|
if [ ! -z "$line" ]; then
|
||
|
test[$testIdx]="$line"
|
||
|
fi
|
||
|
testIdx=$(($testIdx+1))
|
||
|
done
|
||
|
fi
|
||
|
|
||
|
# add tests specified on cmd line
|
||
|
if [ ! -z $BASH_ARGC ]; then
|
||
|
shift $(($OPTIND - 1))
|
||
|
for (( i = $OPTIND; i <= $BASH_ARGC; i++ ))
|
||
|
do
|
||
|
test[$testIdx]=$1;
|
||
|
testIdx=$(($testIdx+1))
|
||
|
shift
|
||
|
done
|
||
|
fi
|
||
|
|
||
|
echo "Running tests..."
|
||
|
numTests=${#test[@]}
|
||
|
|
||
|
for (( i = 1 ; i <= $numIters; i++ ))
|
||
|
do
|
||
|
if [[ $numTests > 0 ]]; then
|
||
|
#Now loop through each test
|
||
|
for (( j = 0; j < $numTests; j++ ))
|
||
|
do
|
||
|
nice -10 mvn $doClean $testType -Dtest=${test[$j]}
|
||
|
if [ $? -ne 0 ]; then
|
||
|
echo "${test[$j]} failed, iteration: $i"
|
||
|
exit 1
|
||
|
fi
|
||
|
done
|
||
|
else
|
||
|
echo "EXECUTING ALL TESTS"
|
||
|
nice -10 mvn $doClean $testType
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
# Print a report of the slowest running tests
|
||
|
if [ ! -z $showSlowest ]; then
|
||
|
|
||
|
testNameIdx=0
|
||
|
for (( i = 0; i < ${#test[@]}; i++ ))
|
||
|
do
|
||
|
testNames[$i]=$testDir/'TEST-'${test[$i]}'.xml'
|
||
|
done
|
||
|
|
||
|
echo "Slowest $showSlowest tests:"
|
||
|
|
||
|
awk '/<testsuite/ { \
|
||
|
gsub(/\"/,""); \
|
||
|
gsub(/>/,""); \
|
||
|
split($7,testname,"="); \
|
||
|
split($3,time,"="); \
|
||
|
print testname[2]"\t"time[2]}' \
|
||
|
${testNames[@]} \
|
||
|
| sort -k2,2rn \
|
||
|
| head -n $showSlowest
|
||
|
fi
|
||
|
|
||
|
# Print a report of tests that hung
|
||
|
if [ ! -z $showHanging ]; then
|
||
|
echo "Hanging tests:"
|
||
|
find $testDir -type f -name *.xml -size 0k \
|
||
|
| xargs basename \
|
||
|
| cut -d"." -f -1
|
||
|
fi
|