forked from redrsoe2100/os-autotest
263 lines
6.8 KiB
Bash
263 lines
6.8 KiB
Bash
#!/usr/bin/bash
|
|
# Copyright (c) [2021] Huawei Technologies Co.,Ltd.ALL rights reserved.
|
|
# This program is licensed under Mulan PSL v2.
|
|
# You can use it according to the terms and conditions of the Mulan PSL v2.
|
|
# http://license.coscl.org.cn/MulanPSL2
|
|
# THIS PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
# See the Mulan PSL v2 for more details.
|
|
####################################
|
|
# @Author : lemon-higgins
|
|
# @email : lemon.higgins@aliyun.com
|
|
# @Date : 2021-04-20 15:12:00
|
|
# @License : Mulan PSL v2
|
|
# @Version : 1.0
|
|
# @Desc :
|
|
#####################################
|
|
|
|
OET_PATH=$(
|
|
cd "$(dirname "$0")" || exit 1
|
|
pwd
|
|
)
|
|
export OET_PATH
|
|
|
|
source ${OET_PATH}/libs/locallibs/common_lib.sh
|
|
|
|
[[ -d "/etc/mugen" ]] && export conf_file="/etc/mugen/mugen.json" || export conf_file="${OET_PATH}/conf/mugen.json"
|
|
REPOSITORY="https://gitee.com/openeuler/integration-test.git"
|
|
|
|
TIMEOUT="30m"
|
|
COMMAND_X="no"
|
|
CASE_NUM=0
|
|
SUCCESS_NUM=0
|
|
FAIL_NUM=0
|
|
|
|
function usage() {
|
|
echo TODO
|
|
#TODO
|
|
}
|
|
|
|
function deploy_conf() {
|
|
python3 ${OET_PATH}/libs/locallibs/write_conf.py "$@"
|
|
test $? -ne 0 && exit 1
|
|
}
|
|
|
|
function load_conf() {
|
|
rm -rf ${OET_PATH}/results
|
|
|
|
export_var=$(python3 ${OET_PATH}/libs/locallibs/read_conf.py env-var)
|
|
test $? -ne 0 && exit 1
|
|
|
|
$export_var
|
|
|
|
env_conf="$(echo -e $conf_file | sed -e 's/json/env/')"
|
|
printf "%s\n" "$export_var" >$env_conf
|
|
|
|
}
|
|
|
|
function download_cases() {
|
|
local tmpdir
|
|
tmpdir=$(mktemp -d)
|
|
git clone "$REPOSITORY" "$tmpdir"
|
|
cp "$tmpdir"/* "$OET_PATH" -r
|
|
rm -rf "$tmpdir"
|
|
}
|
|
|
|
function exec_case() {
|
|
local cmd=$1
|
|
local log_path=$2
|
|
local case_name=$3
|
|
|
|
exec 6>&1
|
|
exec 7>&2
|
|
|
|
exec >"$log_path"/"$(date +%Y-%m-%d-%T)".log 2>&1
|
|
|
|
timeout --preserve-status $TIMEOUT $cmd
|
|
ret_code=$?
|
|
|
|
exec 1>&6 6>&-
|
|
exec 2>&7 7>&-
|
|
|
|
test "$ret_code"x == "143"x && {
|
|
LOG_WARN "The case execution timeout."
|
|
}
|
|
|
|
if [ $ret_code -eq 0 ]; then
|
|
LOG_INFO "The case exit by code $ret_code."
|
|
((SUCCESS_NUM++))
|
|
mkdir -p ${OET_PATH}/results/succeed
|
|
touch ${OET_PATH}/results/succeed/${case_name}
|
|
else
|
|
LOG_ERROR "The case exit by code $ret_code."
|
|
((FAIL_NUM++))
|
|
mkdir -p ${OET_PATH}/results/failed
|
|
touch ${OET_PATH}/results/failed/${case_name}
|
|
fi
|
|
}
|
|
|
|
function run_test_case() {
|
|
|
|
local test_suite=$1
|
|
local test_case=$2
|
|
|
|
if [[ -z "$test_suite" || -z "$test_case" ]]; then
|
|
LOG_ERROR "Parameter(test suite or test case) loss."
|
|
exit 1
|
|
fi
|
|
|
|
((CASE_NUM++))
|
|
|
|
suite_path=$(python3 ${OET_PATH}/libs/locallibs/suite_case.py --suite $test_suite --key path)
|
|
test $? -ne 0 && return 1
|
|
test -d "$suite_path" || {
|
|
LOG_ERROR "Path value:${suite_path} in a JSON file that does not exist in the environment."
|
|
return 1
|
|
}
|
|
|
|
if ! grep -q "$test_case" suite2cases/"${test_suite}.json"; then
|
|
LOG_ERROR "In the suite2cases directory, Can't find the case name:${test_case} in the file of testsuite:${test_suite}."
|
|
return 1
|
|
fi
|
|
|
|
case_path=($(find ${suite_path} -name "${test_case}.*" | sed -e "s#/${test_case}.\(sh\|py\)##"))
|
|
test ${#case_path[@]} -gt 1 && {
|
|
LOG_ERROR "Multiple identical test case scripts have been found under the test suite. Please check your use case scripts."
|
|
return 1
|
|
}
|
|
|
|
log_path=${OET_PATH}/logs/${test_suite}/${test_case}
|
|
mkdir -p ${log_path}
|
|
|
|
LOG_INFO "start to run testcase:$test_case."
|
|
|
|
pushd "$case_path" >/dev/null || return 1
|
|
|
|
local time_out
|
|
time_out=$(grep -w --fixed-strings EXECUTE_T ${test_case}.* 2>/dev/nul | awk -F '=' '{print $NF}' | tr -d '"')
|
|
test -n "$time_out" && TIMEOUT=$time_out
|
|
|
|
local script_type
|
|
script_type=$(find . -name "${test_case}.*" | awk -F '.' '{print $NF}')
|
|
|
|
if [[ "$script_type"x == "sh"x ]] || [[ "$script_type"x == "bash"x ]]; then
|
|
if [ "$COMMAND_X"x == "yes"x ]; then
|
|
exec_case "bash -x ${test_case}.sh" "$log_path" "$test_case"
|
|
else
|
|
exec_case "bash ${test_case}.sh" "$log_path" "$test_case"
|
|
fi
|
|
elif [ "$script_type"x == "py"x ]; then
|
|
exec_case "python3 ${test_case}.py" "$log_path" "$test_case"
|
|
fi
|
|
|
|
popd >/dev/nul || return 1
|
|
|
|
LOG_INFO "End to run testcase:$test_case."
|
|
}
|
|
|
|
function run_test_suite() {
|
|
local test_suite=$1
|
|
|
|
[ -z "$(find $OET_PATH/suite2cases -name ${test_suite}.json)" ] && {
|
|
LOG_ERROR "In the suite2cases directory, Can't find the file of testsuite:${test_suite}."
|
|
return 1
|
|
}
|
|
|
|
for test_case in $(python3 ${OET_PATH}/libs/locallibs/suite_case.py --suite $test_suite --key cases-name | shuf); do
|
|
run_test_case "$test_suite" "$test_case"
|
|
done
|
|
}
|
|
|
|
function run_all_cases() {
|
|
test_suites=($(find ${OET_PATH}/suite2cases/ -type f -name "*.json" | awk -F '/' '{print $NF}' | sed -e 's/.json$//g'))
|
|
test ${#test_suites[@]} -eq 0 && {
|
|
LOG_ERROR "Can't find recording about test_suites."
|
|
return 1
|
|
}
|
|
|
|
for test_suite in ${test_suites[*]}; do
|
|
|
|
run_test_suite "$test_suite"
|
|
done
|
|
}
|
|
|
|
function statistic_result() {
|
|
|
|
LOG_INFO "A total of ${CASE_NUM} use cases were executed, with ${SUCCESS_NUM} successes and ${FAIL_NUM} failures."
|
|
|
|
[ ${FAIL_NUM} -ne 0 ] && exit 1
|
|
}
|
|
|
|
while getopts "c:af:r:dx" option; do
|
|
case $option in
|
|
c)
|
|
deploy_conf ${*//-c/}
|
|
;;
|
|
d)
|
|
echo "$@" | grep -q -e '^ *-d *$' || {
|
|
usage
|
|
exit 1
|
|
}
|
|
download_cases
|
|
;;
|
|
a)
|
|
if echo "$@" | grep -q -e '-a *-x *$\|-x *-a *$\|-ax *$\|-xa *$'; then
|
|
COMMAND_X="yes"
|
|
elif ! echo "$@" | grep -q -e '-a *$'; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
load_conf
|
|
run_all_cases
|
|
statistic_result
|
|
;;
|
|
|
|
f)
|
|
test_suite=$OPTARG
|
|
|
|
echo $test_suite | grep -q -e '-a\| -r \|-x\|-d' && {
|
|
usage
|
|
exit 1
|
|
}
|
|
|
|
echo "$@" | grep -q -e ' *-x *\| *-xf *' && {
|
|
COMMAND_X="yes"
|
|
}
|
|
|
|
echo "$@" | grep -q -e ' -r ' || {
|
|
load_conf
|
|
run_test_suite $test_suite
|
|
statistic_result
|
|
}
|
|
;;
|
|
r)
|
|
test_case=$OPTARG
|
|
echo $test_case | grep -q -e '-a\|-f\|-x\|-d' && {
|
|
usage
|
|
exit 1
|
|
}
|
|
|
|
echo "$@" | grep -q -e ' *-x *\| *-xr *\| *-xf *' && {
|
|
COMMAND_X="yes"
|
|
}
|
|
|
|
load_conf
|
|
run_test_case $test_suite $test_case
|
|
statistic_result
|
|
;;
|
|
x)
|
|
echo "$@" | grep -q -e '^ *-x *$' && {
|
|
LOG_ERROR "The -x parameter must be used in combination with -a, -f, and -r."
|
|
exit 1
|
|
}
|
|
;;
|
|
*)
|
|
usage
|
|
exit 1
|
|
;;
|
|
|
|
esac
|
|
done
|