1#!/bin/bash 2 3# This file is part of the openHiTLS project. 4# 5# openHiTLS is licensed under the Mulan PSL v2. 6# You can use this software according to the terms and conditions of the Mulan PSL v2. 7# You may obtain a copy of Mulan PSL v2 at: 8# 9# http://license.coscl.org.cn/MulanPSL2 10# 11# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 12# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 13# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 14# See the Mulan PSL v2 for more details. 15set -e 16 17usage() 18{ 19 printf "\n" 20 printf "%-05s %-30s\n" "* Script :" "${BASH_SOURCE[0]}" 21 printf "%-50s %-30s\n" "* Usage Option :" "" 22 printf "%-50s %-30s\n" "* --help|-h : Help information." "" 23 printf "%-50s %-30s\n" "* add-options : Add options." "bash ${BASH_SOURCE[0]} add-options=xxx" 24 printf "%-50s %-30s\n" "* no-provider : Disable provider." "bash ${BASH_SOURCE[0]} no-provider" 25 printf "%-50s %-30s\n" "* tls-debug : Enable the debug mode." "bash ${BASH_SOURCE[0]} tls-debug" 26 printf "%-50s %-30s\n" "* no-crypto : Custom crypto testcase." "bash ${BASH_SOURCE[0]} no-crypto" 27 printf "%-50s %-30s\n" "* no-bsl : Custom bsl testcase." "bash ${BASH_SOURCE[0]} no-bsl" 28 printf "%-50s %-30s\n" "* no-tls : Custom tls testcase." "bash ${BASH_SOURCE[0]} no-tls" 29 printf "%-50s %-30s\n" "* no-pki : Custom pki testcase." "bash ${BASH_SOURCE[0]} no-pki" 30 printf "%-50s %-30s\n" "* no-auth : Custom auth testcase." "bash ${BASH_SOURCE[0]} no-auth" 31 printf "%-50s %-30s\n" "* no-demos : Not build demos." "bash ${BASH_SOURCE[0]} no-auth" 32 printf "%-50s %-30s\n" "* verbose : Show detailse." "bash ${BASH_SOURCE[0]} verbose" 33 printf "%-50s %-30s\n" "* gcov : Enable the coverage capability." "bash ${BASH_SOURCE[0]} gcov" 34 printf "%-50s %-30s\n" "* asan : Enabling the ASAN capability." "bash ${BASH_SOURCE[0]} asan" 35 printf "%-50s %-30s\n" "* big-endian : Specify the platform endianness." "bash ${BASH_SOURCE[0]} big-endian" 36 printf "%-50s %-30s\n\n" "* run-tests : Creating a custom test suite." "bash ${BASH_SOURCE[0]} run-tests=xxx1|xxx2|xxx3" 37} 38 39export_env() 40{ 41 HITLS_ROOT_DIR=${HITLS_ROOT_DIR:=$(cd $(dirname ${BASH_SOURCE[0]})/../..;pwd)} 42 LOCAL_ARCH=${LOCAL_ARCH:=`arch`} 43 ENABLE_GCOV=${ENABLE_GCOV:=OFF} 44 ENABLE_ASAN=${ENABLE_ASAN:=OFF} 45 ENABLE_PRINT=${ENABLE_PRINT:=ON} 46 ENABLE_FAIL_REPEAT=${ENABLE_FAIL_REPEAT:=OFF} 47 CUSTOM_CFLAGS=${CUSTOM_CFLAGS:=''} 48 ENABLE_TLS=${ENABLE_TLS:=ON} 49 BIG_ENDIAN=${BIG_ENDIAN:=OFF} 50 ENABLE_CRYPTO=${ENABLE_CRYPTO:=ON} 51 ENABLE_BSL=${ENABLE_BSL:=ON} 52 ENABLE_PKI=${ENABLE_PKI:=ON} 53 ENABLE_AUTH=${ENABLE_AUTH:=ON} 54 ENABLE_CMVP=${ENABLE_CMVP:=OFF} 55 ENABLE_DEMOS=${ENABLE_DEMOS:=ON} 56 ENABLE_UIO_SCTP=${ENABLE_UIO_SCTP:=ON} 57 ENABLE_VERBOSE=${ENABLE_VERBOSE:=''} 58 RUN_TESTS=${RUN_TESTS:=''} 59 DEBUG=${DEBUG:=ON} 60 if [ -f ${HITLS_ROOT_DIR}/build/macro.txt ];then 61 CUSTOM_CFLAGS=$(cat ${HITLS_ROOT_DIR}/build/macro.txt) 62 CUSTOM_CFLAGS="$CUSTOM_CFLAGS -D__FILENAME__=__FILE__" 63 fi 64 if [[ ! -e "${HITLS_ROOT_DIR}/testcode/output/log" ]]; then 65 mkdir ${HITLS_ROOT_DIR}/testcode/output/log 66 fi 67} 68 69down_depend_code() 70{ 71 if [ ! -d "${HITLS_ROOT_DIR}/platform/Secure_C/lib" ]; then 72 cd ${HITLS_ROOT_DIR}/platform/Secure_C 73 make -j 74 fi 75} 76 77find_test_suite() 78{ 79 if [[ ${ENABLE_CRYPTO} == "ON" ]]; then 80 crypto_testsuite=$(find ${HITLS_ROOT_DIR}/testcode/sdv/testcase/crypto -name "*.data" | sed -e "s/.data//" | tr -s "\n" " ") 81 crypto_testsuite=${crypto_testsuite}$(find ${HITLS_ROOT_DIR}/testcode/sdv/testcase/codecs -name "*.data" | sed -e "s/.data//" | tr -s "\n" " ") 82 fi 83 if [[ ${ENABLE_BSL} == "ON" ]]; then 84 bsl_testsuite=$(find ${HITLS_ROOT_DIR}/testcode/sdv/testcase/bsl -name "*.data" | sed -e "s/.data//" | tr -s "\n" " ") 85 fi 86 if [[ ${ENABLE_PKI} == "ON" ]]; then 87 pki_testsuite=$(find ${HITLS_ROOT_DIR}/testcode/sdv/testcase/pki -name "*.data" | sed -e "s/.data//" | tr -s "\n" " ") 88 fi 89 if [[ ${ENABLE_TLS} == "ON" ]]; then 90 proto_testsuite=$(find ${HITLS_ROOT_DIR}/testcode/sdv/testcase/tls -name "*.data" | sed -e "s/.data//" | tr -s "\n" " ") 91 fi 92 if [[ ${ENABLE_AUTH} == "ON" ]]; then 93 auth_testsuite=$(find ${HITLS_ROOT_DIR}/testcode/sdv/testcase/auth -name "*.data" | sed -e "s/.data//" | tr -s "\n" " ") 94 fi 95 if [[ ${ENABLE_CMVP} == "ON" ]]; then 96 cmvp_testsuite=$(find ${HITLS_ROOT_DIR}/testcode/sdv/testcase/cmvp -name "*.data" | sed -e "s/.data//" | tr -s "\n" " ") 97 fi 98 RUN_TEST_SUITES="${crypto_testsuite}${bsl_testsuite}${pki_testsuite}${proto_testsuite}${auth_testsuite}${cmvp_testsuite}" 99} 100 101build_test_suite() 102{ 103 build_provider_so 104 105 [[ -n ${CASES} ]] && RUN_TEST_SUITES=${CASES} 106 cd ${HITLS_ROOT_DIR}/testcode && rm -rf ./build && mkdir build && cd build 107 cmake -DENABLE_GCOV=${ENABLE_GCOV} -DENABLE_ASAN=${ENABLE_ASAN} \ 108 -DCUSTOM_CFLAGS="${CUSTOM_CFLAGS}" -DDEBUG=${DEBUG} -DENABLE_UIO_SCTP=${ENABLE_UIO_SCTP} \ 109 -DGEN_TEST_FILES="${RUN_TEST_SUITES}" -DENABLE_TLS=${ENABLE_TLS} \ 110 -DENABLE_CRYPTO=${ENABLE_CRYPTO} -DENABLE_PKI=${ENABLE_PKI} -DENABLE_AUTH=${ENABLE_AUTH} \ 111 -DTLS_DEBUG=${TLS_DEBUG} -DOS_BIG_ENDIAN=${BIG_ENDIAN} -DPRINT_TO_TERMINAL=${ENABLE_PRINT} \ 112 -DENABLE_FAIL_REPEAT=${ENABLE_FAIL_REPEAT} .. 113 make -j 114} 115 116# Function: Compile provider .so file 117build_provider_so() 118{ 119 cd ${HITLS_ROOT_DIR}/testcode/testdata/provider 120 mkdir -p build && cd build 121 cmake .. 122 make -j 123} 124 125process_custom_cases() 126{ 127 if [[ -n "${RUN_TESTS}" ]];then 128 local tmp=($(echo "${RUN_TESTS}" | tr -s "|" " ")) 129 for i in ${!tmp[@]} 130 do 131 local suite=$(find ${HITLS_ROOT_DIR}/testcode/sdv -name "${tmp[i]}.data" | sed -e "s/.data//") 132 [[ -z "${suite}" ]] && echo "not found testsuite:${tmp[i]}" 133 [[ -n "${suite}" ]] && CASES="${suite} ${CASES}" 134 done 135 fi 136} 137 138build_demos() 139{ 140 if [[ ${ENABLE_DEMOS} == "OFF" ]]; then 141 return 142 fi 143 pushd ${HITLS_ROOT_DIR}/testcode/demo/ 144 rm -rf build && mkdir build 145 pushd build 146 cmake -DENABLE_GCOV=${ENABLE_GCOV} -DCUSTOM_CFLAGS="${CUSTOM_CFLAGS}" -DENABLE_ASAN=${ENABLE_ASAN} ../ 147 make -j 148 popd 149 popd 150} 151 152clean() 153{ 154 rm -rf ${HITLS_ROOT_DIR}/testcode/output/log 155 rm -rf ${HITLS_ROOT_DIR}/testcode/output/test_suite* 156 rm -rf ${HITLS_ROOT_DIR}/testcode/output/asan.* 157 rm -rf ${HITLS_ROOT_DIR}/testcode/output/*.log 158 rm -rf ${HITLS_ROOT_DIR}/testcode/output/*.xml 159 rm -rf ${HITLS_ROOT_DIR}/testcode/output/gen_testcase 160 rm -rf ${HITLS_ROOT_DIR}/testcode/output/process 161 rm -rf ${HITLS_ROOT_DIR}/testcode/framework/tls/build 162 rm -rf ${HITLS_ROOT_DIR}/testcode/build 163 rm -rf ${HITLS_ROOT_DIR}/testcode/sdv/build 164 rm -rf ${HITLS_ROOT_DIR}/testcode/framework/process/build 165 rm -rf ${HITLS_ROOT_DIR}/testcode/framework/gen_test/build 166 rm -rf ${HITLS_ROOT_DIR}/testcode/testdata/provider/build 167 rm -rf ${HITLS_ROOT_DIR}/testcode/testdata/provider/path1 168 rm -rf ${HITLS_ROOT_DIR}/testcode/testdata/provider/path2 169 mkdir ${HITLS_ROOT_DIR}/testcode/output/log 170} 171 172options() 173{ 174 while [[ -n $1 ]] 175 do 176 key=${1%%=*} 177 value=${1#*=} 178 case ${key} in 179 add-options) 180 CUSTOM_CFLAGS="${CUSTOM_CFLAGS} ${value}" 181 ;; 182 no-provider) 183 dis_options="--disable feature_provider provider codecs" 184 ;; 185 tls-debug) 186 TLS_DEBUG=ON 187 ;; 188 gcov) 189 ENABLE_GCOV=ON 190 ;; 191 asan) 192 ENABLE_ASAN=ON 193 ;; 194 no-print) 195 ENABLE_PRINT=OFF 196 ;; 197 no-crypto) 198 ENABLE_CRYPTO=OFF 199 ;; 200 no-pki) 201 ENABLE_PKI=OFF 202 ;; 203 no-auth) 204 ENABLE_AUTH=OFF 205 ;; 206 no-bsl) 207 ENABLE_BSL=OFF 208 ;; 209 no-tls) 210 ENABLE_TLS=OFF 211 ;; 212 no-demos) 213 ENABLE_DEMOS=OFF 214 ;; 215 no-sctp) 216 ENABLE_UIO_SCTP=OFF 217 ;; 218 no-demos) 219 ENABLE_DEMOS=OFF 220 ;; 221 verbose) 222 ENABLE_VERBOSE='VERBOSE=1' 223 ;; 224 fail-repeat) 225 ENABLE_FAIL_REPEAT=ON 226 ;; 227 run-tests) 228 RUN_TESTS=${value} 229 ;; 230 big-endian) 231 BIG_ENDIAN=ON 232 ;; 233 --help|-h) 234 usage 235 exit 0 236 ;; 237 *) 238 usage 239 exit 1 240 ;; 241 esac 242 shift 243 done 244} 245 246export_env 247options "$@" 248clean 249down_depend_code 250find_test_suite 251process_custom_cases 252build_test_suite 253if [[ ${ENABLE_DEMOS} == "ON" ]]; then 254 build_demos 255fi 256