1#!/bin/bash 2 3# Copyright (C) 2021 Huawei Device Co., Ltd. 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15 16set -e 17 18usage() 19{ 20 echo 21 echo "USAGE" 22 echo " ./runtest.sh device=IP:PORT serial=[SERIAL_NUMBER] [module=MODULE_NAME] [test=TEST] [runonly=RUN_ONLY]" 23 echo " First, you must be execute stf/start.bat in the windows which connected a device." 24 echo " target_platform : TARGET_PLATFORM the target platform, such as phone or ivi; Default to phone" 25 echo " device : IP:PORT the host ip:port of the connected device." 26 echo " module : MODULE_NAME the module name to run. Run all modules by default." 27 echo " test : TEST_NAME the test name to run. Run all tests by default. This should be a FULL-QUALIFIED className or methodName." 28 echo " runonly : RUN_ONLY TRUE=not build, only runtest; FALSE=build and runtest. FALSE by default." 29 echo 30 exit 1 31} 32 33parse_cmdline() 34{ 35 echo parse_cmdline:$@ 36 SCRIPT_DIR=$(cd $(dirname $0); pwd) 37 BUILD_SCRIPT=${SCRIPT_DIR}/build.sh 38 BASE_HOME=${SCRIPT_DIR}/../../.. 39 OUT_DIR=${SCRIPT_DIR}/../../../out 40 TARGET_ARCH=arm64 41 TARGET_PLATFORM=all 42 BUILD_VARIANT=release 43 MODULE_NAME="" 44 DEVICE_SN="" 45 TEST_NAME="" 46 RUN_ONLY=FALSE 47 BUILD_PARAM="" 48 HATS_HOME=$SCRIPT_DIR/../../../out/$BUILD_VARIANT/suites/hats 49 MODULE_INFO_FILE=$SCRIPT_DIR/../../../out/$BUILD_VARIANT/suites/hats/testcases/module_info.list 50 export PATH=${BASE_HOME}/prebuilts/python/linux-x86/3.8.5/bin:$PATH 51 BUILD_PARAM="$BUILD_PARAM target_arch=$TARGET_ARCH variant=$BUILD_VARIANT" 52 53 while [ -n "$1" ] 54 do 55 var="$1" 56 OPTIONS=$(echo ${var%%=*}) 57 PARAM=$(echo ${var#*=}) 58 case "$OPTIONS" in 59 target_platform) TARGET_PLATFORM="$PARAM" 60 BUILD_PARAM="$BUILD_PARAM target_platform=$TARGET_PLATFORM" 61 ;; 62 module) MODULE_NAME="$PARAM" 63 BUILD_PARAM="$BUILD_PARAM suite=$MODULE_NAME" 64 ;; 65 test) TEST_NAME="$PARAM" 66 ;; 67 device) DEVICE_SN="$DEVICE_SN;$PARAM" 68 ;; 69 runonly) RUN_ONLY=$(echo $PARAM |tr [a-z] [A-Z]) 70 ;; 71 *) usage 72 break;; 73 esac 74 shift 75 done 76 if [ "$DEVICE_SN" == "" ];then 77 usage 78 fi 79} 80 81do_make() 82{ 83 cd $BASE_HOME 84 echo "================================" 85 echo "start to build" 86 echo "$BUILD_SCRIPT $BUILD_PARAM" 87 echo "================================" 88 89 echo BUILD_PARAM= $BUILD_PARAM 90 $BUILD_SCRIPT $BUILD_PARAM 91 if [ "$?" != 0 ]; then 92 echo -e "\033[31mbuild error!\033[0m" 93 exit 1 94 fi 95} 96 97get_testmodule_name() 98{ 99 BUILD_TARGET_NAME=$1 100 # map from build_target name to actual testmodule name 101 test_module_name="" 102 OLD_IFS=$IFS 103 IFS=$'\n' 104 for line in $(cat $MODULE_INFO_FILE); do 105 VAR1=$(echo $line |awk -F ' ' '{print $1}') 106 VAR2=$(echo $line |awk -F ' ' '{print $2}') 107 if [ "$BUILD_TARGET_NAME" == "$VAR1" ] ; then 108 test_module_name=$VAR2 109 break 110 fi 111 done 112 IFS=$OLD_IFS 113 echo $test_module_name 114} 115 116run_test_with_xdevice() 117{ 118 TC_PATH=$HATS_HOME/testcases 119 RES_PATH=$HATS_HOME/resource/ 120 REPORT_PATH=$HATS_HOME/xdevice_reports/$(date "+%Y.%m.%d-%H.%M.%S") 121 python -m easy_install --quiet $HATS_HOME/tools/xdevice-0.0.0.tar.gz 122 python -m easy_install --quiet $HATS_HOME/tools/xdevice-extension-0.0.0.tar.gz 123 124 run_arguments="run hats -tcpath $TC_PATH -respath $RES_PATH -rp $REPORT_PATH" 125 if [ ! -z "$MODULE_NAME" ]; then 126 run_arguments="$run_arguments -l $1" 127 fi 128 if [ ! -z "$TEST_NAME" ]; then 129 TEST_LIST_FILE=$HATS_HOME/include_tests 130 echo "$TEST_NAME" > $TEST_LIST_FILE 131 run_arguments="$run_arguments -ta test-file-include-filter:$TEST_LIST_FILE" 132 fi 133 if [ ! -z "$DEVICE_SN" ]; then 134 run_arguments="$run_arguments $(echo $DEVICE_SN | sed 's/;/-sn /')" 135 fi 136 137 echo $run_arguments 138 cd $HATS_HOME 139 python -m xdevice "$run_arguments" 140 141 return $? 142} 143 144run_test() 145{ 146 cd $BASE_HOME 147 148 MAPPED_MODULE_NAME=$MODULE_NAME 149 # map from build_target name to actual testmodule name 150 if [ ! -z "$MODULE_NAME" ]; then 151 MAPPED_MODULE_NAME=$(get_testmodule_name $MODULE_NAME $HATS_HOME) 152 if [ ! -z "$MAPPED_MODULE_NAME" ]; then 153 echo -e "\033[32mTest module name of build_target "$MODULE_NAME is" "$MAPPED_MODULE_NAME"\033[0m" 154 else 155 echo -e "\033[31mTest module "$MODULE_NAME" dose not exist!\033[0m" 156 exit 1 157 fi 158 fi 159 160 JSON_CONFIG_FILE=$HATS_HOME/testcases/$MAPPED_MODULE_NAME.json 161 ret_code=0 162 if [ -f "$JSON_CONFIG_FILE" ]; then 163 echo -e "\033[32mRun $MAPPED_MODULE_NAME with xdevice ...\033[0m" 164 run_test_with_xdevice $MAPPED_MODULE_NAME 165 ret_code=$? 166 elif [ -z "$MODULE_NAME" ]; then 167 echo -e "\033[32mRun all modules with xdevice ...\033[0m" 168 run_test_with_xdevice 169 ret_code=$? 170 else 171 echo -e "\033[31mNon-xdevice module in hats!\033[0m" 172 exit 1 173 fi 174 175 if [ "$ret_code" != "0" ]; then 176 echo -e "\033[31mFailed to run test, ret=$ret_code\033[0m" 177 exit 1 178 fi 179} 180 181parse_cmdline $@ 182if [ "$RUN_ONLY" == FALSE ];then 183 do_make 184fi 185mkdir -p $OUT_DIR/$BUILD_VARIANT/suites/hats/resource/tools 186run_test 187exit 0 188