• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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