#!/bin/bash # Copyright (C) 2021 Huawei Device Co., Ltd. # Licensed 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. set -e usage() { echo echo "USAGE" echo " ./runtest.sh device=IP:PORT serial=[SERIAL_NUMBER] [module=MODULE_NAME] [test=TEST] [runonly=RUN_ONLY]" echo " First, you must be execute stf/start.bat in the windows which connected a device." echo " target_platform : TARGET_PLATFORM the target platform, such as phone or ivi; Default to phone" echo " device : IP:PORT the host ip:port of the connected device." echo " module : MODULE_NAME the module name to run. Run all modules by default." echo " test : TEST_NAME the test name to run. Run all tests by default. This should be a FULL-QUALIFIED className or methodName." echo " runonly : RUN_ONLY TRUE=not build, only runtest; FALSE=build and runtest. FALSE by default." echo exit 1 } parse_cmdline() { echo parse_cmdline:$@ SCRIPT_DIR=$(cd $(dirname $0); pwd) BUILD_SCRIPT=${SCRIPT_DIR}/build.sh BASE_HOME=${SCRIPT_DIR}/../../.. OUT_DIR=${SCRIPT_DIR}/../../../out TARGET_ARCH=arm64 TARGET_PLATFORM=all BUILD_VARIANT=release MODULE_NAME="" DEVICE_SN="" TEST_NAME="" RUN_ONLY=FALSE BUILD_PARAM="" HATS_HOME=$SCRIPT_DIR/../../../out/$BUILD_VARIANT/suites/hats MODULE_INFO_FILE=$SCRIPT_DIR/../../../out/$BUILD_VARIANT/suites/hats/testcases/module_info.list export PATH=${BASE_HOME}/prebuilts/python/linux-x86/3.8.5/bin:$PATH BUILD_PARAM="$BUILD_PARAM target_arch=$TARGET_ARCH variant=$BUILD_VARIANT" while [ -n "$1" ] do var="$1" OPTIONS=$(echo ${var%%=*}) PARAM=$(echo ${var#*=}) case "$OPTIONS" in target_platform) TARGET_PLATFORM="$PARAM" BUILD_PARAM="$BUILD_PARAM target_platform=$TARGET_PLATFORM" ;; module) MODULE_NAME="$PARAM" BUILD_PARAM="$BUILD_PARAM suite=$MODULE_NAME" ;; test) TEST_NAME="$PARAM" ;; device) DEVICE_SN="$DEVICE_SN;$PARAM" ;; runonly) RUN_ONLY=$(echo $PARAM |tr [a-z] [A-Z]) ;; *) usage break;; esac shift done if [ "$DEVICE_SN" == "" ];then usage fi } do_make() { cd $BASE_HOME echo "================================" echo "start to build" echo "$BUILD_SCRIPT $BUILD_PARAM" echo "================================" echo BUILD_PARAM= $BUILD_PARAM $BUILD_SCRIPT $BUILD_PARAM if [ "$?" != 0 ]; then echo -e "\033[31mbuild error!\033[0m" exit 1 fi } get_testmodule_name() { BUILD_TARGET_NAME=$1 # map from build_target name to actual testmodule name test_module_name="" OLD_IFS=$IFS IFS=$'\n' for line in $(cat $MODULE_INFO_FILE); do VAR1=$(echo $line |awk -F ' ' '{print $1}') VAR2=$(echo $line |awk -F ' ' '{print $2}') if [ "$BUILD_TARGET_NAME" == "$VAR1" ] ; then test_module_name=$VAR2 break fi done IFS=$OLD_IFS echo $test_module_name } run_test_with_xdevice() { TC_PATH=$HATS_HOME/testcases RES_PATH=$HATS_HOME/resource/ REPORT_PATH=$HATS_HOME/xdevice_reports/$(date "+%Y.%m.%d-%H.%M.%S") python -m easy_install --quiet $HATS_HOME/tools/xdevice-0.0.0.tar.gz python -m easy_install --quiet $HATS_HOME/tools/xdevice-extension-0.0.0.tar.gz run_arguments="run hats -tcpath $TC_PATH -respath $RES_PATH -rp $REPORT_PATH" if [ ! -z "$MODULE_NAME" ]; then run_arguments="$run_arguments -l $1" fi if [ ! -z "$TEST_NAME" ]; then TEST_LIST_FILE=$HATS_HOME/include_tests echo "$TEST_NAME" > $TEST_LIST_FILE run_arguments="$run_arguments -ta test-file-include-filter:$TEST_LIST_FILE" fi if [ ! -z "$DEVICE_SN" ]; then run_arguments="$run_arguments $(echo $DEVICE_SN | sed 's/;/-sn /')" fi echo $run_arguments cd $HATS_HOME python -m xdevice "$run_arguments" return $? } run_test() { cd $BASE_HOME MAPPED_MODULE_NAME=$MODULE_NAME # map from build_target name to actual testmodule name if [ ! -z "$MODULE_NAME" ]; then MAPPED_MODULE_NAME=$(get_testmodule_name $MODULE_NAME $HATS_HOME) if [ ! -z "$MAPPED_MODULE_NAME" ]; then echo -e "\033[32mTest module name of build_target "$MODULE_NAME is" "$MAPPED_MODULE_NAME"\033[0m" else echo -e "\033[31mTest module "$MODULE_NAME" dose not exist!\033[0m" exit 1 fi fi JSON_CONFIG_FILE=$HATS_HOME/testcases/$MAPPED_MODULE_NAME.json ret_code=0 if [ -f "$JSON_CONFIG_FILE" ]; then echo -e "\033[32mRun $MAPPED_MODULE_NAME with xdevice ...\033[0m" run_test_with_xdevice $MAPPED_MODULE_NAME ret_code=$? elif [ -z "$MODULE_NAME" ]; then echo -e "\033[32mRun all modules with xdevice ...\033[0m" run_test_with_xdevice ret_code=$? else echo -e "\033[31mNon-xdevice module in hats!\033[0m" exit 1 fi if [ "$ret_code" != "0" ]; then echo -e "\033[31mFailed to run test, ret=$ret_code\033[0m" exit 1 fi } parse_cmdline $@ if [ "$RUN_ONLY" == FALSE ];then do_make fi mkdir -p $OUT_DIR/$BUILD_VARIANT/suites/hats/resource/tools run_test exit 0